wxz 3 years ago
parent
commit
043f761b48
  1. 3
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java
  2. 3
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerStaffRedis.java
  3. 5
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/form/ListStaffFormDTO.java
  4. 4
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/CustomerStaffDao.java
  5. 6
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java
  6. 9
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml
  7. 6
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/IcPartyActivityDTO.java
  8. 5
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/IcPartyUnitDTO.java
  9. 7
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/PartyActivityFormDTO.java
  10. 7
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/PartyUnitFormDTO.java
  11. 1
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java
  12. 180
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcPartyActivityController.java
  13. 195
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcPartyUnitController.java
  14. 36
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyActivityExcel.java
  15. 71
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyActivityImportExcel.java
  16. 41
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyUnitExcel.java
  17. 79
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyUnitImportExcel.java
  18. 20
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyUnitImportFailedExcel.java
  19. 111
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/handler/IcPartyActivityImportListener.java
  20. 139
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/handler/IcPartyUnitExcelImportListener.java
  21. 21
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyActivityService.java
  22. 32
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyUnitService.java
  23. 382
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java
  24. 374
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java
  25. 8
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPublicServiceOrgServiceImpl.java
  26. 1
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/db/migration/V0.0.30__icpartyunit.sql
  27. 2
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcPublicServiceOrgDao.xml
  28. BIN
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/icpartyactivity_import_tem.xlsx
  29. BIN
      epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/icpartyunit_impoort_tem.xlsx
  30. 6
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueDetailFormDTO.java
  31. 15
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueShiftedFromTopicFormDTO.java
  32. 1
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java
  33. 3
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueCommentServiceImpl.java
  34. 36
      epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java
  35. 18
      epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml
  36. 8
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  37. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseInformationController.java
  38. 6
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java
  39. 7
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java
  40. 7
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/NeighborHoodService.java
  41. 16
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java
  42. 16
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/NeighborHoodServiceImpl.java
  43. 3
      epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/GuideDao.xml
  44. 15
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/IssueShiftedFromTopicFormDTO.java
  45. 15
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicAndGroupResultDTO.java
  46. 90
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
  47. 5
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicDao.xml
  48. 6
      epmet-module/resi-hall/resi-hall-client/src/main/java/com/epmet/dto/form/IssueDetailFormDTO.java
  49. 2
      epmet-module/resi-hall/resi-hall-server/src/main/java/com/epmet/controller/IssueController.java
  50. 25
      epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/PartyMemberConfirmServiceImpl.java
  51. 20
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/ChangeWelfareDTO.java
  52. 6
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java
  53. 4
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcTripReportFormDTO.java
  54. 4
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserResiInfoResultDTO.java
  55. 5
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeWelfareController.java
  56. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java
  57. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcTripReportRecordController.java
  58. 1
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserBadgeController.java
  59. 8
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/ChangeWelfareEntity.java
  60. 18
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareExcel.java
  61. 10
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareImportExcel.java
  62. 26
      epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java
  63. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/ChangeWelfareService.java
  64. 44
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java
  65. 21
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java
  66. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserAdviceServiceImpl.java
  67. 6
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java
  68. 22
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBaseInfoServiceImpl.java
  69. 1
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserResiInfoServiceImpl.java
  70. 4
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.94__pli_change_welfare.sql
  71. BIN
      epmet-user/epmet-user-server/src/main/resources/excel/pli_change_welfare.xlsx
  72. 22
      epmet-user/epmet-user-server/src/main/resources/mapper/ChangeWelfareDao.xml

3
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/StrConstant.java

@ -101,7 +101,8 @@ public interface StrConstant {
String PY_ROOT_AGENCY = "53613e1c5de6ed473467f0159a10b135";
//磐石街道客户Id
String PS_CUSTOMER_ID = "1580460084738760705";
//小寨子客户id
String XIAOZHAIZI_CUSTOMER_ID="1536638904600752130";
/**
* 单位积分,积分上限积分说明积分事件
*/

3
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/CustomerStaffRedis.java

@ -88,11 +88,12 @@ public class CustomerStaffRedis {
private static CustomerStaffInfoCache reloadStaffCache(String staffId, String key) {
Result<CustomerStaffInfoCache> staffResult = customerStaffRedis.commonAggFeignClient.getStaffInfo(staffId);
if (staffResult == null || !staffResult.success()) {
log.error("/data/aggregator/epmetuser/getStaffInfo/{staffId} 异常 staffId: ",staffId);
throw new RenException("获取工作人员信息失败");
}
CustomerStaffInfoCache resultData = staffResult.getData();
if (resultData == null) {
log.warn("getStaffInfo staff is null,staffId:{}", staffId);
log.error("getStaffInfo staff is null,staffId:{}", staffId);
return null;
}

5
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/form/ListStaffFormDTO.java

@ -25,4 +25,9 @@ public class ListStaffFormDTO implements Serializable {
private String customerId;
public interface Staff extends CustomerClientShowGroup {}
/**
* 姓名或者手机号
* 可以不填
*/
private String keyWord;
}

4
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/CustomerStaffDao.java

@ -53,7 +53,9 @@ public interface CustomerStaffDao extends BaseDao<CustomerStaffEntity> {
* @Description 模糊查询用户角色信息
* @author sun
*/
List<ListStaffResultDTO> selectByRealName(@Param("customerId") String customerId, @Param("realName") String realName);
List<ListStaffResultDTO> selectByRealName(@Param("customerId") String customerId,
@Param("realName") String realName,
@Param("keyWord") String keyWord);
/**
* @Description 分页查询排好序的工作人员Id列表

6
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java

@ -9,7 +9,6 @@ import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.form.IdAndNameDTO;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.page.PageData;
@ -56,9 +55,9 @@ import com.epmet.dataaggre.service.opercustomize.CustomerFootBarService;
import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.UserBaseInfoDTO;
import com.epmet.dto.form.DetailByTypeFormDTO;
import com.epmet.dto.form.GetStaffExistRoleFormDTO;
import com.epmet.dto.form.SystemMsgFormDTO;
import com.epmet.dto.result.DetailByTypeResultDTO;
import com.epmet.dto.form.GetStaffExistRoleFormDTO;
import com.epmet.dto.result.NewUserRoleResultDTO;
import com.epmet.dto.result.StaffRoleResultDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
@ -538,7 +537,7 @@ public class EpmetUserServiceImpl implements EpmetUserService {
@Override
public List<ListStaffResultDTO> listStaff(ListStaffFormDTO formDTO) {
//1.模糊查询用户、角色信息
List<ListStaffResultDTO> resultList = customerStaffDao.selectByRealName(formDTO.getCustomerId(), formDTO.getRealName());
List<ListStaffResultDTO> resultList = customerStaffDao.selectByRealName(formDTO.getCustomerId(), formDTO.getRealName(),formDTO.getKeyWord());
if (null == resultList || resultList.size() < NumConstant.ONE) {
return new ArrayList<>();
}
@ -638,6 +637,7 @@ public class EpmetUserServiceImpl implements EpmetUserService {
.eq(CustomerStaffEntity::getDelFlag,NumConstant.ZERO_STR);
CustomerStaffEntity staffEntity = customerStaffDao.selectOne(queryWrapper);
if (null == staffEntity) {
log.error(String.format("customer_staff is null staffId:%s",staffId));
return null;
}
CustomerStaffResultDTO result = ConvertUtils.sourceToTarget(staffEntity, CustomerStaffResultDTO.class);

9
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/CustomerStaffDao.xml

@ -49,7 +49,14 @@
WHERE
del_flag = '0'
AND customer_id = #{customerId}
AND real_name LIKE CONCAT('%', #{realName}, '%')
<if test='null != realName and "" !=realName'>
AND real_name LIKE CONCAT('%', #{realName}, '%')
</if>
<if test='null != keyWord and "" !=keyWord'>
AND (REAL_NAME LIKE CONCAT('%', #{keyWord}, '%')
or MOBILE LIKE CONCAT('%', #{keyWord}, '%')
)
</if>
</select>
<select id="selectOrderRole" resultType="java.lang.String">

6
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/IcPartyActivityDTO.java

@ -179,5 +179,9 @@ public class IcPartyActivityDTO implements Serializable {
*/
@JsonIgnore
private Date updatedTime;
/**
* actId不为空小程序
* 为空管理平台
*/
private String originName;
}

5
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/IcPartyUnitDTO.java

@ -86,6 +86,11 @@ public class IcPartyUnitDTO implements Serializable {
*/
private List<String> serviceMatterNameList;
/**
* 服务事项名称多个按照中文顿号隔开
*/
private String serviceMatterName;
/**
* 联系人
*/

7
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/PartyActivityFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
@ -15,7 +16,7 @@ import java.util.Date;
*/
@NoArgsConstructor
@Data
public class PartyActivityFormDTO implements Serializable {
public class PartyActivityFormDTO extends PageFormDTO implements Serializable {
private static final long serialVersionUID = -2510068555703677L;
@NotBlank(message = "组织Id不能为空" )
private String agencyId;
@ -27,7 +28,7 @@ public class PartyActivityFormDTO implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date endTime;
private String serviceMatter;
private Integer pageNo;
private Integer pageSize;
// private Integer pageNo;
// private Integer pageSize;
private String customerId;
}

7
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/PartyUnitFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -12,7 +13,7 @@ import java.io.Serializable;
*/
@NoArgsConstructor
@Data
public class PartyUnitFormDTO implements Serializable {
public class PartyUnitFormDTO extends PageFormDTO implements Serializable {
private static final long serialVersionUID = 1256798619648265622L;
private String customerId;
@ -22,8 +23,8 @@ public class PartyUnitFormDTO implements Serializable {
private String type;
private String contact;
private String contactMobile;
private Integer pageNo;
private Integer pageSize;
// private Integer pageNo;
// private Integer pageSize;
/**
* 工作端当前登录人员

1
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/feign/EpmetHeartOpenFeignClient.java

@ -119,6 +119,7 @@ public interface EpmetHeartOpenFeignClient {
/**
* Desc: 获取联建单位名字
* 查询项目处理进展时调用
* @param formDTO
* @author zxc
* @date 2022/5/17 17:53

180
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcPartyActivityController.java

@ -17,15 +17,21 @@
package com.epmet.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
@ -40,19 +46,23 @@ import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.service.IcPartyActivityService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.file.Path;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.UUID;
/**
@ -64,7 +74,7 @@ import java.util.stream.Collectors;
@Slf4j
@RestController
@RequestMapping("icpartyactivity")
public class IcPartyActivityController {
public class IcPartyActivityController implements ResultDataResolver {
@Autowired
private IcPartyActivityService icPartyActivityService;
@ -111,23 +121,36 @@ public class IcPartyActivityController {
}
@PostMapping("export")
public void export(@RequestBody PartyActivityFormDTO formDTO, HttpServletResponse response) throws Exception {
List<IcPartyActivityDTO> list = icPartyActivityService.list(formDTO);
List<IcPartyActivityExcel> excelList = new ArrayList<>();
AtomicInteger i = new AtomicInteger(1);
if (CollectionUtils.isNotEmpty(list)) {
excelList = list.stream().map(item -> {
IcPartyActivityExcel excel = new IcPartyActivityExcel();
excel.setIndex(i.getAndIncrement());
excel.setUnitName(item.getUnitName());
excel.setTitle(item.getTitle());
excel.setAddress(item.getAddress());
excel.setPeopleCount(item.getPeopleCount());
excel.setActivityTime(DateUtils.format(item.getActivityTime(), DateUtils.DATE_TIME_PATTERN));
return excel;
}).collect(Collectors.toList());
public void export(@LoginUser TokenDto tokenDto, @RequestBody PartyActivityFormDTO formDTO, HttpServletResponse response) throws Exception {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setIsPage(false);
ExcelWriter excelWriter = null;
formDTO.setPageSize(NumConstant.TEN_THOUSAND);
int pageNo = formDTO.getPageNo();
try {
// 这里 需要指定写用哪个class去写
String today= DateUtils.format(new Date(),DateUtils.DATE_PATTERN_MMDD);
String fileName = "联建活动".concat(today);
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcPartyActivityExcel.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build();
PageData<IcPartyActivityDTO> data = null;
List<IcPartyActivityExcel> list = null;
do {
data = icPartyActivityService.search(formDTO);
list = ConvertUtils.sourceToTarget(data.getList(), IcPartyActivityExcel.class);
formDTO.setPageNo(++pageNo);
excelWriter.write(list, writeSheet);
} while (CollectionUtils.isNotEmpty(data.getList()) && data.getList().size() == formDTO.getPageSize());
} catch (Exception e) {
log.error("export exception", e);
} finally {
// 千万别忘记finish 会帮忙关闭流
if (excelWriter != null) {
excelWriter.finish();
}
}
ExcelUtils.exportExcelToTarget(response, null, excelList, IcPartyActivityExcel.class);
}
/**
@ -141,58 +164,49 @@ public class IcPartyActivityController {
*/
@PostMapping("import")
public Result importData(@LoginUser TokenDto tokenDto, HttpServletResponse response, @RequestPart("file") MultipartFile file) throws IOException {
if (file.isEmpty()) {
throw new RenException("请上传文件");
// 1.暂存文件
String originalFilename = file.getOriginalFilename();
String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
Path fileSavePath;
try {
Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_party_activity", "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(), "文件上传失败", "文件上传失败");
}
String originalFilename = file.getOriginalFilename();
// 校验文件类型
String extension = FilenameUtils.getExtension(originalFilename);
if (!"xls".equals(extension) && !"xlsx".equals(extension)) {
throw new RenException("文件类型不匹配");
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);
}
//1.查询当前工作人员是否有再导入的党员先锋数据,有则不允许导入,没有则进行新的导入
// 2.生成导入任务记录
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
importTaskForm.setOriginFileName(file.getOriginalFilename());
importTaskForm.setOperatorId(tokenDto.getUserId());
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_PARTY_UNIT);
Result<ImportTaskCommonResultDTO> result = commonServiceOpenFeignClient.createImportTask(importTaskForm);
if (!result.success()) {
throw new RenException(result.getInternalMsg());
}
// 异步执行导入
CompletableFuture.runAsync(() -> {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
log.error("method exception", e);
}
submitResiImportTask(tokenDto, response, file, result.getData().getTaskId());
});
return new Result();
}
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_PARTY_ACTIVITY);
importTaskForm.setOriginFileName(originalFilename);
private void submitResiImportTask(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String importTaskId) {
ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException(commonServiceOpenFeignClient.createImportTask(importTaskForm),
ServiceConstant.EPMET_COMMON_SERVICE,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
"联建活动导入错误",
"联建活动导入失败");
try {
icPartyActivityService.importData(tokenDto, response, file, importTaskId);
} catch (Throwable e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【导入联建活动信息失败】导入失败:{}", errorMsg);
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
importTaskForm.setOperatorId(tokenDto.getUserId());
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_PARTY_ACTIVITY);
importTaskForm.setTaskId(importTaskId);
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importTaskForm.setResultDesc("联建活动信息导入失败,请查看系统日志");
Result result = commonServiceOpenFeignClient.finishImportTask(importTaskForm);
if (!result.success()) {
throw new RenException(result.getInternalMsg());
}
}
// 3.执行导入
icPartyActivityService.execAsyncExcelImport(fileSavePath, rstData.getTaskId(),tokenDto.getCustomerId(),tokenDto.getUserId());
return new Result();
}
/**
@ -214,4 +228,30 @@ public class IcPartyActivityController {
PageData<IcPartyActivityDTO> page = icPartyActivityService.getActivityList(tokenDto, formDTO);
return new Result<PageData<IcPartyActivityDTO>>().ok(page);
}
/**
* 下载联建活动导入模板
* @param response
* @throws IOException
*/
@RequestMapping(value = "import-template-download", method = {RequestMethod.GET, RequestMethod.POST})
public void downloadTemplate(HttpServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition");
//response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.ms-excel");
response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("联建活动导入模板", "UTF-8") + ".xlsx");
InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/icpartyactivity_import_tem.xlsx");
try {
ServletOutputStream os = response.getOutputStream();
IOUtils.copy(is, os);
} finally {
if (is != null) {
is.close();
}
}
}
}

195
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/IcPartyUnitController.java

@ -1,16 +1,24 @@
package com.epmet.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.epmet.commons.rocketmq.messages.ServerSatisfactionCalFormDTO;
import com.epmet.commons.tools.annotation.LoginUser;
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.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.OptionDataResultDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ExcelUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
@ -26,20 +34,25 @@ import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.service.IcPartyUnitService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.UUID;
import java.util.stream.Collectors;
@ -52,18 +65,13 @@ import java.util.stream.Collectors;
@Slf4j
@RestController
@RequestMapping("icpartyunit")
public class IcPartyUnitController {
public class IcPartyUnitController implements ResultDataResolver {
@Autowired
private IcPartyUnitService icPartyUnitService;
@Resource
private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient;
/**
* 联建单位上传临时目录
*/
private Path IC_PARTY_UNIT_UPLOAD_DIR;
/**
* 联建单位-列表查询
@ -117,25 +125,38 @@ public class IcPartyUnitController {
@PostMapping("export")
public void export(@LoginUser TokenDto tokenDto, @RequestBody PartyUnitFormDTO formDTO, HttpServletResponse response) throws Exception {
formDTO.setCustomerId(tokenDto.getCustomerId());
List<IcPartyUnitDTO> list = icPartyUnitService.list(formDTO);
List<IcPartyUnitExcel> excelList = new ArrayList<>();
AtomicInteger i = new AtomicInteger(1);
if (CollectionUtils.isNotEmpty(list)) {
excelList = list.stream().map(item -> {
IcPartyUnitExcel excel = new IcPartyUnitExcel();
excel.setIndex(i.getAndIncrement());
excel.setUnitName(item.getUnitName());
excel.setContact(item.getContact());
excel.setContactMobile(item.getContactMobile());
excel.setType(item.getType());
excel.setMemberCount(item.getMemberCount());
excel.setRemark(item.getRemark());
excel.setSatisfaction(item.getSatisfaction());
excel.setServiceMatter(String.join(String.valueOf((char) 10), item.getServiceMatterList()));
return excel;
}).collect(Collectors.toList());
formDTO.setIsPage(false);
formDTO.setCurrentStaffId(tokenDto.getUserId());
ExcelWriter excelWriter = null;
formDTO.setPageSize(NumConstant.TEN_THOUSAND);
int pageNo = formDTO.getPageNo();
try {
// 这里 需要指定写用哪个class去写
String today= DateUtils.format(new Date(),DateUtils.DATE_PATTERN_MMDD);
String fileName = "联建单位".concat(today);
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcPartyUnitExcel.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build();
PageData<IcPartyUnitDTO> data = null;
List<IcPartyUnitExcel> list = null;
do {
data = icPartyUnitService.search(formDTO);
data.getList().stream().map(item -> {
item.setServiceMatterName(StringUtils.join(item.getServiceMatterList(), StrConstant.COMMA_ZH));
return item;
}).collect(Collectors.toList());
list = ConvertUtils.sourceToTarget(data.getList(), IcPartyUnitExcel.class);
formDTO.setPageNo(++pageNo);
excelWriter.write(list, writeSheet);
} while (CollectionUtils.isNotEmpty(data.getList()) && data.getList().size() == formDTO.getPageSize());
} catch (Exception e) {
log.error("export exception", e);
} finally {
// 千万别忘记finish 会帮忙关闭流
if (excelWriter != null) {
excelWriter.finish();
}
}
ExcelUtils.exportExcelToTarget(response, null, excelList, IcPartyUnitExcel.class);
}
/**
@ -172,42 +193,53 @@ public class IcPartyUnitController {
*/
@PostMapping("import")
public Result importData(@LoginUser TokenDto tokenDto, HttpServletRequest multipartRequest, HttpServletResponse response, @RequestPart("file") MultipartFile file) throws IOException {
// 1.暂存文件
String originalFilename = file.getOriginalFilename();
String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
if (file.isEmpty()) {
throw new RenException("请上传文件");
Path fileSavePath;
try {
Path importPath = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_party_unit", "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(), "文件上传失败", "文件上传失败");
}
String originalFilename = file.getOriginalFilename();
// 校验文件类型
String extension = FilenameUtils.getExtension(originalFilename);
if (!"xls".equals(extension) && !"xlsx".equals(extension)) {
throw new RenException("文件类型不匹配");
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);
}
//1.查询当前工作人员是否有再导入的党员先锋数据,有则不允许导入,没有则进行新的导入
// 2.生成导入任务记录
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
importTaskForm.setOriginFileName(file.getOriginalFilename());
importTaskForm.setOperatorId(tokenDto.getUserId());
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_PARTY_UNIT);
Result<ImportTaskCommonResultDTO> result = commonServiceOpenFeignClient.createImportTask(importTaskForm);
if (!result.success()) {
throw new RenException(result.getInternalMsg());
}
importTaskForm.setOriginFileName(originalFilename);
// 异步执行导入
CompletableFuture.runAsync(() -> {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
log.error("method exception", e);
}
submitResiImportTask(tokenDto, response, file, result.getData().getTaskId());
});
ImportTaskCommonResultDTO rstData = getResultDataOrThrowsException(commonServiceOpenFeignClient.createImportTask(importTaskForm),
ServiceConstant.EPMET_COMMON_SERVICE,
EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),
"联建单位导入错误",
"联建单位导入失败");
// 3.执行导入
icPartyUnitService.execAsyncExcelImport(fileSavePath, rstData.getTaskId(),tokenDto.getCustomerId(),tokenDto.getUserId());
return new Result();
}
/**
* @Description 按类型统计单位数量
* @Description 按类型统计单位数量可视化平台-社区党建-联建单位分析-饼图展示分类下的联建单位数量
* @Param dto
* @Return {@link Result< List< OptionDataResultDTO>>}
* @Author zhaoqifeng
@ -216,7 +248,7 @@ public class IcPartyUnitController {
@PostMapping("typestatistics")
public Result<List<OptionDataResultDTO>> typeStatistics(@RequestBody PartyActivityFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO);
return new Result<List<OptionDataResultDTO>>().ok(icPartyUnitService.typeStatistics(formDTO));
return new Result<List<OptionDataResultDTO>>().ok(icPartyUnitService.typeStatistics(formDTO.getAgencyId()));
}
/**
@ -233,7 +265,8 @@ public class IcPartyUnitController {
}
/**
* 联建单位-简要信息列表
* 可视化平台-社区党建-联建单位分析
* 联建单位-简要信息列表展示单位名称单位类型
*
* @param form
* @return com.epmet.commons.tools.utils.Result<com.epmet.commons.tools.page.PageData>
@ -266,7 +299,7 @@ public class IcPartyUnitController {
/**
* 计算区域化党建单位的群众满意度
*
* 服务完成后会发mq
* @param formDTO
* @return
*/
@ -277,29 +310,9 @@ public class IcPartyUnitController {
return new Result();
}
private void submitResiImportTask(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String importTaskId) {
try {
icPartyUnitService.importData(tokenDto, response, file, importTaskId);
} catch (Throwable e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【导入联建单位信息失败】导入失败:{}", errorMsg);
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
importTaskForm.setOperatorId(tokenDto.getUserId());
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_PARTY_UNIT);
importTaskForm.setTaskId(importTaskId);
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importTaskForm.setResultDesc("联建单位信息导入失败,请查看系统日志");
Result result = commonServiceOpenFeignClient.finishImportTask(importTaskForm);
if (!result.success()) {
throw new RenException(result.getInternalMsg());
}
}
}
/**
* Desc: 获取联建单位名字
* 查询项目处理进展时调用
* @param formDTO
* @author zxc
* @date 2022/5/17 17:53
@ -310,7 +323,8 @@ public class IcPartyUnitController {
}
/**
* Desc: 协办单位列表
* Desc: 协办单位列表本来是前端调用后面需求升级联建单位+社区自组织同步到了部门中
* 此接口已弃用
* @param tokenDto
* @author zxc
* @date 2022/5/18 13:37
@ -330,4 +344,27 @@ public class IcPartyUnitController {
return new Result();
}
/**
* 下载联建单位导入模板
* @param response
* @throws IOException
*/
@RequestMapping(value = "import-template-download", method = {RequestMethod.GET, RequestMethod.POST})
public void downloadTemplate(HttpServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
response.addHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition");
//response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.ms-excel");
response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("联建单位导入模板", "UTF-8") + ".xlsx");
InputStream is = this.getClass().getClassLoader().getResourceAsStream("templates/icpartyunit_impoort_tem.xlsx");
try {
ServletOutputStream os = response.getOutputStream();
IOUtils.copy(is, os);
} finally {
if (is != null) {
is.close();
}
}
}
}

36
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyActivityExcel.java

@ -17,9 +17,13 @@
package com.epmet.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 联建活动
*
@ -28,23 +32,31 @@ import lombok.Data;
*/
@Data
public class IcPartyActivityExcel {
@Excel(name = "序号")
private Integer index;
@Excel(name = "单位名称")
@ColumnWidth(20)
@ExcelProperty(value = "单位名称")
private String unitName;
@Excel(name = "活动标题")
@ColumnWidth(25)
@ExcelProperty(value = "活动标题")
private String title;
@Excel(name = "活动地址")
@ColumnWidth(35)
@ExcelProperty(value = "活动地址")
private String address;
@Excel(name = "服务人数")
@ColumnWidth(15)
@ExcelProperty(value = "服务人数")
private Integer peopleCount;
@Excel(name = "活动时间")
private String activityTime;
@ColumnWidth(20)
@ExcelProperty(value = "活动时间")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date activityTime;
/**
* actId不为空小程序
* 为空管理平台
*/
@ColumnWidth(20)
@ExcelProperty(value = "来源")
private String originName;
}

71
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyActivityImportExcel.java

@ -17,9 +17,16 @@
package com.epmet.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.epmet.commons.tools.utils.ExcelVerifyInfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* 联建活动
@ -28,39 +35,57 @@ import lombok.Data;
* @since v1.0.0 2021-11-19
*/
@Data
public class IcPartyActivityImportExcel extends ExcelVerifyInfo {
@Excel(name = "单位名称")
private String unitName;
public class IcPartyActivityImportExcel extends ExcelVerifyInfo {
@Excel(name = "服务事项")
private String serviceMatter;
@Excel(name = "活动标题")
@NotBlank(message = "活动标题必填")
@Length(max = 50, message = "活动标题最多输入50字")
@ExcelProperty(value = "活动标题*")
private String title;
@Excel(name = "活动目标")
@NotBlank(message = "活动目标必填")
@Length(max = 100, message = "活动目标最多输入100字")
@ExcelProperty(value = "活动目标*")
private String target;
@Excel(name = "活动内容")
private String content;
@NotNull(message = "服务人数必填")
@ExcelProperty(value = "服务人数*")
private Integer peopleCount;
@Excel(name = "活动地址")
@NotNull(message = "活动时间不能为空")
@ExcelProperty("活动时间*")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date activityTime;
@NotBlank(message = "详细地址")
@Length(max = 250, message = "详细地址最多输入250字")
@ExcelProperty(value = "详细地址*")
private String address;
@Excel(name = "活动地址经度")
private String longitude;
@Excel(name = "活动地址纬度")
private String latitude;
@Data
public static class ErrorRow {
@ColumnWidth(38)
@ExcelProperty(value = "活动标题*")
private String title;
@Excel(name = "服务人数")
private Integer peopleCount;
@ColumnWidth(40)
@ExcelProperty(value = "活动目标*")
private String target;
@ColumnWidth(10)
@ExcelProperty(value = "服务人数*")
private Integer peopleCount;
@Excel(name = "活动时间")
private String activityTime;
@ColumnWidth(25)
@ExcelProperty("活动时间*")
private Date activityTime;
@Excel(name = "活动结果")
private String result;
@ColumnWidth(40)
@ExcelProperty(value = "详细地址*")
private String address;
@ColumnWidth(60)
@ExcelProperty("错误信息")
private String errorInfo;
}
}

41
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyUnitExcel.java

@ -17,7 +17,8 @@
package com.epmet.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
/**
@ -29,30 +30,42 @@ import lombok.Data;
@Data
public class IcPartyUnitExcel {
@Excel(name = "序号")
private Integer index;
@Excel(name = "单位名称")
@ColumnWidth(30)
@ExcelProperty(value = "单位名称")
private String unitName;
@Excel(name = "分类")
private String type;
@ColumnWidth(25)
@ExcelProperty(value = "所属组织")
private String agencyName;
@ColumnWidth(25)
@ExcelProperty(value = "分类")
private String typeName;
@Excel(name = "服务事项")
private String serviceMatter;
/**
* 服务事项名称多个按照中文顿号隔开
*/
@ColumnWidth(100)
@ExcelProperty(value = "服务事项")
private String serviceMatterName;
@Excel(name = "联系人")
@ColumnWidth(16)
@ExcelProperty(value = "联系人")
private String contact;
@Excel(name = "联系电话")
@ColumnWidth(16)
@ExcelProperty(value = "联系电话")
private String contactMobile;
@Excel(name = "在职党员")
@ColumnWidth(18)
@ExcelProperty(value = "在职党员数")
private Integer memberCount;
@Excel(name = "群众满意度")
@ColumnWidth(18)
@ExcelProperty(value = "群众满意度")
private String satisfaction;
@Excel(name = "备注")
@ColumnWidth(100)
@ExcelProperty(value = "备注")
private String remark;
}

79
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyUnitImportExcel.java

@ -17,9 +17,14 @@
package com.epmet.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.epmet.commons.tools.utils.ExcelVerifyInfo;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 联建单位
@ -30,33 +35,73 @@ import lombok.Data;
@Data
public class IcPartyUnitImportExcel extends ExcelVerifyInfo {
@Excel(name = "单位名称")
@NotBlank(message = "单位名称必填")
@Length(max = 50,message = "单位名称最多输入50字")
@ExcelProperty(value = "单位名称*")
private String unitName;
@Excel(name = "分类")
private String type;
@Excel(name = "服务事项")
private String serviceMatter;
@NotBlank(message = "分类必填")
@ExcelProperty(value = "分类*")
private String typeName;
@Excel(name = "联系人")
@Length(max = 30,message = "联系人最多输入30字")
@NotBlank(message = "联系人必填")
@ExcelProperty(value = "联系人*")
private String contact;
@Excel(name = "联系电话")
@Length(max = 30,message = "联系电话最多输入30字")
@NotBlank(message = "联系电话必填")
@ExcelProperty(value = "联系电话*")
private String contactMobile;
@Excel(name = "在职党员")
@NotNull(message = "在职党员必填")
@ExcelProperty(value = "在职党员*")
private Integer memberCount;
@Excel(name = "地址")
@Length(max = 500,message = "备注最多输入50字")
@ExcelProperty(value = "备注")
private String remark;
@Length(max = 250,message = "详细地址最多输入250字")
@NotBlank(message = "详细地址必填")
@ExcelProperty(value = "详细地址*")
private String address;
@Excel(name = "中心位置经度")
private String longitude;
@Data
public static class ErrorRow {
@ColumnWidth(40)
@ExcelProperty("单位名称*")
private String unitName;
@Excel(name = "中心位置纬度")
private String latitude;
@ColumnWidth(20)
@ExcelProperty("分类*")
private String type;
@Excel(name = "备注")
private String remark;
@ColumnWidth(20)
@ExcelProperty("联系人*")
private String contact;
@ColumnWidth(20)
@ExcelProperty("联系电话*")
private String contactMobile;
@ColumnWidth(10)
@ExcelProperty("在职党员*")
private Integer memberCount;
@ColumnWidth(30)
@ExcelProperty("备注")
private String remark;
@ColumnWidth(50)
@ExcelProperty("详细地址*")
private String address;
@ColumnWidth(50)
@ExcelProperty("错误信息")
private String errorInfo;
}
}

20
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/IcPartyUnitImportFailedExcel.java

@ -30,9 +30,27 @@ import lombok.Data;
@Data
public class IcPartyUnitImportFailedExcel extends ExcelVerifyInfo {
@Excel(name = "单位名称", width = 40)
@Excel(name = "单位名称*", width = 40)
private String unitName;
@Excel(name = "分类*",width = 20)
private String type;
@Excel(name = "联系人*",width = 20)
private String contact;
@Excel(name = "联系电话*",width = 20)
private String contactMobile;
@Excel(name = "在职党员*",width = 10)
private Integer memberCount;
@Excel(name = "备注",width = 30)
private String remark;
@Excel(name = "详细地址*",width = 50)
private String address;
@Excel(name = "错误信息", width = 50)
private String errorInfo;
}

111
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/handler/IcPartyActivityImportListener.java

@ -0,0 +1,111 @@
package com.epmet.excel.handler;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
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.entity.IcPartyActivityEntity;
import com.epmet.excel.IcPartyActivityImportExcel;
import com.epmet.service.impl.IcPartyActivityServiceImpl;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* @Description
* @Author yzm
* @Date 2023/2/20 15:36
*/
@Slf4j
public class IcPartyActivityImportListener implements ReadListener<IcPartyActivityImportExcel> {
/**
* 最大条数阈值
*/
public static final int MAX_THRESHOLD = 200;
/**
* 当前操作用户
*/
private CustomerStaffInfoCacheResult staffInfo;
private String customerId;
/**
* 数据
*/
private List<IcPartyActivityEntity> datas = new ArrayList<>();
/**
* 错误项列表
*/
private List<IcPartyActivityImportExcel.ErrorRow> errorRows = new ArrayList<>();
private IcPartyActivityServiceImpl icPartyActivityService;
public IcPartyActivityImportListener(String customerId, CustomerStaffInfoCacheResult staffInfo, IcPartyActivityServiceImpl icPartyActivityService) {
this.customerId=customerId;
this.staffInfo = staffInfo;
this.icPartyActivityService = icPartyActivityService;
}
@Override
public void invoke(IcPartyActivityImportExcel data, AnalysisContext context) {
try {
// 先校验数据
ValidatorUtils.validateEntity(data);
IcPartyActivityEntity e = ConvertUtils.sourceToTarget(data, IcPartyActivityEntity.class);
e.setCustomerId(customerId);
e.setAgencyId(staffInfo.getAgencyId());
e.setPids(staffInfo.getAgencyPIds());
e.setContent(StrConstant.EPMETY_STR);
datas.add(e);
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));
}
IcPartyActivityImportExcel.ErrorRow errorRow = ConvertUtils.sourceToTarget(data,IcPartyActivityImportExcel.ErrorRow.class);
errorRow.setErrorInfo(errorMsg);
errorRows.add(errorRow);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 最后几条达不到阈值,这里必须再调用一次
execPersist();
}
/**
* 执行持久化
*/
private void execPersist() {
try {
if (datas != null && datas.size() > 0) {
icPartyActivityService.batchPersist(datas);
}
} finally {
datas.clear();
}
}
/**
* 获取错误行
* @return
*/
public List<IcPartyActivityImportExcel.ErrorRow> getErrorRows() {
return errorRows;
}
}

139
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/excel/handler/IcPartyUnitExcelImportListener.java

@ -0,0 +1,139 @@
package com.epmet.excel.handler;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
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.entity.IcPartyUnitEntity;
import com.epmet.excel.IcPartyUnitImportExcel;
import com.epmet.service.impl.IcPartyUnitServiceImpl;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @Description
* @Author yzm
* @Date 2023/2/20 15:36
*/
@Slf4j
public class IcPartyUnitExcelImportListener implements ReadListener<IcPartyUnitImportExcel> {
/**
* 最大条数阈值
*/
public static final int MAX_THRESHOLD = 200;
/**
* 当前操作用户
*/
private CustomerStaffInfoCacheResult staffInfo;
private String customerId;
/**
* 数据
*/
private List<IcPartyUnitEntity> datas = new ArrayList<>();
/**
* 错误项列表
*/
private List<IcPartyUnitImportExcel.ErrorRow> errorRows = new ArrayList<>();
private IcPartyUnitServiceImpl icPartyUnitService;
//字典表数据
private Map<String, String> partyUnitTypeMap;
public IcPartyUnitExcelImportListener(String customerId, CustomerStaffInfoCacheResult staffInfo, IcPartyUnitServiceImpl icPartyUnitService,Map<String, String> partyUnitTypeMap) {
this.customerId=customerId;
this.staffInfo = staffInfo;
this.icPartyUnitService = icPartyUnitService;
this.partyUnitTypeMap=partyUnitTypeMap;
}
@Override
public void invoke(IcPartyUnitImportExcel data, AnalysisContext context) {
try {
// 先校验数据
ValidatorUtils.validateEntity(data);
AtomicBoolean bl = new AtomicBoolean(false);
StringBuffer errMsg = new StringBuffer("");
//先对一下字段值填写是否正确做判断
if (!partyUnitTypeMap.containsKey(data.getTypeName())) {
errMsg.append("‘返回方式’值填写错误;");
bl.set(true);
}
//错误数据记录到错误文件
if (bl.get()) {
IcPartyUnitImportExcel.ErrorRow errorRow = ConvertUtils.sourceToTarget(data,IcPartyUnitImportExcel.ErrorRow.class);
errorRow.setErrorInfo(errMsg.toString());
errorRows.add(errorRow);
return;
}
// 判断名称是否已存在
if(icPartyUnitService.checkUnitName(data.getUnitName(),staffInfo.getAgencyId(),null)){
IcPartyUnitImportExcel.ErrorRow errorRow = ConvertUtils.sourceToTarget(data,IcPartyUnitImportExcel.ErrorRow.class);
errorRow.setErrorInfo("联建单位名称已存在");
errorRows.add(errorRow);
return;
}
IcPartyUnitEntity e = ConvertUtils.sourceToTarget(data, IcPartyUnitEntity.class);
if (partyUnitTypeMap.containsKey(data.getTypeName())) {
e.setType(partyUnitTypeMap.get(data.getTypeName()));
}
e.setCustomerId(customerId);
e.setAgencyId(staffInfo.getAgencyId());
e.setPids(staffInfo.getAgencyPIds());
datas.add(e);
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));
}
IcPartyUnitImportExcel.ErrorRow errorRow = ConvertUtils.sourceToTarget(data,IcPartyUnitImportExcel.ErrorRow.class);
errorRow.setErrorInfo(errorMsg);
errorRows.add(errorRow);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 最后几条达不到阈值,这里必须再调用一次
execPersist();
}
/**
* 执行持久化
*/
private void execPersist() {
try {
if (datas != null && datas.size() > 0) {
icPartyUnitService.batchPersist(datas);
}
} finally {
datas.clear();
}
}
/**
* 获取错误行
* @return
*/
public List<IcPartyUnitImportExcel.ErrorRow> getErrorRows() {
return errorRows;
}
}

21
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyActivityService.java

@ -24,10 +24,8 @@ import com.epmet.dto.IcPartyActivityDTO;
import com.epmet.dto.form.PartyActivityFormDTO;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.entity.IcPartyActivityEntity;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
/**
@ -88,17 +86,6 @@ public interface IcPartyActivityService extends BaseService<IcPartyActivityEntit
*/
void delete(String id);
/**
* 导入数据
* @Param tokenDto
* @Param response
* @Param file
* @Return
* @Author zhaoqifeng
* @Date 2021/11/29 11:01
*/
void importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) throws IOException;
/**
* 联建活动统计
* @Param formDTO
@ -134,4 +121,10 @@ public interface IcPartyActivityService extends BaseService<IcPartyActivityEntit
* @Date 2021/12/23 16:13
*/
void deleteByActId(String actId);
/**
* 执行Excel导入
* @param filePath
*/
void execAsyncExcelImport(Path filePath, String importTaskId,String customerId,String userId);
}

32
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/IcPartyUnitService.java

@ -14,10 +14,8 @@ import com.epmet.dto.result.PartyUnitDistributionResultDTO;
import com.epmet.dto.result.PartyUnitListResultDTO;
import com.epmet.dto.result.demand.OptionDTO;
import com.epmet.entity.IcPartyUnitEntity;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
/**
@ -108,25 +106,13 @@ public interface IcPartyUnitService extends BaseService<IcPartyUnitEntity> {
List<OptionDTO> options(IcPartyUnitDTO dto);
/**
* 导入数据
*
* @Param tokenDto
* @Param response
* @Param file
* @Return
* @Author zhaoqifeng
* @Date 2021/11/29 11:01
*/
void importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) throws IOException;
/**
* @Description 按类型统计单位数量
* @Param formDTO
* @Description 按类型统计单位数量可视化平台-社区党建-联建单位分析-饼图展示分类下的联建单位数量
* @Param agencyId
* @Return {@link List< OptionDataResultDTO>}
* @Author zhaoqifeng
* @Date 2021/12/8 14:56
*/
List<OptionDataResultDTO> typeStatistics(PartyActivityFormDTO formDTO);
List<OptionDataResultDTO> typeStatistics(String agencyId);
/**
* 联建单位分布
@ -149,6 +135,7 @@ public interface IcPartyUnitService extends BaseService<IcPartyUnitEntity> {
/**
* Desc: 获取联建单位名字
* 查询项目处理进展时调用
* @param formDTO
* @author zxc
* @date 2022/5/17 17:53
@ -165,7 +152,8 @@ public interface IcPartyUnitService extends BaseService<IcPartyUnitEntity> {
/**
* 联建单位-简要信息列表
* 可视化平台-社区党建-联建单位分析
* 联建单位-简要信息列表展示单位名称单位类型
*
* @param form
*/
@ -187,4 +175,10 @@ public interface IcPartyUnitService extends BaseService<IcPartyUnitEntity> {
* @return
*/
List<String> getUnitNames(List<String> unitIds);
/**
* 执行Excel导入
* @param filePath
*/
void execAsyncExcelImport(Path filePath, String importTaskId,String customerId,String userId);
}

382
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java

@ -17,25 +17,20 @@
package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.GridInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelPoiUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.*;
import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.IcPartyActivityDao;
import com.epmet.dto.IcPartyActivityDTO;
@ -49,7 +44,7 @@ import com.epmet.entity.IcActivityServiceRelationEntity;
import com.epmet.entity.IcActivityUnitRelationEntity;
import com.epmet.entity.IcPartyActivityEntity;
import com.epmet.excel.IcPartyActivityImportExcel;
import com.epmet.excel.IcPartyActivityImportFailedExcel;
import com.epmet.excel.handler.IcPartyActivityImportListener;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.service.*;
@ -62,16 +57,15 @@ import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.ContentType;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@ -121,15 +115,17 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl<IcPartyActivityD
unitDTO.setAgencyId(formDTO.getAgencyId());
// Map<String, String> option = icPartyUnitService.option(unitDTO).stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel));
dtoList.forEach(dto -> {
//联建单位ID与单位名匹配
List<String> unitIds = Arrays.asList(dto.getUnitId().split(StrConstant.COMMA));
// List<String> unitNames = unitIds.stream().map(option::get).collect(Collectors.toList());
// if(CollectionUtils.isEmpty(unitNames)){
List<String> unitNames=icPartyUnitService.getUnitNames(unitIds);
// }
dto.setUnitIdList(unitIds);
dto.setUnitName(StringUtils.join(unitNames, StrConstant.COMMA));
dto.setUnitNameList(unitNames);
if(StringUtils.isNotBlank(dto.getUnitId())){
//联建单位ID与单位名匹配
List<String> unitIds = Arrays.asList(dto.getUnitId().split(StrConstant.COMMA));
// List<String> unitNames = unitIds.stream().map(option::get).collect(Collectors.toList());
// if(CollectionUtils.isEmpty(unitNames)){
List<String> unitNames=icPartyUnitService.getUnitNames(unitIds);
// }
dto.setUnitIdList(unitIds);
dto.setUnitName(StringUtils.join(unitNames, StrConstant.COMMA));
dto.setUnitNameList(unitNames);
}
if (StringUtils.isNotEmpty(dto.getGridId())) {
GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(dto.getGridId());
if (null != gridInfo) {
@ -151,6 +147,11 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl<IcPartyActivityD
dto.setServiceMatterNameList(serviceMatterNameList);
dto.setServiceMatterName(StringUtils.join(serviceMatterNameList, StrConstant.COMMA));
}
if(StringUtils.isNotBlank(dto.getActId())){
dto.setOriginName("小程序");
}else{
dto.setOriginName("管理平台");
}
});
}
@ -278,248 +279,6 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl<IcPartyActivityD
icActivityServiceRelationService.delete(id);
}
/**
* 导入数据
*
* @param tokenDto
* @param response
* @param file
* @Param tokenDto
* @Param response
* @Param file
* @Return
* @Author zhaoqifeng
* @Date 2021/11/29 11:01
*/
@Override
public void importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) throws IOException {
List<IcPartyActivityImportFailedExcel> fileList = new ArrayList<>();
ExcelImportResult<IcPartyActivityImportExcel> importResult = ExcelPoiUtils.importExcelMore(file, 0, 1, IcPartyActivityImportExcel.class);
List<IcPartyActivityImportExcel> failList = importResult.getFailList();
//存放错误数据行号
if (!org.springframework.util.CollectionUtils.isEmpty(failList)) {
for (IcPartyActivityImportExcel entity : failList) {
//打印失败的行 和失败的信息
log.warn("第{}行,{}", entity.getRowNum(), entity.getErrorMsg());
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(entity, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo(entity.getErrorMsg());
fileList.add(failed);
}
}
List<IcPartyActivityImportExcel> result = importResult.getList();
CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId());
//获取服务事项
List<OptionDTO> serviceItemList = icServiceItemDictService.queryDictList(tokenDto.getCustomerId());
Map<String, String> categoryMap = serviceItemList.stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel));
//获取联建单位
IcPartyUnitDTO unitDTO = new IcPartyUnitDTO();
unitDTO.setAgencyId(staffInfoCache.getAgencyId());
Map<String, String> option = icPartyUnitService.option(unitDTO).stream().collect(Collectors.toMap(OptionDTO::getLabel, OptionDTO::getValue));
//1.数据校验
Iterator<IcPartyActivityImportExcel> iterator = result.iterator();
while (iterator.hasNext()) {
IcPartyActivityImportExcel obj = iterator.next();
//单位名称校验
if (StringUtils.isBlank(obj.getUnitName())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("单位名称为空");
fileList.add(failed);
log.warn(String.format("单位名称为空,行号->%s", obj.getRowNum()));
iterator.remove();
} else {
List<String> unitList = Arrays.asList(obj.getUnitName().split(StrConstant.COMMA));
unitList.forEach(unit -> {
if (null == option.get(unit)) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("单位名称不存在");
fileList.add(failed);
log.warn(String.format("单位名称不存在,行号->%s", obj.getRowNum()));
iterator.remove();
}
});
}
//服务事项校验
if (StringUtils.isBlank(obj.getServiceMatter())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("服务事项为空");
fileList.add(failed);
log.warn(String.format("服务事项为空,行号->%s", obj.getRowNum()));
iterator.remove();
} else {
List<String> serviceList = Arrays.asList(obj.getServiceMatter().split(StrConstant.SEMICOLON));
serviceList.forEach(service -> {
if (null == categoryMap.get(service)) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("服务事项不存在");
fileList.add(failed);
log.warn(String.format("服务事项不存在,行号->%s", obj.getRowNum()));
iterator.remove();
}
});
}
//活动标题 活动目标 活动内容 活动时间 活动地址 活动地址经度 活动地址纬度 活动结果
if (StringUtils.isBlank(obj.getTitle())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动标题为空");
fileList.add(failed);
log.warn(String.format("活动标题为空,行号->%s", obj.getRowNum()));
iterator.remove();
} else if (StringUtils.isBlank(obj.getTarget())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动目标为空");
fileList.add(failed);
log.warn(String.format("活动目标为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getContent())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动内容为空");
fileList.add(failed);
log.warn(String.format("活动内容为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getActivityTime())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动时间为空");
fileList.add(failed);
log.warn(String.format("活动时间为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getAddress())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动地址为空");
fileList.add(failed);
log.warn(String.format("活动地址为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getLatitude())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动地址纬度为空");
fileList.add(failed);
log.warn(String.format("活动地址纬度为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getLongitude())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动地址经度为空");
fileList.add(failed);
log.warn(String.format("活动地址经度为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getResult())) {
IcPartyActivityImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyActivityImportFailedExcel.class);
failed.setErrorInfo("活动结果为空");
fileList.add(failed);
log.warn(String.format("活动结果为空,行号->%s", obj.getRowNum()));
}
}
if (CollectionUtils.isNotEmpty(result)) {
result.forEach(item -> {
IcPartyActivityEntity entity = new IcPartyActivityEntity();
entity.setCustomerId(tokenDto.getCustomerId());
entity.setAgencyId(staffInfoCache.getAgencyId());
entity.setPids(staffInfoCache.getAgencyPIds());
entity.setTitle(item.getTitle());
entity.setTarget(item.getTarget());
entity.setContent(item.getContent());
entity.setPeopleCount(item.getPeopleCount());
entity.setActivityTime(DateUtils.parse(item.getActivityTime(), DateUtils.DATE_TIME_PATTERN));
entity.setAddress(item.getAddress());
entity.setLatitude(item.getLatitude());
entity.setLongitude(item.getLongitude());
entity.setResult(item.getResult());
insert(entity);
//保存活动与单位关系
icActivityUnitRelationService.deleteByActivity(entity.getId());
AtomicInteger i = new AtomicInteger(NumConstant.ONE);
List<IcActivityUnitRelationEntity> unitRelationList = Arrays.stream(item.getUnitName().split(StrConstant.COMMA)).map(unit -> {
IcActivityUnitRelationEntity relation = new IcActivityUnitRelationEntity();
relation.setCustomerId(entity.getCustomerId());
relation.setAgencyId(entity.getAgencyId());
relation.setPids(entity.getPids());
relation.setActivityId(entity.getId());
relation.setUnitId(option.get(unit));
relation.setSort(i.getAndIncrement());
return relation;
}).collect(Collectors.toList());
icActivityUnitRelationService.insertBatch(unitRelationList);
//保存活动与服务关系
icActivityServiceRelationService.deleteByActivity(entity.getId());
AtomicInteger j = new AtomicInteger(NumConstant.ONE);
List<IcActivityServiceRelationEntity> serviceRelationList = Arrays.stream(item.getServiceMatter().split(StrConstant.SEMICOLON)).map(service -> {
IcActivityServiceRelationEntity relation = new IcActivityServiceRelationEntity();
relation.setCustomerId(entity.getCustomerId());
relation.setAgencyId(entity.getAgencyId());
relation.setPids(entity.getPids());
relation.setActivityId(entity.getId());
relation.setServiceMatter(categoryMap.get(service));
relation.setSort(j.getAndIncrement());
return relation;
}).collect(Collectors.toList());
icActivityServiceRelationService.insertBatch(serviceRelationList);
});
}
String str = String.format("共%s条,成功导入%s条。", fileList.size() + result.size(), fileList.size() + result.size() - fileList.size());
if (fileList.size() > NumConstant.ZERO) {
List<Integer> numList = fileList.stream().map(IcPartyActivityImportFailedExcel::getRowNum).sorted().collect(Collectors.toList());
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
}
//错误数据生成文件,修改导入任务状态
erroeImport(fileList, taskId, tokenDto.getUserId());
}
private void erroeImport(List<IcPartyActivityImportFailedExcel> fileList, String importTaskId, String staffId) throws IOException {
String url = "";
//1.有错误数据则生成错误数据存放文件传到阿里云服务
if (CollectionUtils.isNotEmpty(fileList)) {
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("导入失败的数据列表", "导入失败的数据列表"),
IcPartyActivityImportFailedExcel.class, fileList);
// 文件名
String resultDescFileName = UUID.randomUUID().toString().concat(".xlsx");
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, resultDescFileName);
OutputStream os = fileItem.getOutputStream();
Result<UploadImgResultDTO> uploadResult = null;
try {
workbook.write(os);
uploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
} catch (Exception e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建活动信息导入】上传错误描述文件:{}", errormsg);
} finally {
try {
os.close();
} catch (IOException e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建活动信息导入】上传错误描述文件关闭输出流:{}", errormsg);
}
try {
fileItem.delete();
} catch (Exception e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建活动信息导入】上传错误描述文件删除临时文件:{}", errormsg);
}
}
if (uploadResult == null || !uploadResult.success()) {
log.error("【联建活动信息导入】调用OSS上传结果描述文件失败");
} else {
url = uploadResult.getData().getUrl();
}
}
//2.更新导入任务数据
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
importTaskForm.setOperatorId(staffId);
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_PARTY_ACTIVITY);
importTaskForm.setTaskId(importTaskId);
importTaskForm.setResultDescFilePath(url);
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
if (CollectionUtils.isNotEmpty(fileList)) {
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importTaskForm.setResultDesc("联建活动导入存在错误数据");
}
Result result = commonServiceOpenFeignClient.finishImportTask(importTaskForm);
if (!result.success()) {
throw new RenException(result.getInternalMsg());
}
}
/**
* 联建活动统计
*
@ -651,4 +410,101 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl<IcPartyActivityD
formDTO.setEndTime(DateUtils.parse(end.concat(" 23:59:59"), DateUtils.DATE_TIME_PATTERN));
}
/**
* 执行Excel导入
*
* @param filePath
* @param importTaskId
* @param customerId
* @param userId
*/
@Override
public void execAsyncExcelImport(Path filePath, String importTaskId, String customerId, String userId) {
try {
//获取当前登录用户所属组织id
CustomerStaffInfoCacheResult staffInfo= SpringContextUtils.getBean(IcPartyUnitServiceImpl.class).queryCurrentStaff(customerId,userId);
IcPartyActivityImportListener listener = new IcPartyActivityImportListener(customerId,staffInfo, this);
EasyExcel.read(filePath.toFile(), IcPartyActivityImportExcel.class, listener).headRowNumber(1).sheet(0).doRead();
Path errorDescFile = null;
String errorDesFileUrl = null;
List<IcPartyActivityImportExcel.ErrorRow> errorRows = listener.getErrorRows();
boolean failed = errorRows.size() > 0;
if (failed) {
// 生成并上传错误文件
try {
// 文件生成
Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_party_activity", "import", "error_des");
String fileName = UUID.randomUUID().toString().concat(".xlsx");
errorDescFile = errorDescDir.resolve(fileName);
FileItemFactory factory = new DiskFileItemFactory(16, errorDescDir.toFile());
FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, fileName);
OutputStream os = fileItem.getOutputStream();
EasyExcel.write(os, IcPartyActivityImportExcel.ErrorRow.class).sheet("导入失败列表").doWrite(errorRows);
// 文件上传oss
Result<UploadImgResultDTO> errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
if (errorDesFileUploadResult.success()) {
errorDesFileUrl = errorDesFileUploadResult.getData().getUrl();
}
} finally {
if (Files.exists(errorDescFile)) {
Files.delete(errorDescFile);
}
}
}
ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO();
importFinishTaskForm.setTaskId(importTaskId);
importFinishTaskForm.setProcessStatus(failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
importFinishTaskForm.setOperatorId(userId);
importFinishTaskForm.setResultDesc("");
importFinishTaskForm.setResultDescFilePath(errorDesFileUrl);
Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm);
if (!result.success()) {
log.error("【联建活动导入】finishImportTask失败");
}
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建活动导入】出错:{}", errorMsg);
ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO();
importFinishTaskForm.setTaskId(importTaskId);
importFinishTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importFinishTaskForm.setOperatorId(userId);
importFinishTaskForm.setResultDesc("导入失败");
Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm);
if (!result.success()) {
log.error("【联建活动导入】导入记录状态修改为'完成'失败");
}
} finally {
// 删除临时文件
if (Files.exists(filePath)) {
try {
Files.delete(filePath);
} catch (IOException e) {
log.error("method exception", e);
}
}
}
}
/**
* 批量持久化
* @param entities
*/
public void batchPersist(List<IcPartyActivityEntity> entities) {
entities.forEach(e -> {
String id = IdWorker.getIdStr(e);
e.setId(id);
baseDao.insert(e);
});
}
}

374
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyUnitServiceImpl.java

@ -17,12 +17,11 @@
package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.rocketmq.messages.ServerSatisfactionCalFormDTO;
import com.epmet.commons.tools.constant.FieldConstant;
@ -33,11 +32,9 @@ import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.DictListResultDTO;
import com.epmet.commons.tools.dto.result.OptionDataResultDTO;
import com.epmet.commons.tools.enums.DictTypeEnum;
import com.epmet.commons.tools.enums.PartyUnitTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerOrgRedis;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
@ -45,7 +42,7 @@ import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.ExcelPoiUtils;
import com.epmet.commons.tools.utils.FileUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.UserDemandConstant;
import com.epmet.constants.ImportTaskConstants;
@ -59,7 +56,7 @@ import com.epmet.dto.result.demand.ServiceStatDTO;
import com.epmet.entity.IcCommunitySelfOrganizationEntity;
import com.epmet.entity.IcPartyUnitEntity;
import com.epmet.excel.IcPartyUnitImportExcel;
import com.epmet.excel.IcPartyUnitImportFailedExcel;
import com.epmet.excel.handler.IcPartyUnitExcelImportListener;
import com.epmet.feign.*;
import com.epmet.service.IcCommunitySelfOrganizationService;
import com.epmet.service.IcPartyUnitService;
@ -75,18 +72,17 @@ import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.ContentType;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
import java.util.stream.Collectors;
@ -145,6 +141,8 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
//获取单位积分
Map<String, Integer> pointMap = icUserDemandRecService.getServicePoint(formDTO.getCustomerId(), UserDemandConstant.PARTY_UNIT);
dtoList.forEach(item -> {
item.setTypeName(unitTypeMap.getData().get(item.getType()));
//这是错误的,应该是赋值type,遗留bug, 先不改了....
item.setType(unitTypeMap.getData().get(item.getType()));
if (StringUtils.isNotBlank(item.getServiceMatter())) {
List<String> matters = Arrays.asList(item.getServiceMatter().split(StrConstant.COMMA));
@ -183,6 +181,8 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
//获取单位积分
Map<String, Integer> pointMap = icUserDemandRecService.getServicePoint(formDTO.getCustomerId(), UserDemandConstant.PARTY_UNIT);
dtoList.forEach(item -> {
item.setTypeName(unitTypeMap.getData().get(item.getType()));
//这是错误的,应该是赋值type,遗留bug, 先不改了....
item.setType(unitTypeMap.getData().get(item.getType()));
if (StringUtils.isNotBlank(item.getServiceMatter())) {
List<String> matters = Arrays.asList(item.getServiceMatter().split(StrConstant.COMMA));
@ -217,6 +217,8 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
//获取分类名称字典
Result<Map<String, String>> typeDictMapRes=epmetAdminOpenFeignClient.dictMap(DictTypeEnum.PARTY_UNIT_TYPE.getCode());
Map<String, String> typeDictMap = typeDictMapRes.success() && MapUtils.isNotEmpty(typeDictMapRes.getData()) ? typeDictMapRes.getData() : new HashMap<>();
dto.setTypeName(MapUtils.isNotEmpty(typeDictMap) && typeDictMap.containsKey(dto.getType()) ? typeDictMap.get(dto.getType()) : StrConstant.EPMETY_STR);
//这是错误的,应该是赋值type,遗留bug, 先不改了....
dto.setType(MapUtils.isNotEmpty(typeDictMap) && typeDictMap.containsKey(dto.getType()) ? typeDictMap.get(dto.getType()) : StrConstant.EPMETY_STR);
// 服务事项
if(CollectionUtils.isNotEmpty(dto.getServiceMatterList())){
@ -375,223 +377,15 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
}
/**
* 导入数据
*
* @param tokenDto
* @param response
* @param file
* @Param tokenDto
* @Param response
* @Param file
* @Return
* @Author zhaoqifeng
* @Date 2021/11/29 11:01
*/
@Override
public void importData(TokenDto tokenDto, HttpServletResponse response, MultipartFile file, String taskId) throws IOException {
List<IcPartyUnitImportFailedExcel> fileList = new ArrayList<>();
ExcelImportResult<IcPartyUnitImportExcel> importResult = ExcelPoiUtils.importExcelMore(file, 0, 1, IcPartyUnitImportExcel.class);
List<IcPartyUnitImportExcel> failList = importResult.getFailList();
//存放错误数据行号
if (!org.springframework.util.CollectionUtils.isEmpty(failList)) {
for (IcPartyUnitImportExcel entity : failList) {
//打印失败的行 和失败的信息
log.warn("第{}行,{}", entity.getRowNum(), entity.getErrorMsg());
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(entity, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo(entity.getErrorMsg());
fileList.add(failed);
}
}
List<IcPartyUnitImportExcel> result = importResult.getList();
CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId());
if (null == staffInfoCache) {
throw new EpmetException(8000, "获取用户缓存失败");
}
List<OptionDTO> serviceItemList = icServiceItemDictService.queryDictList(tokenDto.getCustomerId());
Map<String, String> categoryMap = serviceItemList.stream().collect(Collectors.toMap(OptionDTO::getValue, OptionDTO::getLabel));
//1.数据校验
Iterator<IcPartyUnitImportExcel> iterator = result.iterator();
while (iterator.hasNext()) {
IcPartyUnitImportExcel obj = iterator.next();
//单位名称不能为空,不可重复
if (StringUtils.isBlank(obj.getUnitName())) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("单位名称为空");
fileList.add(failed);
log.warn(String.format("单位名称为空,行号->%s", obj.getRowNum()));
iterator.remove();
} else {
LambdaQueryWrapper<IcPartyUnitEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IcPartyUnitEntity::getAgencyId, staffInfoCache.getAgencyId());
wrapper.eq(IcPartyUnitEntity::getUnitName, obj.getUnitName());
List<IcPartyUnitEntity> list = baseDao.selectList(wrapper);
if (CollectionUtils.isNotEmpty(list)) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("单位名称已存在");
fileList.add(failed);
log.warn(String.format("单位名称已存在,行号->%s", obj.getRowNum()));
iterator.remove();
}
}
//分类校验
if (StringUtils.isBlank(obj.getType()) || null == PartyUnitTypeEnum.getCode(obj.getType())) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("分类名不存在");
fileList.add(failed);
log.warn(String.format("分类名不存在,行号->%s", obj.getRowNum()));
iterator.remove();
}
//服务事项校验
if (StringUtils.isNotBlank(obj.getServiceMatter())) {
List<String> matters = Arrays.asList(obj.getServiceMatter().split(StrConstant.COLON));
matters.forEach(item -> {
if (null == categoryMap.get(item)) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("服务事项不存在");
fileList.add(failed);
log.warn(String.format("服务事项不存在,行号->%s", obj.getRowNum()));
iterator.remove();
}
});
}
//联系人 联系电话 在职党员 地址 中心位置经度 中心位置纬度 校验
if (StringUtils.isBlank(obj.getContact())) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("联系人为空");
fileList.add(failed);
log.warn(String.format("联系人为空,行号->%s", obj.getRowNum()));
iterator.remove();
} else if (StringUtils.isBlank(obj.getContactMobile())) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("联系电话为空");
fileList.add(failed);
log.warn(String.format("联系电话为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getAddress())) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("地址为空");
fileList.add(failed);
log.warn(String.format("地址为空,行号->%s", obj.getRowNum()));
} else if (null == obj.getMemberCount()) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("在职党员为空");
fileList.add(failed);
log.warn(String.format("在职党员为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getLatitude())) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("中心位置纬度为空");
fileList.add(failed);
log.warn(String.format("中心位置纬度为空,行号->%s", obj.getRowNum()));
} else if (StringUtils.isBlank(obj.getLongitude())) {
IcPartyUnitImportFailedExcel failed = ConvertUtils.sourceToTarget(obj, IcPartyUnitImportFailedExcel.class);
failed.setErrorInfo("中心位置经度为空");
fileList.add(failed);
log.warn(String.format("中心位置经度为空,行号->%s", obj.getRowNum()));
}
}
if (CollectionUtils.isNotEmpty(result)) {
List<IcPartyUnitEntity> list = result.stream().map(item -> {
IcPartyUnitEntity entity = new IcPartyUnitEntity();
entity.setCustomerId(tokenDto.getCustomerId());
entity.setAgencyId(staffInfoCache.getAgencyId());
entity.setPids(staffInfoCache.getAgencyPIds());
entity.setUnitName(item.getUnitName());
entity.setType(PartyUnitTypeEnum.getCode(item.getType()));
if (StringUtils.isNotBlank(item.getServiceMatter())) {
entity.setServiceMatter(getServiceMatter(categoryMap, item.getServiceMatter()));
}
entity.setContact(item.getContact());
entity.setContactMobile(item.getContactMobile());
entity.setAddress(item.getAddress());
entity.setLatitude(item.getLatitude());
entity.setLongitude(item.getLongitude());
entity.setMemberCount(item.getMemberCount());
entity.setRemark(item.getRemark());
return entity;
}).collect(Collectors.toList());
insertBatch(list);
}
String str = String.format("共%s条,成功导入%s条。", fileList.size() + result.size(), fileList.size() + result.size() - fileList.size());
if (fileList.size() > NumConstant.ZERO) {
List<Integer> numList = fileList.stream().map(IcPartyUnitImportFailedExcel::getRowNum).sorted().collect(Collectors.toList());
String subList = numList.stream().map(String::valueOf).collect(Collectors.joining("、"));
log.warn(str + "第" + subList + "行未成功!");
}
//错误数据生成文件,修改导入任务状态
erroeImport(fileList, taskId, tokenDto.getUserId());
}
private void erroeImport(List<IcPartyUnitImportFailedExcel> fileList, String importTaskId, String staffId) throws IOException {
String url = "";
//1.有错误数据则生成错误数据存放文件传到阿里云服务
if (CollectionUtils.isNotEmpty(fileList)) {
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("导入失败的数据列表", "导入失败的数据列表"),
IcPartyUnitImportFailedExcel.class, fileList);
// 文件名
String resultDescFileName = UUID.randomUUID().toString().concat(".xlsx");
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, resultDescFileName);
OutputStream os = fileItem.getOutputStream();
Result<UploadImgResultDTO> uploadResult = null;
try {
workbook.write(os);
uploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
} catch (Exception e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建单位信息导入】上传错误描述文件:{}", errormsg);
} finally {
try {
os.close();
} catch (IOException e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建单位信息导入】上传错误描述文件关闭输出流:{}", errormsg);
}
try {
fileItem.delete();
} catch (Exception e) {
String errormsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建单位信息导入】上传错误描述文件删除临时文件:{}", errormsg);
}
}
if (uploadResult == null || !uploadResult.success()) {
log.error("【联建单位信息导入】调用OSS上传结果描述文件失败");
} else {
url = uploadResult.getData().getUrl();
}
}
//2.更新导入任务数据
ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO();
importTaskForm.setOperatorId(staffId);
importTaskForm.setBizType(ImportTaskConstants.BIZ_TYPE_PARTY_UNIT);
importTaskForm.setTaskId(importTaskId);
importTaskForm.setResultDescFilePath(url);
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
if (CollectionUtils.isNotEmpty(fileList)) {
importTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importTaskForm.setResultDesc("联建单位导入存在错误数据");
}
Result result = commonServiceOpenFeignClient.finishImportTask(importTaskForm);
if (!result.success()) {
throw new RenException(result.getInternalMsg());
}
}
/**
* @param formDTO
* @Description 按类型统计单位数量
* @param agencyId
* @Description 按类型统计单位数量可视化平台-社区党建-联建单位分析-饼图展示分类下的联建单位数量
* @Param formDTO
* @Return {@link List<OptionDataResultDTO>}
* @Author zhaoqifeng
* @Date 2021/12/8 14:56
*/
@Override
public List<OptionDataResultDTO> typeStatistics(PartyActivityFormDTO formDTO) {
public List<OptionDataResultDTO> typeStatistics(String agencyId) {
DictListFormDTO dictFromDTO = new DictListFormDTO();
dictFromDTO.setDictType(DictTypeEnum.PARTY_UNIT_TYPE.getCode());
Result<List<DictListResultDTO>> dictResult = epmetAdminOpenFeignClient.dictList(dictFromDTO);
@ -599,7 +393,7 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
throw new EpmetException(dictResult.getCode());
}
List<OptionDataResultDTO> list = baseDao.getTypeStatistics(formDTO.getAgencyId());
List<OptionDataResultDTO> list = baseDao.getTypeStatistics(agencyId);
Map<String, String> map = list.stream().collect(Collectors.toMap(OptionDataResultDTO::getCode, OptionDataResultDTO::getValue));
return dictResult.getData().stream().map(item -> {
@ -662,6 +456,7 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
/**
* Desc: 获取联建单位名字
* 查询项目处理进展时调用
* @param formDTO
* @author zxc
* @date 2022/5/17 17:53
@ -697,6 +492,12 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
return baseDao.getAssistanceUnitList(staffInfo.getAgencyId(),agencyInfo.getPid());
}
/**
* 可视化平台-社区党建-联建单位分析
* 联建单位-简要信息列表展示单位名称单位类型
*
* @param form
*/
@Override
public PageData getListbrief(PartyUnitListbriefFormDTO form) {
Result<Map<String, String>> unitTypeMap = epmetAdminOpenFeignClient.dictMap(DictTypeEnum.PARTY_UNIT_TYPE.getCode());
@ -792,4 +593,133 @@ public class IcPartyUnitServiceImpl extends BaseServiceImpl<IcPartyUnitDao, IcPa
}
return baseDao.getUnitNames(unitIds);
}
/**
* 执行Excel导入
*
* @param filePath
* @param importTaskId
* @param customerId
* @param userId
*/
@Override
public void execAsyncExcelImport(Path filePath, String importTaskId, String customerId, String userId) {
try {
//获取当前登录用户所属组织id
CustomerStaffInfoCacheResult staffInfo= queryCurrentStaff(customerId,userId);
//联建单位分类:楼宇党建、两新组织、区域单位党建、机关直属部门、社会团体、民办非企业单位、基金会、其他
Result<Map<String, String>> partyUnitTypeMap = epmetAdminOpenFeignClient.dictMap(DictTypeEnum.PARTY_UNIT_TYPE.getCode());
Map<String, String> tMap = partyUnitTypeMap.getData().entrySet().stream().collect(Collectors.toMap(entry -> entry.getValue(), entry -> entry.getKey()));
IcPartyUnitExcelImportListener listener = new IcPartyUnitExcelImportListener(customerId,staffInfo, this,tMap);
EasyExcel.read(filePath.toFile(), IcPartyUnitImportExcel.class, listener).headRowNumber(1).sheet(0).doRead();
Path errorDescFile = null;
String errorDesFileUrl = null;
List<IcPartyUnitImportExcel.ErrorRow> errorRows = listener.getErrorRows();
boolean failed = errorRows.size() > 0;
if (failed) {
// 生成并上传错误文件
try {
// 文件生成
Path errorDescDir = FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_party_unit", "import", "error_des");
String fileName = UUID.randomUUID().toString().concat(".xlsx");
errorDescFile = errorDescDir.resolve(fileName);
FileItemFactory factory = new DiskFileItemFactory(16, errorDescDir.toFile());
FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, fileName);
OutputStream os = fileItem.getOutputStream();
EasyExcel.write(os, IcPartyUnitImportExcel.ErrorRow.class).sheet("导入失败列表").doWrite(errorRows);
// 文件上传oss
Result<UploadImgResultDTO> errorDesFileUploadResult = ossFeignClient.uploadImportTaskDescFile(new CommonsMultipartFile(fileItem));
if (errorDesFileUploadResult.success()) {
errorDesFileUrl = errorDesFileUploadResult.getData().getUrl();
}
} finally {
if (Files.exists(errorDescFile)) {
Files.delete(errorDescFile);
}
}
}
ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO();
importFinishTaskForm.setTaskId(importTaskId);
importFinishTaskForm.setProcessStatus(failed ? ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL : ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS);
importFinishTaskForm.setOperatorId(userId);
importFinishTaskForm.setResultDesc("");
importFinishTaskForm.setResultDescFilePath(errorDesFileUrl);
Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm);
if (!result.success()) {
log.error("【联建单位导入】finishImportTask失败");
}
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
log.error("【联建单位导入】出错:{}", errorMsg);
ImportTaskCommonFormDTO importFinishTaskForm = new ImportTaskCommonFormDTO();
importFinishTaskForm.setTaskId(importTaskId);
importFinishTaskForm.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL);
importFinishTaskForm.setOperatorId(userId);
importFinishTaskForm.setResultDesc("导入失败");
Result result = commonServiceOpenFeignClient.finishImportTask(importFinishTaskForm);
if (!result.success()) {
log.error("【联建单位导入】导入记录状态修改为'完成'失败");
}
} finally {
// 删除临时文件
if (Files.exists(filePath)) {
try {
Files.delete(filePath);
} catch (IOException e) {
log.error("method exception", e);
}
}
}
}
public CustomerStaffInfoCacheResult queryCurrentStaff(String customerId, String userId) {
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(customerId, userId);
if (null == staffInfo) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "查询工作人员缓存信息异常", EpmetErrorCode.SERVER_ERROR.getMsg());
}
return staffInfo;
}
/**
* 批量持久化
* @param entities
*/
public void batchPersist(List<IcPartyUnitEntity> entities) {
entities.forEach(e -> {
String id = IdWorker.getIdStr(e);
e.setId(id);
baseDao.insert(e);
});
}
/**
*
* @param unitName
* @param agencyId
* @param id
* @return true 已存在
* false 不存在
*/
public Boolean checkUnitName(String unitName,String agencyId,String id){
LambdaQueryWrapper<IcPartyUnitEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IcPartyUnitEntity::getAgencyId, agencyId)
.eq(IcPartyUnitEntity::getUnitName, unitName)
.ne(StringUtils.isNotBlank(id),IcPartyUnitEntity::getId,id);
List<IcPartyUnitEntity> list = baseDao.selectList(wrapper);
if (CollectionUtils.isNotEmpty(list)) {
return true;
}
return false;
}
}

8
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPublicServiceOrgServiceImpl.java

@ -89,11 +89,11 @@ public class IcPublicServiceOrgServiceImpl extends BaseServiceImpl<IcPublicServi
checkUnqiueName(formDTO.getName(),formDTO.getAgencyId(),formDTO.getId());
IcPublicServiceOrgEntity entity=ConvertUtils.sourceToTarget(formDTO,IcPublicServiceOrgEntity.class);
baseDao.updateById(entity);
//先删除
LambdaQueryWrapper<IcPublicServiceOrgServiceMatterEntity> deleteWrapper=new LambdaQueryWrapper<>();
deleteWrapper.eq(IcPublicServiceOrgServiceMatterEntity::getOrgId,formDTO.getId());
icPublicServiceOrgServiceMatterDao.delete(deleteWrapper);
if(CollectionUtils.isNotEmpty(formDTO.getServiceMatterList())){
//先删除
LambdaQueryWrapper<IcPublicServiceOrgServiceMatterEntity> deleteWrapper=new LambdaQueryWrapper<>();
deleteWrapper.eq(IcPublicServiceOrgServiceMatterEntity::getOrgId,formDTO.getId());
icPublicServiceOrgServiceMatterDao.delete(deleteWrapper);
formDTO.getServiceMatterList().forEach(dto->{
IcPublicServiceOrgServiceMatterEntity serviceOrgServiceMatterEntity=ConvertUtils.sourceToTarget(dto,IcPublicServiceOrgServiceMatterEntity.class);
serviceOrgServiceMatterEntity.setOrgId(entity.getId());

1
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/db/migration/V0.0.30__icpartyunit.sql

@ -0,0 +1 @@
alter table ic_party_unit MODIFY COLUMN `TYPE` varchar(32) NULL COMMENT '分类 【字典表】:02.20因烟台导入需求改为不必填';

2
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcPublicServiceOrgDao.xml

@ -62,7 +62,7 @@
AND o.`NAME` LIKE concat( '%', #{name}, '%' )
</if>
<if test="null != categoryIds and categoryIds.size() > 0">
<foreach collection="categoryIds" item="categoryId" open="AND" separator="" close="">
<foreach collection="categoryIds" item="categoryId" open="AND (" separator="or" close=")">
m.CATEGORY_ID = #{categoryId}
</foreach>
</if>

BIN
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/icpartyactivity_import_tem.xlsx

Binary file not shown.

BIN
epmet-module/epmet-heart/epmet-heart-server/src/main/resources/templates/icpartyunit_impoort_tem.xlsx

Binary file not shown.

6
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueDetailFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -13,8 +14,9 @@ import java.io.Serializable;
@Data
public class IssueDetailFormDTO implements Serializable {
private static final long serialVersionUID = 4859779755214503489L;
@NotBlank(message = "议题id不能为空")
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "议题id不能为空",groups =AddUserShowGroup.class )
private String issueId;
}

15
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueShiftedFromTopicFormDTO.java

@ -122,4 +122,19 @@ public class IssueShiftedFromTopicFormDTO implements Serializable {
private String groupId;
private String issueId;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
/**
* 地址
*/
private String address;
}

1
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueController.java

@ -43,6 +43,7 @@ public class IssueController {
*/
@PostMapping(value = "detail")
public Result<IssueResultDTO> detail(@RequestBody IssueDetailFormDTO issueDetail){
ValidatorUtils.validateEntity(issueDetail,IssueDetailFormDTO.AddUserShowGroup.class);
return new Result<IssueResultDTO>().ok(issueService.detail(issueDetail));
}

3
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueCommentServiceImpl.java

@ -16,6 +16,7 @@ import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.service.IssueCommentService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -30,6 +31,7 @@ import java.util.List;
* @author generator generator@elink-cn.com
* @since v1.0.0 2023-02-02
*/
@Slf4j
@Service
public class IssueCommentServiceImpl extends BaseServiceImpl<IssueCommentDao, IssueCommentEntity> implements IssueCommentService {
@Autowired
@ -61,6 +63,7 @@ public class IssueCommentServiceImpl extends BaseServiceImpl<IssueCommentDao, Is
userIdList.add(dto.getUserId());
Result<List<UserBaseInfoResultDTO>> userInfoRes= userOpenFeignClient.queryUserBaseInfo(userIdList);
if(!userInfoRes.success()|| CollectionUtils.isEmpty(userInfoRes.getData())){
log.error("议题评论查询用户信息异常userId: "+dto.getUserId());
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"查询用户信息异常userId:"+dto.getUserId(),"查询用户信息异常");
}
IssueCommentEntity entity = ConvertUtils.sourceToTarget(dto, IssueCommentEntity.class);

36
epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueServiceImpl.java

@ -510,23 +510,7 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
@Override
@Transactional(rollbackFor = Exception.class)
public String audit(TokenDto token, IssueAuditionFormDTO param){
if (StringUtils.isNotBlank(param.getReason())) {
TextScanParamDTO textScanParamDTO = new TextScanParamDTO();
TextTaskDTO taskDTO = new TextTaskDTO();
taskDTO.setDataId(UUID.randomUUID().toString().replace("-", ""));
taskDTO.setContent(param.getReason());
textScanParamDTO.getTasks().add(taskDTO);
Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO);
if (!textSyncScanResult.success()){
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
} else {
if (!textSyncScanResult.getData().isAllPass()) {
throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode());
}
}
}
scanReason(param.getReason());
Date unifiedDate = new Date();
IssueApplicationDTO application = applicationService.get(param.getIssueApplicationId());
@ -613,6 +597,24 @@ public class IssueServiceImpl extends BaseServiceImpl<IssueDao, IssueEntity> imp
return app2update.getIssueId();
}
private void scanReason(String reason) {
if (StringUtils.isNotBlank(reason)) {
TextScanParamDTO textScanParamDTO = new TextScanParamDTO();
TextTaskDTO taskDTO = new TextTaskDTO();
taskDTO.setDataId(UUID.randomUUID().toString().replace("-", ""));
taskDTO.setContent(reason);
textScanParamDTO.getTasks().add(taskDTO);
Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO);
if (!textSyncScanResult.success()){
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
} else {
if (!textSyncScanResult.getData().isAllPass()) {
throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode());
}
}
}
}
/**
* @Description 表决中列表
* @param issueListForm

18
epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueDao.xml

@ -115,6 +115,15 @@
<if test ='null != suggestion'>
suggestion,
</if>
<if test ='null != address'>
ADDRESS,
</if>
<if test ='null != longitude'>
LONGITUDE,
</if>
<if test ='null != latitude'>
LATITUDE,
</if>
<if test ='null != customerId'>
customer_id,
</if>
@ -186,6 +195,15 @@
<if test ='null != suggestion'>
#{suggestion},
</if>
<if test ='null != address'>
#{address},
</if>
<if test ='null != longitude'>
#{longitude},
</if>
<if test ='null != latitude'>
#{latitude},
</if>
<if test ='null != customerId'>
#{customerId},
</if>

8
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java

@ -169,6 +169,14 @@ public class HouseController implements ResultDataResolver {
return new Result<PageData<IcHouseListResultDTO>>().ok(houseService.getHouseList(formDTO));
}
/**
* 房屋管理-新增房屋
*
* @param tokenDTO
* @param formDTO
* @return
* @throws Exception
*/
@NoRepeatSubmit
@PostMapping("houseadd")
public Result houseAdd(@LoginUser TokenDto tokenDTO, @RequestBody IcHouseAddFormDTO formDTO) throws Exception {

1
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseInformationController.java

@ -254,6 +254,7 @@ public class HouseInformationController {
/**
* @describe: 双实录入获取小区编码
* 生成小区编码
* @author wangtong
* @date 2022/6/29 9:59
* @params [tokenDTO, gridId]

6
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/NeighborHoodController.java

@ -77,6 +77,12 @@ public class NeighborHoodController {
}
/**
* 房屋管理-新增小区
* @param tokenDTO
* @param formDTO
* @return
*/
@NoRepeatSubmit
@PostMapping("neighborhoodadd")
public Result neighborhoodadd(@LoginUser TokenDto tokenDTO, @RequestBody IcNeighborHoodAddFormDTO formDTO){

7
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java

@ -38,7 +38,12 @@ import java.util.Set;
*/
public interface HouseService {
/**
* 房屋管理-新增房屋
*
* @param customerId
* @param formDTO
*/
void addHouse(String customerId, IcHouseAddFormDTO formDTO);

7
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/NeighborHoodService.java

@ -33,7 +33,12 @@ import javax.servlet.http.HttpServletResponse;
* @since v1.0.0 2021-10-25
*/
public interface NeighborHoodService{
/**
* 房屋管理-新增小区
*
* @param customerId
* @param formDTO
*/
void addNeighborhood(String customerId, IcNeighborHoodAddFormDTO formDTO);
PageData<IcNeighborHoodResultDTO> listNeighborhood(IcNeighborHoodListFormDTO formDTO);

16
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java

@ -8,7 +8,6 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.HouseQrcodeEnum;
@ -35,17 +34,14 @@ import com.epmet.constants.ImportTaskConstants;
import com.epmet.dao.*;
import com.epmet.dto.*;
import com.epmet.dto.form.*;
import com.epmet.dto.form.stats.UserHouseStatsQueryFormDTO;
import com.epmet.dto.result.*;
import com.epmet.entity.*;
import com.epmet.enums.*;
import com.epmet.feign.*;
import com.epmet.model.HouseInfoModel;
import com.epmet.model.ImportHouseInfoListener;
import com.epmet.redis.CustomerAgencyRedis;
import com.epmet.redis.IcHouseRedis;
import com.epmet.service.*;
import com.epmet.stats.UserHouseStatsResultDTO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.cache.Cache;
@ -69,7 +65,6 @@ import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLEncoder;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
@ -137,7 +132,12 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
@Autowired
private DataReportOpenFeignClient dataReportOpenFeignClient;
/**
* 房屋管理-新增房屋
*
* @param customerId
* @param formDTO
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void addHouse(String customerId, IcHouseAddFormDTO formDTO) {
@ -1155,6 +1155,10 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
if (null == house) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查到房屋信息", "未查到房屋信息");
}
// 市北区-智慧社区: 1623486671774978060 23.2月为了方便社区的同事们演示系统,新建的一个客户id
if("1623486671774978060".equals(house.getCustomerId())){
return StrConstant.EPMETY_STR;
}
//url组成:小程序地址?房屋编码
CustomerOrgParameterEntity codePre = icHouseDao.selectByCustomerId(house.getCustomerId(), HouseQrcodeEnum.PREFIX_KEY.getCode());
if(null == codePre){

16
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/NeighborHoodServiceImpl.java

@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.enums.CollectUrlEnum;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
@ -82,7 +83,12 @@ public class NeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao,I
@Autowired
private CustomerAgencyDao customerAgencyDao;
/**
* 房屋管理-新增小区
*
* @param customerId
* @param formDTO
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void addNeighborhood(String customerId, IcNeighborHoodAddFormDTO formDTO) {
@ -140,6 +146,10 @@ public class NeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao,I
* @return java.lang.String
*/
private String createNeiQrcodeUrl(IcNeighborHoodEntity entity) throws Exception {
// 市北区-智慧社区: 1623486671774978060 23.2月为了方便社区的同事们演示系统,新建的一个客户id
if ("1623486671774978060".equals(entity.getCustomerId())) {
return StrConstant.EPMETY_STR;
}
if (null == entity) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "小区不可为空", "小区不可为空");
}
@ -338,6 +348,10 @@ public class NeighborHoodServiceImpl extends BaseServiceImpl<IcNeighborHoodDao,I
@Override
public Result createBatchNeiQrUrl(String customerId) {
// 市北区-智慧社区: 1623486671774978060 23.2月为了方便社区的同事们演示系统,新建的一个客户id
if ("1623486671774978060".equals(customerId)) {
return new Result();
}
//查询该客户下没有二维码的小区
QueryWrapper<IcNeighborHoodEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IcNeighborHoodEntity::getCustomerId,customerId)

3
epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/GuideDao.xml

@ -29,7 +29,8 @@
g.UPDATED_TIME AS "updatedTime",
if(exists( select gr.id from guide_reader gr
where gr.del_flag='0'
and gr.GUIDE_ID=g.id),1,0) AS readFlag
and gr.GUIDE_ID=g.id
and gr.USER_ID = #{userId}),1,0) AS readFlag
FROM
guide g
INNER JOIN guide_category gc ON g.CATEGORY_CODE = gc.CATEGORY_CODE AND gc.DEL_FLAG = 0 AND gc.CUSTOMER_ID = #{customerId}

15
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/IssueShiftedFromTopicFormDTO.java

@ -122,4 +122,19 @@ public class IssueShiftedFromTopicFormDTO implements Serializable {
private String groupId;
private String issueId;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
/**
* 地址
*/
private String address;
}

15
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicAndGroupResultDTO.java

@ -33,4 +33,19 @@ public class ResiTopicAndGroupResultDTO implements Serializable {
* 客户Id
* */
private String customerId;
/**
* 定位地址
* */
private String locateAddress;
/**
* 定位经度
* */
private String locateLongitude;
/**
* 定位纬度
* */
private String locateDimension;
}

90
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java

@ -1797,38 +1797,10 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
if(null == group) {
throw new RenException(ModuleConstant.FAILURE_TO_TURN_ISSUE);
}
TopicInfoFormDTO topicId = new TopicInfoFormDTO();
topicId.setTopicId(topicTurnIssueFromDTO.getTopicId());
Integer issueCount = govIssueFeignClient.checkTopicShiftIssue(topicId).getData();
if (issueCount != NumConstant.ZERO){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), ModuleConstant.ALREADY_SHIFT_ISSUE, ModuleConstant.ALREADY_SHIFT_ISSUE);
}
//话题转议题审核:标题、建议
String issueTitle = topicTurnIssueFromDTO.getIssueTitle();
String suggestion = topicTurnIssueFromDTO.getSuggestion();
if (StringUtils.isNotBlank(issueTitle) || StringUtils.isNotBlank(suggestion)) {
TextScanParamDTO textScan = new TextScanParamDTO();
//标题
TextTaskDTO taskTitle = new TextTaskDTO();
taskTitle.setContent(issueTitle);
taskTitle.setDataId(UUID.randomUUID().toString().replace("-", ""));
textScan.getTasks().add(taskTitle);
//建议
TextTaskDTO taskSuggestion = new TextTaskDTO();
taskSuggestion.setDataId(UUID.randomUUID().toString().replace("-", ""));
taskSuggestion.setContent(suggestion);
textScan.getTasks().add(taskSuggestion);
Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScan);
if (!textSyncScanResult.success()) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
} else {
if (!textSyncScanResult.getData().isAllPass()) {
log.error(String.format(TopicConstant.SHIFT_ISSUE, issueTitle, suggestion));
throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode());
}
}
}
// 是否已经转议题?
checkShiftedIssue(topicTurnIssueFromDTO.getTopicId());
// 话题转议题审核:标题、建议
scanIssueContent(topicTurnIssueFromDTO.getIssueTitle(),topicTurnIssueFromDTO.getSuggestion());
FirstTopicShiftedToIssueApplicationResultDTO result = null;
//1.统一时间(群组服务 -> 议题服务)
@ -1856,6 +1828,9 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
issueInfo.setGroupName(null == groupCache ? ModuleConstant.EMPTY_STR : groupCache.getGroupName());
issueInfo.setVotableCount(resiGroupMemberService.gridResiCount(group.getGridId()));
issueInfo.setGroupId(group.getGroupId());
issueInfo.setLatitude(group.getLocateDimension());
issueInfo.setLongitude(group.getLocateLongitude());
issueInfo.setAddress(group.getLocateAddress());
//4.调用gov-issue新增议题
Result<FirstTopicShiftedToIssueApplicationResultDTO> issueResult = issueOpenFeignClient.topicShiftedToIssueV2(issueInfo);
if (issueResult == null || !issueResult.success() || null == issueResult.getData()) {
@ -1994,6 +1969,53 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
}
/**
* 话题已转议题请勿重复操作
* @param topicId
*/
private void checkShiftedIssue(String topicId) {
TopicInfoFormDTO topicInfoFormDTO = new TopicInfoFormDTO();
topicInfoFormDTO.setTopicId(topicId);
Result<Integer> result = govIssueFeignClient.checkTopicShiftIssue(topicInfoFormDTO);
if (result.success()) {
Integer issueCount = result.getData();
if (issueCount != NumConstant.ZERO) {
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), ModuleConstant.ALREADY_SHIFT_ISSUE, ModuleConstant.ALREADY_SHIFT_ISSUE);
}
}
}
/**
* 审核提出来
* @param issueTitle
* @param suggestion
*/
private void scanIssueContent(String issueTitle, String suggestion) {
//话题转议题审核:标题、建议
if (StringUtils.isNotBlank(issueTitle) || StringUtils.isNotBlank(suggestion)) {
TextScanParamDTO textScan = new TextScanParamDTO();
//标题
TextTaskDTO taskTitle = new TextTaskDTO();
taskTitle.setContent(issueTitle);
taskTitle.setDataId(UUID.randomUUID().toString().replace("-", ""));
textScan.getTasks().add(taskTitle);
//建议
TextTaskDTO taskSuggestion = new TextTaskDTO();
taskSuggestion.setDataId(UUID.randomUUID().toString().replace("-", ""));
taskSuggestion.setContent(suggestion);
textScan.getTasks().add(taskSuggestion);
Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScan);
if (!textSyncScanResult.success()) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
} else {
if (!textSyncScanResult.getData().isAllPass()) {
log.error(String.format(TopicConstant.SHIFT_ISSUE, issueTitle, suggestion));
throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode());
}
}
}
}
/**
* @Description 工作端审核议题通过时获取一些议题相关信息
* @param param
@ -2019,7 +2041,9 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
}
IssueShiftedFromTopicFormDTO issueInfo = ConvertUtils.sourceToTarget(param, IssueShiftedFromTopicFormDTO.class);
issueInfo.setAddress(group.getLocateAddress());
issueInfo.setLongitude(group.getLocateLongitude());
issueInfo.setLatitude(group.getLocateDimension());
issueInfo.setCreatedTime(param.getUnifiedDate());
issueInfo.setGridId(group.getGridId());
issueInfo.setCustomerId(group.getCustomerId());

5
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/ResiTopicDao.xml

@ -400,7 +400,10 @@
groupp.ID AS groupId,
IFNULL(groupp.GRID_ID,'') AS gridId,
IFNULL(groupp.CUSTOMER_ID,'') AS customerId,
topic.CREATED_BY AS topicAuthorId
topic.CREATED_BY AS topicAuthorId,
topic.LOCATE_ADDRESS as locateAddress,
topic.LOCATE_LONGITUDE as locateLongitude,
topic.LOCATE_DIMENSION as locateDimension
FROM
RESI_TOPIC topic
INNER JOIN RESI_GROUP groupp ON topic.GROUP_ID = groupp.ID

6
epmet-module/resi-hall/resi-hall-client/src/main/java/com/epmet/dto/form/IssueDetailFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -13,8 +14,9 @@ import java.io.Serializable;
@Data
public class IssueDetailFormDTO implements Serializable {
private static final long serialVersionUID = 4859779755214503489L;
@NotBlank(message = "议题id不能为空")
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "议题id不能为空",groups = AddUserShowGroup.class)
private String issueId;
}

2
epmet-module/resi-hall/resi-hall-server/src/main/java/com/epmet/controller/IssueController.java

@ -36,7 +36,7 @@ public class IssueController {
@PostMapping(value = "/detail")
// @RequirePermission(requirePermission = RequirePermissionEnum.WORK_GRASSROOTS_ISSUE_DETAIL)
public Result<IssueDetailResultDTO> detail(@LoginUser TokenDto tokenDto,@RequestBody IssueDetailFormDTO issueDetail){
ValidatorUtils.validateEntity(issueDetail);
ValidatorUtils.validateEntity(issueDetail,IssueDetailFormDTO.AddUserShowGroup.class);
return new Result<IssueDetailResultDTO>().ok(issueService.detail(tokenDto,issueDetail));
}

25
epmet-module/resi-partymember/resi-partymember-server/src/main/java/com/epmet/modules/partymember/service/impl/PartyMemberConfirmServiceImpl.java

@ -114,17 +114,20 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
UserResiInfoFormDTO userResiInfoFormDTO = new UserResiInfoFormDTO();
userResiInfoFormDTO.setCustomerId(fromDto.getCustomerId());
userResiInfoFormDTO.setUserId(fromDto.getUserId());
UserResiInfoResultDTO userResiInfoResult = epmetUserFeignClient.getUserResiInfoDTO(userResiInfoFormDTO).getData();
if (null != userResiInfoResult) {
PartymemberInfoDTO partyMemberInfo = ConvertUtils.sourceToTarget(userResiInfoResult,
PartymemberInfoDTO.class);
partyMemberInfo.setId("");
partyMemberInfo.setMobile(userResiInfoResult.getRegMobile());
partyMemberInfo.setEstate(userResiInfoResult.getDistrict());
partyMemberInfo.setBuilding(userResiInfoResult.getBuildingAddress());
result.setPartyMemberInfo(partyMemberInfo);
Result<UserResiInfoResultDTO> res = epmetUserFeignClient.getUserResiInfoDTO(userResiInfoFormDTO);
if (res.success() && null != res) {
UserResiInfoResultDTO userResiInfoResult = res.getData();
if (null != userResiInfoResult) {
PartymemberInfoDTO partyMemberInfo = ConvertUtils.sourceToTarget(userResiInfoResult,
PartymemberInfoDTO.class);
partyMemberInfo.setId("");
partyMemberInfo.setMobile(userResiInfoResult.getRegMobile());
partyMemberInfo.setEstate(userResiInfoResult.getDistrict());
partyMemberInfo.setBuilding(userResiInfoResult.getBuildingAddress());
partyMemberInfo.setIdCard(userResiInfoResult.getIdNum());
result.setPartyMemberInfo(partyMemberInfo);
}
}
}
// 将访问行为存入热心居民申请行为记录表
String visitId = saveOrUpdateVisit(null, fromDto, PartyMemberConstant.OPERATE_INITIALIZE);
@ -502,7 +505,7 @@ public class PartyMemberConfirmServiceImpl implements PartyMemberConfirmService
List<String> failedReason = new ArrayList<>();
if (null != fromDTO.getAutoId() && !fromDTO.getAutoId().isEmpty()&& !("null").equals(fromDTO.getAutoId())) {
PartymemberConfirmAutoEntity autoEntity = partymemberConfirmAutoService.selectById(fromDTO.getAutoId());
resultDTO.setCertifyTime(autoEntity.getContrastTime().getTime());
resultDTO.setCertifyTime(autoEntity.getCreatedTime().getTime());
if (PartyMemberConstant.SAME.equals(autoEntity.getMobileResult())) {
failedReason.add("手机号匹配");
} else {

20
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/ChangeWelfareDTO.java

@ -1,7 +1,11 @@
package com.epmet.dto;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
@ -16,15 +20,19 @@ import java.util.Date;
public class ChangeWelfareDTO implements Serializable {
private static final long serialVersionUID = 1L;
public interface AddUserShowGroup extends CustomerClientShowGroup {}
public interface RemoveWelfareShowGroup extends CustomerClientShowGroup {}
/**
* 主键
*/
@NotBlank(message = "id不能为空",groups = RemoveWelfareShowGroup.class)
private String id;
/**
* epmet用户主键
*/
@NotBlank(message = "userId不能为空",groups = AddGroup.class)
private String userId;
/**
@ -65,6 +73,7 @@ public class ChangeWelfareDTO implements Serializable {
/**
* 加入原因
*/
@Length(max = 250,message = "添加原因最多输入250字",groups = AddUserShowGroup.class)
private String joinReason;
/**
@ -75,6 +84,7 @@ public class ChangeWelfareDTO implements Serializable {
/**
* 移除原因
*/
@Length(max = 250,message = "移除原因最多输入250字",groups = RemoveWelfareShowGroup.class)
private String removeReason;
/**
@ -116,4 +126,14 @@ public class ChangeWelfareDTO implements Serializable {
* 是否享受福利1是 0否 空是
*/
private String isWelfare;
/**
* 福利发放标识1已发放0未发放
*/
private Integer grantFlag;
/**
* 福利类别
*/
@Length(max = 100,message = "福利类别最多输入100字",groups = AddUserShowGroup.class)
private String categoryName;
}

6
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/AddIcNatFormDTO.java

@ -5,7 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
@ -110,6 +109,9 @@ public class AddIcNatFormDTO implements Serializable {
private String customerId;
private String staffId;
private String client;
/**
* 政府端:gov居民端:resi运营端:oper
*/
private String app;
}

4
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/IcTripReportFormDTO.java

@ -183,7 +183,7 @@ public class IcTripReportFormDTO implements Serializable {
/**
* 交通方式来源字典表(traffic_type)
*/
@NotBlank(message = "返回方式不能为空", groups = {PcAddRequired.class, ResiUserRequired.class})
// @NotBlank(message = "返回方式不能为空", groups = {PcAddRequired.class, ResiUserRequired.class})
private String trafficType;
/**
* 其他返回方式交通方式为其他时此列需要有值
@ -192,7 +192,7 @@ public class IcTripReportFormDTO implements Serializable {
/**
* 来源地详细信息 source_address字段的说明
*/
@NotBlank(message = "来自地区不能为空", groups = {PcAddRequired.class, ResiUserRequired.class})
// @NotBlank(message = "来自地区不能为空", groups = {PcAddRequired.class, ResiUserRequired.class})
private String sourceDetailAddress;
/**
* 疫苗接种针次 (0针 1针 2针 3针)小寨子

4
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserResiInfoResultDTO.java

@ -59,4 +59,8 @@ public class UserResiInfoResultDTO implements Serializable {
private String nickName;
private String realName;
/**
* 身份证号
*/
private String idNum;
}

5
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeWelfareController.java

@ -70,7 +70,7 @@ public class ChangeWelfareController {
@PostMapping("save")
public Result save(@RequestBody ChangeWelfareDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class,ChangeWelfareDTO.AddUserShowGroup.class);
return changeWelfareService.save(dto);
}
@ -78,7 +78,7 @@ public class ChangeWelfareController {
@PostMapping("update")
public Result update(@RequestBody ChangeWelfareDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class,ChangeWelfareDTO.AddUserShowGroup.class);
changeWelfareService.update(dto);
return new Result();
}
@ -108,6 +108,7 @@ public class ChangeWelfareController {
@NoRepeatSubmit
@PostMapping("removeWelfare")
public Result removeWelfare(@RequestBody ChangeWelfareDTO dto){
ValidatorUtils.validateEntity(dto,ChangeWelfareDTO.RemoveWelfareShowGroup.class);
return changeWelfareService.removeWelfare(dto);
}

3
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java

@ -92,7 +92,8 @@ public class IcNatController implements ResultDataResolver {
ValidatorUtils.validateEntity(formDTO, AddIcNatFormDTO.Nat.class);
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setStaffId(tokenDto.getUserId());
formDTO.setClient(tokenDto.getClient());
// formDTO.setClient(tokenDto.getClient());
formDTO.setApp(tokenDto.getApp());
icNucleinService.add(formDTO);
return new Result();
}

3
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcTripReportRecordController.java

@ -186,7 +186,8 @@ public class IcTripReportRecordController implements ResultDataResolver {
//磐石客户
if(StrConstant.PS_CUSTOMER_ID.equals(formDTO.getCustomerId())){
ValidatorUtils.validateEntity(formDTO,IcTripReportFormDTO.PsAdd.class);
}else {
}else if(StrConstant.XIAOZHAIZI_CUSTOMER_ID.equals(formDTO.getCustomerId())) {
//小寨子客户id
ValidatorUtils.validateEntity(formDTO,IcTripReportFormDTO.XzzAdd.class);
}
//校验参数

1
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserBadgeController.java

@ -104,6 +104,7 @@ public class UserBadgeController {
*/
@PostMapping("certification/detail")
public Result<CertificationDetailResultDTO> certificationDetail(@LoginUser TokenDto tokenDto,@RequestBody CertificationDetailFormDTO certificationDetailFormDTO){
certificationDetailFormDTO.setCustomerId(tokenDto.getCustomerId());
ValidatorUtils.validateEntity(certificationDetailFormDTO);
return new Result<CertificationDetailResultDTO>().ok(userBadgeService.certificationDetail(tokenDto,certificationDetailFormDTO));
}

8
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/ChangeWelfareEntity.java

@ -72,6 +72,14 @@ public class ChangeWelfareEntity extends BaseEpmetEntity {
* 移除原因
*/
private String removeReason;
/**
* 福利发放标识1已发放0未发放
*/
private Integer grantFlag;
/**
* 福利类别
*/
private String categoryName;
/**
* 客户ID

18
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareExcel.java

@ -21,13 +21,13 @@ public class ChangeWelfareExcel {
// @Excel(name = "epmet网格ID")
// private String gridId;
@Excel(name = "姓名")
@Excel(name = "姓名",width = 20)
private String name;
@Excel(name = "证件号")
@Excel(name = "证件号",width = 20)
private String idCard;
@Excel(name = "手机号")
@Excel(name = "手机号",width = 20)
private String mobile;
@Excel(name = "性别",replace = { "男_1", "女_0", "女_2", " _null"} )
@ -36,8 +36,18 @@ public class ChangeWelfareExcel {
// @Excel(name = "类型")
// private String type;
//
@Excel(name = "加入时间")
@Excel(name = "加入时间",width = 25)
private String joinDate;
/**
* 福利发放标识1已发放0未发放
*/
@Excel(name = "福利发放",replace = { "已发放_1", "未发放_0", "_null"},width = 20)
private Integer grantFlag;
/**
* 福利类别
*/
@Excel(name = "福利类别",width = 120)
private String categoryName;
//
// @Excel(name = "加入原因")
// private String joinReason;

10
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareImportExcel.java

@ -33,6 +33,16 @@ public class ChangeWelfareImportExcel {
// @Excel(name = "客户ID")
// private String customerId;
/**
* 福利发放标识1已发放0未发放
*/
@Excel(name = "福利发放",replace = { "已发放_1", "未发放_0", "_null"})
private Integer grantFlag;
/**
* 福利类别
*/
@Excel(name = "福利类别")
private String categoryName;
@ExcelIgnore
private Boolean addStatus = false;

26
epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBaseInfoRedis.java

@ -131,15 +131,19 @@ public class UserBaseInfoRedis {
String gridFullName = gridInfoCache.getGridNamePath();
baseInfo.setRegisteredGridName(gridFullName);
StringBuffer buffer = new StringBuffer(baseInfo.getSurname());
switch (baseInfo.getGender()) {
case NumConstant.ONE_STR:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_MALE);
break;
case NumConstant.TWO_STR:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_FEMALE);
break;
default:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_GENDER_UNKNOWN);
if(StringUtils.isNotBlank(baseInfo.getGender())){
switch (baseInfo.getGender()) {
case NumConstant.ONE_STR:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_MALE);
break;
case NumConstant.TWO_STR:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_FEMALE);
break;
default:
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_GENDER_UNKNOWN);
}
}else{
buffer.append(ModuleConstant.RESI_USER_NICKNAME_SUFFIX_GENDER_UNKNOWN);
}
baseInfo.setShowName(buffer.toString());
}
@ -179,7 +183,7 @@ public class UserBaseInfoRedis {
}
}
}
set(baseInfo);
return baseInfo;
}
@ -266,7 +270,7 @@ public class UserBaseInfoRedis {
}
}
}
set(baseInfo);
return baseInfo;
}

2
epmet-user/epmet-user-server/src/main/java/com/epmet/service/ChangeWelfareService.java

@ -21,7 +21,7 @@ import java.util.Map;
public interface ChangeWelfareService extends BaseService<ChangeWelfareEntity> {
/**
* 默认分页
* 福利人员管理-分页查询
*
* @param params
* @return PageData<ChangeWelfareDTO>

44
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java

@ -3,7 +3,6 @@ package com.epmet.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
@ -16,10 +15,7 @@ import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.ExcelPoiUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
@ -38,10 +34,11 @@ import com.epmet.entity.ChangeWelfareEntity;
import com.epmet.excel.ChangeWelfareImportExcel;
import com.epmet.excel.error.ChangeWelfareErrorExcel;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.feign.GovOrgFeignClient;
import com.epmet.feign.OssFeignClient;
import com.epmet.redis.ChangeWelfareRedis;
import com.epmet.service.ChangeWelfareService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.fileupload.FileItem;
@ -88,18 +85,23 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl<ChangeWelfareDao,
@Autowired
private OssFeignClient ossFeignClient;
@Autowired
private GovOrgFeignClient govOrgFeignClient;
@Autowired
private IcResiUserDao icResiUserDao;
/**
* 福利人员管理-分页查询
*
* @param params
* @return
*/
@Override
public PageData<ChangeWelfareDTO> page(Map<String, Object> params) {
params.put("customerId", loginUserUtil.getLoginUserCustomerId());
IPage<ChangeWelfareDTO> page = getPage(params);
// IPage<ChangeWelfareDTO> page = getPage(params);
PageHelper.startPage(Integer.valueOf((String) params.get("page")), Integer.valueOf((String) params.get("limit")));
List<ChangeWelfareDTO> list = baseDao.getWelfareList(params);
return new PageData<>(list, page.getTotal());
PageInfo<ChangeWelfareDTO> pageInfo = new PageInfo<>(list);
return new PageData<>(list, pageInfo.getTotal());
}
@Override
@ -137,6 +139,12 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl<ChangeWelfareDao,
return ConvertUtils.sourceToTarget(entity, ChangeWelfareDTO.class);
}
/**
* 新增福利人员
*
* @param dto
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Result save(ChangeWelfareDTO dto) {
@ -147,7 +155,7 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl<ChangeWelfareDao,
formDTO.setCustomerId(loginUserUtil.getLoginUserCustomerId());
ValidatorUtils.validateEntity(formDTO, UpdateGroup.class, DefaultGroup.class);
RentTenantDataResultDTO result = icResiUserServiceImpl.getRentResiUserInfo(formDTO);
// 入参里的idCard、mobile加密的,这里重新赋值了
dto.setIdCard(result.getIdCard());
dto.setMobile(result.getMobile());
dto.setGridId(result.getGridId());
@ -163,6 +171,11 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl<ChangeWelfareDao,
return new Result();
}
/**
* 修改福利人员
*
* @param dto
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void update(ChangeWelfareDTO dto) {
@ -177,12 +190,19 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl<ChangeWelfareDao,
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* 移除福利人员
*
* @param dto
* @return
*/
@Override
public Result removeWelfare(ChangeWelfareDTO dto) {
if (StringUtils.isBlank(dto.getId())) {
return new Result().error("id不可为空");
}
dto.setRemoveDate(DateUtils.format(new Date()));
dto.setUpdatedBy(EpmetRequestHolder.getLoginUserId());
baseDao.removeWelfare(dto);
return new Result().ok("移除成功");
}

21
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java

@ -119,7 +119,7 @@ public class IcNatServiceImpl extends BaseServiceImpl<IcNatDao, IcNatEntity> imp
if (null != icNatDTO && icNatDTO.getNatResult().equals(formDTO.getNatResult())) {
throw new RenException(EpmetErrorCode.IC_NAT_IDCARD_NATTIME.getCode(), EpmetErrorCode.IC_NAT_IDCARD_NATTIME.getMsg());
} else if (null != icNatDTO && !icNatDTO.getNatResult().equals(formDTO.getNatResult())) {
if ("wxmp".equals(formDTO.getClient())) {
if (AppClientConstant.APP_RESI.equals(formDTO.getApp())) {
throw new RenException(EpmetErrorCode.RESI_IC_NAT.getCode(), EpmetErrorCode.RESI_IC_NAT.getMsg());
}
throw new RenException(EpmetErrorCode.IC_NAT.getCode(), EpmetErrorCode.IC_NAT.getMsg());
@ -129,10 +129,6 @@ public class IcNatServiceImpl extends BaseServiceImpl<IcNatDao, IcNatEntity> imp
if (null == agencyInfo) {
throw new RenException(String.format("获取组织缓存信息失败%s", formDTO.getAgencyId()));
}
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
if (null == staffInfo){
throw new EpmetException(String.format("获取工作人员信息失败%s", formDTO.getStaffId()));
}
ResiAndLocalResiResultDTO resiCount = icResiUserDao.getResiCount(formDTO.getAgencyId(), formDTO.getIdCard(), formDTO.getCustomerId());
//2.新增核酸基础信息数据
IcNatEntity entity = ConvertUtils.sourceToTarget(formDTO, IcNatEntity.class);
@ -146,8 +142,19 @@ public class IcNatServiceImpl extends BaseServiceImpl<IcNatDao, IcNatEntity> imp
IcNatRelationEntity relationEntity = ConvertUtils.sourceToTarget(formDTO, IcNatRelationEntity.class);
relationEntity.setIcNatId(entity.getId());
relationEntity.setIsLocalResiUser(resiCount.getIsLocal() == NumConstant.ZERO ? NumConstant.ZERO_STR : NumConstant.ONE_STR);
relationEntity.setAgencyId(staffInfo.getAgencyId());
relationEntity.setPids(StringUtils.isNotBlank(staffInfo.getAgencyPIds()) ? staffInfo.getAgencyPIds() + ":" + staffInfo.getAgencyId() : staffInfo.getAgencyId());
if(AppClientConstant.APP_GOV.equals(formDTO.getApp())){
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getStaffId());
if (null == staffInfo){
log.error(String.format("获取工作人员信息失败%s", formDTO.getStaffId()));
throw new EpmetException(String.format("获取工作人员信息失败%s", formDTO.getStaffId()));
}
relationEntity.setAgencyId(staffInfo.getAgencyId());
relationEntity.setPids(StringUtils.isNotBlank(staffInfo.getAgencyPIds()) ? staffInfo.getAgencyPIds() + ":" + staffInfo.getAgencyId() : staffInfo.getAgencyId());
}else{
relationEntity.setAgencyId(formDTO.getAgencyId());
AgencyInfoCache agencyInfoCache=CustomerOrgRedis.getAgencyInfo(formDTO.getAgencyId());
relationEntity.setPids(StringUtils.isNotBlank(agencyInfoCache.getPids()) ? agencyInfoCache.getPids() + ":" + formDTO.getAgencyId() : formDTO.getAgencyId());
}
icNatRelationDao.insert(relationEntity);
//3.新增通知表信息

3
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserAdviceServiceImpl.java

@ -25,6 +25,7 @@ import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
@ -163,7 +164,7 @@ public class UserAdviceServiceImpl extends BaseServiceImpl<UserAdviceDao, UserAd
//检验是否已经回复过
UserAdviceEntity userAdviceEntity = baseDao.selectById(dto.getAdviceId());
if (StringUtils.isNotBlank(userAdviceEntity.getReplyContent()) || StringUtils.isNotBlank(userAdviceEntity.getReplyUserId())) {
throw new RenException("该建议已被回复,不能再次回复");
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"该建议已被回复,不能再次回复","该建议已被回复,不能再次回复");
}
//审核图片
auditPic(dto.getGovImgList());

6
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java

@ -125,9 +125,13 @@ public class UserBadgeServiceImpl implements UserBadgeService {
List<UserOperListResultDTO> userAuthBadgeList = userBadgeDao.selectAuthRecord(userOperListFormDTO.getUserId());
Object userBadge = userBadgeRedis.getCustomerBadge(userOperListFormDTO.getCustomerId());
if (null == userBadge){
return new ArrayList<>();
this.reloadCustomerBadge(userOperListFormDTO.getCustomerId());
userBadge = userBadgeRedis.getCustomerBadge(userOperListFormDTO.getCustomerId());
}
List<UserOperListResultDTO> userOperListResultDTOS = JSON.parseArray(userBadge.toString(), UserOperListResultDTO.class);
if(CollectionUtils.isEmpty(userOperListResultDTOS)){
return new ArrayList<>();
}
// 没有任何记录
if (CollectionUtils.isEmpty(userAuthBadgeList)){
userOperListResultDTOS.forEach(u -> {

22
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBaseInfoServiceImpl.java

@ -574,12 +574,22 @@ public class UserBaseInfoServiceImpl extends BaseServiceImpl<UserBaseInfoDao, Us
result.setEpmetUserId(userEntity.getId());
result.setRegFlag(false);
} else {
//更新下user_Base_info信息
baseInfo.setRealName(formDTO.getNick());
baseInfo.setSurname(NameUtils.getSurNameComplex(formDTO.getNick()));
baseInfo.setName(NameUtils.getNameComplex(formDTO.getNick()));
baseInfo.setNickname(formDTO.getNick());
baseInfo.setHeadImgUrl(formDTO.getAvatarUrl());
// 更新下user_Base_info信息
if (StringUtils.isNotBlank(formDTO.getNick()) && StringUtils.isBlank(baseInfo.getRealName())) {
baseInfo.setRealName(formDTO.getNick());
}
if (StringUtils.isNotBlank(formDTO.getNick()) && StringUtils.isBlank(baseInfo.getSurname())) {
baseInfo.setSurname(NameUtils.getSurNameComplex(formDTO.getNick()));
}
if (StringUtils.isNotBlank(formDTO.getNick()) && StringUtils.isBlank(baseInfo.getName())) {
baseInfo.setName(NameUtils.getNameComplex(formDTO.getNick()));
}
if (StringUtils.isNotBlank(formDTO.getNick()) && StringUtils.isBlank(baseInfo.getNickname())) {
baseInfo.setNickname(formDTO.getNick());
}
if (StringUtils.isNotBlank(formDTO.getAvatarUrl()) && StringUtils.isBlank(baseInfo.getHeadImgUrl())) {
baseInfo.setHeadImgUrl(formDTO.getAvatarUrl());
}
baseDao.updateById(baseInfo);
result.setEpmetUserId(baseInfo.getUserId());

1
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserResiInfoServiceImpl.java

@ -186,6 +186,7 @@ public class UserResiInfoServiceImpl extends BaseServiceImpl<UserResiInfoDao, Us
resultDTO.setBuildingAddress(userBaseInfoResultDTO.getBuildingAddress());
resultDTO.setNickName(userBaseInfoResultDTO.getNickname());
resultDTO.setShowName(StrConstant.EPMETY_STR);
resultDTO.setIdNum(userBaseInfoResultDTO.getIdNum());
if (StringUtils.isNotBlank(userBaseInfoResultDTO.getSurname())){
String gender;
if (NumConstant.ONE_STR.equals(userBaseInfoResultDTO.getGender())) {

4
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.94__pli_change_welfare.sql

@ -0,0 +1,4 @@
ALTER TABLE pli_change_welfare ADD COLUMN GRANT_FLAG TINYINT ( 1 ) DEFAULT 0
COMMENT '福利发放标识:1:已发放;0:未发放' AFTER REMOVE_REASON;
ALTER TABLE pli_change_welfare ADD COLUMN CATEGORY_NAME VARCHAR(255) DEFAULT ''
COMMENT '福利类别' AFTER GRANT_FLAG;

BIN
epmet-user/epmet-user-server/src/main/resources/excel/pli_change_welfare.xlsx

Binary file not shown.

22
epmet-user/epmet-user-server/src/main/resources/mapper/ChangeWelfareDao.xml

@ -40,7 +40,9 @@
w.REMOVE_DATE,
w.REMOVE_REASON,
w.CREATED_TIME,
w.UPDATED_TIME
w.UPDATED_TIME,
w.GRANT_FLAG,
w.CATEGORY_NAME
FROM
pli_change_welfare w
LEFT JOIN ic_resi_user u ON u.ID_CARD = w.ID_CARD and u.DEL_FLAG = '0'
@ -54,13 +56,13 @@
AND w.GRID_ID = #{gridId}
</if>
<if test="name != null and name != ''">
AND w.NAME = #{name}
AND w.NAME like concat('%', #{name},'%')
</if>
<if test="idCard != null and idCard != ''">
AND w.ID_CARD = #{idCard}
AND w.ID_CARD like concat('%', #{idCard},'%')
</if>
<if test="mobile != null and mobile != ''">
AND w.MOBILE = #{mobile}
AND w.MOBILE like concat('%', #{mobile},'%')
</if>
<if test="startTime != null and startTime != ''">
AND w.JOIN_DATE >= #{startTime}
@ -68,6 +70,12 @@
<if test="endTime != null and endTime != ''">
AND w.JOIN_DATE &lt;= #{endTime}
</if>
<if test="categoryName != null and categoryName != ''">
AND w.CATEGORY_NAME like concat('%',#{categoryName},'%')
</if>
<if test="grantFlag != null and grantFlag != ''">
AND w.GRANT_FLAG = #{grantFlag}
</if>
order by w.CREATED_TIME desc
</select>
@ -76,12 +84,14 @@
where ID_CARD=#{idCard}
and del_flag='0'
</select>
<!-- 移除福利人员 -->
<update id="removeWelfare">
update pli_change_welfare
set REMOVE_DATE=#{removeDate},
REMOVE_REASON=#{removeReason},
del_flag='1'
del_flag='1',
UPDATED_BY = #{updatedBy},
UPDATED_TIME = #{removeDate}
where del_flag='0'
<if test="id != null and id != ''">
AND ID = #{id}

Loading…
Cancel
Save