From 63dec04110dad7efb42a28766104e656bf7d348c Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Mon, 14 Nov 2022 12:07:35 +0800 Subject: [PATCH 001/111] =?UTF-8?q?=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?listRemoteOptions()->ColumnWrapper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/service/impl/IcResiUserImportServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java index 2a57869b36..932baf369b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java @@ -6,6 +6,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcelFactory; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.epmet.bean.ResiImportCategoryData; @@ -1374,6 +1375,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId); } + log.info("【居民信息导入】#listRemoteOptions,columnWrappers:{},cascadeItemId:{}", JSON.toJSONString(columnWrappers), cascadeItemId); + List options = null; String optionTypeName = null; switch (pureUri) { From 60e91744d1e0f38e1c11b4bec01f9bf900638624 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Mon, 14 Nov 2022 12:53:39 +0800 Subject: [PATCH 002/111] =?UTF-8?q?=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/IcResiUserImportServiceImpl.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java index 932baf369b..2486b306f0 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java @@ -453,6 +453,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res String currUserAgencyPids, String currentUserId, String tableName) { String loginUserCustomerId = EpmetRequestHolder.getLoginUserCustomerId(); // 遍历每一行,将行内容转化为 + String idCard = null; for (Map row : dataRows) { LinkedHashMap columnAndValues = new LinkedHashMap<>(); @@ -463,7 +464,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res execSpecifiedCheckAndFill(columnAndValues); //默认新增 columnAndValues.put("SUB_STATUS", IcResiUserSubStatusEnum.IMPORT.getSubStatus()); - String idCard = columnAndValues.get("ID_CARD"); + idCard = columnAndValues.get("ID_CARD"); Map existingResiMap = icResiUserDao.selectResiInfoMap(loginUserCustomerId, idCard, null); if (existingResiMap == null) { @@ -580,7 +581,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res errorMsg = e.getMessage(); } else { errorMsg = "未知系统错误"; - log.error(ExceptionUtils.getErrorStackTrace(e)); + log.error("【居民信息导入】导入身份证为{}的居民基础信息出现未知错误:{}", idCard == null ? "" : idCard, ExceptionUtils.getErrorStackTrace(e)); } ErrorRow errorRow = new ErrorRow(); @@ -696,12 +697,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res // 遍历每一行,将行内容转化为 for (Map row : dataRows) { - + String idCard = null; try { convertColumnWrappers2Map4Persist(headerColumnWrapper, row, currUserAgencyId, checkBoxOptionColumnIdxAndLabel, columnAndValues, false); // 检验身份证号 - String idCard = columnAndValues.get("ID_CARD"); + idCard = columnAndValues.get("ID_CARD"); if (StringUtils.isBlank(idCard)) { String resiName = columnAndValues.get("NAME"); if (resiName == null) { @@ -755,7 +756,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res errorMsg = e.getMessage(); } else { errorMsg = "未知系统错误"; - log.error(ExceptionUtils.getErrorStackTrace(e)); + log.error("【居民信息导入】导入身份证为{}的居民扩展信息{}出现未知错误:{}", idCard == null ? "" : idCard, targetTableName, ExceptionUtils.getErrorStackTrace(e)); } ErrorRow errorRow = new ErrorRow(); @@ -1375,8 +1376,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res cascadeItemColumnWrapper = columnWrappers.get(cascadeItemId); } - log.info("【居民信息导入】#listRemoteOptions,columnWrappers:{},cascadeItemId:{}", JSON.toJSONString(columnWrappers), cascadeItemId); - List options = null; String optionTypeName = null; switch (pureUri) { From 05d1ecf58df99f0a8666cbfadbca2ea2fcb89e12 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Fri, 18 Nov 2022 10:46:01 +0800 Subject: [PATCH 003/111] =?UTF-8?q?=E6=A0=B9=E7=BB=84=E7=BB=87pid=3D0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/controller/yantai/DataSyncUserAndOrgServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgServiceImpl.java index 287ff51e80..e49322cfe6 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/yantai/DataSyncUserAndOrgServiceImpl.java @@ -120,7 +120,7 @@ public class DataSyncUserAndOrgServiceImpl implements DataSyncUserAndOrgService log.error("未查询到根组织:"+organizationId); return true; } - rootOrg.setPid(""); + rootOrg.setPid(NumConstant.ZERO_STR); rootOrg.setPids(""); rootOrg.setNameOfOrganization(""); needInsert.add(rootOrg); From 43cace181653ebc9701fec868677dbbe3221e438 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Sun, 20 Nov 2022 22:56:54 +0800 Subject: [PATCH 004/111] =?UTF-8?q?=E6=8A=BD=E8=B1=A1=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=A8=A1=E5=9D=97=EF=BC=8C=E5=B0=81=E8=A3=85?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/dao/IcSyncJobDao.java | 6 +- .../com/epmet/entity/IcSyncJobEntity.java | 9 + .../AbstractDataSyncJobProcessor.java | 213 ++++++++++++++++++ .../processor/YanTaiNatSyncProcessor.java | 119 +++------- .../YanTaiResiComparisonSyncProcessor.java | 101 ++------- .../processor/YanTaiVaccineSyncProcessor.java | 107 +++------ .../main/resources/mapper/IcSyncJobDao.xml | 17 +- 7 files changed, 312 insertions(+), 260 deletions(-) create mode 100644 epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcSyncJobDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcSyncJobDao.java index a8dfd6bee2..403ea9d1a8 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcSyncJobDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcSyncJobDao.java @@ -16,6 +16,8 @@ import java.util.List; @Mapper public interface IcSyncJobDao extends BaseDao { - List selectExecutableJobList(@Param("jobType") String jobType, - @Param("itemCount") int itemCount); + List selectJobListByStatus(@Param("status") String status, + @Param("jobType") String jobType, + @Param("processorIp") String processorIp, + @Param("itemCount") Integer itemCount); } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcSyncJobEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcSyncJobEntity.java index 0a83b7aa56..e162ceeb4b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcSyncJobEntity.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcSyncJobEntity.java @@ -56,4 +56,13 @@ public class IcSyncJobEntity extends BaseEpmetEntity { */ private String operationStatus; + /** + * 处理实例的ip + * @author wxz + * @date 2022/11/19 下午11:02 + * * @param null + * + */ + private String processorIp; + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java new file mode 100644 index 0000000000..950c397c2d --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java @@ -0,0 +1,213 @@ +package com.epmet.processor; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.epmet.commons.tools.distributedlock.DistributedLock; +import com.epmet.commons.tools.exception.ExceptionUtils; +import com.epmet.constant.EpidemicConstant; +import com.epmet.dao.IcSyncJobDao; +import com.epmet.entity.IcSyncJobEntity; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RLock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * @ClassName BaseSyncProcessor + * @Description 抽象数据同步处理器基类。所有基于该模式的同步器都应当继承该类。自定义Scheduler之后,调用基类的scanAndExeJobs()方法。 + * 实现需要实现的方法(定义分布式锁的key,定义同步数据的类型)。有特殊逻辑的可以重写相关方法 + * @Author wangxianzhang + * @Date 2022/11/19 下午11:16 + */ +@Slf4j +public abstract class AbstractDataSyncJobProcessor { + + @Autowired + private ExecutorService executorService; + + @Autowired + private IcSyncJobDao icSyncJobDao; + + @Autowired + private DistributedLock distributedLock; + + /** + * 最多能运行几条线程。如果有特殊情况,可以通过抽象方法每个子类单独定义 + */ + private int MAX_EXECUTING_NUMBER = 3; + + /** + * 本机ip + */ + private String localIp; + + { + try { + // 获取本机ip + InetAddress localHost = Inet4Address.getLocalHost(); + localIp = localHost.getHostAddress(); + log.info("【抽象定时数据同步器】获取本机ip为:{}", localIp); + } catch (UnknownHostException e) { + log.error("【抽象定时数据同步器】获取本机ip失败"); + } + + } + + /** + * 扫描并执行 + * @author wxz + * @date 2022/11/20 上午12:10 + * + * + */ + void scanAndExecWaitingJobs() { + + int executingTaskNumber = getExecutingTaskNumber(); + if (executingTaskNumber >= MAX_EXECUTING_NUMBER) { + // 单个实例下,最多只允许同时3条线程运行 + return; + } + + // 还可以运行几条线程 + int leftCount = MAX_EXECUTING_NUMBER - executingTaskNumber; + RLock lock = null; + try { + lock = distributedLock.getLock(getDistributeLockKey(), getDistributeLockLeaseTime(), getDistributeLockWaitTime(), TimeUnit.SECONDS); + // 查询可执行的任务列表,并且异步执行 + List icSyncJobToExec = icSyncJobDao.selectJobListByStatus("waiting", getJobType(), null, leftCount); + if (!CollectionUtils.isEmpty(icSyncJobToExec)) { + // 异步提交任务 + submitAsyncJob(icSyncJobToExec); + } + } catch (Exception e) { + log.error("【异步数据更新】出错:{}", ExceptionUtils.getErrorStackTrace(e)); + } finally { + if (lock != null) { + lock.unlock(); + } + } + } + + /** + * 扫描并且执行被中断的任务 + * @author wxz + * @date 2022/11/20 下午10:29 + * + * + */ + @PostConstruct + void scanAndContinueInteruptedJobs() { + // 此处不需要加锁,因为已经按照ip查询了,查到的一定是本机之前执行过的,其他机器查不到该条 + List interuptedJobs = icSyncJobDao.selectJobListByStatus("processing", getJobType(), localIp,null); + if (!CollectionUtils.isEmpty(interuptedJobs)) { + submitAsyncJob(interuptedJobs); + } + } + + /** + * 提交异步任务 + * @author wxz + * @date 2022/11/20 下午10:37 + * * @param icSyncJobToExec + * + */ + void submitAsyncJob(List icSyncJobToExec) { + for (IcSyncJobEntity jobEntity : icSyncJobToExec) { + // 将此任务状态修改为执行中 + updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_PROCESSING, localIp); + executorService.submit(() -> { + try { + execJobTask(jobEntity); + } finally { + // 更新任务状态为结束 + updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_FINISH, null); + } + }); + } + } + + /** + * 先检查一下,有几个任务需要执行 + * @author wxz + * @date 2022/11/19 下午10:57 + * @return int + */ + private int getExecutingTaskNumber() { + // 查询本机正在处理中的任务列表 + LambdaQueryWrapper executingListQuery = new LambdaQueryWrapper<>(); + executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING); + executingListQuery.eq(IcSyncJobEntity::getProcessorIp, localIp); + return icSyncJobDao.selectCount(executingListQuery); + } + + /** + * 更新任务状态 + * @author wxz + * @date 2022/11/8 下午8:25 + * @param id + * @param status + + */ + private void updateJobStatus(String id, String status, String processorIp) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(IcSyncJobEntity::getId, id); + + IcSyncJobEntity updateEntity = new IcSyncJobEntity(); + updateEntity.setOperationStatus(status); + updateEntity.setProcessorIp(processorIp); + icSyncJobDao.update(updateEntity, query); + } + + /** + * 执行任务 + * @author wxz + * @date 2022/11/20 上午12:06 + * + * + */ + protected abstract void execJobTask(IcSyncJobEntity jobEntity); + + /** + * 获取分布式锁的key + * @author wxz + * @date 2022/11/20 上午12:21 + * + * + */ + protected abstract String getDistributeLockKey(); + + /** + * 任务类型 + * @author wxz + * @date 2022/11/20 上午12:25 + * + * * @return String + */ + protected abstract String getJobType(); + + /** + * 分布式锁的续期时间 + * @author wxz + * @date 2022/11/20 下午10:52 + * + * * @return long + */ + protected abstract long getDistributeLockLeaseTime(); + + /** + * 分布式锁的等待时间 + * @author wxz + * @date 2022/11/20 下午10:52 + * + * * @return long + */ + protected abstract long getDistributeLockWaitTime(); + +} \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java index 1fbfb6a69f..97c0dec750 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java @@ -1,49 +1,27 @@ package com.epmet.processor; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.epmet.commons.tools.distributedlock.DistributedLock; -import com.epmet.commons.tools.exception.ExceptionUtils; -import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.constant.EpidemicConstant; -import com.epmet.dao.IcSyncJobDao; import com.epmet.entity.IcSyncJobEntity; import com.epmet.service.DataSyncConfigService; import lombok.extern.slf4j.Slf4j; -import org.redisson.api.RLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.TimeUnit; import static com.epmet.constant.EpidemicConstant.JOB_TYPE_NAT; -// 烟台核酸检测数据同步处理器 +/** + * @Description 烟台核酸检测数据同步处理器 + * @Author wxz + * @Date 2022/11/20 上午11:43 + */ @Component @Slf4j -public class YanTaiNatSyncProcessor { - - public static final int MAX_EXECUTING_COUNT = 3; - - @Autowired - private ExecutorService executorService; - - @Autowired - private IcSyncJobDao icSyncJobDao; +public class YanTaiNatSyncProcessor extends AbstractDataSyncJobProcessor { @Autowired private DataSyncConfigService dataSyncConfigService; - @Autowired - private DistributedLock distributedLock; - - @Autowired - RedisUtils redisUtils; - /** * 定时扫描和执行同步任务 * 10s扫一次库 @@ -53,76 +31,31 @@ public class YanTaiNatSyncProcessor { */ @Scheduled(cron = "0/10 * * * * ? ") public void scanJobs() { - //log.info("【异步数据更新】开始同步任务"); - - //String dataSyncEnable = redisUtils.getString("data:sync:enable"); - //if (StringUtils.isEmpty(dataSyncEnable)) { - // return; - //} - - LambdaQueryWrapper executingListQuery = new LambdaQueryWrapper<>(); - executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING); - List executingJobList = icSyncJobDao.selectList(executingListQuery); - - if (!CollectionUtils.isEmpty(executingJobList) && executingJobList.size() >= MAX_EXECUTING_COUNT) { - // 最多只允许同时3条线程运行 - return; - } - - int executingCount = executingJobList.size(); - // 还可以运行几条线程 - int leftCount = MAX_EXECUTING_COUNT - executingCount; - - RLock lock = null; - try { - lock = distributedLock.getLock("data:sync:" + JOB_TYPE_NAT, 60L, 60L, TimeUnit.SECONDS); - // 查询可执行的任务列表,并且异步执行 - List icSyncJobToExec = icSyncJobDao.selectExecutableJobList( - EpidemicConstant.JOB_TYPE_NAT, - leftCount); - - if (!CollectionUtils.isEmpty(icSyncJobToExec)) { - // 异步提交任务 - for (IcSyncJobEntity jobEntity : icSyncJobToExec) { - - updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_PROCESSING); - executorService.submit(() -> { - // 将此任务状态修改为执行中 - - try { - dataSyncConfigService.execSyncByJobProcessor(jobEntity); - } finally { - // 更新任务状态为结束 - updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_FINISH); - } + scanAndExecWaitingJobs(); + } - }); - } - } - } catch (Exception e) { - log.error("【异步数据更新】出错:{}", ExceptionUtils.getErrorStackTrace(e)); - } finally { - if (lock != null) { - lock.unlock(); - } - } + @Override + protected void execJobTask(IcSyncJobEntity jobEntity) { + dataSyncConfigService.execSyncByJobProcessor(jobEntity); } - /** - * 更新任务状态 - * @author wxz - * @date 2022/11/8 下午8:25 - * @param id - * @param status + @Override + protected String getDistributeLockKey() { + return "data:sync:" + JOB_TYPE_NAT; + } - */ - private void updateJobStatus(String id, String status) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(IcSyncJobEntity::getId, id); + @Override + protected String getJobType() { + return EpidemicConstant.JOB_TYPE_NAT; + } - IcSyncJobEntity updateEntity = new IcSyncJobEntity(); - updateEntity.setOperationStatus(status); - icSyncJobDao.update(updateEntity, query); + @Override + protected long getDistributeLockLeaseTime() { + return 60; } + @Override + protected long getDistributeLockWaitTime() { + return 60; + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java index 8e57474606..cbf0810580 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java @@ -1,23 +1,13 @@ package com.epmet.processor; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.epmet.commons.tools.distributedlock.DistributedLock; -import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.constant.EpidemicConstant; -import com.epmet.dao.IcSyncJobDao; import com.epmet.entity.IcSyncJobEntity; import com.epmet.service.IcResiComparisonRecordService; import lombok.extern.slf4j.Slf4j; -import org.redisson.api.RLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.TimeUnit; /** * @Description 居民一致性对比任务处理器 @@ -26,22 +16,11 @@ import java.util.concurrent.TimeUnit; */ @Component @Slf4j -public class YanTaiResiComparisonSyncProcessor { - - public static final int MAX_EXECUTING_COUNT = 3; - - @Autowired - private ExecutorService executorService; - - @Autowired - private IcSyncJobDao icSyncJobDao; +public class YanTaiResiComparisonSyncProcessor extends AbstractDataSyncJobProcessor { @Autowired private IcResiComparisonRecordService icResiComparisonRecordService; - @Autowired - private DistributedLock distributedLock; - @Autowired RedisUtils redisUtils; @@ -51,69 +30,31 @@ public class YanTaiResiComparisonSyncProcessor { */ @Scheduled(cron = "0/10 * * * * ? ") public void scanJobs() { - //log.info("【异步数据更新】开始同步任务"); - - LambdaQueryWrapper executingListQuery = new LambdaQueryWrapper<>(); - executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING); - List executingJobList = icSyncJobDao.selectList(executingListQuery); - - if (!CollectionUtils.isEmpty(executingJobList) && executingJobList.size() >= MAX_EXECUTING_COUNT) { - // 最多只允许同时3条线程运行 - return; - } - - int executingCount = executingJobList.size(); - // 还可以运行几条线程 - int leftCount = MAX_EXECUTING_COUNT - executingCount; - - RLock lock = null; - try { - lock = distributedLock.getLock("data:sync:comparison:resi", 60L, 60L, TimeUnit.SECONDS); - // 查询可执行的任务列表,并且异步执行 - List icSyncJobToExec = icSyncJobDao.selectExecutableJobList( - EpidemicConstant.JOB_TYPE_COMPARISON_RESI, - leftCount); - - if (!CollectionUtils.isEmpty(icSyncJobToExec)) { - // 异步提交任务 - for (IcSyncJobEntity jobEntity : icSyncJobToExec) { - - updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_PROCESSING); - executorService.submit(() -> { - // 将此任务状态修改为执行中 - - try { - icResiComparisonRecordService.comparisonUserData(jobEntity); - } finally { - // 更新任务状态为结束 - updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_FINISH); - } + scanAndExecWaitingJobs(); + } - }); - } - } - } catch (Exception e) { - log.error("【异步数据更新】出错:{}", ExceptionUtils.getErrorStackTrace(e)); - } finally { - if (lock != null) { - lock.unlock(); - } - } + @Override + protected void execJobTask(IcSyncJobEntity jobEntity) { + icResiComparisonRecordService.comparisonUserData(jobEntity); } - /** - * 更新任务状态 - * @param id - * @param status + @Override + protected String getDistributeLockKey() { + return "data:sync:comparison:resi"; + } - */ - private void updateJobStatus(String id, String status) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(IcSyncJobEntity::getId, id); + @Override + protected String getJobType() { + return EpidemicConstant.JOB_TYPE_COMPARISON_RESI; + } - IcSyncJobEntity updateEntity = new IcSyncJobEntity(); - updateEntity.setOperationStatus(status); - icSyncJobDao.update(updateEntity, query); + @Override + protected long getDistributeLockLeaseTime() { + return 60; } + @Override + protected long getDistributeLockWaitTime() { + return 60; + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java index e53a279a46..a8427d8c8e 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java @@ -1,49 +1,27 @@ package com.epmet.processor; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.epmet.commons.tools.distributedlock.DistributedLock; -import com.epmet.commons.tools.exception.ExceptionUtils; -import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.constant.EpidemicConstant; -import com.epmet.dao.IcSyncJobDao; import com.epmet.entity.IcSyncJobEntity; import com.epmet.service.DataSyncConfigService; import lombok.extern.slf4j.Slf4j; -import org.redisson.api.RLock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.TimeUnit; - -import static com.epmet.constant.EpidemicConstant.JOB_TYPE_NAT; import static com.epmet.constant.EpidemicConstant.JOB_TYPE_VACCINE; -// 烟台核酸检测数据同步处理器 +/** + * @Description 烟台核酸检测数据同步处理器 + * @Author wxz + * @Date 2022/11/20 上午11:55 + */ @Component @Slf4j -public class YanTaiVaccineSyncProcessor { - - public static final int MAX_EXECUTING_COUNT = 3; - - @Autowired - private ExecutorService executorService; - - @Autowired - private IcSyncJobDao icSyncJobDao; +public class YanTaiVaccineSyncProcessor extends AbstractDataSyncJobProcessor { @Autowired private DataSyncConfigService dataSyncConfigService; - @Autowired - private DistributedLock distributedLock; - - @Autowired - RedisUtils redisUtils; - /** * @Description 定时扫描和执行同步任务【疫苗接种】 * @Author zxc @@ -51,62 +29,31 @@ public class YanTaiVaccineSyncProcessor { */ @Scheduled(cron = "0/10 * * * * ? ") public void scanJobs() { - LambdaQueryWrapper executingListQuery = new LambdaQueryWrapper<>(); - executingListQuery.eq(IcSyncJobEntity::getOperationStatus, EpidemicConstant.OPERATION_STATUS_PROCESSING); - List executingJobList = icSyncJobDao.selectList(executingListQuery); - if (!CollectionUtils.isEmpty(executingJobList) && executingJobList.size() >= MAX_EXECUTING_COUNT) { - // 最多只允许同时3条线程运行 - return; - } - int executingCount = executingJobList.size(); - // 还可以运行几条线程 - int leftCount = MAX_EXECUTING_COUNT - executingCount; - RLock lock = null; - try { - lock = distributedLock.getLock("data:sync:" + JOB_TYPE_VACCINE, 60L, 60L, TimeUnit.SECONDS); - // 查询可执行的任务列表,并且异步执行 - List icSyncJobToExec = icSyncJobDao.selectExecutableJobList( - EpidemicConstant.JOB_TYPE_VACCINE, - leftCount); - if (!CollectionUtils.isEmpty(icSyncJobToExec)) { - // 异步提交任务 - for (IcSyncJobEntity jobEntity : icSyncJobToExec) { - updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_PROCESSING); - executorService.submit(() -> { - // 将此任务状态修改为执行中 - try { - dataSyncConfigService.execSyncByJobProcessor(jobEntity); - } finally { - // 更新任务状态为结束 - updateJobStatus(jobEntity.getId(), EpidemicConstant.OPERATION_STATUS_FINISH); - } - }); - } - } - } catch (Exception e) { - log.error("【异步数据更新】出错:{}", ExceptionUtils.getErrorStackTrace(e)); - } finally { - if (lock != null) { - lock.unlock(); - } - } + scanAndExecWaitingJobs(); } - /** - * 更新任务状态 - * @author wxz - * @date 2022/11/8 下午8:25 - * @param id - * @param status + @Override + protected void execJobTask(IcSyncJobEntity jobEntity) { + dataSyncConfigService.execSyncByJobProcessor(jobEntity); + } - */ - private void updateJobStatus(String id, String status) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(IcSyncJobEntity::getId, id); + @Override + protected String getDistributeLockKey() { + return "data:sync:" + JOB_TYPE_VACCINE; + } + + @Override + protected String getJobType() { + return EpidemicConstant.JOB_TYPE_VACCINE; + } - IcSyncJobEntity updateEntity = new IcSyncJobEntity(); - updateEntity.setOperationStatus(status); - icSyncJobDao.update(updateEntity, query); + @Override + protected long getDistributeLockLeaseTime() { + return 60; } + @Override + protected long getDistributeLockWaitTime() { + return 60; + } } diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcSyncJobDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcSyncJobDao.xml index 6ed0708d43..4b266d56c2 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcSyncJobDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcSyncJobDao.xml @@ -3,8 +3,8 @@ - - select id, customer_id, org_id, @@ -13,6 +13,7 @@ job_type, operator_id, operation_status, + processor_ip, del_flag, revision, created_by, @@ -20,10 +21,16 @@ updated_by, updated_time from ic_sync_job - where OPERATION_STATUS = 'waiting' + where + DEL_FLAG = 0 + and OPERATION_STATUS = #{status} and JOB_TYPE = #{jobType} - and DEL_FLAG = 0 + + and PROCESSOR_IP = #{processorIp} + order by CREATED_TIME asc - limit #{itemCount} + + limit #{itemCount} + \ No newline at end of file From ef4e64c8e3abdc41dd41f55ffffa18d510b9d4f3 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Mon, 21 Nov 2022 09:37:49 +0800 Subject: [PATCH 005/111] =?UTF-8?q?=E8=A1=A5=E5=85=85sync=5Fjob=E8=A1=A8?= =?UTF-8?q?=E7=9A=84flyway=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V0.0.89__data_sync_job_create.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__data_sync_job_create.sql diff --git a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__data_sync_job_create.sql b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__data_sync_job_create.sql new file mode 100644 index 0000000000..e7ff4e1179 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.89__data_sync_job_create.sql @@ -0,0 +1,19 @@ +CREATE TABLE `ic_sync_job` ( + `ID` varchar(64) NOT NULL COMMENT 'ID', + `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID', + `ORG_ID` varchar(64) NOT NULL COMMENT '组织ID', + `PID` varchar(255) NOT NULL COMMENT '组织ID的上级', + `ORG_ID_PATH` varchar(1024) NOT NULL COMMENT '组织ID的所有上级,包括org_id', + `JOB_TYPE` varchar(255) NOT NULL COMMENT '任务类型,残疾:disability;死亡:death;核酸:nat;', + `OPERATOR_ID` varchar(255) NOT NULL COMMENT '操作员ID【staffId】', + `OPERATION_STATUS` varchar(255) DEFAULT NULL COMMENT '操作状态,等待中:waiting;进行中:processing;结束:finish', + `PROCESSOR_IP` varchar(15) DEFAULT NULL COMMENT '处理器实例ip', + `DEL_FLAG` int(11) NOT NULL, + `REVISION` int(11) NOT NULL COMMENT '乐观锁', + `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人', + `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', + `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人', + `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`ID`), + KEY `ORG_ID` (`ORG_ID`,`OPERATION_STATUS`,`JOB_TYPE`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='同步任务表' \ No newline at end of file From cfb4535ae6dac7f518ccf3b117283907eb5ab8c1 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Mon, 21 Nov 2022 10:06:36 +0800 Subject: [PATCH 006/111] =?UTF-8?q?=E7=A4=BE=E5=8C=BA=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=B1=85=E6=B0=91=E6=94=AF=E6=8C=81=E6=A8=A1?= =?UTF-8?q?=E7=B3=8A=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/IcResiUserDao.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index d0a425e4fe..cb23078577 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -201,9 +201,9 @@ AND ( - NAME = #{keyword} - or MOBILE = #{keyword} - or ID_CARD = #{keyword} + NAME like concat('%', #{keyword},'%') + or MOBILE like concat('%', #{keyword},'%') + or ID_CARD like concat('%', #{keyword},'%') ) From 263d01ce52ffa6dc7284a2c58e4426c3b35cd7cf Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Mon, 21 Nov 2022 16:52:04 +0800 Subject: [PATCH 007/111] =?UTF-8?q?=E6=88=BF=E5=B1=8B=E4=BF=A1=E6=81=AF-?= =?UTF-8?q?=E5=B0=8F=E5=8C=BA=E5=88=97=E8=A1=A8=E6=8E=92=E5=BA=8F=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=BA=E5=85=88=E6=8C=89=E7=85=A7=E7=BD=91=E6=A0=BC?= =?UTF-8?q?id=E5=8D=87=E5=BA=8F=EF=BC=8C=E6=9D=A5=E6=BA=90=E4=BA=8E?= =?UTF-8?q?=E5=B0=8F=E5=AF=A8=E5=AD=90=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/IcNeighborHoodDao.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml index 0120d31bb0..326940bdd9 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcNeighborHoodDao.xml @@ -160,7 +160,8 @@ AND a.DEL_FLAG = '0' - ORDER BY CAST(a.NEIGHBOR_HOOD_NAME AS SIGNED),CONVERT(a.NEIGHBOR_HOOD_NAME using gbk) + ORDER BY a.GRID_ID asc, + CAST(a.NEIGHBOR_HOOD_NAME AS SIGNED),CONVERT(a.NEIGHBOR_HOOD_NAME using gbk) SELECT - r.*, - a.ID AS epidemicId, - r.CREATED_TIME AS reportTime, - r.ID_CARD as realIdCard, - r.MOBILE as realMobile, - ( - CASE - WHEN r.USER_TYPE = 'resi' THEN IFNULL(ubi.REAL_NAME, '无') - ELSE IFNULL(cs.REAL_NAME, '无') - END - ) AS createdByName + r.*, + a.ID AS epidemicId, + r.CREATED_TIME AS reportTime, + r.ID_CARD as realIdCard, + r.MOBILE as realMobile, + ( + CASE + WHEN r.USER_TYPE = 'resi' THEN IFNULL(ubi.REAL_NAME, '无') + ELSE IFNULL(cs.REAL_NAME, '无') + END + ) AS createdByName, + CONCAT(r.via_province,r.via_city,r.via_city) via FROM ic_trip_report_record r LEFT JOIN ( select * from ic_epidemic_special_attention GROUP BY id_card ORDER BY created_time DESC From b0c7b23fdb8f222905fbab0561f14ab2121fe6f8 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Wed, 23 Nov 2022 08:56:23 +0800 Subject: [PATCH 017/111] =?UTF-8?q?=E8=A1=8C=E7=A8=8B=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E6=9A=82=E6=8F=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/dto/YTTripReportListDTO.java | 19 ++ .../com/epmet/constant/EpidemicConstant.java | 2 + .../com/epmet/dao/IcTripReportRecordDao.java | 16 ++ .../YanTaiTripReportSyncProcessor.java | 60 ++++++ .../impl/DataSyncConfigServiceImpl.java | 145 ++++++++----- .../mapper/IcTripReportRecordDao.xml | 200 ++++++++++++++++++ 6 files changed, 387 insertions(+), 55 deletions(-) create mode 100644 epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTTripReportListDTO.java create mode 100644 epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTTripReportListDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTTripReportListDTO.java new file mode 100644 index 0000000000..5d0f034489 --- /dev/null +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/YTTripReportListDTO.java @@ -0,0 +1,19 @@ +package com.epmet.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author zxc + * @DateTime 2022/11/11 15:05 + */ +@Data +public class YTTripReportListDTO implements Serializable { + private static final long serialVersionUID = -5583350209850076659L; + + private String cardno; + + + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java index 3b843838e4..49da3ee0b9 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/constant/EpidemicConstant.java @@ -18,9 +18,11 @@ public interface EpidemicConstant { * ic_sync_job 任务类型 * 核酸检测 * 疫苗接种 + * 行程上报 */ String JOB_TYPE_NAT = "nat"; String JOB_TYPE_VACCINE = "vaccine"; + String JOB_TYPE_TRIP_REPORT = "trip_report"; // 居民信息对比 String JOB_TYPE_COMPARISON_RESI = "comparison_resi"; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcTripReportRecordDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcTripReportRecordDao.java index fc7a3ce96e..d22249c42f 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcTripReportRecordDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcTripReportRecordDao.java @@ -63,4 +63,20 @@ public interface IcTripReportRecordDao extends BaseDao */ List emphasisTripPieDetail(EmphasisTripPieDetailFormDTO formDTO); + /** + * @Description 根据身份证查询存在的行程上报记录ID + * @param idCards + * @Author zxc + * @Date 2022/11/22 16:16 + */ + List getExistsTripReport(@Param("idCards")List idCards); + + /** + * @Description 批量更新行程上报 + * @param list + * @Author zxc + * @Date 2022/11/22 16:54 + */ + void updateTripReportList(@Param("list")List list); + } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java new file mode 100644 index 0000000000..91d253ed68 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java @@ -0,0 +1,60 @@ +package com.epmet.processor; + +import com.epmet.constant.EpidemicConstant; +import com.epmet.entity.IcSyncJobEntity; +import com.epmet.service.DataSyncConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import static com.epmet.constant.EpidemicConstant.JOB_TYPE_TRIP_REPORT; +import static com.epmet.constant.EpidemicConstant.JOB_TYPE_VACCINE; + +/** + * @Description 烟台行程上报数据同步处理器 + * @Author zxc + * @Date 2022/11/22 14:08 + */ +@Component +@Slf4j +public class YanTaiTripReportSyncProcessor extends AbstractDataSyncJobProcessor { + + @Autowired + private DataSyncConfigService dataSyncConfigService; + + /** + * @Description 定时扫描和执行同步任务【行程上报】 + * @Author zxc + * @Date 2022/11/11 10:32 + */ + @Scheduled(cron = "0/10 * * * * ? ") + public void scanJobs() { + scanAndExecWaitingJobs(); + } + + @Override + protected void execJobTask(IcSyncJobEntity jobEntity) { + dataSyncConfigService.execSyncByJobProcessor(jobEntity); + } + + @Override + protected String getDistributeLockKey() { + return "data:sync:" + JOB_TYPE_TRIP_REPORT; + } + + @Override + protected String getJobType() { + return EpidemicConstant.JOB_TYPE_TRIP_REPORT; + } + + @Override + protected long getDistributeLockLeaseTime() { + return 60; + } + + @Override + protected long getDistributeLockWaitTime() { + return 60; + } +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java index b8b9300d2b..2cf5d3ae80 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java @@ -28,10 +28,7 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.YtHsResUtils; import com.epmet.constant.EpidemicConstant; -import com.epmet.dao.DataSyncConfigDao; -import com.epmet.dao.IcNatDao; -import com.epmet.dao.IcSyncJobDao; -import com.epmet.dao.IcVaccineDao; +import com.epmet.dao.*; import com.epmet.dto.DataSyncConfigDTO; import com.epmet.dto.DataSyncRecordDeathDTO; import com.epmet.dto.DataSyncRecordDisabilityDTO; @@ -105,6 +102,10 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl resiInfos, String customerId, String isSync){ + // 将居民信息转化为的map + Map idCardAndResiInfoMap = resiInfos.stream().collect(Collectors.toMap(resi -> resi.getIdCard(), Function.identity())); + List idCards = new ArrayList<>(idCardAndResiInfoMap.keySet()); + Map args = new HashMap<>(); + args.put("idcards", idCards); + List> tripReportList = yantaiNamedParamLantuJdbcTemplate.queryForList( + "select card_id as idCard, address as presentAddress, i_flag, i_time, i_type, i_date,i_id, travel_code_abnormal, health_code_abnormal, twon_name, county_name, city_name, province_name,\n" + + "carry_hesuan_proof, leave_the_risk_area_time, come_area_full, report_street, arrive_time, shift, come_mode, covid_flag, sex, age,\n" + + "area, card_type, invalid_time, travel_code_img, arrive_lu_time, destination_station, carry_vehicle_number_color, carry_vehicle_number,\n" + + "carry_vehicle, registered_residence_address, registered_residence_city, travel_personnel, via_county, via_city, via_province,\n" + + "nonlocal_residence_history, declaration_status, two_code_one_report_status, detection_abnormal, from t_ymjz_info where cardno in (:idcards)", args); + if (CollectionUtils.isNotEmpty(tripReportList)){ + List>> partition = ListUtils.partition(tripReportList, NumConstant.ONE_HUNDRED); + partition.forEach(p -> { + // 要更新的 + List needUpdate = new ArrayList<>(); + // 要新增的 + List entities = ConvertUtils.sourceToTarget(p, IcTripReportRecordEntity.class); + // 数据库存在的 + List existsTripReport = icTripReportRecordDao.getExistsTripReport(idCards); + if (CollectionUtils.isNotEmpty(existsTripReport)){ + // 要更新的 + existsTripReport.forEach(etr -> entities.stream().filter(e -> e.getIId().equals(etr)).forEach(e -> { + needUpdate.add(e); + })); + // 要新增的 + existsTripReport.forEach(etr -> { + Iterator iterator = entities.iterator(); + while (iterator.hasNext()){ + IcTripReportRecordEntity next = iterator.next(); + if (next.getIId().equals(etr)){ + iterator.remove(); + } + } + }); + if (CollectionUtils.isNotEmpty(entities)){ + entities.forEach(e -> { + + }); + entities.forEach(e -> resiInfos.stream().filter(r ->r.getIdCard().equals(e.getIdCard())).forEach(r -> { + e.setGridId(r.getGridId()); + e.setCustomerId(r.getCustomerId()); + e.setAgencyId(r.getAgencyId()); + e.setPids(r.getPids()); + e.setName(r.getName()); + e.setMobile(r.getMobile()); + e.setUserId(r.getUserId()); + e.setUserType("ytPull"); + + + })); + icTripReportRecordService.insertBatch(entities); + } + if (CollectionUtils.isNotEmpty(needUpdate)){ + // 因为更新字段较多,所以分批操作 + List> needs = ListUtils.partition(needUpdate, NumConstant.TWENTY); + needs.forEach(n -> { + updateTripReportList(n); + }); + } + } + }); + }else { + log.warn("未拉取到行程上报信息!"); + } + } + + @Transactional(rollbackFor = Exception.class) + public void updateTripReportList(List need){ + icTripReportRecordDao.updateTripReportList(need); + } + /** * @Description 疫苗接种信息处理 * @param resiInfos @@ -1076,38 +1162,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl args = new HashMap<>(); args.put("idcards", idCards); - // todo 疫苗接种视图 - String json = "[\n" + - " {\n" + - " \"id\": \"751956862490071040\",\n" + - " \"cardno\": \"370785195001012558\",\n" + - " \"name\": \"李国玺\",\n" + - " \"data\":\n" + - " {\n" + - " \"vaccineList\":\n" + - " [\n" + - " {\n" + - " \"vaccineCount\": \"1\",\n" + - " \"inoculateDate\": \"2021-04-24 16:02:46\",\n" + - " \"lastStationName\": \"烟台市只楚医院临时接种点\"\n" + - " },\n" + - " {\n" + - " \"vaccineCount\": \"2\",\n" + - " \"inoculateDate\": \"2021-06-10 16:20:30\",\n" + - " \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" + - " },\n" + - " {\n" + - " \"vaccineCount\": \"3\",\n" + - " \"inoculateDate\": \"2021-12-10 15:12:24\",\n" + - " \"lastStationName\": \"烟台市芝罘岛医院临时接种点\"\n" + - " }\n" + - " ],\n" + - " \"flag\": 1\n" + - " },\n" + - " \"vaccineCount\": 3\n" + - " }\n" + - "]"; -// List vaccineList = JSON.parseArray(json,Map.class); List> vaccineList = yantaiNamedParamLantuJdbcTemplate.queryForList( "select data, name, cardno, vaccineCount from t_ymjz_info where cardno in (:idcards)", args); List ytVaccineListFromApi = new ArrayList<>(); @@ -1129,15 +1183,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl data = (Map) v.get("data"); - //if (data.containsKey("vaccineList")){ - // List vaccineList1 = JSON.parseArray(data.get("vaccineList").toString(), YTVaccineListDTO.class); - // vaccineList1.forEach(v1 -> { - // v1.setCardno(v.get("cardno").toString()); - // }); - // ytVaccineListDTOS.addAll(vaccineList1); - //} } }); List entities = new ArrayList<>(); @@ -1157,16 +1202,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl + + + update ic_trip_report_record set del_flag='1',UPDATED_BY=#{userId},UPDATED_TIME=NOW() WHERE AGENCY_ID=#{agencyId} @@ -161,4 +172,193 @@ ) + + + + UPDATE ic_trip_report_record + + + + when yt_id = #{l.ytId} then #{l.travelCodeAbnormal} + + + + + when yt_id = #{l.ytId} then #{l.healthCodeAbnormal} + + + + + when yt_id = #{l.ytId} then #{l.twonName} + + + + + when yt_id = #{l.ytId} then #{l.countyName} + + + + + when yt_id = #{l.ytId} then #{l.cityName} + + + + + when yt_id = #{l.ytId} then #{l.provinceName} + + + + + when yt_id = #{l.ytId} then #{l.carryHesuanProof} + + + + + when yt_id = #{l.ytId} then #{l.leaveTheRiskAreaTime} + + + + + when yt_id = #{l.ytId} then #{l.comeAreaFull} + + + + + when yt_id = #{l.ytId} then #{l.reportStreet} + + + + + when yt_id = #{l.ytId} then #{l.arriveTime} + + + + + when yt_id = #{l.ytId} then #{l.shift} + + + + + when yt_id = #{l.ytId} then #{l.comeMode} + + + + + when yt_id = #{l.ytId} then #{l.covidFlag} + + + + + when yt_id = #{l.ytId} then #{l.sex} + + + + + when yt_id = #{l.ytId} then #{l.age} + + + + + when yt_id = #{l.ytId} then #{l.area} + + + + + when yt_id = #{l.ytId} then #{l.cardType} + + + + + when yt_id = #{l.ytId} then #{l.invalidTime} + + + + + when yt_id = #{l.ytId} then #{l.travelCodeImg} + + + + + when yt_id = #{l.ytId} then #{l.arriveLuTime} + + + + + when yt_id = #{l.ytId} then #{l.destinationStation} + + + + + when yt_id = #{l.ytId} then #{l.carryVehicleNumberColor} + + + + + when yt_id = #{l.ytId} then #{l.carryVehicleNumber} + + + + + when yt_id = #{l.ytId} then #{l.carryVehicle} + + + + + when yt_id = #{l.ytId} then #{l.registeredResidenceAddress} + + + + + when yt_id = #{l.ytId} then #{l.registeredResidenceCity} + + + + + when yt_id = #{l.ytId} then #{l.travelPersonnel} + + + + + when yt_id = #{l.ytId} then #{l.viaCounty} + + + + + when yt_id = #{l.ytId} then #{l.viaCity} + + + + + when yt_id = #{l.ytId} then #{l.viaProvince} + + + + + when yt_id = #{l.ytId} then #{l.nonlocalResidenceHistory} + + + + + when yt_id = #{l.ytId} then #{l.declarationStatus} + + + + + when yt_id = #{l.ytId} then #{l.twoCodeOneReportStatus} + + + + + when yt_id = #{l.ytId} then #{l.detectionAbnormal} + + + UPDATED_TIME = NOW() + + WHERE DEL_FLAG = '0' + AND yt_id IN ( + + #{l.ytId} + + ) + \ No newline at end of file From 6999878ed9492a669110be75e877279c898deb78 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Wed, 23 Nov 2022 08:58:00 +0800 Subject: [PATCH 018/111] =?UTF-8?q?=E8=A1=8C=E7=A8=8B=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E6=9A=82=E6=8F=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/DataSyncConfigServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java index 2cf5d3ae80..be0b76bf00 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java @@ -1085,7 +1085,7 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl>> partition = ListUtils.partition(tripReportList, NumConstant.ONE_HUNDRED); partition.forEach(p -> { From 6c0e8165419acb0699dc4f41d5e8d6605e274801 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Wed, 23 Nov 2022 10:26:50 +0800 Subject: [PATCH 019/111] =?UTF-8?q?=E8=A1=8C=E7=A8=8B=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=8B=89=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/IcTripReportRecordEntity.java | 2 +- .../impl/DataSyncConfigServiceImpl.java | 21 ++++++++++++------- .../mapper/IcTripReportRecordDao.xml | 7 ++++++- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcTripReportRecordEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcTripReportRecordEntity.java index d9dee65f52..dcb1c01e0b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcTripReportRecordEntity.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcTripReportRecordEntity.java @@ -231,7 +231,7 @@ public class IcTripReportRecordEntity extends BaseEpmetEntity { /** * 车牌颜色【烟台】 */ - private String carryVehiclenumberColor; + private String carryVehicleNumberColor; /** * 目的地交通场站【烟台】 */ diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java index be0b76bf00..7c57304fa5 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java @@ -1080,12 +1080,21 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl idCards = new ArrayList<>(idCardAndResiInfoMap.keySet()); Map args = new HashMap<>(); args.put("idcards", idCards); + String json = "[\n" + + " {\"ytId\": \"10100101010\",\"travelCodeAbnormal\": \"否\",\"healthCodeAbnormal\": \"否\",\"twonName\": \"山东路\",\"countyName\": \"市北区\",\"cityName\": \"青岛市\",\"provinceName\": \"山东省\",\"carryHesuanProof\": \"是\",\"leaveTheRiskAreaTime\": \"2022-11-11 10:20:02\",\"comeAreaFull\": \"山东省青岛市市北区辽宁路街道\",\"reportStreet\": \"山东路街道\",\"arriveTime\": \"2022-11-20 11:11:11\",\"shift\": \"D909\",\"comeMode\": \"动车\",\"covidFlag\": \"1\",\"sex\": \"1\",\"age\": \"50\",\"area\": \"哈哈哈\",\"cardType\": \"身份证\",\"invalidTime\": \"2022-12-01 00:00:00\",\"travelCodeImg\": \"/aaa/aaa\",\"arriveLuTime\": \"2022-11-21 11:11:11\",\"destinationStation\": \"青岛北站\",\"carryVehicleNumberColor\": \"蓝\",\"carryVehicleNumber\": \"11111\",\"carryVehicle\": \"是\",\"registeredResidenceAddress\": \"山东青岛市北镇江路街道\",\"registeredResidenceCity\": \"山东青岛\",\"travelPersonnel\": \"无\",\"viaCounty\": \"市北区\",\"viaCity\": \"青岛市\",\"viaProvince\": \"山东省\",\"nonlocalResidenceHistory\": \"否\",\"declarationStatus\": \"1\",\"twoCodeOneReportStatus\": \"正常\",\"detectionAbnormal\": \"否\",\"detailAddress\": \"山东路163号\",\"idCard\": \"370785195001012558\"\n" + + " },\n" + + " {\"ytId\": \"02020191919\",\"travelCodeAbnormal\": \"否\",\"healthCodeAbnormal\": \"否\",\"twonName\": \"山东路\",\"countyName\": \"市北区\",\"cityName\": \"青岛市\",\"provinceName\": \"山东省\",\"carryHesuanProof\": \"是\",\"leaveTheRiskAreaTime\": \"2022-11-11 10:20:02\",\"comeAreaFull\": \"山东省青岛市市北区辽宁路街道\",\"reportStreet\": \"山东路街道\",\"arriveTime\": \"2022-11-20 11:11:11\",\"shift\": \"D909\",\"comeMode\": \"动车\",\"covidFlag\": \"1\",\"sex\": \"1\",\"age\": \"50\",\"area\": \"哈哈哈\",\"cardType\": \"身份证\",\"invalidTime\": \"2022-12-01 00:00:00\",\"travelCodeImg\": \"/aaa/aaa\",\"arriveLuTime\": \"2022-11-21 11:11:11\",\"destinationStation\": \"青岛北站\",\"carryVehicleNumberColor\": \"蓝\",\"carryVehicleNumber\": \"11111\",\"carryVehicle\": \"是\",\"registeredResidenceAddress\": \"山东青岛市北镇江路街道\",\"registeredResidenceCity\": \"山东青岛\",\"travelPersonnel\": \"无\",\"viaCounty\": \"市北区\",\"viaCity\": \"青岛市\",\"viaProvince\": \"山东省\",\"nonlocalResidenceHistory\": \"否\",\"declarationStatus\": \"1\",\"twoCodeOneReportStatus\": \"正常\",\"detectionAbnormal\": \"否\",\"detailAddress\": \"山东路163号\",\"idCard\": \"370785195101012558\"\n" + + " }\n" + + "]"; +// List> tripReportList = new ArrayList<>(); List> tripReportList = yantaiNamedParamLantuJdbcTemplate.queryForList( - "select card_id as idCard, address as presentAddress, i_flag, i_time, i_type, i_date,i_id, travel_code_abnormal, health_code_abnormal, twon_name, county_name, city_name, province_name,\n" + + "select card_id as idCard, address as detailAddress, i_flag, i_time, i_type, i_date,i_id, travel_code_abnormal, health_code_abnormal, twon_name, county_name, city_name, province_name,\n" + "carry_hesuan_proof, leave_the_risk_area_time, come_area_full, report_street, arrive_time, shift, come_mode, covid_flag, sex, age,\n" + "area, card_type, invalid_time, travel_code_img, arrive_lu_time, destination_station, carry_vehicle_number_color, carry_vehicle_number,\n" + "carry_vehicle, registered_residence_address, registered_residence_city, travel_personnel, via_county, via_city, via_province,\n" + "nonlocal_residence_history, declaration_status, two_code_one_report_status, detection_abnormal from t_ymjz_info where cardno in (:idcards)", args); + /*Map objectObjectHashMap = new HashMap<>(); + tripReportList.add(objectObjectHashMap);*/ if (CollectionUtils.isNotEmpty(tripReportList)){ List>> partition = ListUtils.partition(tripReportList, NumConstant.ONE_HUNDRED); partition.forEach(p -> { @@ -1093,11 +1102,12 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl needUpdate = new ArrayList<>(); // 要新增的 List entities = ConvertUtils.sourceToTarget(p, IcTripReportRecordEntity.class); +// List entities = JSON.parseArray(json,IcTripReportRecordEntity.class); // 数据库存在的 List existsTripReport = icTripReportRecordDao.getExistsTripReport(idCards); if (CollectionUtils.isNotEmpty(existsTripReport)){ // 要更新的 - existsTripReport.forEach(etr -> entities.stream().filter(e -> e.getIId().equals(etr)).forEach(e -> { + existsTripReport.forEach(etr -> entities.stream().filter(e -> e.getYtId().equals(etr)).forEach(e -> { needUpdate.add(e); })); // 要新增的 @@ -1105,15 +1115,12 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl iterator = entities.iterator(); while (iterator.hasNext()){ IcTripReportRecordEntity next = iterator.next(); - if (next.getIId().equals(etr)){ + if (next.getYtId().equals(etr)){ iterator.remove(); } } }); if (CollectionUtils.isNotEmpty(entities)){ - entities.forEach(e -> { - - }); entities.forEach(e -> resiInfos.stream().filter(r ->r.getIdCard().equals(e.getIdCard())).forEach(r -> { e.setGridId(r.getGridId()); e.setCustomerId(r.getCustomerId()); @@ -1123,8 +1130,6 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl + SELECT user_id AS "userId", - `password` AS "passWord" + `password` AS "passWord", + ENABLE_FLAG as enableFlag FROM `customer_staff` WHERE From 3945eb56a0e1d1ae56dfb74481822b7894caf268 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 23 Nov 2022 14:15:17 +0800 Subject: [PATCH 025/111] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=BF=A1=E6=81=AF=E5=A4=B1=E8=B4=A5,?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7[13146409824],=E5=AE=A2=E6=88=B7id:[?= =?UTF-8?q?45687aa479955f9d06204d415238f7cc],code[8005],msg[=E6=82=A8?= =?UTF-8?q?=E5=A5=BD=EF=BC=8C=E6=82=A8=E7=9A=84=E8=B4=A6=E6=88=B7=E5=B7=B2?= =?UTF-8?q?=E8=A2=AB=E5=86=BB=E7=BB=93=EF=BC=8C=E8=AF=B7=E8=81=94=E7=B3=BB?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E3=80=82]=20warn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/epmet/service/impl/SsoServiceImpl.java | 2 +- .../java/com/epmet/service/impl/ThirdLoginServiceImpl.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/SsoServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/SsoServiceImpl.java index 29283f6b01..1d8cbf8b4f 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/SsoServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/SsoServiceImpl.java @@ -478,7 +478,7 @@ public class SsoServiceImpl implements SsoService { customerStaffFormDTO.setMobile(formDTO.getMobile()); Result customerStaffDTOResult = epmetUserOpenFeignClient.getCustomerStaffInfo(customerStaffFormDTO); if (!customerStaffDTOResult.success() || null == customerStaffDTOResult.getData()) { - logger.error(String.format("获取工作人员信息失败,手机号[%s],客户id:[%s],code[%s],msg[%s]", formDTO.getMobile(), formDTO.getCustomerId(), customerStaffDTOResult.getCode(), customerStaffDTOResult.getMsg())); + logger.warn(String.format("获取工作人员信息失败,手机号[%s],客户id:[%s],code[%s],msg[%s]", formDTO.getMobile(), formDTO.getCustomerId(), customerStaffDTOResult.getCode(), customerStaffDTOResult.getMsg())); throw new RenException(customerStaffDTOResult.getCode()); } CustomerStaffDTO customerStaff = customerStaffDTOResult.getData(); diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java index 3d2c2ebee0..585835f705 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java @@ -12,7 +12,6 @@ import com.epmet.commons.rocketmq.messages.LoginMQMsg; import com.epmet.commons.tools.constant.AppClientConstant; 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.EnvEnum; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetException; @@ -20,7 +19,6 @@ 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.redis.common.CustomerDingDingRedis; -import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.redis.common.bean.DingMiniInfoCache; import com.epmet.commons.tools.security.dto.GovTokenDto; import com.epmet.commons.tools.security.dto.TokenDto; @@ -403,7 +401,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol customerStaffFormDTO.setMobile(formDTO.getMobile()); Result customerStaffDTOResult = epmetUserOpenFeignClient.getCustomerStaffInfo(customerStaffFormDTO); if (!customerStaffDTOResult.success() || null == customerStaffDTOResult.getData()) { - logger.error(String.format("获取工作人员信息失败,手机号[%s],客户id:[%s],code[%s],msg[%s]", formDTO.getMobile(), formDTO.getCustomerId(), customerStaffDTOResult.getCode(), customerStaffDTOResult.getMsg())); + logger.warn(String.format("获取工作人员信息失败,手机号[%s],客户id:[%s],code[%s],msg[%s]", formDTO.getMobile(), formDTO.getCustomerId(), customerStaffDTOResult.getCode(), customerStaffDTOResult.getMsg())); throw new RenException(customerStaffDTOResult.getCode()); } CustomerStaffDTO customerStaff = customerStaffDTOResult.getData(); From d720e1254978f4e914a40c161e0314963eb9514d Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 23 Nov 2022 14:27:06 +0800 Subject: [PATCH 026/111] =?UTF-8?q?=E8=A7=A3=E7=A6=81=EF=BC=9A/epmetuser/c?= =?UTF-8?q?ustomerstaff/enablestaff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/epmet/dto/form/EnableStaffFormDTO.java | 5 ++++- .../java/com/epmet/controller/CustomerStaffController.java | 1 + .../com/epmet/service/impl/CustomerStaffServiceImpl.java | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/EnableStaffFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/EnableStaffFormDTO.java index e2212b7608..52cda8c2a0 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/EnableStaffFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/EnableStaffFormDTO.java @@ -18,5 +18,8 @@ public class EnableStaffFormDTO implements Serializable { * 被解禁用户Id */ private String staffId; - + /** + * token中获取 + */ + private String customerId; } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java index 8bea2e4fbf..d037d1cd95 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java @@ -566,6 +566,7 @@ public class CustomerStaffController { @PostMapping("enablestaff") @RequirePermission(requirePermission = RequirePermissionEnum.ORG_STAFF_ENABLE) public Result enableStaff(@LoginUser TokenDto tokenDto, @RequestBody EnableStaffFormDTO fromDTO){ + fromDTO.setCustomerId(tokenDto.getCustomerId()); if (tokenDto.getUserId().equals(fromDTO.getStaffId())) { throw new RenException("工作人员自己不能解禁自己"); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java index 0bcb0b5eee..1ff4560c99 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java @@ -1055,6 +1055,8 @@ public class CustomerStaffServiceImpl extends BaseServiceImpl Date: Wed, 23 Nov 2022 14:53:29 +0800 Subject: [PATCH 027/111] =?UTF-8?q?=E6=88=90=E5=91=98=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=88=B0=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E9=87=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/IcResiUserServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index 3e341bf86b..fb249f1184 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -2196,7 +2196,8 @@ public class IcResiUserServiceImpl extends BaseServiceImpl icResiUserAttachmentService.save(item)); // 如果是已经存在的居民,并且是租客状态,需要更新原本的状态 if (NumConstant.ONE_STR.equals(formDTO.getType())) { - IcResiUserEntity entity = new IcResiUserEntity(); +// IcResiUserEntity entity = new IcResiUserEntity(); + IcResiUserEntity entity = ConvertUtils.sourceToTarget(formDTO.getUser(), IcResiUserEntity.class); entity.setId(resiUserId); entity.setIsTenant(NumConstant.ONE_STR); entity.setIsFloating(NumConstant.ONE_STR); From 1d79ab764d9ddaa4693d665ae639113012072dcf Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 23 Nov 2022 15:18:43 +0800 Subject: [PATCH 028/111] =?UTF-8?q?=E8=A7=A3=E7=A6=81=E6=94=BE=E5=BC=80?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/controller/CustomerStaffController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java index d037d1cd95..6d01efdd7b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java @@ -564,7 +564,7 @@ public class CustomerStaffController { * @author sun */ @PostMapping("enablestaff") - @RequirePermission(requirePermission = RequirePermissionEnum.ORG_STAFF_ENABLE) + // @RequirePermission(requirePermission = RequirePermissionEnum.ORG_STAFF_ENABLE) public Result enableStaff(@LoginUser TokenDto tokenDto, @RequestBody EnableStaffFormDTO fromDTO){ fromDTO.setCustomerId(tokenDto.getCustomerId()); if (tokenDto.getUserId().equals(fromDTO.getStaffId())) { From 9b05acb74b4f38cd974b20099385dd970fe24daa Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 23 Nov 2022 15:20:15 +0800 Subject: [PATCH 029/111] =?UTF-8?q?=E8=A7=A3=E7=A6=81=E6=94=BE=E5=BC=80?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/controller/CustomerStaffController.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java index 6d01efdd7b..45e9b098e7 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/CustomerStaffController.java @@ -19,8 +19,6 @@ package com.epmet.controller; import com.epmet.commons.rocketmq.messages.OrgOrStaffMQMsg; import com.epmet.commons.tools.annotation.LoginUser; -import com.epmet.commons.tools.annotation.RequirePermission; -import com.epmet.commons.tools.enums.RequirePermissionEnum; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; From 949f1d34587489a0da05329aa7512f8634ea8cc3 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 23 Nov 2022 15:47:00 +0800 Subject: [PATCH 030/111] =?UTF-8?q?=E6=9C=AA=E7=A6=81=E7=94=A8enable,?= =?UTF-8?q?=E5=B7=B2=E7=A6=81=E7=94=A8disabled?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/service/impl/GovWebServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java index e83b6e78e7..c03bf7c629 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/GovWebServiceImpl.java @@ -84,7 +84,8 @@ public class GovWebServiceImpl implements GovWebService, ResultDataResolver { logger.warn("根据手机号查询PC工作端登陆人员信息失败,返回10003账号不存在"); throw new RenException(EpmetErrorCode.ERR10003.getCode()); } - if ("diabled".equals(result.getData().getEnableFlag())) { + //未禁用enable,已禁用disabled + if ("disabled".equals(result.getData().getEnableFlag())) { throw new EpmetException(EpmetErrorCode.GOV_STAFF_DISABLED.getCode(), String.format("当前账号已被禁用staffId:%s", result.getData().getUserId()), EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); From 692274c6b2313ddf32411191347b284cae71580d Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 23 Nov 2022 16:16:03 +0800 Subject: [PATCH 031/111] =?UTF-8?q?8005:=E6=82=A8=E5=A5=BD=EF=BC=8C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=88=B0=E6=9C=9F=EF=BC=8C=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=86=BB=E7=BB=93=EF=BC=8C=E8=AF=B7=E8=81=94?= =?UTF-8?q?=E7=B3=BB=E7=AE=A1=E7=90=86=E5=91=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/commons/tools/exception/EpmetErrorCode.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 0463d290a2..499d4131b8 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java @@ -32,7 +32,8 @@ public enum EpmetErrorCode { CANNOT_CREATE_GROUP(8002, "只有党员和热心居民才能创建小组,请选择您的身份"), GROUP_ALREADY_EXISTED(8003,"组名已存在"), GOV_STAFF_NOT_EXISTS(8004,"手机号未注册,请联系贵单位管理员,确认其录入手机与您所持手机号相同"), - GOV_STAFF_DISABLED(8005,"您好,您的账户已被冻结,请联系管理员。"), + //您好,您的账户已被冻结,请联系管理员。=>您好,服务到期,账户暂时冻结,请联系管理员。 + GOV_STAFF_DISABLED(8005,"您好,服务到期,账户暂时冻结,请联系管理员。"), LOSE_EFFICACY(8006,"此邀请链接已过期"), ERROR_PHONE(8007,"请输入正确的手机号"), PLEASE_LOGIN(8008,"请重新登录"), From e02281d9571e4b7367e9006627af6f6ac7db1bfa Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Wed, 23 Nov 2022 17:42:39 +0800 Subject: [PATCH 032/111] =?UTF-8?q?=E8=A1=8C=E7=A8=8B=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/tools/utils/ConvertUtils.java | 16 ++++++++++++++++ .../impl/DataSyncConfigServiceImpl.java | 18 ++++++++++++------ .../resources/mapper/IcTripReportRecordDao.xml | 1 + 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ConvertUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ConvertUtils.java index 6d2e509797..ba53ab8c66 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ConvertUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ConvertUtils.java @@ -8,6 +8,7 @@ package com.epmet.commons.tools.utils; +import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -64,6 +65,21 @@ public class ConvertUtils { return targetList; } + public static List batchMapToEntity(List> maps, Class entity){ + if (CollectionUtils.isEmpty(maps)){ + return new ArrayList<>(); + } + List targetList = new ArrayList<>(maps.size()); + try { + for (Map map : maps) { + targetList.add(mapToEntity(map, entity)); + } + }catch (Exception e){ + logger.error("batchMapToEntity convert error ", e); + } + return targetList; + } + public static T mapToEntity(Map map, Class entity) { if (null == map){ return null; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java index 7c57304fa5..934132b517 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java @@ -1088,11 +1088,13 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl> tripReportList = new ArrayList<>(); List> tripReportList = yantaiNamedParamLantuJdbcTemplate.queryForList( - "select card_id as idCard, address as detailAddress, i_flag, i_time, i_type, i_date,i_id, travel_code_abnormal, health_code_abnormal, twon_name, county_name, city_name, province_name,\n" + - "carry_hesuan_proof, leave_the_risk_area_time, come_area_full, report_street, arrive_time, shift, come_mode, covid_flag, sex, age,\n" + - "area, card_type, invalid_time, travel_code_img, arrive_lu_time, destination_station, carry_vehicle_number_color, carry_vehicle_number,\n" + - "carry_vehicle, registered_residence_address, registered_residence_city, travel_personnel, via_county, via_city, via_province,\n" + - "nonlocal_residence_history, declaration_status, two_code_one_report_status, detection_abnormal from t_ymjz_info where cardno in (:idcards)", args); + "select id as ytId, card_id as idCard, address as detailAddress, i_flag as iFlag, i_time as iTime, i_type as iType, i_date as iDate,i_id as iId, " + + "travel_code_abnormal travelCodeAbnormal, health_code_abnormal healthCodeAbnormal, twon_name twonName, county_name countyName, " + + "city_name cityName, province_name provinceName, carry_hesuan_proof carryHesuanProof, leave_the_risk_area_time leaveTheRiskAreaTime, come_area_full comeAreaFull, " + + "report_street reportStreet, arrive_time arriveTime, shift, come_mode comeMode, covid_flag covidFlag, sex, age,\n" + + "area, card_type cardType, invalid_time invalidTime, travel_code_img travelCodeImg, arrive_lu_time arriveLuTime, destination_station destinationStation, carry_vehicle_number_color carryVehicleNumberColor, carry_vehicle_number carryVehicleNumber,\n" + + "carry_vehicle carryVehicle, registered_residence_address registeredResidenceAddress, registered_residence_city registeredResidenceCity, travel_personnel travelPersonnel, via_county viaCounty, via_city viaCity, via_province viaProvince,\n" + + "nonlocal_residence_history nonlocalResidenceHistory, declaration_status declarationStatus, two_code_one_report_status twoCodeOneReportStatus, detection_abnormal detectionAbnormal from v_baobei where card_id in (:idcards)", args); /*Map objectObjectHashMap = new HashMap<>(); tripReportList.add(objectObjectHashMap);*/ if (CollectionUtils.isNotEmpty(tripReportList)){ @@ -1101,7 +1103,11 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl needUpdate = new ArrayList<>(); // 要新增的 - List entities = ConvertUtils.sourceToTarget(p, IcTripReportRecordEntity.class); + List entities = ConvertUtils.batchMapToEntity(p, IcTripReportRecordEntity.class); + p.forEach(pp -> entities.stream().filter(ee -> ee.getIdCard().equals(pp.get("idCard"))).forEach(ee -> { + ee.setYtId(pp.get("ytId").toString()); + ee.setIId(pp.get("IId").toString()); + })); // List entities = JSON.parseArray(json,IcTripReportRecordEntity.class); // 数据库存在的 List existsTripReport = icTripReportRecordDao.getExistsTripReport(idCards); diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml index e4bf6c5465..88537c4250 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml @@ -158,6 +158,7 @@ yt_id FROM ic_trip_report_record WHERE DEL_FLAG = '0' + AND yt_id is not null and yt_id != '' AND ID_CARD IN ( #{idCard} ) From 936bab159692a9f83cc189d7d91824a4bb14d430 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 24 Nov 2022 09:25:30 +0800 Subject: [PATCH 033/111] /auth/thirdlogin/worklogin+/getmyorg --- .../service/impl/ThirdLoginServiceImpl.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java index 585835f705..09ef64f67b 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java @@ -10,6 +10,7 @@ import com.epmet.auth.constants.AuthOperationConstants; import com.epmet.common.token.constant.LoginConstant; import com.epmet.commons.rocketmq.messages.LoginMQMsg; 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.enums.EnvEnum; @@ -192,6 +193,19 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol throw new RenException(EpmetErrorCode.PLEASE_LOGIN.getCode()); } StaffLatestAgencyResultDTO staffLatestAgencyResultDTO = latestStaffWechat.getData(); + //2022.11.24校验下用户是否被禁用 + //2.1根据手机号查询到用户信息 + ThirdCustomerStaffFormDTO dto = new ThirdCustomerStaffFormDTO(); + dto.setCustomerId(staffLatestAgencyResultDTO.getCustomerId()); + dto.setMobile(staffLatestAgencyResultDTO.getMobile()); + Result> customerStaffResult = epmetUserOpenFeignClient.getCustsomerStaffByIdAndPhone(dto); + if (!customerStaffResult.success()) { + logger.error(String.format("手机验证码登录异常,手机号[%s],code[%s],msg[%s]", staffLatestAgencyResultDTO.getMobile(), customerStaffResult.getCode(), customerStaffResult.getMsg())); + throw new RenException(customerStaffResult.getCode()); + } + if("disabled".equals(customerStaffResult.getData().get(NumConstant.ZERO).getEnableFlag())){ + throw new EpmetException(EpmetErrorCode.GOV_STAFF_DISABLED.getCode(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); + } //3.记录staff_wechat this.savestaffwechat(staffLatestAgencyResultDTO.getStaffId(), userWechatDTO.getWxOpenId(), staffLatestAgencyResultDTO.getCustomerId()); @@ -538,7 +552,9 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol logger.error(String.format("手机验证码登录异常,手机号[%s],code[%s],msg[%s]", formDTO.getMobile(), customerStaffResult.getCode(), customerStaffResult.getMsg())); throw new RenException(customerStaffResult.getCode()); } - + if("disabled".equals(customerStaffResult.getData().get(NumConstant.ZERO).getEnableFlag())){ + throw new EpmetException(EpmetErrorCode.GOV_STAFF_DISABLED.getCode(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); + } //3、查询用户所有的组织信息 List customerIdList = new ArrayList<>(); for (CustomerStaffDTO customerStaffDTO : customerStaffResult.getData()) { From 48c03d8e0eb0f496d240e4bf180ba5a5e7c632bc Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 24 Nov 2022 09:52:28 +0800 Subject: [PATCH 034/111] /gov/mine/agency/getlatestcustomer --- .../service/impl/CustomerStaffAgencyServiceImpl.java | 8 ++++++++ .../src/main/java/com/epmet/dto/CustomerStaffDTO.java | 1 + 2 files changed, 9 insertions(+) diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java index 7ddbadf0f9..c37f13d8ef 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java @@ -22,6 +22,8 @@ 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; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; @@ -140,6 +142,12 @@ public class CustomerStaffAgencyServiceImpl extends BaseServiceImpl staffInfo = epmetUserFeignClient.getCustomerStaffInfoByUserId(customerStaffParam); + if(!staffInfo.success()||null==staffInfo.getData()){ + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"userId:"+userId+"customer_staff is null","获取用户信息异常"); + } + if("disabled".equals(staffInfo.getData().getEnableFlag())){ + throw new EpmetException(EpmetErrorCode.GOV_STAFF_DISABLED.getCode(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); + } resultDTO.setStaffHeadPhoto(staffInfo.getData().getHeadPhoto()); resultDTO.setGender(staffInfo.getData().getGender()); //获取客户名称 diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/CustomerStaffDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/CustomerStaffDTO.java index 9f697c584e..cd042877ab 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/CustomerStaffDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/CustomerStaffDTO.java @@ -126,6 +126,7 @@ public class CustomerStaffDTO implements Serializable { /** * 未禁用enable,已禁用diabled + * disabled */ private String enableFlag; From aedd993f3105b15fc2ee24d19d9313ebf62dd2ae Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 24 Nov 2022 09:56:20 +0800 Subject: [PATCH 035/111] =?UTF-8?q?thirdlogin/worklogin=E5=85=88=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/ThirdLoginServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java index 09ef64f67b..78ec8124d8 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java @@ -194,8 +194,8 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol } StaffLatestAgencyResultDTO staffLatestAgencyResultDTO = latestStaffWechat.getData(); //2022.11.24校验下用户是否被禁用 - //2.1根据手机号查询到用户信息 - ThirdCustomerStaffFormDTO dto = new ThirdCustomerStaffFormDTO(); + //2.1根据手机号查询到用户信息 前端不跳转,暂时先注释吧 + /* ThirdCustomerStaffFormDTO dto = new ThirdCustomerStaffFormDTO(); dto.setCustomerId(staffLatestAgencyResultDTO.getCustomerId()); dto.setMobile(staffLatestAgencyResultDTO.getMobile()); Result> customerStaffResult = epmetUserOpenFeignClient.getCustsomerStaffByIdAndPhone(dto); @@ -205,7 +205,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol } if("disabled".equals(customerStaffResult.getData().get(NumConstant.ZERO).getEnableFlag())){ throw new EpmetException(EpmetErrorCode.GOV_STAFF_DISABLED.getCode(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); - } + }*/ //3.记录staff_wechat this.savestaffwechat(staffLatestAgencyResultDTO.getStaffId(), userWechatDTO.getWxOpenId(), staffLatestAgencyResultDTO.getCustomerId()); From 5f0847e119a93575fe0c38420fd09157934e7b7c Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 24 Nov 2022 10:05:35 +0800 Subject: [PATCH 036/111] =?UTF-8?q?/agency/getlatestcustomer=EF=BC=8C10006?= =?UTF-8?q?=EF=BC=8C=E7=A6=81=E7=94=A8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java index c37f13d8ef..42028ec907 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java @@ -146,7 +146,7 @@ public class CustomerStaffAgencyServiceImpl extends BaseServiceImpl Date: Thu, 24 Nov 2022 10:15:36 +0800 Subject: [PATCH 037/111] =?UTF-8?q?/thirdlogin/getmyorgbypassword=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E5=AF=86=E7=A0=81=E7=99=BB=E5=BD=95=EF=BC=8C=E7=A6=81?= =?UTF-8?q?=E7=94=A8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/ThirdLoginServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java index 78ec8124d8..cef85d6713 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java @@ -587,12 +587,16 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol dto.setCustomerId(customer.getId()); dto.setMobile(formDTO.getMobile()); Result> customerStaffResult = epmetUserOpenFeignClient.getCustsomerStaffByIdAndPhone(dto); - if (!customerStaffResult.success()) { + if (!customerStaffResult.success()||CollectionUtils.isEmpty(customerStaffResult.getData())) { logger.warn(String.format("手机密码登录异常,手机号[%s],code[%s],msg[%s]", formDTO.getMobile(), customerStaffResult.getCode(), customerStaffResult.getMsg())); throw new RenException(customerStaffResult.getCode()); } //2、密码是否正确 List customerStaffList=customerStaffResult.getData(); + // 禁用的给予提示 + if("disabled".equals(customerStaffList.get(NumConstant.ZERO).getEnableFlag())){ + throw new EpmetException(EpmetErrorCode.GOV_STAFF_DISABLED.getCode(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); + } //3、查询用户所有的组织信息 List customerIdList = new ArrayList<>(); //是否设置过密码 From 8964058eecad6fcbc908a9bbc8416720e7207d2e Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 24 Nov 2022 10:24:38 +0800 Subject: [PATCH 038/111] =?UTF-8?q?/gov/mine/agency/getlatestcustomer?= =?UTF-8?q?=E8=BF=94=E5=9B=9E8005?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java index 42028ec907..c37f13d8ef 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerStaffAgencyServiceImpl.java @@ -146,7 +146,7 @@ public class CustomerStaffAgencyServiceImpl extends BaseServiceImpl Date: Thu, 24 Nov 2022 10:44:06 +0800 Subject: [PATCH 039/111] =?UTF-8?q?thirdlogin/worklogin=EF=BC=8C=E7=A6=81?= =?UTF-8?q?=E7=94=A8=E8=BF=94=E5=9B=9E8008=EF=BC=8C=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E5=A5=BD=E8=B7=B3=E8=BD=AC=E5=88=B0=E7=99=BB=E5=BD=95=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/ThirdLoginServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java index cef85d6713..07f60c2ecd 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/ThirdLoginServiceImpl.java @@ -195,7 +195,7 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol StaffLatestAgencyResultDTO staffLatestAgencyResultDTO = latestStaffWechat.getData(); //2022.11.24校验下用户是否被禁用 //2.1根据手机号查询到用户信息 前端不跳转,暂时先注释吧 - /* ThirdCustomerStaffFormDTO dto = new ThirdCustomerStaffFormDTO(); + ThirdCustomerStaffFormDTO dto = new ThirdCustomerStaffFormDTO(); dto.setCustomerId(staffLatestAgencyResultDTO.getCustomerId()); dto.setMobile(staffLatestAgencyResultDTO.getMobile()); Result> customerStaffResult = epmetUserOpenFeignClient.getCustsomerStaffByIdAndPhone(dto); @@ -203,9 +203,10 @@ public class ThirdLoginServiceImpl implements ThirdLoginService, ResultDataResol logger.error(String.format("手机验证码登录异常,手机号[%s],code[%s],msg[%s]", staffLatestAgencyResultDTO.getMobile(), customerStaffResult.getCode(), customerStaffResult.getMsg())); throw new RenException(customerStaffResult.getCode()); } + // 8008 前端会提示:登录失效,请重新登录 跳转到登录界面。所以这里写死返回8008. if("disabled".equals(customerStaffResult.getData().get(NumConstant.ZERO).getEnableFlag())){ - throw new EpmetException(EpmetErrorCode.GOV_STAFF_DISABLED.getCode(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); - }*/ + throw new EpmetException(EpmetErrorCode.PLEASE_LOGIN.getCode(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg(),EpmetErrorCode.GOV_STAFF_DISABLED.getMsg()); + } //3.记录staff_wechat this.savestaffwechat(staffLatestAgencyResultDTO.getStaffId(), userWechatDTO.getWxOpenId(), staffLatestAgencyResultDTO.getCustomerId()); From 96263c75e8ece9ec858c2e39b1d59b4e35779980 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Thu, 24 Nov 2022 16:21:44 +0800 Subject: [PATCH 040/111] =?UTF-8?q?=E6=A0=B8=E9=85=B8=E6=AF=94=E5=AF=B9?= =?UTF-8?q?=EF=BC=8C=E9=99=90=E5=88=B6=E6=89=8B=E6=9C=BA=E5=8F=B7=E6=9C=80?= =?UTF-8?q?=E9=95=BF32=E4=BD=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/excel/data/IcNatCompareRecordExcelData.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatCompareRecordExcelData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatCompareRecordExcelData.java index 0a1e02cbf7..3c0826f90c 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatCompareRecordExcelData.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/data/IcNatCompareRecordExcelData.java @@ -3,6 +3,7 @@ package com.epmet.excel.data; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import lombok.Data; +import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; @@ -22,6 +23,7 @@ public class IcNatCompareRecordExcelData { private String idCard; @NotBlank(message = "联系方式为必填项") + @Length(max = 32, message = "联系方式格式错误") @ExcelProperty("联系方式") private String mobile; From 304a7389ee81531e8a003e92513e6cd98a64f068 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Fri, 25 Nov 2022 10:12:28 +0800 Subject: [PATCH 041/111] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E9=94=99=E4=B9=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/dto/IcTripReportRecordDTO.java | 2 +- .../com/epmet/excel/IcYtTripReportRecordExportExcel.java | 8 +++++--- .../src/main/resources/mapper/IcTripReportRecordDao.xml | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcTripReportRecordDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcTripReportRecordDTO.java index 21c6642b16..0a236903bf 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcTripReportRecordDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcTripReportRecordDTO.java @@ -542,7 +542,7 @@ public class IcTripReportRecordDTO implements Serializable { */ @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date leaveTheRiskAreaTime; + private String leaveTheRiskAreaTime; /** * 是否携带48小时核算证明 是/否【烟台】 */ diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcYtTripReportRecordExportExcel.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcYtTripReportRecordExportExcel.java index 9ed7ee958c..5cd24b489d 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcYtTripReportRecordExportExcel.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/IcYtTripReportRecordExportExcel.java @@ -6,6 +6,7 @@ import com.alibaba.excel.annotation.write.style.HeadStyle; import com.alibaba.excel.enums.poi.FillPatternTypeEnum; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; @@ -54,19 +55,20 @@ public class IcYtTripReportRecordExportExcel implements Serializable { */ @ColumnWidth(30) @ExcelProperty(value = "来自地区") - private String comeAreaFull; + private String sourceAddress; /** * 来自地区详细地址 */ @ColumnWidth(30) @ExcelProperty(value = "来自地区详细地址") - private String sourceDetailAddress; + private String comeAreaFull; /** * 来到本地时间 */ @ColumnWidth(20) @ExcelProperty(value = "来到本地时间") @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") private String arriveTime; /** @@ -184,7 +186,7 @@ public class IcYtTripReportRecordExportExcel implements Serializable { @ColumnWidth(20) @ExcelProperty(value = "离开本地时间") @JsonFormat(pattern = "yyyy-MM-dd") - private String leaveDate; + private String leaveTheRiskAreaTime; /** * 备注 */ diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml index e4bf6c5465..f43978329f 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml @@ -44,7 +44,7 @@ ELSE IFNULL(cs.REAL_NAME, '无') END ) AS createdByName, - CONCAT(r.via_province,r.via_city,r.via_city) via + CONCAT(r.via_province,r.via_city,r.via_county) via FROM ic_trip_report_record r LEFT JOIN ( select * from ic_epidemic_special_attention GROUP BY id_card ORDER BY created_time DESC From 43d3deea67edc8e765169f524e7bc93078fe611a Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Fri, 25 Nov 2022 10:39:36 +0800 Subject: [PATCH 042/111] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/IcTripReportRecordDao.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml index 49e9ce76a7..8558874837 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcTripReportRecordDao.xml @@ -88,7 +88,7 @@ AND r.isolate_type = #{isolateType} ORDER BY - r.ARRIVE_DATE DESC, r.CREATED_TIME DESC + r.ARRIVE_DATE DESC, r.arrive_time DESC, r.CREATED_TIME DESC From 3033ba7551b3e5a1022e69416e2c21fba9d69436 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Fri, 25 Nov 2022 14:17:49 +0800 Subject: [PATCH 043/111] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ic=5Fresi=5Fcontract?= =?UTF-8?q?=5Finfo=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/dao/IcResiContractInfoDao.java | 16 +++++++ .../entity/IcResiContractInfoEntity.java | 44 +++++++++++++++++++ .../V0.0.93__ic_resi_contract_info.sql | 14 ++++++ .../mapper/IcResiContractInfoDao.xml | 21 +++++++++ 4 files changed, 95 insertions(+) create mode 100644 epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiContractInfoDao.java create mode 100644 epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiContractInfoEntity.java create mode 100644 epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql create mode 100644 epmet-user/epmet-user-server/src/main/resources/mapper/IcResiContractInfoDao.xml diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiContractInfoDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiContractInfoDao.java new file mode 100644 index 0000000000..d3ba7a1a5f --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiContractInfoDao.java @@ -0,0 +1,16 @@ +package com.epmet.dao; + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.entity.IcResiContractInfoEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 居民租房信息 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-11-25 + */ +@Mapper +public interface IcResiContractInfoDao extends BaseDao { + +} \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiContractInfoEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiContractInfoEntity.java new file mode 100644 index 0000000000..23ba9b4086 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiContractInfoEntity.java @@ -0,0 +1,44 @@ +package com.epmet.entity; + +import com.baomidou.mybatisplus.annotation.TableName; + +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 居民租房信息 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-11-25 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("ic_resi_contract_info") +public class IcResiContractInfoEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户Id customer.id + */ + private String customerId; + + /** + * 主表Id + */ + private String icResiUser; + + /** + * 合同开始日期 + */ + private String contractStartDate; + + /** + * 合同结束日期 + */ + private String contractEndDate; + +} diff --git a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql new file mode 100644 index 0000000000..a021fc908c --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql @@ -0,0 +1,14 @@ +CREATE TABLE `ic_resi_contract_info` ( + `ID` varchar(64) NOT NULL COMMENT '唯一标识', + `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id customer.id', + `IC_RESI_USER` varchar(64) NOT NULL COMMENT '主表Id', + `CONTRACT_START_DATE` varchar(32) DEFAULT NULL COMMENT '合同开始日期', + `CONTRACT_END_DATE` varchar(32) DEFAULT NULL COMMENT '合同结束日期', + `DEL_FLAG` int(11) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除', + `REVISION` int(11) NOT NULL COMMENT '乐观锁', + `CREATED_BY` varchar(64) NOT NULL COMMENT '创建人', + `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', + `UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人', + `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='居民租房信息'; \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiContractInfoDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiContractInfoDao.xml new file mode 100644 index 0000000000..4c3335c445 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiContractInfoDao.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7330b89d188f16f1bdbb3b7d0a07d50e6ebc8deb Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Fri, 25 Nov 2022 14:20:08 +0800 Subject: [PATCH 044/111] =?UTF-8?q?=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=A8=A1=E6=9D=BF=EF=BC=8C=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=A2=9E=E5=8A=A0=E5=90=88=E5=90=8C=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=E6=97=B6=E9=97=B4=E3=80=81=E5=90=88=E5=90=8C=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/ic_resi_import_template.xls | Bin 74752 -> 75776 bytes .../excel/ic_resi_import_template1125.xls | Bin 0 -> 74752 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template1125.xls diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls index b8d6f0689c14d2a0e5df7a4ee696e00db4e60189..5bf0b49099f8a0170718110d4c0f1e678bc90b61 100644 GIT binary patch literal 75776 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 ZoX%I!vC Date: Fri, 25 Nov 2022 15:04:00 +0800 Subject: [PATCH 045/111] ic_resi_rent_contract_info --- ...ContractInfoDao.java => IcResiRentContractInfoDao.java} | 4 ++-- ...ctInfoEntity.java => IcResiRentContractInfoEntity.java} | 7 ++----- .../src/main/java/com/epmet/enums/IcResiUserTableEnum.java | 3 ++- .../db/migration/V0.0.93__ic_resi_contract_info.sql | 2 +- ...siContractInfoDao.xml => IcResiRentContractInfoDao.xml} | 4 ++-- 5 files changed, 9 insertions(+), 11 deletions(-) rename epmet-user/epmet-user-server/src/main/java/com/epmet/dao/{IcResiContractInfoDao.java => IcResiRentContractInfoDao.java} (61%) rename epmet-user/epmet-user-server/src/main/java/com/epmet/entity/{IcResiContractInfoEntity.java => IcResiRentContractInfoEntity.java} (84%) rename epmet-user/epmet-user-server/src/main/resources/mapper/{IcResiContractInfoDao.xml => IcResiRentContractInfoDao.xml} (83%) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiContractInfoDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiRentContractInfoDao.java similarity index 61% rename from epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiContractInfoDao.java rename to epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiRentContractInfoDao.java index d3ba7a1a5f..0c04b9a1fb 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiContractInfoDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiRentContractInfoDao.java @@ -1,7 +1,7 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; -import com.epmet.entity.IcResiContractInfoEntity; +import com.epmet.entity.IcResiRentContractInfoEntity; import org.apache.ibatis.annotations.Mapper; /** @@ -11,6 +11,6 @@ import org.apache.ibatis.annotations.Mapper; * @since v1.0.0 2022-11-25 */ @Mapper -public interface IcResiContractInfoDao extends BaseDao { +public interface IcResiRentContractInfoDao extends BaseDao { } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiContractInfoEntity.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiRentContractInfoEntity.java similarity index 84% rename from epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiContractInfoEntity.java rename to epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiRentContractInfoEntity.java index 23ba9b4086..fa0b52fd48 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiContractInfoEntity.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcResiRentContractInfoEntity.java @@ -1,13 +1,10 @@ package com.epmet.entity; import com.baomidou.mybatisplus.annotation.TableName; - import com.epmet.commons.mybatis.entity.BaseEpmetEntity; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Date; - /** * 居民租房信息 * @@ -16,8 +13,8 @@ import java.util.Date; */ @Data @EqualsAndHashCode(callSuper=false) -@TableName("ic_resi_contract_info") -public class IcResiContractInfoEntity extends BaseEpmetEntity { +@TableName("ic_resi_rent_contract_info") +public class IcResiRentContractInfoEntity extends BaseEpmetEntity { private static final long serialVersionUID = 1L; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java index c921136c00..bfd81f56b0 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/enums/IcResiUserTableEnum.java @@ -22,6 +22,8 @@ public enum IcResiUserTableEnum { IC_VOLUNTEER("ic_volunteer","志愿者信息录入表", 6, 3, "IS_VOLUNTEER", true), IC_OLD_PEOPLE("ic_old_people","老年人信息录入表", 7, 2, "IS_OLD_PEOPLE", true), IC_SPECIAL("ic_special","特殊人群信息录入表", 8, 3, "IS_SPECIAL", true), + IC_TENANT("ic_resi_rent_contract_info","租户信息录入表", null, 2, "IS_TENANT", true), + // 下面的是:没有实际数据库表,在ic_resi_user中有一个标记,但是导入的时候是有单独的sheet的 IC_DBH("virtual_dbh","低保人员信息录入表", null, 2, "IS_DBH", false), @@ -34,7 +36,6 @@ public enum IcResiUserTableEnum { IC_CJ("virtual_cj","残疾人员信息录入表", null, 2, "IS_CJ", false), IC_DB("virtual_db","大病人员信息录入表", null, 2, "IS_DB", false), IC_MB("virtual_mb","慢病人员信息录入表", null, 2, "IS_MB", false), - IC_TENANT("virtual_tenant","租户信息录入表", null, 2, "IS_TENANT", false), IC_FLOATING("virtual_floating","流动人口信息录入表", null, 2, "IS_FLOATING", false), IC_XJC("virtual_xjc","新阶层人士信息录入表", null, 2, "IS_XJC", false); diff --git a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql index a021fc908c..b60abb22d1 100644 --- a/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql +++ b/epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.93__ic_resi_contract_info.sql @@ -1,4 +1,4 @@ -CREATE TABLE `ic_resi_contract_info` ( +CREATE TABLE `ic_resi_rent_contract_info` ( `ID` varchar(64) NOT NULL COMMENT '唯一标识', `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id customer.id', `IC_RESI_USER` varchar(64) NOT NULL COMMENT '主表Id', diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiContractInfoDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiRentContractInfoDao.xml similarity index 83% rename from epmet-user/epmet-user-server/src/main/resources/mapper/IcResiContractInfoDao.xml rename to epmet-user/epmet-user-server/src/main/resources/mapper/IcResiRentContractInfoDao.xml index 4c3335c445..25a47a8573 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiContractInfoDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiRentContractInfoDao.xml @@ -1,9 +1,9 @@ - + - + From 0614b18ac8b4740784d62ce1ab1f437b603d265c Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Fri, 25 Nov 2022 15:06:00 +0800 Subject: [PATCH 046/111] =?UTF-8?q?=E7=A7=9F=E6=88=BF=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/ic_resi_import_template.xls | Bin 75776 -> 75776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls index 5bf0b49099f8a0170718110d4c0f1e678bc90b61..2a779e49fc4e049d300f98fa44cb449091f57119 100644 GIT binary patch literal 75776 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 F{|BsM&zJxJ literal 75776 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 Date: Fri, 25 Nov 2022 16:43:22 +0800 Subject: [PATCH 047/111] =?UTF-8?q?=E7=A7=9F=E6=88=BF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=BD=95=E5=85=A5=E8=A1=A8=E6=A0=87=E9=A2=98=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=B1=85=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/ic_resi_import_template.xls | Bin 75776 -> 75776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls b/epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls index 2a779e49fc4e049d300f98fa44cb449091f57119..fc10d33a70cdcdd919c973abd4d2f66f973b99b0 100644 GIT binary patch delta 927 zcmZvadq~q!6vxlG`^~vE=NP3n9QH2C!tkH^qo>8Td}S)yYqnW2b5_!mUJSyr7ip*Z zg+y6tVDvC9wNQ{K3KJuHkOny|vNFmnjOK{y?zf-^UAX6-b3W&M@8NR2ZIZW5s`p6h z*|vecIx3a+Vmcp`66fM)8fP6jeTxIc(%_P;{G1n=>sI6ztjcnimw_1$xk5yX8JV4# z4H(n)5o;qs0ToO`HB5$qWa3!*u-OJO80i z-iN8n`9G?s*>(#ilfyn7@6cAeg=q~W+tXsbEE=GHD+@J8^e+sZV-V~-Xis2Tm55Mm zi7KVhd`8-t2rQ+pMak@GE?seFa98#h9d$cm=#evpCa=^`Qmu|_3I>tpx~?5@F2!tm z;TT3yg>#guVXn!zT*;I=Q?X3(N*o(-zT#af)bQfML}XeQMSB9ga#g$vi}+=Co=ThI z0Z3gBFvty_f@s~jT>z8H0QT+|V+48Wj_on5{4l@bwjrPSrVOd^Sds4Yae!bIfajD_ zG(p~O(5g*UyYI-1z2TtggCP0uMIb~1{X(STL?t=*ci(7 zm&j8McmkQ+V!(Z>Il7R}pfA&iW0^q@M&%ReL3l>$sxiw)O=!nMKEDZ5RP3SA*JZ+I ZO#T*!1J}(sEm939Tl?yKGe+TU^-rVSR7d~- delta 937 zcmZvZdq~q!6vxlG{-*QSbT-JQI5f3_GN^wlDJc@$mNu1&^>XcDZ_8IfVUHC_ql};v zuGDNwMMXjJD+m5D$_mUPNBto|&RG~3k}C=y1$BQvr59cJeeXHvbI$i(e%Boo+(F?^ znV_oZ9{l=|FqY` zlcy65-TQ3qmOoiC6wqFi0nbw%*XMMTt3aJ5!={4w@=PqA-W}Ng@0F6_#NY&-z2V7! z=<}fo>U8{%3bfp8z`0~IC*gfMU^cL^IP#hcrXOHhfJgfKb<|R7k#?>5Dq=0!ZPVzTvs!Akr7^TB=@~~J zmMGD2XFj#s5^0$;h7Q@5@_in4*zeOzhm|h73{tf#3lSw>=`?{kwsPB>WRLhH+@)dS zk}`nY3V=`5ygn*v_iT$78;<~F)B+qmrS$r!NIH0^CXu<%%DLpDIwpRo2l(6oP};22 z!u8MM#qC!C%5MPl-1YdT&uwY@nV0hz@|YQnCMvUL5S^r@jJk_5A7{ z33h3aQAck+*Z9zCuA4*6T)%~mG5s5*Pri9)_&c(qKIPS-q)= zsAItar5GM;VoW_a*&v{l_0hwphm?Xn!l7sQH@x-5gHxJD0WyC81O+5_%?K?V=~BxN zrUf-?9c6@j&q)pA^*TiFf;h})s3C1=j`w;TrZdc>lF%M+c067XFcW~vyK}rcEt;dU zMcHl4Z%x3NED2zWY{@?!X)XeT2kHS30lk-WScHfDA9a`;#U3X3hjsXxc{NG+h2{$h UZOOP;t#VtRRW Date: Fri, 25 Nov 2022 17:45:49 +0800 Subject: [PATCH 048/111] =?UTF-8?q?=E8=A1=8C=E7=A8=8B=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DataSyncConfigServiceImpl.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java index 934132b517..ae9abc8daf 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java @@ -1126,26 +1126,26 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl resiInfos.stream().filter(r ->r.getIdCard().equals(e.getIdCard())).forEach(r -> { - e.setGridId(r.getGridId()); - e.setCustomerId(r.getCustomerId()); - e.setAgencyId(r.getAgencyId()); - e.setPids(r.getPids()); - e.setName(r.getName()); - e.setMobile(r.getMobile()); - e.setUserId(r.getUserId()); - e.setUserType("ytPull"); - })); - icTripReportRecordService.insertBatch(entities); - } - if (CollectionUtils.isNotEmpty(needUpdate)){ - // 因为更新字段较多,所以分批操作 - List> needs = ListUtils.partition(needUpdate, NumConstant.TWENTY); - needs.forEach(n -> { - updateTripReportList(n); - }); - } + } + if (CollectionUtils.isNotEmpty(entities)){ + entities.forEach(e -> resiInfos.stream().filter(r ->r.getIdCard().equals(e.getIdCard())).forEach(r -> { + e.setGridId(r.getGridId()); + e.setCustomerId(r.getCustomerId()); + e.setAgencyId(r.getAgencyId()); + e.setPids(r.getPids()); + e.setName(r.getName()); + e.setMobile(r.getMobile()); + e.setUserId(r.getUserId()); + e.setUserType("ytPull"); + })); + icTripReportRecordService.insertBatch(entities); + } + if (CollectionUtils.isNotEmpty(needUpdate)){ + // 因为更新字段较多,所以分批操作 + List> needs = ListUtils.partition(needUpdate, NumConstant.TWENTY); + needs.forEach(n -> { + updateTripReportList(n); + }); } }); }else { From 86d1de24e7418485c1ab61ba41f450ee1aea3d80 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Mon, 28 Nov 2022 13:38:08 +0800 Subject: [PATCH 049/111] =?UTF-8?q?=E8=81=94=E5=BB=BA=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2test1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/IcPartyActivityServiceImpl.java | 8 +- .../resources/mapper/IcPartyActivityDao.xml | 81 ++++++++----------- 2 files changed, 36 insertions(+), 53 deletions(-) diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java index 2367f0bbb1..4d89c1bef8 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/IcPartyActivityServiceImpl.java @@ -102,14 +102,14 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl search(PartyActivityFormDTO formDTO) { - if (null == formDTO.getStartTime()) { + /*if (null == formDTO.getStartTime()) { Date startDate = DateUtils.parse("1900-01-01 00:00:00", DateUtils.DATE_TIME_PATTERN); formDTO.setStartTime(startDate); } if (null == formDTO.getEndTime()) { Date endDate = DateUtils.parse("2099-12-31 00:00:00", DateUtils.DATE_TIME_PATTERN); formDTO.setEndTime(endDate); - } + }*/ PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()); List list = baseDao.selectActivityList(formDTO); PageInfo pageInfo = new PageInfo<>(list); @@ -159,14 +159,14 @@ public class IcPartyActivityServiceImpl extends BaseServiceImpl list(PartyActivityFormDTO formDTO) { - if (null == formDTO.getStartTime()) { + /*if (null == formDTO.getStartTime()) { Date startDate = DateUtils.parse("1900-01-01 00:00:00", DateUtils.DATE_TIME_PATTERN); formDTO.setStartTime(startDate); } if (null == formDTO.getEndTime()) { Date endDate = DateUtils.parse("2099-12-31 00:00:00", DateUtils.DATE_TIME_PATTERN); formDTO.setEndTime(endDate); - } + }*/ List list = baseDao.selectActivityList(formDTO); List dtoList = ConvertUtils.sourceToTarget(list, IcPartyActivityDTO.class); diff --git a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcPartyActivityDao.xml b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcPartyActivityDao.xml index aee61f74dc..9fccc0de07 100644 --- a/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcPartyActivityDao.xml +++ b/epmet-module/epmet-heart/epmet-heart-server/src/main/resources/mapper/IcPartyActivityDao.xml @@ -51,55 +51,27 @@ a.ID, a.ACT_ID, a.GRID_ID, - b.unitId, - c.serviceMatter, - TITLE, - TARGET, - CONTENT, - PEOPLE_COUNT, - ACTIVITY_TIME, - ADDRESS, - LONGITUDE, - LATITUDE, - RESULT, + ur.UNIT_ID, + GROUP_CONCAT( sr.SERVICE_MATTER ) AS serviceMatter, + a.TITLE, + a.TARGET, + a.CONTENT, + a.PEOPLE_COUNT, + a.ACTIVITY_TIME, + a.ADDRESS, + a.LONGITUDE, + a.LATITUDE, + a.RESULT, a.AGENCY_ID, a.CUSTOMER_ID FROM ic_party_activity a - INNER JOIN ( - SELECT - ur.ACTIVITY_ID, - GROUP_CONCAT( ur.UNIT_ID ) AS unitId - FROM - ic_activity_unit_relation ur - WHERE - ur.DEL_FLAG = '0' - - AND (ur.AGENCY_ID = #{agencyId} or ur.PIDS like concat('%',#{agencyId},'%')) - - - AND ur.UNIT_ID = #{unitId} - - GROUP BY - ur.ACTIVITY_ID - ) b ON a.ID = b.ACTIVITY_ID - INNER JOIN ( - SELECT - sr.ACTIVITY_ID, - GROUP_CONCAT( sr.SERVICE_MATTER ) AS serviceMatter - FROM - ic_activity_service_relation sr - WHERE - sr.DEL_FLAG = '0' - - AND (sr.AGENCY_ID = #{agencyId} or sr.PIDS like concat('%',#{agencyId},'%')) - - - AND sr.SERVICE_MATTER = #{serviceMatter} - - GROUP BY - sr.ACTIVITY_ID - ) c ON a.ID = c.ACTIVITY_ID + left join ic_activity_unit_relation ur + on (ur.ACTIVITY_ID=a.id + and ur.del_flag='0') + left JOIN ic_activity_service_relation sr + on(a.ID = sr.ACTIVITY_ID + and sr.del_flag='0') WHERE a.DEL_FLAG = '0' @@ -109,11 +81,22 @@ AND a.GRID_ID = #{gridId} - AND TITLE LIKE concat('%', #{title}, '%') + AND a.TITLE LIKE concat('%', #{title}, '%') - AND ACTIVITY_TIME BETWEEN #{startTime} AND #{endTime} - ORDER BY ACTIVITY_TIME DESC - + + AND ur.UNIT_ID = #{unitId} + + + AND sr.SERVICE_MATTER = #{serviceMatter} + + + AND a.ACTIVITY_TIME = ]]> #{startTime} + + + AND a.ACTIVITY_TIME #{endTime} + + GROUP BY a.id + ORDER BY a.ACTIVITY_TIME DESC + + \ No newline at end of file From a7c0f0027f4422ba8c96f9de339da579c769e5af Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Mon, 28 Nov 2022 18:18:54 +0800 Subject: [PATCH 054/111] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8C=87=E5=AE=9A=E5=A4=A9=E6=95=B0=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E6=A0=B8=E9=85=B8=E6=A3=80=E6=B5=8B=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/controller/IcNatController.java | 21 +++++++++++++++++++ .../src/main/java/com/epmet/dao/IcNatDao.java | 3 +++ .../java/com/epmet/dao/IcNatRelationDao.java | 4 ++++ .../java/com/epmet/service/IcNatService.java | 8 +++++++ .../epmet/service/impl/IcNatServiceImpl.java | 11 ++++++++++ .../src/main/resources/mapper/IcNatDao.xml | 4 ++++ .../resources/mapper/IcNatRelationDao.xml | 4 ++++ 7 files changed, 55 insertions(+) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java index 2ea3ea881b..0852c02801 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java @@ -45,6 +45,7 @@ import java.io.InputStream; import java.net.URLEncoder; import java.nio.file.Path; import java.util.List; +import java.util.Map; import java.util.UUID; @@ -329,4 +330,24 @@ public class IcNatController implements ResultDataResolver { return new Result(); } + /** + * 清楚核酸检测记录(只保留近n天) + * @author wxz + * @date 2022/11/28 下午5:36 + * * @param map + * * @return Result + */ + @PostMapping("clearNatRecords") + public Result clearNatRecords(@RequestBody Map map) { + // 保留天数 + Integer retentionDays = (Integer) map.get("retentionDays"); + + // 如果是-1直接不做任何操作 + if (-1 != retentionDays) { + icNucleinService.clearNatRecords(retentionDays); + } + + return new Result(); + } + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java index 7b8b0a0ab7..ba20fdcc8b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatDao.java @@ -12,6 +12,7 @@ import com.epmet.entity.IcResiUserEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; /** @@ -86,4 +87,6 @@ public interface IcNatDao extends BaseDao { * @Date 2022/10/25 11:13 */ void updateRelationOther(); + + void deleteNatRecordsBeforeRetentionDays(Date criticleTime); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatRelationDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatRelationDao.java index 0b37f87121..aa9395f9cc 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatRelationDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcNatRelationDao.java @@ -5,6 +5,8 @@ import com.epmet.entity.IcNatRelationEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Date; + /** * 核酸记录关系表 * @@ -19,4 +21,6 @@ public interface IcNatRelationDao extends BaseDao { * @Description 关系数据删除--物理删除 **/ int delRelation(@Param("icNatId") String icNatId, @Param("agencyId") String agencyId); + + void deleteBeforeRetentionDays(Date criticleTime); } \ No newline at end of file diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcNatService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcNatService.java index b9f89d921e..72c0ab6a82 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcNatService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcNatService.java @@ -97,4 +97,12 @@ public interface IcNatService extends BaseService { void initNatLocal(); + /** + * 清理nat记录,目前不区分客户,后期需要区分可以再加 + * @author wxz + * @date 2022/11/28 下午5:39 + * * @param retentionDays 保留的天数(最近) + * + */ + void clearNatRecords(Integer retentionDays); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java index 78c935c4ca..cbcbaf427f 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNatServiceImpl.java @@ -733,4 +733,15 @@ public class IcNatServiceImpl extends BaseServiceImpl imp icNatRelationDao.insert(relation); } + @Override + public void clearNatRecords(Integer retentionDays) { + Date criticleTime = DateUtils.addDateDays(new Date(), 0 - retentionDays); + + // 1。删除nat核酸检测信息。NatTime建索引 + baseDao.deleteNatRecordsBeforeRetentionDays(criticleTime); + + // 2.删除关系信息 + // 没有记录业务时间,只能暂且按照创建时间来了,大不了多些脏数据。createdTime建索引! + icNatRelationDao.deleteBeforeRetentionDays(criticleTime); + } } diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml index 4a5872efd2..16d15f05a2 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml @@ -275,4 +275,8 @@ UPDATED_TIME = NOW() where user_type != 'import' + + + delete from ic_nat where SAMPLE_TIME #{criticleTime} + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatRelationDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatRelationDao.xml index 1857d13df7..bae7f15b27 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatRelationDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatRelationDao.xml @@ -13,4 +13,8 @@ + + delete from ic_nat_relation where CREATED_TIME #{criticleTime} + + \ No newline at end of file From 10814fd0e36bc8f83cf1d43a122ff0cf581c6731 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Tue, 29 Nov 2022 09:14:40 +0800 Subject: [PATCH 055/111] =?UTF-8?q?=E7=A6=85=E9=81=934689=EF=BC=9A=20?= =?UTF-8?q?=E5=85=9A=E7=BE=A4=E6=9C=8D=E5=8A=A1=E4=B8=AD=E5=BF=83=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E4=BA=8B=E9=A1=B9=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E9=80=89=E9=A1=B9=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/commons/tools/utils/DateUtils.java | 35 +++++++++++++++++++ .../dto/IcPartyServiceCenterMatterDTO.java | 7 +++- .../java/com/epmet/dto/MatterListDTO.java | 2 ++ .../constant/PartyServiceCenterConstant.java | 1 + .../IcPartyServiceCenterMatterEntity.java | 7 +++- .../impl/IcPartyServiceCenterServiceImpl.java | 12 ++++--- ...__alter_ic_party_service_center_matter.sql | 7 ++++ .../mapper/IcPartyServiceCenterDao.xml | 4 ++- 8 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java index 2c0fc380e6..8ddbea5066 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/DateUtils.java @@ -1077,4 +1077,39 @@ public class DateUtils { calendar.add(Calendar.DAY_OF_MONTH, day); return calendar.getTime(); } + + + /** + * @Description 获取自定义周几对应的日期 + * 例:num=7,str="1,2" 表示获取未来周天周一出现的日期,两个总共出现七次, + * 比如今天1号是周一则得到的值是1号7号8号14号15号21号22号7次的日期 + */ + public static List getCustomDay(Date startDate, int num, String str) { + List result = new ArrayList<>(); + Calendar rightNow = Calendar.getInstance(); + rightNow.setTime(startDate); + rightNow.add(Calendar.DATE,-1); + startDate = rightNow.getTime(); + Date tomorrow; + Integer tag = 1; + while (tag <= num){ + tomorrow = getTomorrow(startDate); + // 返回周末 + if (isContain(tomorrow, str)) { + result.add(new SimpleDateFormat(DATE_PATTERN).format(tomorrow)); + tag++; + } + startDate = tomorrow; + } + return result; + } + /** + * @Description 判断日期对应的周几在字符串是否包含 + * 例:当前时间为22.11.28为周一对应是一周的第二天,判断2在str字符串是否包含 + */ + private static boolean isContain(Date date, String str) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + return str.contains(String.valueOf(cal.get(Calendar.DAY_OF_WEEK))); + } } diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcPartyServiceCenterMatterDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcPartyServiceCenterMatterDTO.java index dcb9febc59..351b92e707 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcPartyServiceCenterMatterDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/IcPartyServiceCenterMatterDTO.java @@ -50,10 +50,15 @@ public class IcPartyServiceCenterMatterDTO implements Serializable { private String matterName; /** - * 预约类型,每天:everyDay,工作日:workDay,周末:weekend + * 预约类型,每天:everyDay,工作日:workDay,周末:weekend 自定义:custom */ private String appointmentType; + /** + * 类型为自定义时选择的周一~周末的时间(1-7逗号分割) + */ + private String customDay; + /** * 可预约开始时间 */ diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/MatterListDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/MatterListDTO.java index d3497bacd1..d7c397c374 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/MatterListDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/MatterListDTO.java @@ -40,6 +40,8 @@ public class MatterListDTO implements Serializable { private String matterImg; + private String customDay; + public MatterListDTO() { this.sort = NumConstant.ZERO; this.matterName = ""; diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/PartyServiceCenterConstant.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/PartyServiceCenterConstant.java index 50f6baed7e..67e25ee3f9 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/PartyServiceCenterConstant.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/constant/PartyServiceCenterConstant.java @@ -16,5 +16,6 @@ public interface PartyServiceCenterConstant { String APPOINTMENT_TYPE_EVERY_DAY = "everyDay"; String APPOINTMENT_TYPE_WORK_DAY = "workDay"; String APPOINTMENT_TYPE_WEEKEND = "weekend"; + String APPOINTMENT_TYPE_CUSTOM = "custom"; } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcPartyServiceCenterMatterEntity.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcPartyServiceCenterMatterEntity.java index 9248d827f2..07360e4bca 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcPartyServiceCenterMatterEntity.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcPartyServiceCenterMatterEntity.java @@ -46,10 +46,15 @@ public class IcPartyServiceCenterMatterEntity extends BaseEpmetEntity { private String matterName; /** - * 预约类型,每天:everyDay,工作日:workDay,周末:weekend + * 预约类型,每天:everyDay,工作日:workDay,周末:weekend 自定义:custom */ private String appointmentType; + /** + * 类型为自定义时选择的周一~周末的时间(1-7逗号分割) + */ + private String customDay; + /** * 可预约开始时间 */ diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPartyServiceCenterServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPartyServiceCenterServiceImpl.java index 14dac11c00..d07ece36b9 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPartyServiceCenterServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcPartyServiceCenterServiceImpl.java @@ -327,7 +327,7 @@ public class IcPartyServiceCenterServiceImpl extends BaseServiceImpl dateList = getDateList(entity.getAppointmentType()); + List dateList = getDateList(entity.getAppointmentType(), entity.getCustomDay()); Boolean s = false; for (String d : dateList) { if (d.equals(formDTO.getAppointmentDate())){ @@ -388,7 +388,7 @@ public class IcPartyServiceCenterServiceImpl extends BaseServiceImpl dateList = getDateList(entity.getAppointmentType()); + List dateList = getDateList(entity.getAppointmentType(), entity.getCustomDay()); Boolean s = false; for (String d : dateList) { if (d.equals(formDTO.getAppointmentDate())){ @@ -499,7 +499,7 @@ public class IcPartyServiceCenterServiceImpl extends BaseServiceImpl l = new LambdaQueryWrapper<>(); l.eq(IcMatterAppointmentRecordEntity::getMatterId,formDTO.getMatterId()) .eq(IcMatterAppointmentRecordEntity::getAppointmentDate,formDTO.getDate()) @@ -564,14 +564,16 @@ public class IcPartyServiceCenterServiceImpl extends BaseServiceImpl getDateList(String type) { + public List getDateList(String type, String customDay) { List result = new ArrayList<>(); if (type.equals(PartyServiceCenterConstant.APPOINTMENT_TYPE_EVERY_DAY)){ result = DateUtils.getEveryDayList(new Date(),NumConstant.SEVEN); }else if (type.equals(PartyServiceCenterConstant.APPOINTMENT_TYPE_WORK_DAY)){ result = DateUtils.getWorkDayList(new Date(),NumConstant.SEVEN); - }else { + }else if (type.equals(PartyServiceCenterConstant.APPOINTMENT_TYPE_WEEKEND)){ result = DateUtils.getWeekendDayList(new Date(),NumConstant.SEVEN); + }else if (type.equals(PartyServiceCenterConstant.APPOINTMENT_TYPE_CUSTOM)){ + result = DateUtils.getCustomDay(new Date(),NumConstant.SEVEN, customDay); } return result; } diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql b/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql new file mode 100644 index 0000000000..c68c1a47ad --- /dev/null +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql @@ -0,0 +1,7 @@ + +ALTER TABLE `ic_party_service_center_matter` +MODIFY COLUMN `APPOINTMENT_TYPE` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '预约类型,每天:everyDay,工作日:workDay,周末:weekend , 自定义:custom' AFTER `MATTER_NAME`, +ADD COLUMN `CUSTOM_DAY` varchar(32) NULL COMMENT '类型为自定义时选择的周一~周末的时间(1-7逗号分割)' AFTER `APPOINTMENT_TYPE`; + + + diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml index 51fa3a720c..18983d6244 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml @@ -27,8 +27,10 @@ case when cm.APPOINTMENT_TYPE = 'everyDay' THEN CONCAT('每天',' ', cm.START_TIME,'-',cm.END_TIME) when cm.APPOINTMENT_TYPE = 'workDay' THEN CONCAT('工作日',' ', cm.START_TIME,'-',cm.END_TIME) when cm.APPOINTMENT_TYPE = 'weekend' THEN CONCAT('周末',' ', cm.START_TIME,'-',cm.END_TIME) + when cm.APPOINTMENT_TYPE = 'custom' THEN CONCAT('自定义',' ', cm.START_TIME,'-',cm.END_TIME) ELSE CONCAT(cm.START_TIME,'-',cm.END_TIME) END AS allowTime, - IFNULL(cm.MATTER_IMG,'') AS matterImg + IFNULL(cm.MATTER_IMG,'') AS matterImg, + cm.custom_day AS customDay from ic_party_service_center_matter cm where del_flag = 0 and PARTY_SERVICE_CENTER_ID = #{partyServiceCenterId} From aa58f5468671346a34da061f5a6ebb94ffa43e05 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Tue, 29 Nov 2022 09:56:32 +0800 Subject: [PATCH 056/111] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=BF=94=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/dto/result/AllMattersResultDTO.java | 5 +++++ .../com/epmet/dto/result/AppointmentRecordResultDTO.java | 5 +++++ .../main/resources/mapper/IcMatterAppointmentRecordDao.xml | 3 ++- .../src/main/resources/mapper/IcPartyServiceCenterDao.xml | 4 +++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AllMattersResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AllMattersResultDTO.java index f229cc1d37..a1eea7289d 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AllMattersResultDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AllMattersResultDTO.java @@ -52,6 +52,11 @@ public class AllMattersResultDTO implements Serializable { */ private String appointmentType; + /** + * 类型为自定义时选择的周一~周末的时间(1-7逗号分割) + */ + private String customDay; + public AllMattersResultDTO() { this.matterName = ""; this.allowTime = ""; diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AppointmentRecordResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AppointmentRecordResultDTO.java index f7189534a4..373bff906c 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AppointmentRecordResultDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/AppointmentRecordResultDTO.java @@ -45,6 +45,11 @@ public class AppointmentRecordResultDTO implements Serializable { */ private String matterImg; + /** + * 类型为自定义时选择的周一~周末的时间(1-7逗号分割) + */ + private String customDay; + /** * 是否能取消预约 true:能,false:不能 */ diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcMatterAppointmentRecordDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcMatterAppointmentRecordDao.xml index 8f1677d3ed..240d8e0b97 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcMatterAppointmentRecordDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcMatterAppointmentRecordDao.xml @@ -63,7 +63,8 @@ ar.MATTER_ID as matterId, c.CENTER_NAME, c.ADDRESS, - cm.MATTER_IMG + cm.MATTER_IMG, + cm.CUSTOM_DAY as customDay FROM ic_matter_appointment_record ar LEFT JOIN ic_party_service_center_matter cm ON (cm.ID = ar.MATTER_ID AND cm.DEL_FLAG = 0) LEFT JOIN ic_party_service_center c ON (c.ID = cm.PARTY_SERVICE_CENTER_ID AND c.DEL_FLAG = 0) diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml index 18983d6244..daad3eb3e3 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcPartyServiceCenterDao.xml @@ -62,12 +62,14 @@ case when cm.APPOINTMENT_TYPE = 'everyDay' THEN CONCAT('每天',' ', cm.START_TIME,'-',cm.END_TIME) when cm.APPOINTMENT_TYPE = 'workDay' THEN CONCAT('工作日',' ', cm.START_TIME,'-',cm.END_TIME) when cm.APPOINTMENT_TYPE = 'weekend' THEN CONCAT('周末',' ', cm.START_TIME,'-',cm.END_TIME) + when cm.APPOINTMENT_TYPE = 'custom' THEN CONCAT('自定义',' ', cm.START_TIME,'-',cm.END_TIME) ELSE CONCAT(cm.START_TIME,'-',cm.END_TIME) END AS allowTime, IFNULL(cm.MATTER_IMG,'') AS matterImg, c.ADDRESS, c.WORK_PHONE, c.CENTER_NAME, - cm.APPOINTMENT_TYPE as appointmentType + cm.APPOINTMENT_TYPE as appointmentType, + cm.CUSTOM_DAY as customDay FROM ic_party_service_center c INNER JOIN ic_party_service_center_matter cm ON (cm.PARTY_SERVICE_CENTER_ID = c.ID AND cm.DEL_FLAG = 0) AND c.DEL_FLAG = 0 From 7515277f481430c490f9746d38ff71c72dbfc3bc Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Tue, 29 Nov 2022 10:06:12 +0800 Subject: [PATCH 057/111] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ChangeWelfareController.java | 70 +++++ .../java/com/epmet/dao/ChangeWelfareDao.java | 2 + .../java/com/epmet/dao/IcResiUserDao.java | 3 + .../epmet/excel/ChangeWelfareImportExcel.java | 63 +++++ .../excel/error/ChangeWelfareErrorExcel.java | 35 +++ .../epmet/service/ChangeWelfareService.java | 11 + .../impl/ChangeWelfareServiceImpl.java | 242 ++++++++++++++++++ .../resources/excel/pli_change_welfare.xlsx | Bin 0 -> 11358 bytes .../resources/mapper/ChangeWelfareDao.xml | 8 + .../main/resources/mapper/IcResiUserDao.xml | 4 + 10 files changed, 438 insertions(+) create mode 100644 epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareImportExcel.java create mode 100644 epmet-user/epmet-user-server/src/main/java/com/epmet/excel/error/ChangeWelfareErrorExcel.java create mode 100644 epmet-user/epmet-user-server/src/main/resources/excel/pli_change_welfare.xlsx diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeWelfareController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeWelfareController.java index c1cac171ec..671c4c8681 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeWelfareController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/ChangeWelfareController.java @@ -1,8 +1,13 @@ package com.epmet.controller; +import cn.afterturn.easypoi.excel.entity.TemplateExportParams; +import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.annotation.MaskResponse; import com.epmet.commons.tools.aop.NoRepeatSubmit; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.commons.tools.utils.ExcelPoiUtils; import com.epmet.commons.tools.utils.ExcelUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.AssertUtils; @@ -10,14 +15,23 @@ import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dto.ChangeWelfareDTO; import com.epmet.dto.CheckWelfareByIdCardDTO; +import com.epmet.dto.form.ImportTaskCommonFormDTO; +import com.epmet.dto.result.ImportTaskCommonResultDTO; import com.epmet.excel.ChangeWelfareExcel; +import com.epmet.feign.EpmetCommonServiceOpenFeignClient; import com.epmet.service.ChangeWelfareService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,11 +44,15 @@ import java.util.Map; */ @RestController @RequestMapping("changeWelfare") +@Slf4j public class ChangeWelfareController { @Autowired private ChangeWelfareService changeWelfareService; + @Autowired + private EpmetCommonServiceOpenFeignClient commonServiceOpenFeignClient; + @RequestMapping("page") @MaskResponse(fieldNames = {"mobile", "idCard"}, fieldsMaskType = {MaskResponse.MASK_TYPE_MOBILE, MaskResponse.MASK_TYPE_ID_CARD}) public Result> page(@RequestParam Map params){ @@ -109,4 +127,56 @@ public class ChangeWelfareController { return changeWelfareService.checkWelfareByIdCard(dto); } + /** + * Desc: 【福利人员】导入 + * @param + * @author wgf + * @date 2022/11/28 13:40 + */ + @PostMapping("pointImport") + public Result pointImport(@LoginUser TokenDto tokenDto, @RequestParam("file") MultipartFile file){ + if (file.isEmpty()) { + throw new EpmetException("请上传文件"); + } + // 校验文件类型 + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (!"xls".equals(extension) && !"xlsx".equals(extension)) { + throw new EpmetException("文件类型不匹配"); + } + + ImportTaskCommonFormDTO importTaskForm = new ImportTaskCommonFormDTO(); + importTaskForm.setOriginFileName(file.getOriginalFilename()); + importTaskForm.setOperatorId(tokenDto.getUserId()); + importTaskForm.setBizType(ImportTaskConstants.IC_POINT_NUCLEIC_MONITORING); + Result result = commonServiceOpenFeignClient.createImportTask(importTaskForm); + if (!result.success()) { + throw new EpmetException(9999,"存在进行中的导入"); + } + InputStream inputStream = null; + try { + inputStream = file.getInputStream(); + }catch (Exception e){ + ImportTaskCommonFormDTO input = new ImportTaskCommonFormDTO(); + input.setOperatorId(tokenDto.getUserId()); + input.setTaskId(result.getData().getTaskId()); + input.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL); + commonServiceOpenFeignClient.finishImportTask(input); + log.error("读取文件失败"); + } + changeWelfareService.importFile(tokenDto,inputStream,result.getData().getTaskId()); + return new Result(); + } + + + /** + * 导出模板 + * @param response + * @throws Exception + */ + @PostMapping("exporttemplate") + public void exportTemplate( HttpServletResponse response) throws Exception { + TemplateExportParams templatePath = new TemplateExportParams("excel/pli_change_welfare.xlsx"); + ExcelPoiUtils.exportExcel(templatePath ,new HashMap<>(),"福利人员模板",response); + } + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/ChangeWelfareDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/ChangeWelfareDao.java index c7f64d3231..14cc96ce66 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/ChangeWelfareDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/ChangeWelfareDao.java @@ -45,4 +45,6 @@ public interface ChangeWelfareDao extends BaseDao { * @return com.epmet.commons.tools.utils.Result */ void removeWelfare(ChangeWelfareDTO dto); + + List getAllWelfareIdCard(@Param("customerId") String customerId); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java index 23830a2e4c..e6845fefd3 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java @@ -444,4 +444,7 @@ public interface IcResiUserDao extends BaseDao { List getResiUserList(ComparisonFormDTO formDTO); List getUserByRenHu(RHZKStatisticsFormDTO formDTO); + + List getImportUserList(@Param("customerId")String customerId,@Param("agencyId")String agencyId); + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareImportExcel.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareImportExcel.java new file mode 100644 index 0000000000..992be96b4a --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/ChangeWelfareImportExcel.java @@ -0,0 +1,63 @@ +package com.epmet.excel; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.annotation.ExcelIgnore; +import lombok.Data; + +/** + * 福利表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-05-09 + */ +@Data +public class ChangeWelfareImportExcel { + + @Excel(name = "姓名") + private String name; + + @Excel(name = "证件号") + private String idCard; + + @Excel(name = "手机号") + private String mobile; + + @Excel(name = "性别",replace = { "男_1", "女_0", " _null"} ) + private String gender; + +// @Excel(name = "类型") +// private String type; + + @Excel(name = "福利原因") + private String joinReason; + +// @Excel(name = "客户ID") +// private String customerId; + + @ExcelIgnore + private Boolean addStatus = false; + + @ExcelIgnore + private Integer num; + + + /** + * 加入时间 + */ + @ExcelIgnore + private String joinDate; + + /** + * epmet用户主键 + */ + @ExcelIgnore + private String userId; + + /** + * epmet网格ID + */ + @ExcelIgnore + private String gridId; + + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/error/ChangeWelfareErrorExcel.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/error/ChangeWelfareErrorExcel.java new file mode 100644 index 0000000000..edadf94704 --- /dev/null +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/error/ChangeWelfareErrorExcel.java @@ -0,0 +1,35 @@ +package com.epmet.excel.error; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.annotation.ExcelIgnore; +import lombok.Data; + +/** + * 福利表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-05-09 + */ +@Data +public class ChangeWelfareErrorExcel { + + @Excel(name = "行号",width = 10) + private Integer num; + + @Excel(name = "姓名",width = 30) + private String name; + + @Excel(name = "证件号",width = 30) + private String idCard; + + @Excel(name = "手机号",width = 20) + private String mobile; + + @Excel(name = "福利原因",width = 40) + private String joinReason; + + @Excel(name = "错误信息", width = 200) + private String errorMsg; + + +} diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/ChangeWelfareService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/ChangeWelfareService.java index ab13abb470..184cfd9c9a 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/ChangeWelfareService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/ChangeWelfareService.java @@ -2,11 +2,13 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.ChangeWelfareDTO; import com.epmet.dto.CheckWelfareByIdCardDTO; import com.epmet.entity.ChangeWelfareEntity; +import java.io.InputStream; import java.util.List; import java.util.Map; @@ -104,4 +106,13 @@ public interface ChangeWelfareService extends BaseService { * @return com.epmet.commons.tools.utils.Result */ Result saveWelfareInfo(ChangeWelfareDTO dto); + + /** + * Desc: 【福利人员】导入 + * @param tokenDto + * @param inputStream + * @author wgf + * @date 2022/11/28 15:35 + */ + void importFile(TokenDto tokenDto, InputStream inputStream, String taskId); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java index 87cf889ab7..4b5d11c661 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java @@ -1,32 +1,67 @@ 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; +import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; +import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.exception.ExceptionUtils; 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.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.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; +import com.epmet.constants.ImportTaskConstants; import com.epmet.dao.ChangeWelfareDao; +import com.epmet.dao.IcResiUserDao; import com.epmet.dto.ChangeWelfareDTO; import com.epmet.dto.CheckWelfareByIdCardDTO; +import com.epmet.dto.IcResiUserDTO; +import com.epmet.dto.form.IcResiUserPageFormDTO; +import com.epmet.dto.form.ImportTaskCommonFormDTO; import com.epmet.dto.form.RentTenantDataFormDTO; import com.epmet.dto.result.RentTenantDataResultDTO; +import com.epmet.dto.result.UploadImgResultDTO; 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 lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.fileupload.FileItem; +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.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.commons.CommonsMultipartFile; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; /** * 福利表 @@ -35,6 +70,7 @@ import java.util.*; * @since v1.0.0 2022-05-09 */ @Service +@Slf4j public class ChangeWelfareServiceImpl extends BaseServiceImpl implements ChangeWelfareService { @Autowired @@ -46,6 +82,18 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl page(Map params) { params.put("customerId", loginUserUtil.getLoginUserCustomerId()); @@ -163,4 +211,198 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl errorInfo = new ArrayList<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + try { + List list = ExcelPoiUtils.importExcel(inputStream, 0,1,ChangeWelfareImportExcel.class); + if (CollectionUtils.isEmpty(list)){ + closeTask(taskId,tokenDto.getUserId(), ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL,""); + return; + } + CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId()); + if (null == staffInfo){ + throw new EpmetException("未查询到工作人员信息"+tokenDto.getUserId()); + } + AgencyInfoCache agencyInfo = CustomerOrgRedis.getAgencyInfo(staffInfo.getAgencyId()); + if (null == agencyInfo){ + throw new EpmetException("未查询到组织信息"+staffInfo.getAgencyId()); + } + // 获取所有居民信息 + IcResiUserPageFormDTO formDTO = new IcResiUserPageFormDTO(); + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setStaffId(tokenDto.getUserId()); + formDTO.setListType("resi"); + formDTO.setConditions(new ArrayList<>()); + + + // 获取居民信息 + CustomerStaffInfoCacheResult staffInfoCache = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId()); + List userList = icResiUserDao.getImportUserList(tokenDto.getCustomerId(),staffInfoCache.getAgencyId()); + // 获取证件号List + List idCardList = userList.stream().map(IcResiUserDTO::getIdCard).collect(Collectors.toList()); + + // 获取已存在福利人员 + List welfareList = baseDao.getAllWelfareIdCard(tokenDto.getCustomerId()); + + + for (int i = 0; i < list.size(); i++) { + list.get(i).setNum(i+1); + if (StringUtils.isBlank(list.get(i).getIdCard()) && !list.get(i).getAddStatus()){ + errorInfo.add(getErrorInfo(list.get(i), "证件号不能为空",i+1)); + list.get(i).setAddStatus(true); + continue; + } + // 校验是否为居民 + if (!idCardList.contains(list.get(i).getIdCard()) && !list.get(i).getAddStatus()){ + errorInfo.add(getErrorInfo(list.get(i), "身份证号为【" + list.get(i).getIdCard() + "】的居民信息未找到,请确认该居民信息存在",i+1)); + list.get(i).setAddStatus(true); + continue; + }else if(idCardList.contains(list.get(i).getIdCard()) && !list.get(i).getAddStatus()){ + // 组装居民数据 + for(IcResiUserDTO icResiUserDTO : userList){ + if(list.get(i).getIdCard().equals(icResiUserDTO.getIdCard())){ + list.get(i).setGender(icResiUserDTO.getGender()); + list.get(i).setMobile(icResiUserDTO.getMobile()); + list.get(i).setName(icResiUserDTO.getName()); + list.get(i).setUserId(icResiUserDTO.getId()); + list.get(i).setGridId(icResiUserDTO.getGridId()); + break; + } + } + list.get(i).setJoinDate(sdf.format(new Date())); + } + // 校验数据库是否存在该福利人员 + if (welfareList.contains(list.get(i).getIdCard()) && !list.get(i).getAddStatus()){ + errorInfo.add(getErrorInfo(list.get(i), "该福利人员已存在",i+1)); + list.get(i).setAddStatus(true); + continue; + } + + } + if (list.size() > errorInfo.size()){ + Map groupByIdCard = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getIdCard, Collectors.counting())); + groupByIdCard.forEach((idCard,count) -> { + if (Integer.valueOf(count.toString()).compareTo(1) != 0){ + for (ChangeWelfareImportExcel i : list) { + if (idCard.equals(i.getIdCard()) && !i.getAddStatus()){ + errorInfo.add(getErrorInfo(i,"数据重复",i.getNum())); + i.setAddStatus(true); + } + } + } + }); + } + Map> groupByStatus = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getAddStatus)); + List needInsert = groupByStatus.get(false); + if (CollectionUtils.isNotEmpty(needInsert)){ + List entities = ConvertUtils.sourceToTarget(needInsert, ChangeWelfareEntity.class); + entities.forEach(e -> { + // 设置客户ID + e.setCustomerId(tokenDto.getCustomerId()); + }); + insertBatch(entities); + } + if (CollectionUtils.isNotEmpty(errorInfo)){ + String url = importOssUpload(errorInfo, ChangeWelfareErrorExcel.class); + closeTask(taskId,tokenDto.getUserId(), ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL,url); + }else { + closeTask(taskId,tokenDto.getUserId(),ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS,""); + } + }catch (Exception e){ + log.error(e.getMessage()); + closeTask(taskId,tokenDto.getUserId(),ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL,""); + } + } + + /** + * Desc: 关闭任务 + * @param taskId + * @param userId + * @param status + * @param url + * @author wgf + * @date 2022/11/28 09:05 + */ + public void closeTask(String taskId,String userId,String status,String url){ + ImportTaskCommonFormDTO input = new ImportTaskCommonFormDTO(); + input.setOperatorId(userId); + input.setTaskId(taskId); + input.setProcessStatus(status); + input.setResultDescFilePath(url); + commonServiceOpenFeignClient.finishImportTask(input); + } + + /** + * Desc: 构造错误信息 + * @param dto + * @param info + * @param num + * @author wgf + * @date 2022/11/28 17:17 + */ + public ChangeWelfareErrorExcel getErrorInfo(ChangeWelfareImportExcel dto, String info, Integer num){ + ChangeWelfareErrorExcel result = ConvertUtils.sourceToTarget(dto, ChangeWelfareErrorExcel.class); + result.setErrorMsg(info); + result.setNum(num); + return result; + } + + /** + * Desc: 文件上传并返回url + * @param errorRows + * @param tClass + * @author zxc + * @date 2022/3/30 09:16 + */ + public String importOssUpload(Collection errorRows, Class tClass) throws IOException { + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("导入失败的数据列表","导入失败的数据列表"), + tClass, errorRows); + + // 文件名 + String resultDescFileName = UUID.randomUUID().toString().concat(".xls"); + + FileItemFactory factory = new DiskFileItemFactory(16, null); + FileItem fileItem = factory.createItem("file", ContentType.APPLICATION_OCTET_STREAM.toString(), true, resultDescFileName); + OutputStream os = fileItem.getOutputStream(); + Result 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上传结果描述文件失败"); + return null; + } + return uploadResult.getData().getUrl(); + } + } diff --git a/epmet-user/epmet-user-server/src/main/resources/excel/pli_change_welfare.xlsx b/epmet-user/epmet-user-server/src/main/resources/excel/pli_change_welfare.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a9aa1b3e6a83b3c49be25d8671c9f11f725b82b9 GIT binary patch literal 11358 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 MxO1FO{h + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index 2383d57e49..ab9c03c402 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -1483,5 +1483,9 @@ AND b.id is null order by a.pids ASC, a.created_time DESC + From 49f38281238a7d2e0edbaf595fac6945d0d987b6 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Tue, 29 Nov 2022 10:34:56 +0800 Subject: [PATCH 058/111] =?UTF-8?q?=E4=BA=BA=E6=88=BF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E7=AE=A1=E7=90=86=E5=8F=AA=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E7=8A=B6=E6=80=81=EF=BC=9Ashow=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/IcIndividualCategoryManageServiceImpl.java | 2 ++ .../src/main/resources/mapper/IcIndividualCategoryManageDao.xml | 1 + 2 files changed, 3 insertions(+) diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcIndividualCategoryManageServiceImpl.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcIndividualCategoryManageServiceImpl.java index 1a7df1ec11..ee777a9337 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcIndividualCategoryManageServiceImpl.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/IcIndividualCategoryManageServiceImpl.java @@ -105,6 +105,8 @@ public class IcIndividualCategoryManageServiceImpl extends BaseServiceImpl individualCategoryAllList(TokenDto tokenDto) { IcResiCategoryStatsConfigFormDTO formDTO = new IcResiCategoryStatsConfigFormDTO(); + //只查状态展示的 + formDTO.setStatus("show"); Result> listResult = operCustomizeOpenFeignClient.resiCategoryStatsListShowd(formDTO); if (!listResult.success()){ throw new EpmetException("查询客户下的人员类别失败..."); diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcIndividualCategoryManageDao.xml b/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcIndividualCategoryManageDao.xml index 47df855e0a..272b3097cb 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcIndividualCategoryManageDao.xml +++ b/epmet-module/oper-customize/oper-customize-server/src/main/resources/mapper/IcIndividualCategoryManageDao.xml @@ -22,6 +22,7 @@ INNER JOIN ic_resi_category_warn_config wc ON (sc.COLUMN_NAME = wc.COLUMN_NAME AND wc.DEL_FLAG = '0' AND wc.CUSTOMER_ID = sc.CUSTOMER_ID) WHERE cm.DEL_FLAG = 0 AND cm.USER_ID = #{userId} + AND sc.STATUS = 'show' ORDER BY cm.sort \ No newline at end of file From 8b7aeb94cf6b5619a8b2e6534c0e5af7f49fcead Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Tue, 29 Nov 2022 11:01:39 +0800 Subject: [PATCH 059/111] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=A0=B8=E9=85=B8=E6=A3=80=E6=B5=8B=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/IcNatDao.xml | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml index 16d15f05a2..049a806b55 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcNatDao.xml @@ -49,14 +49,19 @@ b.nat_address natAddress, b.test_tube_code testTubeCode FROM - ic_nat_relation a + ( + select IC_NAT_ID, AGENCY_ID, USER_TYPE, IS_LOCAL_RESI_USER + from ic_nat_relation + WHERE AGENCY_ID = #{agencyId} + and DEL_FLAG = '0' + and customer_id = #{customerId} + + AND is_local_resi_user = #{isResiUser} + + ) a INNER JOIN ic_nat b ON a.IC_NAT_ID = b.ID WHERE - a.DEL_FLAG = '0' - AND b.DEL_FLAG = '0' - AND a.customer_id = #{customerId} - - AND a.AGENCY_ID = #{agencyId} + b.DEL_FLAG = '0' AND b.name like concat('%', #{name}, '%') @@ -78,9 +83,6 @@ AND b.sample_time #{sampleEndTime} - - AND a.is_local_resi_user = #{isResiUser} - ORDER BY b.nat_time DESC, b.id ASC @@ -176,17 +178,17 @@ - + SELECT - ID AS id, - DEPT_CODE AS deptCode, - DEPT_NAME AS deptName, - DATA_NAME AS dataName, - switch_status AS switchStatus, - sort AS sort, - data_code AS dataCode, - customer_id as customerId - FROM data_sync_config - WHERE DEL_FLAG = 0 + c.ID AS id, + c.DEPT_CODE AS deptCode, + c.DEPT_NAME AS deptName, + c.DATA_NAME AS dataName, + c.switch_status AS switchStatus, + c.sort AS sort, + c.data_code AS dataCode, + c.customer_id as customerId + FROM data_sync_config c + WHERE c.DEL_FLAG = 0 - AND switch_status = #{switchStatus} + AND c.switch_status = #{switchStatus} - AND CUSTOMER_ID = #{customerId} + AND c.CUSTOMER_ID = #{customerId} - AND data_code = #{dataCode} + AND c.data_code = #{dataCode} - order by sort + order by CONVERT(c.DEPT_NAME USING gbk),c.sort asc From b16d69b09932221002bcba9487c109a0ad32211b Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Tue, 29 Nov 2022 15:26:43 +0800 Subject: [PATCH 062/111] =?UTF-8?q?=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/V0.0.47__alter_ic_party_service_center_matter.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql b/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql index c68c1a47ad..778637134c 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.47__alter_ic_party_service_center_matter.sql @@ -1,7 +1,7 @@ ALTER TABLE `ic_party_service_center_matter` MODIFY COLUMN `APPOINTMENT_TYPE` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '预约类型,每天:everyDay,工作日:workDay,周末:weekend , 自定义:custom' AFTER `MATTER_NAME`, -ADD COLUMN `CUSTOM_DAY` varchar(32) NULL COMMENT '类型为自定义时选择的周一~周末的时间(1-7逗号分割)' AFTER `APPOINTMENT_TYPE`; +ADD COLUMN `CUSTOM_DAY` varchar(32) NULL COMMENT '类型为自定义时选择的周一~周末的时间(1-7逗号分割)周日:1;周一2;周二3;周三4;周四5;周五6;周六7' AFTER `APPOINTMENT_TYPE`; From 2704a428cbc72948bcbf2f91c6343cb604069ffe Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Tue, 29 Nov 2022 16:10:01 +0800 Subject: [PATCH 063/111] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E7=BD=AE=E9=A1=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/epmet/service/impl/ArticleServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java index c471734d6b..8c8d695d51 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java @@ -1846,6 +1846,7 @@ public class ArticleServiceImpl extends BaseServiceImpl Date: Wed, 30 Nov 2022 14:01:03 +0800 Subject: [PATCH 064/111] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5----=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/service/impl/ChangeWelfareServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java index 4b5d11c661..df66afdc38 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java @@ -294,7 +294,7 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl errorInfo.size()){ Map groupByIdCard = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getIdCard, Collectors.counting())); groupByIdCard.forEach((idCard,count) -> { - if (Integer.valueOf(count.toString()).compareTo(1) != 0){ + if (StringUtils.isNotBlank(idCard) && Integer.valueOf(count.toString()).compareTo(1) != 0){ for (ChangeWelfareImportExcel i : list) { if (idCard.equals(i.getIdCard()) && !i.getAddStatus()){ errorInfo.add(getErrorInfo(i,"数据重复",i.getNum())); @@ -363,8 +363,8 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl String importOssUpload(Collection errorRows, Class tClass) throws IOException { Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("导入失败的数据列表","导入失败的数据列表"), From 897ecfac27002ba30529da928d4d54b16185adaf Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Wed, 30 Nov 2022 14:16:08 +0800 Subject: [PATCH 065/111] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5----=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ChangeWelfareServiceImpl.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java index df66afdc38..288cfa8cc6 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java @@ -292,17 +292,17 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl errorInfo.size()){ - Map groupByIdCard = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getIdCard, Collectors.counting())); - groupByIdCard.forEach((idCard,count) -> { - if (StringUtils.isNotBlank(idCard) && Integer.valueOf(count.toString()).compareTo(1) != 0){ - for (ChangeWelfareImportExcel i : list) { - if (idCard.equals(i.getIdCard()) && !i.getAddStatus()){ - errorInfo.add(getErrorInfo(i,"数据重复",i.getNum())); - i.setAddStatus(true); - } - } - } - }); +// Map groupByIdCard = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getIdCard, Collectors.counting())); +// groupByIdCard.forEach((idCard,count) -> { +// if (StringUtils.isNotBlank(idCard) && Integer.valueOf(count.toString()).compareTo(1) != 0){ +// for (ChangeWelfareImportExcel i : list) { +// if (idCard.equals(i.getIdCard()) && !i.getAddStatus()){ +// errorInfo.add(getErrorInfo(i,"数据重复",i.getNum())); +// i.setAddStatus(true); +// } +// } +// } +// }); } Map> groupByStatus = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getAddStatus)); List needInsert = groupByStatus.get(false); From 46189fce3464291935ccf6befc904ddec35acd04 Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Wed, 30 Nov 2022 14:36:18 +0800 Subject: [PATCH 066/111] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5----=E6=8E=92=E9=99=A4=E8=AF=81=E4=BB=B6?= =?UTF-8?q?=E5=8F=B7=E4=B8=BA=E7=A9=BA=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ChangeWelfareServiceImpl.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java index 288cfa8cc6..351df86396 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java @@ -262,6 +262,7 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl errorInfo.size()){ -// Map groupByIdCard = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getIdCard, Collectors.counting())); -// groupByIdCard.forEach((idCard,count) -> { -// if (StringUtils.isNotBlank(idCard) && Integer.valueOf(count.toString()).compareTo(1) != 0){ -// for (ChangeWelfareImportExcel i : list) { -// if (idCard.equals(i.getIdCard()) && !i.getAddStatus()){ -// errorInfo.add(getErrorInfo(i,"数据重复",i.getNum())); -// i.setAddStatus(true); -// } -// } -// } -// }); + Map groupByIdCard = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getIdCard, Collectors.counting())); + groupByIdCard.forEach((idCard,count) -> { + if (!"10110".equals(idCard) && Integer.valueOf(count.toString()).compareTo(1) != 0){ + for (ChangeWelfareImportExcel i : list) { + if (idCard.equals(i.getIdCard()) && !i.getAddStatus()){ + errorInfo.add(getErrorInfo(i,"数据重复",i.getNum())); + i.setAddStatus(true); + } + } + } + }); } Map> groupByStatus = list.stream().collect(Collectors.groupingBy(ChangeWelfareImportExcel::getAddStatus)); List needInsert = groupByStatus.get(false); From 92da71db352b0554e67471d4d8a9323c14c929cc Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Wed, 30 Nov 2022 17:25:36 +0800 Subject: [PATCH 067/111] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E7=99=BB=E5=BD=95=E4=BA=BA=E7=9A=84=E6=89=80?= =?UTF-8?q?=E5=B1=9E=E7=A4=BE=E5=8C=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CurrentUserCommunityInfoResultDTO.java | 28 +++++++++++++++++++ .../controller/CustomerAgencyController.java | 12 ++++++++ .../java/com/epmet/dao/CustomerAgencyDao.java | 4 +++ .../epmet/service/CustomerAgencyService.java | 11 ++++++++ .../impl/CustomerAgencyServiceImpl.java | 13 +++++++++ .../resources/mapper/CustomerAgencyDao.xml | 15 ++++++++++ 6 files changed, 83 insertions(+) create mode 100644 epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/CurrentUserCommunityInfoResultDTO.java diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/CurrentUserCommunityInfoResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/CurrentUserCommunityInfoResultDTO.java new file mode 100644 index 0000000000..3b82e5b77c --- /dev/null +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/CurrentUserCommunityInfoResultDTO.java @@ -0,0 +1,28 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 当前登陆人的所属社区 + * @Author wgf + * @Date 2020/11/30 22:35 + */ +@Data +public class CurrentUserCommunityInfoResultDTO implements Serializable { + private static final long serialVersionUID = 4360690752084258055L; + + /** + * 组织ID + */ + private String orgId; + + /** + * 名称 + */ + private String orgName; + + +} + diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java index e9fb4e56ef..ba94cc12ab 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/CustomerAgencyController.java @@ -505,5 +505,17 @@ public class CustomerAgencyController { return customerAgencyService.getCommunityInfoByUserId(userId); } + /** + * @param tokenDTO + * @return com.epmet.commons.tools.utils.Result + * @Author wgf + * @Description 获取当前登录人的所属社区 + * @Date 2022/11/30 22:41 + **/ + @PostMapping("getCurrentUserCommunityInfo") + public Result> getCurrentUserCommunityInfo(@LoginUser TokenDto tokenDTO) { + return customerAgencyService.getCurrentUserCommunityInfo(tokenDTO); + } + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java index fb1fc77855..e2fbd3162a 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java @@ -398,5 +398,9 @@ public interface CustomerAgencyDao extends BaseDao { List getUsingCommunityList(@Param("customerId") String customerId, @Param("agencyId") String agencyId, @Param("agencyOrgIdPath") String agencyOrgIdPath, @Param("endDate") Date endDate); List getCommunitysByOrgIdPath(@Param("customerId") String customerId, @Param("orgId") String orgId, @Param("orgIdPath") String orgIdPath); + + List getCurrentUserCommunityInfo(@Param("customerId") String customerId,@Param("staffAgencyId")String staffAgencyId); + + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java index e71189e0ad..f9ac7182e7 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java @@ -18,7 +18,9 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; +import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.CustomerAgencyDTO; import com.epmet.dto.form.*; @@ -344,4 +346,13 @@ public interface CustomerAgencyService extends BaseService * @Date 2022/6/21 22:41 **/ Result getCommunityInfoByUserId(String userId); + + /** + * @param tokenDTO + * @return com.epmet.commons.tools.utils.Result + * @Author wgf + * @Description 获取当前登录人的所属社区 + * @Date 2022/11/30 22:41 + **/ + Result> getCurrentUserCommunityInfo(TokenDto tokenDTO); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java index 760f9690ad..a6702963c4 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java @@ -35,6 +35,7 @@ import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.redis.common.CustomerOrgRedis; 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.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.CustomerAgencyConstant; @@ -1594,4 +1595,16 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl().ok(communityInfoResultDTO); } + @Override + public Result> getCurrentUserCommunityInfo(TokenDto tokenDTO) { + CustomerStaffInfoCacheResult staffInfoCacheResult = CustomerStaffRedis.getStaffInfo(tokenDTO.getCustomerId(), tokenDTO.getUserId()); + if (null == staffInfoCacheResult || StringUtils.isBlank(staffInfoCacheResult.getAgencyId())) { + log.warn("com.epmet.service.impl.CustomerAgencyServiceImpl.getMySubAgencyList,没有找到工作人员所属的机关信息,用户Id:{}", tokenDTO.getUserId()); + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"获取用户组织信息异常","获取用户组织信息异常"); + } + List list = baseDao.getCurrentUserCommunityInfo(tokenDTO.getCustomerId(),staffInfoCacheResult.getAgencyId()); + + return new Result>().ok(list); + } + } diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml index d221f07b12..f46e9f038d 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml @@ -1040,4 +1040,19 @@ having community_count > 0 order by created_time desc) t + From 625c43bd56ca0d891eeda44536d018de8153cc49 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Thu, 1 Dec 2022 09:00:22 +0800 Subject: [PATCH 068/111] =?UTF-8?q?=E3=80=90=E7=96=AB=E6=83=85=E9=98=B2?= =?UTF-8?q?=E6=8E=A7=E3=80=91=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5=E5=99=A8?= =?UTF-8?q?=EF=BC=8C=E5=8F=96=E9=94=81=E5=88=A4=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/processor/AbstractDataSyncJobProcessor.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java index 950c397c2d..2f3062448b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/AbstractDataSyncJobProcessor.java @@ -80,6 +80,10 @@ public abstract class AbstractDataSyncJobProcessor { RLock lock = null; try { lock = distributedLock.getLock(getDistributeLockKey(), getDistributeLockLeaseTime(), getDistributeLockWaitTime(), TimeUnit.SECONDS); + if (lock == null) { + log.warn("【异步数据更新】{}获取锁为空", getJobType()); + return; + } // 查询可执行的任务列表,并且异步执行 List icSyncJobToExec = icSyncJobDao.selectJobListByStatus("waiting", getJobType(), null, leftCount); if (!CollectionUtils.isEmpty(icSyncJobToExec)) { @@ -89,9 +93,7 @@ public abstract class AbstractDataSyncJobProcessor { } catch (Exception e) { log.error("【异步数据更新】出错:{}", ExceptionUtils.getErrorStackTrace(e)); } finally { - if (lock != null) { - lock.unlock(); - } + distributedLock.unLock(lock); } } From 29a4f4eb4f6cbbb7a1e44b21a426b2c096060516 Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Thu, 1 Dec 2022 10:46:03 +0800 Subject: [PATCH 069/111] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5-----=E4=BF=AE=E6=94=B9=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=97=A5=E6=9C=9F=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/ChangeWelfareServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java index 351df86396..c7582ec8ef 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java @@ -223,7 +223,7 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl errorInfo = new ArrayList<>(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { List list = ExcelPoiUtils.importExcel(inputStream, 0,1,ChangeWelfareImportExcel.class); From 78c296903f26743e83b7c8e08ebdb0b87aee3f1e Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Thu, 1 Dec 2022 12:29:58 +0800 Subject: [PATCH 070/111] =?UTF-8?q?=E3=80=90=E5=BC=82=E6=AD=A5=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=8C=E6=AD=A5=E3=80=91=E8=B0=83=E6=95=B4=E5=88=86?= =?UTF-8?q?=E5=B8=83=E5=BC=8F=E9=94=81=E7=9A=84=E6=97=B6=E9=97=B4=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/processor/YanTaiNatSyncProcessor.java | 4 ++-- .../epmet/processor/YanTaiResiComparisonSyncProcessor.java | 4 ++-- .../com/epmet/processor/YanTaiTripReportSyncProcessor.java | 4 ++-- .../java/com/epmet/processor/YanTaiVaccineSyncProcessor.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java index f4baf4914e..e7069da1eb 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiNatSyncProcessor.java @@ -51,11 +51,11 @@ public class YanTaiNatSyncProcessor extends AbstractDataSyncJobProcessor { @Override protected long getDistributeLockLeaseTime() { - return 60; + return 5; } @Override protected long getDistributeLockWaitTime() { - return 60; + return 6; } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java index f164093290..abdc0d3f35 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiResiComparisonSyncProcessor.java @@ -50,11 +50,11 @@ public class YanTaiResiComparisonSyncProcessor extends AbstractDataSyncJobProces @Override protected long getDistributeLockLeaseTime() { - return 60; + return 5; } @Override protected long getDistributeLockWaitTime() { - return 60; + return 6; } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java index 91d253ed68..6b1d4a028d 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiTripReportSyncProcessor.java @@ -50,11 +50,11 @@ public class YanTaiTripReportSyncProcessor extends AbstractDataSyncJobProcessor @Override protected long getDistributeLockLeaseTime() { - return 60; + return 5; } @Override protected long getDistributeLockWaitTime() { - return 60; + return 6; } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java index aa9b561949..77fadd9149 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/processor/YanTaiVaccineSyncProcessor.java @@ -49,11 +49,11 @@ public class YanTaiVaccineSyncProcessor extends AbstractDataSyncJobProcessor { @Override protected long getDistributeLockLeaseTime() { - return 60; + return 5; } @Override protected long getDistributeLockWaitTime() { - return 60; + return 6; } } From 67cfd47b58742ca4bfd293932d15cd1283668ded Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Thu, 1 Dec 2022 14:24:47 +0800 Subject: [PATCH 071/111] =?UTF-8?q?=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=90=8C=E6=AD=A5-=E6=B7=BB=E5=8A=A0=E5=90=88=E5=90=8C?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E7=BB=93=E6=9D=9F=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/dto/form/RentTenantFormDTO.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java index 039b433416..f3964d04ae 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java @@ -42,4 +42,14 @@ public class RentTenantFormDTO implements Serializable { */ private IcResiUserDTO user; + // 合同相关 + /** + * 合同开始日期 + */ + private String startDate; + + /** + * 合同结束日期 + */ + private String endDate; } From f76ab495540d5a22579444a43bfcd8904488cdae Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Thu, 1 Dec 2022 15:21:59 +0800 Subject: [PATCH 072/111] =?UTF-8?q?=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=90=8C=E6=AD=A5-=E6=B7=BB=E5=8A=A0=E5=90=88=E5=90=8C?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E7=BB=93=E6=9D=9F=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/dto/form/RentTenantFormDTO.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java index 039b433416..be89dc898c 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/RentTenantFormDTO.java @@ -42,4 +42,15 @@ public class RentTenantFormDTO implements Serializable { */ private IcResiUserDTO user; + // 合同相关 + /** + * 合同开始日期 + */ + private String startDate; + + /** + * 合同结束日期 + */ + private String endDate; + } From 1331a1f7375a42bd7e82430f47b64a10b1bc35e3 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Thu, 1 Dec 2022 16:28:07 +0800 Subject: [PATCH 073/111] =?UTF-8?q?=E3=80=90=E6=A0=B8=E9=85=B8=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=20&=20=E7=96=AB=E8=8B=97=E6=8E=A5=E7=A7=8D=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E3=80=91=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DataSyncConfigServiceImpl.java | 161 ++++++++++-------- 1 file changed, 93 insertions(+), 68 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java index ae9abc8daf..4473b71722 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/DataSyncConfigServiceImpl.java @@ -1173,84 +1173,99 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl args = new HashMap<>(); args.put("idcards", idCards); - List> vaccineList = yantaiNamedParamLantuJdbcTemplate.queryForList( + List> vaccineListGetted = yantaiNamedParamLantuJdbcTemplate.queryForList( "select data, name, cardno, vaccineCount from t_ymjz_info where cardno in (:idcards)", args); + if (CollectionUtils.isEmpty(vaccineListGetted)) { + return; + } + + // 将获取到的json数据进行日期格式转化,暂存到java对象 List ytVaccineListFromApi = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(vaccineList)) { - vaccineList.forEach(v -> { - if (v.containsKey("data")){ - JSONObject jo = JSON.parseObject((String) v.get("data")); - if (jo.containsKey("vaccineList")) { - JSONArray vaccineListJA = jo.getJSONArray("vaccineList"); - List vaccineList1 = vaccineListJA.toJavaList(YTVaccineListDTO.class); - vaccineList1.forEach(v1 -> { - v1.setCardno(v.get("cardno").toString()); - - // 秒转换成:00 - Matcher matcher = VACCINE_DATE_OF_API_PATTERN.matcher(v1.getInoculateDate()); - if (matcher.matches()) { - v1.setInoculateDate(matcher.group(1).concat(":00")); - } - }); - ytVaccineListFromApi.addAll(vaccineList1); - } + vaccineListGetted.forEach(vGetted -> { + if (vGetted.containsKey("data")){ + JSONObject jo = JSON.parseObject((String) vGetted.get("data")); + if (jo.containsKey("vaccineList")) { + JSONArray vaccineListJA = jo.getJSONArray("vaccineList"); + List vaccineList1 = vaccineListJA.toJavaList(YTVaccineListDTO.class); + vaccineList1.forEach(v1 -> { + v1.setCardno(vGetted.get("cardno").toString()); + + // 秒转换成:00 + Matcher matcher = VACCINE_DATE_OF_API_PATTERN.matcher(v1.getInoculateDate()); + if (matcher.matches()) { + v1.setInoculateDate(matcher.group(1).concat(":00")); + } + }); + ytVaccineListFromApi.addAll(vaccineList1); } - }); - List entities = new ArrayList<>(); + } + }); - // 过滤已存在的记录 - List existVaccines = icVaccineDao.getExistVaccine(ytVaccineListFromApi); - if (CollectionUtils.isNotEmpty(existVaccines)){ - for (YTVaccineListDTO existVaccineItem : existVaccines) { - Iterator iterator = ytVaccineListFromApi.iterator(); - while (iterator.hasNext()) { - YTVaccineListDTO vaccineFromApi = iterator.next(); + if (CollectionUtils.isEmpty(ytVaccineListFromApi)) { + return; + } - // 身份证号和接种时间都一致,移除 - if (vaccineFromApi.getCardno().equals(existVaccineItem.getCardno()) - && vaccineFromApi.getInoculateDate().equals(existVaccineItem.getInoculateDate())) { + // 过滤已存在的记录 + List existVaccines = icVaccineDao.getExistVaccine(ytVaccineListFromApi); + if (CollectionUtils.isNotEmpty(existVaccines)){ + for (YTVaccineListDTO existVaccineItem : existVaccines) { + Iterator iterator = ytVaccineListFromApi.iterator(); + while (iterator.hasNext()) { + YTVaccineListDTO vaccineFromApi = iterator.next(); + + String inoculateDate = vaccineFromApi.getInoculateDate(); + if (StringUtils.isBlank(inoculateDate)) { + // 没有接种时间,移除 + log.warn("【疫苗接种同步】证件号为{}的记录,没有接种时间,移除。", vaccineFromApi.getCardno()); + iterator.remove(); + } - iterator.remove(); - } + // 身份证号和接种时间都一致,移除 + if (vaccineFromApi.getCardno().equals(existVaccineItem.getCardno()) + && inoculateDate.equals(existVaccineItem.getInoculateDate())) { + + iterator.remove(); } } } - if (CollectionUtils.isNotEmpty(ytVaccineListFromApi)){ - ytVaccineListFromApi.forEach(v -> { - resiInfos.forEach(u -> { - if (v.getCardno().equals(u.getIdCard())){ - IcVaccineEntity e = new IcVaccineEntity(); - e.setCustomerId(customerId); - e.setName(u.getName()); - e.setMobile(u.getMobile()); - e.setIdCard(u.getIdCard()); - e.setIsResiUser(StringUtils.isBlank(u.getUserId()) ? NumConstant.ZERO_STR : NumConstant.ONE_STR); - e.setUserId(StringUtils.isBlank(u.getUserId()) ? "" : u.getUserId()); - e.setUserType("ytPull"); - e.setInoculateTime(DateUtils.parseDate(v.getInoculateDate(),DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE)); - e.setInoculateAddress(v.getLastStationName()); - e.setAgencyId(u.getAgencyId()); - e.setPids(u.getPids()); - entities.add(e); - } - }); - }); - icVaccineService.insertBatch(entities,NumConstant.ONE_HUNDRED); - List relationEntities = new ArrayList<>(); - entities.forEach(e -> { - IcVaccineRelationEntity re = new IcVaccineRelationEntity(); - re.setIcVaccineId(e.getId()); - re.setPids(e.getPids()); - re.setCustomerId(customerId); - re.setUserType("ytPull"); - re.setAgencyId(e.getAgencyId()); - // 拉取居民的疫苗接种信;因为查询的就是组织下的居民,所以都是本地居民。 - re.setIsLocalResiUser(NumConstant.ONE_STR); - relationEntities.add(re); - }); - icVaccineRelationService.insertBatch(relationEntities,NumConstant.ONE_HUNDRED); - } } + + + // 转化为entity,插入vaccine和vaccine_relation + List entities2Insert = new ArrayList<>(); + ytVaccineListFromApi.forEach(v -> { + resiInfos.forEach(u -> { + if (v.getCardno().equals(u.getIdCard())){ + IcVaccineEntity e = new IcVaccineEntity(); + e.setCustomerId(customerId); + e.setName(u.getName()); + e.setMobile(u.getMobile()); + e.setIdCard(u.getIdCard()); + e.setIsResiUser(StringUtils.isBlank(u.getUserId()) ? NumConstant.ZERO_STR : NumConstant.ONE_STR); + e.setUserId(StringUtils.isBlank(u.getUserId()) ? "" : u.getUserId()); + e.setUserType("ytPull"); + e.setInoculateTime(DateUtils.parseDate(v.getInoculateDate(),DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE)); + e.setInoculateAddress(v.getLastStationName()); + e.setAgencyId(u.getAgencyId()); + e.setPids(u.getPids()); + entities2Insert.add(e); + } + }); + }); + icVaccineService.insertBatch(entities2Insert,NumConstant.ONE_HUNDRED); + List relationEntities = new ArrayList<>(); + entities2Insert.forEach(e -> { + IcVaccineRelationEntity re = new IcVaccineRelationEntity(); + re.setIcVaccineId(e.getId()); + re.setPids(e.getPids()); + re.setCustomerId(customerId); + re.setUserType("ytPull"); + re.setAgencyId(e.getAgencyId()); + // 拉取居民的疫苗接种信;因为查询的就是组织下的居民,所以都是本地居民。 + re.setIsLocalResiUser(NumConstant.ONE_STR); + relationEntities.add(re); + }); + icVaccineRelationService.insertBatch(relationEntities,NumConstant.ONE_HUNDRED); } /** @@ -1284,6 +1299,11 @@ public class DataSyncConfigServiceImpl extends BaseServiceImpl Date: Thu, 1 Dec 2022 17:22:41 +0800 Subject: [PATCH 074/111] =?UTF-8?q?=E6=9D=A5=E6=BA=90=E4=BA=8E=E5=B0=8F?= =?UTF-8?q?=E5=AF=A8=E5=AD=90=EF=BC=9A=E4=BA=BA=E6=88=BF=E6=A6=82=E8=A7=88?= =?UTF-8?q?/gov/org/house/subuserhouselist=E6=8C=89=E7=85=A7=E7=BD=91?= =?UTF-8?q?=E6=A0=BC=E5=8D=87=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/CustomerGridDao.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerGridDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerGridDao.xml index 7c03f1a94d..9febecf227 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerGridDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerGridDao.xml @@ -384,7 +384,7 @@ WHERE del_flag = '0' and ABANDON_FLAG='0' AND pid = #{agencyId} - ORDER BY created_time DESC + ORDER BY sort asc,created_time asc SELECT - user.Id AS userId, - IFNULL(wechat.HEAD_IMG_URL,"") AS userHeadPhoto, - IFNULL(wechat.NICKNAME,"") AS nickName, - IFNULL(resi.ID,"") AS resiId, - IFNULL(CONCAT(resi.SURNAME,resi.NAME),"") AS userRealName, - IFNULL(relation.GRID_ID,"") AS gridId, - IFNULL(wechat.id_num,'')AS idNum + user.Id AS userId, + IFNULL(wechat.HEAD_IMG_URL,"") AS userHeadPhoto, + IFNULL(wechat.NICKNAME,"") AS nickName, + IFNULL(resi.ID,"") AS resiId, + IFNULL(CONCAT(resi.SURNAME,resi.NAME),"") AS userRealName, + IFNULL(relation.GRID_ID,"") AS gridId, + IFNULL(wechat.id_num,'')AS idNum FROM USER user LEFT JOIN USER_RESI_INFO resi ON user.ID = resi.USER_ID AND resi.DEL_FLAG = '0' LEFT JOIN user_base_info wechat ON user.ID = wechat.USER_ID AND wechat.DEL_FLAG = '0' - LEFT JOIN - REGISTER_RELATION relation ON user.ID = relation.USER_ID - AND relation.DEL_FLAG = '0' - AND relation.FIRST_REGISTER = '1' - WHERE - user.ID = #{userId} - AND - user.DEL_FLAG = '0' - AND - user.FROM_APP = 'resi' + LEFT JOIN( + select rr.GRID_ID,rr.user_id from REGISTER_RELATION rr + where rr.user_id=#{userId} + and rr.del_flag='0' + and rr.FIRST_REGISTER='1' + limit 1 + ) relation ON user.ID = relation.USER_ID + WHERE user.ID = #{userId} + AND user.DEL_FLAG = '0' + AND user.FROM_APP = 'resi' + select * from ic_resi_rent_contract_info where DEL_FLAG = 0 and IC_RESI_USER = #{userId} limit 1 - \ No newline at end of file + + + + + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml index d5aeb1384d..96bae4508a 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineDao.xml @@ -244,4 +244,8 @@ + + update ic_vaccine set DEL_FLAG = '1' where CUSTOMER_ID = #{customerId} and ID_CARD = #{idCard} + + From fdf42063f5efb46fc557433d4054739d4bc6cadb Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Mon, 5 Dec 2022 17:35:14 +0800 Subject: [PATCH 080/111] =?UTF-8?q?=E7=A7=9F=E6=88=BF=E5=90=88=E5=90=8C?= =?UTF-8?q?=EF=BC=8C=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF=EF=BC=8C=E7=96=AB?= =?UTF-8?q?=E8=8B=97=E6=8E=A5=E7=A7=8D=E6=83=85=E5=86=B5=EF=BC=8C=E5=90=88?= =?UTF-8?q?=E5=90=8C=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/IcResiUserServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index a6ac2e4ed4..b02f182c1f 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -2236,7 +2236,8 @@ public class IcResiUserServiceImpl extends BaseServiceImpl vaccineLog = user.getVaccineLog(); - if(vaccineLog.size() > 0){ + log.info("+++++++++++++++++++++++++++同步疫苗接种记录信息vaccineLog"+vaccineLog); + if(vaccineLog == null || vaccineLog.size() > 0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 根据身份证号,客户ID删除旧记录 icVaccineDao.deleteByIdCard(user.getIdCard(),user.getCustomerId()); @@ -2261,6 +2262,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl Date: Mon, 5 Dec 2022 17:58:03 +0800 Subject: [PATCH 081/111] =?UTF-8?q?=E7=A7=9F=E6=88=BF=E5=90=88=E5=90=8C?= =?UTF-8?q?=EF=BC=8C=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF=EF=BC=8C=E7=96=AB?= =?UTF-8?q?=E8=8B=97=E6=8E=A5=E7=A7=8D=E6=83=85=E5=86=B5=EF=BC=8C=E5=90=88?= =?UTF-8?q?=E5=90=8C=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/service/impl/IcResiUserServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index b02f182c1f..bfb2407847 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -2237,7 +2237,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl vaccineLog = user.getVaccineLog(); log.info("+++++++++++++++++++++++++++同步疫苗接种记录信息vaccineLog"+vaccineLog); - if(vaccineLog == null || vaccineLog.size() > 0){ + if(vaccineLog != null && vaccineLog.size() > 0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 根据身份证号,客户ID删除旧记录 icVaccineDao.deleteByIdCard(user.getIdCard(),user.getCustomerId()); From 5fb7640b08fa34a140eb933ac5295fb40f4d8337 Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Tue, 6 Dec 2022 09:34:23 +0800 Subject: [PATCH 082/111] =?UTF-8?q?=E7=A7=9F=E6=88=BF=E5=90=88=E5=90=8C?= =?UTF-8?q?=EF=BC=8C=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF=EF=BC=8C=E7=96=AB?= =?UTF-8?q?=E8=8B=97=E6=8E=A5=E7=A7=8D=E6=83=85=E5=86=B5=EF=BC=8C=E5=90=88?= =?UTF-8?q?=E5=90=8C=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/IcResiUserServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index bfb2407847..cf5428982a 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -2197,6 +2197,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl Date: Tue, 6 Dec 2022 10:52:55 +0800 Subject: [PATCH 083/111] =?UTF-8?q?=E7=A7=9F=E6=88=BF=E5=90=88=E5=90=8C?= =?UTF-8?q?=EF=BC=8C=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF=EF=BC=8C=E7=96=AB?= =?UTF-8?q?=E8=8B=97=E6=8E=A5=E7=A7=8D=E6=83=85=E5=86=B5=EF=BC=8C=E5=90=88?= =?UTF-8?q?=E5=90=8C=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8F=90=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/IcResiUserServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index cf5428982a..aa0f1bef96 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -2239,7 +2239,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl vaccineLog = user.getVaccineLog(); log.info("+++++++++++++++++++++++++++同步疫苗接种记录信息vaccineLog"+vaccineLog); if(vaccineLog != null && vaccineLog.size() > 0){ - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 根据身份证号,客户ID删除旧记录 icVaccineDao.deleteByIdCard(user.getIdCard(),user.getCustomerId()); // 插入新数据 @@ -2253,7 +2253,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl Date: Tue, 6 Dec 2022 13:45:55 +0800 Subject: [PATCH 084/111] =?UTF-8?q?=E7=A7=9F=E6=88=BF=E5=90=88=E5=90=8C?= =?UTF-8?q?=EF=BC=8C=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF=EF=BC=8C=E7=96=AB?= =?UTF-8?q?=E8=8B=97=E6=8E=A5=E7=A7=8D=E6=83=85=E5=86=B5=EF=BC=8C=E5=90=88?= =?UTF-8?q?=E5=90=8C=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8F=90=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/CustomerAgencyDao.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml index f46e9f038d..482eac4596 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml @@ -1050,7 +1050,7 @@ and LEVEL = 'community' AND CUSTOMER_ID = #{customerId} - AND PIDS like concat('%',#{staffAgencyId},'%') + AND (PIDS like concat('%',#{staffAgencyId},'%') or ID = #{staffAgencyId}) From 2de1bb22360086163f9c19e54b5d4273429bab21 Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Tue, 6 Dec 2022 16:34:39 +0800 Subject: [PATCH 085/111] =?UTF-8?q?=E5=B0=8F=E5=AF=A8=E5=AD=90=E5=B1=85?= =?UTF-8?q?=E6=B0=91=E4=BF=A1=E6=81=AF=E5=88=97=E8=A1=A8=E6=94=B9=E4=B8=AA?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/IcResiUserDao.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index ab9c03c402..036cb5946b 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -216,7 +216,7 @@ ORDER BY - field( IC_RESI_USER.GRID_ID, '1537272060187049986', '1537272342477508609', '1537275342477501111', '1593432493598076929' ), + field( IC_RESI_USER.GRID_ID, '1537272060187049986', '1537272342477508609', '1537275342477501111', '1593432493598076929','1595582620679204865' ), IC_RESI_USER.VILLAGE_ID ASC, IC_RESI_USER.BUILD_ID ASC, IC_RESI_USER.UNIT_ID ASC, From 114bb8992589f77837ec344563a68db0ef61fa32 Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Tue, 6 Dec 2022 17:58:07 +0800 Subject: [PATCH 086/111] =?UTF-8?q?=E5=8E=BB=E9=99=A4log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/IcResiUserServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index aa0f1bef96..c4b17b5304 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -2197,7 +2197,6 @@ public class IcResiUserServiceImpl extends BaseServiceImpl vaccineLog = user.getVaccineLog(); - log.info("+++++++++++++++++++++++++++同步疫苗接种记录信息vaccineLog"+vaccineLog); if(vaccineLog != null && vaccineLog.size() > 0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 根据身份证号,客户ID删除旧记录 @@ -2263,7 +2261,6 @@ public class IcResiUserServiceImpl extends BaseServiceImpl Date: Wed, 7 Dec 2022 10:18:24 +0800 Subject: [PATCH 087/111] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=96=AB=E8=8B=97?= =?UTF-8?q?=E6=8E=A5=E7=A7=8D=E8=AE=B0=E5=BD=95=E5=85=B3=E7=B3=BB=E8=A1=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/epmet/dao/IcVaccineDao.java | 2 ++ .../com/epmet/dao/IcVaccineRelationDao.java | 8 ++++++ .../service/impl/IcResiUserServiceImpl.java | 27 ++++++++++++++++--- .../main/resources/mapper/IcVaccineDao.xml | 4 +++ .../resources/mapper/IcVaccineRelationDao.xml | 8 ++++++ 5 files changed, 45 insertions(+), 4 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java index 3a0956822c..a479866fea 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineDao.java @@ -89,4 +89,6 @@ public interface IcVaccineDao extends BaseDao { void deleteByIdCard(@Param("idCard") String idCard,@Param("customerId") String customerId); + List setDeleteByIdCard(@Param("idCard") String idCard,@Param("customerId") String customerId); + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineRelationDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineRelationDao.java index 6d087a1055..f35d872d7c 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineRelationDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcVaccineRelationDao.java @@ -5,6 +5,8 @@ import com.epmet.entity.IcVaccineRelationEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 疫苗接种记录关系表 * @@ -17,5 +19,11 @@ public interface IcVaccineRelationDao extends BaseDao { void updateRelationInfoByVaccineId(IcVaccineRelationEntity icVaccineRelationEntity); + /** + * 根据ID删除数据 + * @param delList + */ + void deleteByIdList(@Param("delList")List delList); + } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index c4b17b5304..ab9c9fb04b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -181,7 +181,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl delList = icVaccineDao.setDeleteByIdCard(user.getIdCard(),user.getCustomerId()); + icVaccineRelationDao.deleteByIdList(delList); // 插入新数据 - List icVaccineEntityList = new ArrayList<>(); for(VaccineLogDetailDTO vaccineLogDetailDTO : vaccineLog){ IcVaccineEntity icVaccineEntity = new IcVaccineEntity(); icVaccineEntity.setCustomerId(user.getCustomerId()); @@ -2253,9 +2255,26 @@ public class IcResiUserServiceImpl extends BaseServiceImpl + diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineRelationDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineRelationDao.xml index acaf54c95f..205b04677a 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineRelationDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcVaccineRelationDao.xml @@ -17,5 +17,13 @@ set CUSTOMER_ID = #{customerId},USER_TYPE = #{userType} where IC_VACCINE_ID = #{icVaccineId} + + update ic_vaccine_relation set DEL_FLAG = '1' where ID in + + #{id} + + + + From 402b3bdbc6cbb7d2b92098a5d95affa15251f5ac Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 7 Dec 2022 11:10:07 +0800 Subject: [PATCH 088/111] =?UTF-8?q?GovOrgOpenFeignClient=EF=BC=8C=E6=A2=B3?= =?UTF-8?q?=E7=90=86=E6=88=BF=E5=B1=8B=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E4=BA=9B=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/feign/GovOrgOpenFeignClient.java | 58 ++++++++++++++++--- .../com/epmet/controller/HouseController.java | 6 ++ .../epmet/controller/IcHouseController.java | 11 +++- .../service/impl/IcHouseServiceImpl.java | 13 +---- 4 files changed, 66 insertions(+), 22 deletions(-) diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java index cc90ddbc2f..9818f7f832 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/feign/GovOrgOpenFeignClient.java @@ -460,6 +460,12 @@ public interface GovOrgOpenFeignClient { @PostMapping("/gov/org/grid/getbaseinfo") Result getGridBaseInfoByGridId(CustomerGridFormDTO customerGridFormDTO); + /** + * @V23 + * @param houseIds + * @param customerId + * @return 根据房屋id查询房屋表,并且放到了缓存里 + */ @PostMapping(value = "/gov/org/house/queryListHouseInfo", consumes = MediaType.APPLICATION_JSON_VALUE) Result> queryListHouseInfo(@RequestBody Set houseIds, @RequestParam("customerId") String customerId); @@ -486,6 +492,7 @@ public interface GovOrgOpenFeignClient { Result> getBranchOption(@RequestBody CustomerPartyBranchDTO formDTO); /** + * @V23 * @Description 获取小区内的楼栋 * @Param dto * @Return {@link Result>} @@ -496,6 +503,7 @@ public interface GovOrgOpenFeignClient { Result> getBuildingOptions(IcBuildingDTO dto); /** + * @V23 * @Description 获取楼栋内单元 * @Param dto * @Return {@link Result>} @@ -505,10 +513,16 @@ public interface GovOrgOpenFeignClient { @PostMapping("/gov/org/icbuildingunit/unitoption") Result> getUnitOptions(IcBuildingUnitDTO dto); + /** + * @V23 + * @param formDTO + * @return 根据楼栋id、单元id获取房屋列表 + */ @PostMapping("/gov/org/ichouse/houseoption") Result> getHouseOption(@RequestBody HouseFormDTO formDTO); /** + * @V23 * @Description 获取网格下小区列表 * @Param dto * @Return {@link Result< List< OptionResultDTO>>} @@ -519,23 +533,47 @@ public interface GovOrgOpenFeignClient { Result> getNeighborHoodOptions(IcNeighborHoodDTO dto); /** - * @param idCard + * @V23 + * @param idCard 对应ic_house.OWNER_ID_CARD 房主身份证号 * @Description 查询房屋信息 * @author zxc * @date 2021/11/3 3:30 下午 + * @return 返回该小区名+楼栋名+单元名+房屋名 */ @PostMapping("/gov/org/ichouse/selecthouseinfobyidcard") Result> selectHouseInfoByIdCard(@RequestParam("idCard") String idCard, @RequestParam("customerId") String customerId); + /** + * @V23 + * @param id + * @Description 根据房屋id查询,查询房屋信息;这个接口需要重构吧,怎么还查询两次。 + */ @GetMapping("/gov/org/ichouse/{id}") Result get(@PathVariable("id") String id); + /** + * @V23 + * @param buildingIdList + * @return 根据楼栋id,查询楼栋信息 + */ @PostMapping("/gov/org/building/buildinglistbyids") Result> buildingListByIds(@RequestBody List buildingIdList); + /** + * @V23 + * @param buildingIdList + * @param pageNo + * @param pageSize + * @return 分页查询楼栋信息 + */ @PostMapping("/gov/org/building/buildinglistbyidsPage/{pageNo}/{pageSize}") Result buildinglistbyidsPage(@RequestBody List buildingIdList, @PathVariable("pageNo") Integer pageNo, @PathVariable("pageSize") Integer pageSize); + /** + * @V23 + * @param ids + * @Description 根据小区id查询小区信息 + */ @PostMapping("/gov/org/icneighborhood/getlistbyids") Result> getListByIds(@RequestBody List ids); @@ -555,7 +593,7 @@ public interface GovOrgOpenFeignClient { /** * 根据ID查询楼栋信息 - * + * @V23 * @param id * @return */ @@ -564,7 +602,7 @@ public interface GovOrgOpenFeignClient { /** * 通过ID查询小区信息 - * + * @V23 * @param id * @return */ @@ -587,6 +625,7 @@ public interface GovOrgOpenFeignClient { @RequestParam("orgType") String orgType); /** + * @V23 * @Author sun * @Description 查询组织、网格、小区、楼栋、单元、房屋信息 **/ @@ -595,7 +634,7 @@ public interface GovOrgOpenFeignClient { /** * 查询单元 - * + * @V23 * @param id * @return */ @@ -614,7 +653,7 @@ public interface GovOrgOpenFeignClient { /** * Desc: 根据身份证查询房屋名 - * + * @V23 * @param idCards * @author zxc * @date 2022/4/12 16:42 @@ -624,7 +663,7 @@ public interface GovOrgOpenFeignClient { /** * Desc: 房屋更新 - * + * @V23 * @param formDTO * @author zxc * @date 2022/5/11 09:46 @@ -643,7 +682,7 @@ public interface GovOrgOpenFeignClient { /** * 根据houseId查询数据 - * + * @V23 * @param houseId * @return com.epmet.commons.tools.utils.Result * @author LZN @@ -661,7 +700,7 @@ public interface GovOrgOpenFeignClient { /** * 根据房屋编码查询房屋信息 - * + * @V23 * @param houseCode * @return com.epmet.commons.tools.utils.Result * @author work@yujt.net.cn @@ -677,6 +716,7 @@ public interface GovOrgOpenFeignClient { * @author wangtong * @date 2022/6/10 13:27 * @params [dto] + * @V23 */ @PostMapping("/gov/org/house/getHomeInfoByHouseCode") Result getHomeInfoByHouseCode(CommonHouseFormDTO dto); @@ -685,6 +725,7 @@ public interface GovOrgOpenFeignClient { * desc:根据房屋id更新 屋内的居民数量 * @param paramList * @return + * @V23 */ @PostMapping("/gov/org/ichouse/updateIcHouseResiNumber") Result updateIcHouseResiNumber(List> paramList); @@ -706,6 +747,7 @@ public interface GovOrgOpenFeignClient { * @Return {@link Result< List>} * @Author zhaoqifeng * @Date 2022/7/20 9:52 + * @V23 */ @PostMapping("/gov/org/ichouse/getOwnerHouseList") Result> getOwnerHouseList(@RequestBody IcHouseDTO formDTO); diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java index 6282777484..f462449ec9 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java @@ -293,6 +293,12 @@ public class HouseController implements ResultDataResolver { epmetMessageOpenFeignClient.sendSystemMsgByMQ(form); } + /** + * 根据房屋id查询房屋表,并且放到了缓存里 + * @param houseIds + * @param customerId + * @return + */ @PostMapping("queryListHouseInfo") Result> queryListHouseInfo(@RequestBody Set houseIds, @RequestParam("customerId") String customerId) { return new Result>().ok(houseService.queryListHouseInfo(houseIds, customerId)); diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcHouseController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcHouseController.java index e7b5ac7e56..c2420c0832 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcHouseController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/IcHouseController.java @@ -26,9 +26,11 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.IcHouseDTO; import com.epmet.dto.form.CheckHouseInfoFormDTO; -import com.epmet.dto.form.DetailByTypeFormDTO; import com.epmet.dto.form.HouseFormDTO; -import com.epmet.dto.result.*; +import com.epmet.dto.result.HouseAgencyInfoResultDTO; +import com.epmet.dto.result.HouseInfoDTO; +import com.epmet.dto.result.HouseListResultDTO; +import com.epmet.dto.result.HousesNameResultDTO; import com.epmet.service.IcHouseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -57,6 +59,11 @@ public class IcHouseController { return new Result().ok(data); } + /** + * 根据楼栋id、单元id获取房屋列表 + * @param formDTO + * @return + */ @PostMapping("houseoption") public Result> getHouseOption(@RequestBody HouseFormDTO formDTO) { return new Result>().ok(icHouseService.getHouseOption(formDTO)); diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcHouseServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcHouseServiceImpl.java index 943d6f9eee..93322c7ed6 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcHouseServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/IcHouseServiceImpl.java @@ -3,8 +3,6 @@ package com.epmet.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; -import com.epmet.commons.rocketmq.constants.TopicConstants; -import com.epmet.commons.rocketmq.messages.CheckMQMsg; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.dto.result.OptionResultDTO; @@ -12,14 +10,10 @@ 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.redis.common.CustomerIcHouseRedis; -import com.epmet.commons.tools.redis.common.CustomerResiUserRedis; import com.epmet.commons.tools.redis.common.bean.HouseInfoCache; -import com.epmet.commons.tools.redis.common.bean.IcResiUserInfoCache; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; -import com.epmet.commons.tools.utils.IpUtils; import com.epmet.commons.tools.utils.Result; -import com.epmet.constant.NeighborhoodConstant; import com.epmet.dao.IcBuildingDao; import com.epmet.dao.IcBuildingUnitDao; import com.epmet.dao.IcHouseDao; @@ -29,9 +23,7 @@ import com.epmet.dto.IcResiCategoryStatsConfigDTO; import com.epmet.dto.IcResiUserDTO; import com.epmet.dto.ImportGeneralDTO; import com.epmet.dto.form.CheckHouseInfoFormDTO; -import com.epmet.dto.form.DetailByTypeFormDTO; import com.epmet.dto.form.HouseFormDTO; -import com.epmet.dto.form.SystemMsgFormDTO; import com.epmet.dto.result.*; import com.epmet.entity.IcBuildingEntity; import com.epmet.entity.IcBuildingUnitEntity; @@ -51,11 +43,8 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; @@ -97,7 +86,7 @@ public class IcHouseServiceImpl extends BaseServiceImpl Date: Wed, 7 Dec 2022 12:27:12 +0800 Subject: [PATCH 089/111] =?UTF-8?q?=E5=B1=85=E6=B0=91=E7=AB=AF=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E5=AE=9E=E6=97=B6=E5=8A=A8=E6=80=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=96=87=E7=AB=A0bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gov-voice-server/src/main/resources/mapper/ArticleDao.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleDao.xml b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleDao.xml index 572bd59e84..61c6e4c517 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleDao.xml +++ b/epmet-module/gov-voice/gov-voice-server/src/main/resources/mapper/ArticleDao.xml @@ -360,7 +360,7 @@ FROM ARTICLE art LEFT JOIN ARTICLE_PUBLISH_RANGE prange ON (art.ID = prange.ARTICLE_ID AND prange.DEL_FLAG = '0' AND prange.PUBLISH_STATUS = 'published') - LEFT JOIN article_tags ats ON (ats.ARTICLE_ID = art.ID) + LEFT JOIN article_tags ats ON (ats.ARTICLE_ID = art.ID and ats.del_flag='0') LEFT JOIN article_cover ac ON (ac.ARTICLE_ID = art.ID AND ac.DEL_FLAG = 0) WHERE art.DEL_FLAG = '0' From 66a6e8542fab770cc899cfd061c4aac6b17be2ae Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Wed, 7 Dec 2022 13:48:48 +0800 Subject: [PATCH 090/111] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=96=AB=E8=8B=97?= =?UTF-8?q?=E6=8E=A5=E7=A7=8D=E8=AE=B0=E5=BD=95=E5=85=B3=E7=B3=BB=E8=A1=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5=E9=80=BB=E8=BE=91-----?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=8F=B0=E8=B4=A6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/service/impl/IcResiUserServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java index ab9c9fb04b..66275d9ee0 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java @@ -2243,8 +2243,8 @@ public class IcResiUserServiceImpl extends BaseServiceImpl delList = icVaccineDao.setDeleteByIdCard(user.getIdCard(),user.getCustomerId()); icVaccineRelationDao.deleteByIdList(delList); - // 插入新数据 for(VaccineLogDetailDTO vaccineLogDetailDTO : vaccineLog){ + // 插入疫苗接种记录数据 IcVaccineEntity icVaccineEntity = new IcVaccineEntity(); icVaccineEntity.setCustomerId(user.getCustomerId()); icVaccineEntity.setName(user.getName()); @@ -2262,7 +2262,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl Date: Wed, 7 Dec 2022 15:12:33 +0800 Subject: [PATCH 091/111] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E8=BA=AB=E4=BB=BD=E8=AF=81=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E4=B8=8D=E6=A0=A1=E9=AA=8CX=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/service/impl/ChangeWelfareServiceImpl.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java index c7582ec8ef..f158bbc968 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/ChangeWelfareServiceImpl.java @@ -250,8 +250,16 @@ public class ChangeWelfareServiceImpl extends BaseServiceImpl userList = icResiUserDao.getImportUserList(tokenDto.getCustomerId(),staffInfoCache.getAgencyId()); - // 获取证件号List - List idCardList = userList.stream().map(IcResiUserDTO::getIdCard).collect(Collectors.toList()); + // 获取证件号List(排除X的大小写区分) +// List idCardList = userList.stream().map(IcResiUserDTO::getIdCard).collect(Collectors.toList()); + List idCardList = new ArrayList<>(); + for(IcResiUserDTO icResiUserDTO : userList){ + idCardList.add(icResiUserDTO.getIdCard()); + if(icResiUserDTO.getIdCard().indexOf("X") >= 0){ + idCardList.add(icResiUserDTO.getIdCard().replace("X","x")); + } + } + // 获取已存在福利人员 List welfareList = baseDao.getAllWelfareIdCard(tokenDto.getCustomerId()); From c8b7fa309611c190d0e6cad0be1860ccbe3060be Mon Sep 17 00:00:00 2001 From: yinzuomei <576302893@qq.com> Date: Wed, 7 Dec 2022 15:28:18 +0800 Subject: [PATCH 092/111] =?UTF-8?q?EpmetUserOpenFeignClient=EF=BC=8C?= =?UTF-8?q?=E6=A2=B3=E7=90=86=E6=88=BF=E5=B1=8B=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E5=8A=A0=E4=BA=86=E4=BA=9B=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/feign/EpmetUserOpenFeignClient.java | 76 +++++++++++++++++-- .../main/resources/mapper/IcResiUserDao.xml | 2 + 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java index f8edd1a77e..c80eab326e 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java @@ -673,6 +673,11 @@ public interface EpmetUserOpenFeignClient { @GetMapping(value = "/epmetuser/user/queryUserClient/{userId}") Result queryUserClient(@PathVariable("userId") String userId); + /** + * @V23 + * @param formDTO + * @return 查询每个楼栋,18类别下,居民数量 + */ @PostMapping("/epmetuser/icresiuser/categorycount") Result>> getHomeUserCategoryCount(@RequestBody IcResiUserDTO formDTO); @@ -685,19 +690,24 @@ public interface EpmetUserOpenFeignClient { /** * 根据身份证号||ic_resi_user.id找居民端小程序里的人 - * + * @V23 * @param formDTO * @return */ @PostMapping(value = "/epmetuser/user/findepmetuser") Result findEpmetUser(@RequestBody ResiUserFormDTO formDTO); + /** + * @V23 + * @param icResiUserId + * @return 查询当前居民的姓名,和房屋id + */ @GetMapping("/epmetuser/icresiuser/findfamilymem/{icResiUserId}") Result findFamilyMem(@PathVariable("icResiUserId") String icResiUserId); /** * 查找居民端小程序里的用户对应ic里的人。以及家属们 - * + * @V23 * @param formDTO * @return */ @@ -716,17 +726,19 @@ public interface EpmetUserOpenFeignClient { Result> getPatrolRoutineWorkListV2(@RequestBody PatrolQueryFormDTO patrolQueryFormDTO); /** + * @V23 * 获取ic_resi_user * @param icResiUserId - * @return + * @return 根据居民id,查询居民主表信息 */ @PostMapping(value = "/epmetuser/icresiuser/geticresiuser/{icResiUserId}") Result getIcResiUserDTO(@PathVariable("icResiUserId") String icResiUserId); /** + * @V23 * 获取ic_resi_user * @param icResiUserIdList - * @return + * @return 根据居民id,查询居民主表信息(批量查询) */ @PostMapping(value = "/epmetuser/icresiuser/list-icresiuser") Result> getListIcResiUserDTO(@RequestBody List icResiUserIdList); @@ -748,6 +760,7 @@ public interface EpmetUserOpenFeignClient { * @param ids * @author zxc * @date 2022/3/2 10:32 上午 + * @V23 */ @PostMapping("/epmetuser/icresiuser/getexistuserbyhouseids") Result> getExistUserByHouseIds(@RequestBody List ids); @@ -759,6 +772,7 @@ public interface EpmetUserOpenFeignClient { * @return com.epmet.commons.tools.utils.Result * @author zhy * @date 2022/4/26 10:48 + * @V23 */ @PostMapping("/epmetuser/icresiuser/rent/updateimage") Result updateImage(@RequestBody RentTenantFormDTO formDTO); @@ -770,10 +784,17 @@ public interface EpmetUserOpenFeignClient { * @return com.epmet.commons.tools.utils.Result * @author zhy * @date 2022/4/26 10:48 + * @V23 */ @PostMapping("/epmetuser/icresiuser/rent/getrentresiuserinfo") Result getRentResiUserInfo(@RequestBody RentTenantDataFormDTO formDTO); + /** + * 【人房】房屋、居民统计列表数据 + * @param userDTO + * @return + * @V23 + */ @PostMapping("/epmetuser/icresiuser/userchartlist") Result> userChartList(@RequestBody UserChartFormDTO userDTO); @@ -781,6 +802,7 @@ public interface EpmetUserOpenFeignClient { * desc:条件获取房屋成员信息 * @param formDTO * @return + * @V23 */ @PostMapping("/epmetuser/icresiuser/getResiUserGroupHomeId") Result> getHouseMemberList(@RequestBody RentTenantDataFormDTO formDTO); @@ -789,6 +811,7 @@ public interface EpmetUserOpenFeignClient { * desc:更新居民所属 eg:所属网格等等 * @param formDTO * @return + * @V23 */ @PostMapping("/epmetuser/icresiuser/changeIcResiUserBelongTo") Result changeIcResiUserBelongTo(@RequestBody IcUserBelongToChangedFormDTO formDTO); @@ -797,6 +820,7 @@ public interface EpmetUserOpenFeignClient { * 使用身份证号查询家属信息 * @param idCard * @return + * @V23 */ @GetMapping("/epmetuser/icresiuser/findFamilyMemByIdCard/{id-card}") Result findFamilyMemByIdCard(@PathVariable("id-card") String idCard); @@ -805,6 +829,7 @@ public interface EpmetUserOpenFeignClient { * 身份证号查询居民信息 * @param idCard * @return + * @V23 */ @PostMapping("/epmetuser/icresiuser/getByResiIdCard/{idcard}") Result getByResiIdCard(@PathVariable("idcard") String idCard); @@ -814,6 +839,7 @@ public interface EpmetUserOpenFeignClient { * * @param idCard * @return + * @V23 */ @PostMapping("/epmetuser/icresiuser/getAllUserIds") Result> getAllUserIds(@RequestParam("idcard") String idCard, @RequestParam("customerId") String customerId); @@ -836,24 +862,51 @@ public interface EpmetUserOpenFeignClient { @PostMapping("/epmetuser/userresiinfo/getStaffAndResi") Result> getStaffAndResi(@RequestBody List userIds); + /** + * 党员管理,同步到居民信息 + * @V23 + * @param formDTO + * @return + */ @PostMapping("/epmetuser/icresiuser/icPartyMemberSync") Result icPartyMemberSync(@RequestBody IcPartyMemberDTO formDTO); + /** + * icVolunteerDataExtractionTask + * @param customerId + * @return 志愿者数据抽取 + * @V23 + */ @PostMapping("/epmetuser/icVolunteerPoly/volunteerDataExtraction/{customerId}") Result volunteerDataExtraction(@PathVariable("customerId") String customerId); + /** + * 获取用户绑定的房屋信息 + * @return + */ @PostMapping("/epmetuser/myHome/homeInfo") Result getHomeInfo(); + /** + * 获取居民信息里的志愿者 + * @V23 + * @param formDTO + * @return + */ @PostMapping("/epmetuser/icresiuser/getVolunteerList") Result> getVolunteerList(@RequestBody IcResiUserDTO formDTO); + /** + * @param icUserId + * @return 获取居民信息对应的居民端用户ID + * @V23 + */ @PostMapping("/epmetuser/icresiuser/getUserId/{icUserId}") Result> getUserId(@PathVariable("icUserId") String icUserId); /** * 获取录入居民的数量 - * + * @V23 * @Param formDTO * @Return {@link Result>} * @Author zhaoqifeng @@ -864,7 +917,7 @@ public interface EpmetUserOpenFeignClient { /** * desc: 同步数据,房内居民数量 类别统计数据量等只用客户id当条件 - * + * @V23 * @param customerId * @return com.epmet.commons.tools.utils.Result * @author LiuJanJun @@ -899,10 +952,16 @@ public interface EpmetUserOpenFeignClient { * 居民列表,非动态 * @param input * @return + * @V23 */ @PostMapping("/epmetuser/icresiuser/nonDynamic/listResi") Result> listResiNonDynamic(@RequestBody IcResiPageNonDynamicFormDTO input); + /** + * icUpdateYlfnTask + * @V23 + * @return 判定是否是育龄妇女 + */ @PostMapping("/epmetuser/icresiuser/updateYlfn") Result updateYlfn(); @@ -956,6 +1015,11 @@ public interface EpmetUserOpenFeignClient { @PostMapping("/epmetuser/dataSyncConfig/vaccineInfoScanTask") Result vaccineInfoScanTask(@RequestBody DataSyncTaskParam formDTO); + /** + * @V23 + * @param formDTO + * @return + */ @PostMapping("/epmetuser/icresiuser/rhzkList") Result> renHuCondition(@RequestBody RHZKStatisticsFormDTO formDTO); diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml index 036cb5946b..b3e82440ef 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml @@ -418,6 +418,8 @@ + + + SELECT + '事件' AS e, + '事件' AS e2, + p1.CATEGORY_CODE AS c, + p2.CATEGORY_CODE AS c2, + p1.CATEGORY_NAME AS n, + p2.CATEGORY_NAME AS n2, + p1.PARENT_CATEGORY_CODE AS pc1, + p2.PARENT_CATEGORY_CODE AS pc2, + p1.SCORE AS score1, + p2.SCORE AS score2 + FROM customer_project_category_dict p1,customer_project_category_dict p2 + WHERE p1.DEL_FLAG = '0' + AND p2.DEL_FLAG = '0' + AND p1.CUSTOMER_ID = #{customerId} + AND p2.CUSTOMER_ID = #{customerId} + AND p1.CATEGORY_CODE = p2.PARENT_CATEGORY_CODE + AND p1.CUSTOMER_TYPE = 'internal' + AND p2.CUSTOMER_TYPE = 'internal' + AND p1.IS_DISABLE = 'enable' + AND p2.IS_DISABLE = 'enable' + ORDER BY p1.SORT, p2.SORT + + + + + + + + + diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/basereport/form/EventInfoFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/basereport/form/EventInfoFormDTO.java index c54642b6f1..88eede71e8 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/basereport/form/EventInfoFormDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/basereport/form/EventInfoFormDTO.java @@ -4,6 +4,7 @@ import com.epmet.commons.tools.dto.form.PageFormDTO; import lombok.Data; import java.io.Serializable; +import java.util.Date; import java.util.List; /** @@ -27,4 +28,7 @@ public class EventInfoFormDTO extends PageFormDTO implements Serializable { * 2在完全初始化之后,由于eventreport_pingyin表没有客户ID,初始化其他客户的数据时候可以设2,直接新增 */ private String initFlag = "0"; + + private Date startTime; + private Date endTime; } diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/EventreportPingyinDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/EventreportPingyinDTO.java new file mode 100644 index 0000000000..05682f55a0 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/EventreportPingyinDTO.java @@ -0,0 +1,179 @@ +package com.epmet.dto.screen; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 平阴区事件上报中间表 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-07-22 + */ +@Data +public class EventreportPingyinDTO { + + private static final long serialVersionUID = 1L; + + /** + * 上报区县代码,参照6位行政区划代码 + */ + private String qxBm; + + /** + * 上报区县名称 + */ + private String qxMc; + + /** + * 网格编码,参照《山东省社会治理网格化智能工作平台数据标准》 + */ + private String gridCode; + + /** + * 网格名称 + */ + private String gridName; + + /** + * 事件编号,可以使用区县系统中的事件唯一识别码 + */ + private String eventCode; + + /** + * 事件名称 + */ + private String eventName; + + /** + * 事件类别,参照《山东省社会治理网格化智能工作平台数据标准》10.19 + */ + private String eventCategory; + + /** + * 上报网格员姓名 + */ + private String gridUserName; + + /** + * 上报网格员的身份证号码 + */ + private String gridUserCardid; + + /** + * 事件上报时间 + */ + private Date reportTime; + + /** + * 事件发生时间 + */ + private Date happenTime; + + /** + * 事件发生地点描述 + */ + private String happenPlace; + + /** + * 事件简述,详细一些,文字数量不少于10字 + */ + private String eventDescription; + + /** + * 事件办结方式,符合《标准》10.20 + */ + private String waysOfResolving; + + /** + * 必填 是否化解,填写Y、N(Y 是 N 否) + */ + private String successfulOrNo; + + /** + * 必填 是否办结,填写Y、N(Y 是 N 否) + */ + private String successfulDefuse; + + /** + * 办结层级,符合《标准》10.21 + */ + private String completeLevel; + + /** + * 办结时间,办结后填写 + */ + private Date completeTime; + + /** + * 事件发生位置经度,wgs84坐标系,请勿用火星坐标系,不得跑出辖区 + */ + private BigDecimal lng; + + /** + * 事件发生位置纬度,wgs84坐标系,请勿用火星坐标系,不得跑出辖区 + */ + private BigDecimal lat; + + /** + * 事件主要当事人姓名 + */ + private String name; + + /** + * 事件涉及人数 + */ + private Integer numberInvolved; + + /** + * 事件涉及单位名称 + */ + private String relatedUnites; + + /** + * 重点场所类别,符合《标准》10.25 + */ + private String keyAreaType; + + /** + * 宗教活动规模,符合《标准》10.26 + */ + private String religionScale; + + /** + * 宗教类别,符合《标准》10.27 + */ + private String religionType; + + /** + * 重点场所是否变动,填写Y、N(Y 是 N 否) + */ + private String isKeyareaState; + + /** + * 重点人员是否在当地,填写Y、N(Y 是 N 否) + */ + private String isKeypeopleLocate; + + /** + * 重点人员现状描述 + */ + private String keypeopleStatus; + + /** + * 例行工作编辑插入、更新时间,县市区填写 + */ + private Date updateTime; + + /** + * 事件是否删除,Y:是、N:否 + */ + private String isDel; + + /** + * 入库时间,自动生成,请勿设置 + */ + private Date recoredInsertTime; + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/GridstaffWorkInfoPingyinDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/GridstaffWorkInfoPingyinDTO.java new file mode 100644 index 0000000000..161a63e263 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/GridstaffWorkInfoPingyinDTO.java @@ -0,0 +1,87 @@ +package com.epmet.dto.screen; + +import lombok.Data; + +import java.util.Date; + +/** + * 平阴区网格员例行工作信息 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-07-22 + */ +@Data +public class GridstaffWorkInfoPingyinDTO { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private String id; + + /** + * 上报区县代码,参照6位行政区划代码 + */ + private String qxBm; + + /** + * 上报区县名称 + */ + private String qxMc; + + /** + * 网格编码 + */ + private String gridCode; + + /** + * 网格名称 + */ + private String gridName; + + private String gridId; + + /** + * 例行工作类型,应符合10.27中的例行工作类型 + */ + private String workType; + + /** + * 发生日期,格式为“YYYY-MM-DD” + */ + private Date happenTime; + + /** + * 基础信息主键,出租房巡查、重点场所巡查、刑满释放人员、社区矫正、吸毒人员、信访人员重点青少年和精神障碍者必填 + */ + private Integer baseInfoId; + + /** + * 有无变动(异常),Y:是、N:否 + */ + private String workResult; + + /** + * 说明 + */ + private String workContent; + + /** + * 例行工作编辑插入、更新时间,,县市区填写 + */ + private Date updateTime; + + /** + * 例行工作是否删除,Y:是、N:否 + */ + private String isDel; + + /** + * 入库时间,自动生成,请勿设置 + */ + private Date recoredInsertTime; + + private String happenTimeString; + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/form/SavePyEventDataFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/form/SavePyEventDataFormDTO.java new file mode 100644 index 0000000000..e415027135 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/form/SavePyEventDataFormDTO.java @@ -0,0 +1,30 @@ +package com.epmet.dto.screen.form;/** + * @author ZhaoQiFeng + * @date 2022/12/8 + * @apiNote + */ + +import com.epmet.dto.screen.EventreportPingyinDTO; +import com.epmet.dto.screen.GridstaffWorkInfoPingyinDTO; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2022/12/8 13:47 + */ +@Data +public class SavePyEventDataFormDTO implements Serializable { + private static final long serialVersionUID = 526763788231934112L; + /** + * 项目列表 + */ + private List projectList; + /** + * 例行工作列表 + */ + private List workList; +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java index ffd9da0f11..e6cff07c10 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java @@ -12,6 +12,7 @@ import com.epmet.dto.org.form.GridBaseInfoFormDTO; import com.epmet.dto.org.result.CustomerAgencyDTO; import com.epmet.dto.org.result.CustomerGridDTO; import com.epmet.dto.screen.form.InitCustomerIndexForm; +import com.epmet.dto.screen.form.SavePyEventDataFormDTO; import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO; import com.epmet.dto.stats.form.FactUserHouseFormDTO; import com.epmet.dto.user.form.StaffBaseInfoFormDTO; @@ -379,4 +380,7 @@ public interface DataStatisticalOpenFeignClient { @PostMapping("/data/stats/factAgencyUserHouseDaily/userHouseStatNeighborhood") Result userHouseStatNeighborhood(@RequestBody FactUserHouseFormDTO formDTO); + + @PostMapping("/data/stats/datareporting/saveData") + Result saveData(@RequestBody SavePyEventDataFormDTO formDTO); } diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java index a46ceb0635..7eb0e45316 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java @@ -13,6 +13,7 @@ import com.epmet.dto.org.form.GridBaseInfoFormDTO; import com.epmet.dto.org.result.CustomerAgencyDTO; import com.epmet.dto.org.result.CustomerGridDTO; import com.epmet.dto.screen.form.InitCustomerIndexForm; +import com.epmet.dto.screen.form.SavePyEventDataFormDTO; import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO; import com.epmet.dto.stats.form.FactUserHouseFormDTO; import com.epmet.dto.user.form.StaffBaseInfoFormDTO; @@ -372,4 +373,9 @@ public class DataStatisticalOpenFeignClientFallBack implements DataStatisticalOp public Result userHouseStatNeighborhood(FactUserHouseFormDTO formDTO) { return ModuleUtils.feignConError(ServiceConstant.DATA_STATISTICAL_SERVER, "userHouseStatNeighborhood", formDTO); } + + @Override + public Result saveData(SavePyEventDataFormDTO formDTO) { + return ModuleUtils.feignConError(ServiceConstant.DATA_STATISTICAL_SERVER, "SavePyEventDataFormDTO", formDTO); + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DataReportingController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DataReportingController.java index a61a208f34..54f5b02b41 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DataReportingController.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/DataReportingController.java @@ -7,6 +7,7 @@ import com.epmet.dto.basereport.result.EventInfoResultDTO; import com.epmet.dto.org.form.GridBaseInfoFormDTO; import com.epmet.dto.org.result.CustomerAgencyDTO; import com.epmet.dto.org.result.CustomerGridDTO; +import com.epmet.dto.screen.form.SavePyEventDataFormDTO; import com.epmet.dto.user.form.StaffBaseInfoFormDTO; import com.epmet.dto.user.param.MidPatrolFormDTO; import com.epmet.dto.user.result.GridUserInfoDTO; @@ -14,12 +15,14 @@ import com.epmet.dto.user.result.MidPatrolDetailResult; import com.epmet.dto.user.result.MidPatrolRecordResult; import com.epmet.opendata.dto.BaseDisputeProcessDTO; import com.epmet.service.DataReportingService; +import com.epmet.service.evaluationindex.screen.ScreenPyEventDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; import java.util.List; /** @@ -31,6 +34,8 @@ import java.util.List; public class DataReportingController { @Autowired private DataReportingService dataReportingService; + @Resource + private ScreenPyEventDataService screenPyEventDataService; /** * @Author sun @@ -106,4 +111,18 @@ public class DataReportingController { public Result> getEventInfoV2(@RequestBody(required = false) EventInfoFormDTO formDTO) { return new Result>().ok(dataReportingService.getEventInfoV2(formDTO)); } + + /** + * 保存同步到中间库的数据 + * + * @Param formDTO + * @Return {@link Result} + * @Author zhaoqifeng + * @Date 2022/12/8 16:03 + */ + @PostMapping("saveData") + public Result getEventInfoV2(@RequestBody(required = false) SavePyEventDataFormDTO formDTO) { + screenPyEventDataService.saveData(formDTO); + return new Result(); + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPyEventDataDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPyEventDataDao.java new file mode 100644 index 0000000000..ed3f74ccc9 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/screen/ScreenPyEventDataDao.java @@ -0,0 +1,16 @@ +package com.epmet.dao.evaluationindex.screen; + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.entity.evaluationindex.screen.ScreenPyEventDataEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 上报到市平台中间库的事件 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-12-08 + */ +@Mapper +public interface ScreenPyEventDataDao extends BaseDao { + +} \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPyEventDataEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPyEventDataEntity.java new file mode 100644 index 0000000000..8039234f00 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPyEventDataEntity.java @@ -0,0 +1,64 @@ +package com.epmet.entity.evaluationindex.screen; + +import com.baomidou.mybatisplus.annotation.TableName; + +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 上报到市平台中间库的事件 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-12-08 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("screen_py_event_data") +public class ScreenPyEventDataEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + ///** + // * 客户Id + // */ + //private String customerId; + // + ///** + // * 上级组织Id + // */ + //private String parentId; + // + ///** + // * 所有上级ID,用英文逗号分开 + // */ + //private String allParentIds; + + /** + * 事件Id + */ + private String eventId; + + /** + * 事件类别 上报事件:project;例行工作:work + */ + private String eventType; + + /** + * 事件时间 + */ + private Date eventCreateTime; + + /** + * 事件分类编码 + */ + private String categoryCode; + + ///** + // * 父类事件分类编码 + // */ + //private String parentCategoryCode; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPyEventDataService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPyEventDataService.java new file mode 100644 index 0000000000..3c060d2ad6 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenPyEventDataService.java @@ -0,0 +1,24 @@ +package com.epmet.service.evaluationindex.screen; + +import com.epmet.commons.mybatis.service.BaseService; +import com.epmet.dto.screen.form.SavePyEventDataFormDTO; +import com.epmet.entity.evaluationindex.screen.ScreenPyEventDataEntity; + +/** + * 上报到市平台中间库的事件 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-12-08 + */ +public interface ScreenPyEventDataService extends BaseService { + /** + * 保存同步到中间库的数据 + * + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/12/8 11:14 + */ + void saveData(SavePyEventDataFormDTO formDTO); + +} \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPyEventDataServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPyEventDataServiceImpl.java new file mode 100644 index 0000000000..01e9dbda03 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPyEventDataServiceImpl.java @@ -0,0 +1,76 @@ +package com.epmet.service.evaluationindex.screen.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.epmet.commons.dynamic.datasource.annotation.DataSource; +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.constant.DataSourceConstant; +import com.epmet.dao.evaluationindex.screen.ScreenPyEventDataDao; +import com.epmet.dto.screen.form.SavePyEventDataFormDTO; +import com.epmet.entity.evaluationindex.screen.ScreenPyEventDataEntity; +import com.epmet.service.evaluationindex.screen.ScreenPyEventDataService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +/** + * 上报到市平台中间库的事件 + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-12-08 + */ +@Slf4j +@Service +@DataSource(DataSourceConstant.EVALUATION_INDEX) +public class ScreenPyEventDataServiceImpl extends BaseServiceImpl implements ScreenPyEventDataService { + + /** + * 保存同步到中间库的数据 + * + * @param formDTO + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/12/8 11:14 + */ + @Override + public void saveData(SavePyEventDataFormDTO formDTO) { + if (CollectionUtils.isNotEmpty(formDTO.getProjectList())) { + formDTO.getProjectList().forEach(item -> { + ScreenPyEventDataEntity entity = new ScreenPyEventDataEntity(); + entity.setEventId(item.getEventCode().replace("py_", "")); + entity.setEventType("project"); + entity.setEventCreateTime(item.getReportTime()); + entity.setCategoryCode(item.getEventCategory()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ScreenPyEventDataEntity::getEventId, entity.getEventId()); + wrapper.eq(ScreenPyEventDataEntity::getEventType, entity.getEventType()); + ScreenPyEventDataEntity event = baseDao.selectOne(wrapper); + if (null == event) { + baseDao.insert(entity); + } else { + entity.setId(event.getId()); + baseDao.updateById(entity); + } + }); + } + if (CollectionUtils.isNotEmpty(formDTO.getWorkList())) { + formDTO.getWorkList().forEach(item -> { + ScreenPyEventDataEntity entity = new ScreenPyEventDataEntity(); + entity.setEventId(item.getId()); + entity.setEventType("work"); + entity.setEventCreateTime(item.getHappenTime()); + entity.setCategoryCode(item.getWorkType()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ScreenPyEventDataEntity::getEventId, entity.getEventId()); + wrapper.eq(ScreenPyEventDataEntity::getEventType, entity.getEventType()); + ScreenPyEventDataEntity event = baseDao.selectOne(wrapper); + if (null == event) { + baseDao.insert(entity); + } else { + entity.setId(event.getId()); + baseDao.updateById(entity); + } + }); + } + } +} \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPyEventDataDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPyEventDataDao.xml new file mode 100644 index 0000000000..9f07fd4b0b --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenPyEventDataDao.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/EventreportPingyinController.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/EventreportPingyinController.java index cc44f4c5b8..5969fcc7cb 100755 --- a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/EventreportPingyinController.java +++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/EventreportPingyinController.java @@ -36,4 +36,17 @@ public class EventreportPingyinController { return new Result(); } + /** + * 将数据同步到平阴库 + * @Param formDTO + * @Return {@link Result} + * @Author zhaoqifeng + * @Date 2022/12/9 14:15 + */ + @PostMapping("saveData") + public Result saveData(@RequestBody(required = false) EventInfoFormDTO formDTO) { + eventreportPingyinService.saveData(formDTO); + return new Result(); + } + } diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/GridstaffWorkInfoPingyinController.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/GridstaffWorkInfoPingyinController.java index 3dd7d54d03..f209818c61 100755 --- a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/GridstaffWorkInfoPingyinController.java +++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/controller/GridstaffWorkInfoPingyinController.java @@ -1,20 +1,14 @@ package com.epmet.opendata.controller; -import com.epmet.commons.tools.aop.NoRepeatSubmit; -import com.epmet.commons.tools.page.PageData; -import com.epmet.commons.tools.utils.ExcelUtils; import com.epmet.commons.tools.utils.Result; -import com.epmet.commons.tools.validator.AssertUtils; -import com.epmet.commons.tools.validator.ValidatorUtils; -import com.epmet.commons.tools.validator.group.AddGroup; -import com.epmet.commons.tools.validator.group.UpdateGroup; -import com.epmet.commons.tools.validator.group.DefaultGroup; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import com.epmet.dto.basereport.form.EventInfoFormDTO; +import com.epmet.opendata.service.GridstaffWorkInfoPingyinService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; -import javax.servlet.http.HttpServletResponse; -import java.util.List; -import java.util.Map; +import javax.annotation.Resource; /** @@ -27,6 +21,20 @@ import java.util.Map; @RequestMapping("gridstaffWorkInfoPingyin") public class GridstaffWorkInfoPingyinController { + @Resource + private GridstaffWorkInfoPingyinService gridstaffWorkInfoPingyinService; + /** + * 将数据同步到平阴库 + * @Param formDTO + * @Return {@link Result} + * @Author zhaoqifeng + * @Date 2022/12/9 14:15 + */ + @PostMapping("saveData") + public Result saveData(@RequestBody(required = false) EventInfoFormDTO formDTO) { + gridstaffWorkInfoPingyinService.saveData(formDTO); + return new Result(); + } } diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/EventreportPingyinService.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/EventreportPingyinService.java index d2fe6c88f2..9091b7876e 100755 --- a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/EventreportPingyinService.java +++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/EventreportPingyinService.java @@ -20,4 +20,13 @@ public interface EventreportPingyinService extends BaseService list = result.getData(); saveEvent(list, formDTO.getInitFlag()); + //将同步的数据保存 + SavePyEventDataFormDTO savePyEventData = new SavePyEventDataFormDTO(); + savePyEventData.setProjectList(ConvertUtils.sourceToTarget(list, EventreportPingyinDTO.class)); + dataStatisticalOpenFeignClient.saveData(savePyEventData); //分批次循环 while (CollectionUtils.isNotEmpty(list) && list.size() == formDTO.getPageSize()) { formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE); result = dataStatisticalOpenFeignClient.getEventInfoV2(formDTO); list = result.getData(); saveEvent(list, formDTO.getInitFlag()); + //将同步的数据保存 + savePyEventData = new SavePyEventDataFormDTO(); + savePyEventData.setProjectList(ConvertUtils.sourceToTarget(list, EventreportPingyinDTO.class)); + dataStatisticalOpenFeignClient.saveData(savePyEventData); } + + + } + + /** + * 将数据同步到平阴库 + * + * @param formDTO + * @Param formDTO + * @Return + * @Author zhaoqifeng + * @Date 2022/12/9 14:16 + */ + @Override + public void saveData(EventInfoFormDTO formDTO) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.ge(EventreportPingyinEntity::getReportTime, formDTO.getStartTime()); + wrapper.le(EventreportPingyinEntity::getReportTime, formDTO.getEndTime()); + List list = baseDao.selectList(wrapper); + List> partition = ListUtils.partition(list, NumConstant.ONE_THOUSAND); + partition.forEach(part -> { + //将同步的数据保存 + SavePyEventDataFormDTO savePyEventData = new SavePyEventDataFormDTO(); + savePyEventData.setProjectList(ConvertUtils.sourceToTarget(part, EventreportPingyinDTO.class)); + dataStatisticalOpenFeignClient.saveData(savePyEventData); + }); } private void saveEvent(List list, String initFlag) { diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java index 32511e267a..3577f3311d 100755 --- a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java +++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java @@ -13,24 +13,30 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.StrUtil; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.AddGroup; +import com.epmet.dto.basereport.form.EventInfoFormDTO; import com.epmet.dto.form.patrol.PatrolQueryFormDTO; import com.epmet.dto.result.PatrolRoutineWorkResult; +import com.epmet.dto.screen.GridstaffWorkInfoPingyinDTO; +import com.epmet.dto.screen.form.SavePyEventDataFormDTO; +import com.epmet.feign.DataStatisticalOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.opendata.dao.GridstaffWorkInfoPingyinDao; import com.epmet.opendata.dto.form.UpsertPatrolRecordForm; import com.epmet.opendata.entity.GridstaffWorkInfoPingyinEntity; import com.epmet.opendata.service.GridstaffWorkInfoPingyinService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 平阴区网格员例行工作信息 @@ -44,6 +50,8 @@ public class GridstaffWorkInfoPingyinServiceImpl extends BaseServiceImpl data; + do { + Result> record = epmetUserOpenFeignClient.getPatrolRoutineWorkListV2(midPatrolFormDTO); + if (record == null || !record.success()) { + log.warn("获取例行工作记录V2失败,param:{}", JSON.toJSONString(midPatrolFormDTO)); + throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode()); + } + data = record.getData(); + if (CollectionUtils.isNotEmpty(record.getData())) { + List newList = new ArrayList<>(); + data.forEach(item -> { + if (StringUtils.isBlank(item.getGridId())){ + return; + } + GridInfoCache gridInfo = CustomerOrgRedis.getGridInfo(item.getGridId()); + if (null == gridInfo) { + return; + } + item.setGridCode(gridInfo.getCode()); + if (StringUtils.isNotBlank(item.getGridCode())) { + newList.add(item); + } + }); + List list = newList.stream().map(item -> { + GridstaffWorkInfoPingyinDTO dto = new GridstaffWorkInfoPingyinDTO(); + dto.setId(item.getId()); + dto.setHappenTime(DateUtils.parseDate(item.getHappenTime().concat(" 00:00:00"), DateUtils.DATE_PATTERN)); + dto.setWorkType(item.getWorkTypeSecondCode()); + return dto; + }).collect(Collectors.toList()); + //将同步的数据保存 + SavePyEventDataFormDTO savePyEventData = new SavePyEventDataFormDTO(); + savePyEventData.setWorkList(list); + dataStatisticalOpenFeignClient.saveData(savePyEventData); + } + midPatrolFormDTO.setPageNo(midPatrolFormDTO.getPageNo() + 1); + } while (data.size() == NumConstant.ONE_THOUSAND); + } + /** * Desc: 数据存入 * @@ -112,11 +174,17 @@ public class GridstaffWorkInfoPingyinServiceImpl extends BaseServiceImpl list) { List insertList = new ArrayList<>(); + List newList = new ArrayList<>(); list.forEach(o -> { if (StringUtils.isBlank(o.getGridCode())) { return; } insertList.add(buildNewEntity(o)); + GridstaffWorkInfoPingyinDTO dto = new GridstaffWorkInfoPingyinDTO(); + dto.setId(o.getId()); + dto.setHappenTime(DateUtils.parseDate(o.getHappenTime().concat(" 00:00:00"), DateUtils.DATE_PATTERN)); + dto.setWorkType(o.getWorkTypeSecondCode()); + newList.add(dto); }); //insert if (CollectionUtils.isEmpty(insertList)) { @@ -124,6 +192,10 @@ public class GridstaffWorkInfoPingyinServiceImpl extends BaseServiceImpl Date: Tue, 13 Dec 2022 16:06:04 +0800 Subject: [PATCH 098/111] =?UTF-8?q?=E6=8F=90=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../indexcollect/ScreenPyHistoryScoreDTO.java | 95 ++++++++++++ .../ScreenPyHistoryScoreDetailDTO.java | 126 +++++++++++++++ .../form/HistoryScoreComputeFormDTO.java | 42 +++++ .../form/HistoryScoreFormDTO.java | 99 ++++++++++++ .../form/HistoryScoreListFormDTO.java | 47 ++++++ .../result/HistoryScoreComputeResultDTO.java | 24 +++ .../result/HistoryScoreDetailResultDTO.java | 103 +++++++++++++ .../result/HistoryScoreListResultDTO.java | 33 ++++ .../ScreenPyHistoryScoreController.java | 123 +++++++++++++++ .../indexcoll/ScreenPyHistoryScoreDao.java | 36 +++++ .../ScreenPyHistoryScoreDetailDao.java | 34 +++++ .../ScreenPyHistoryScoreDetailEntity.java | 94 ++++++++++++ .../indexcoll/ScreenPyHistoryScoreEntity.java | 64 ++++++++ .../ScreenPyHistoryScoreDetailService.java | 10 ++ .../ScreenPyHistoryScoreService.java | 30 ++++ ...ScreenPyHistoryScoreDetailServiceImpl.java | 27 ++++ .../impl/ScreenPyHistoryScoreServiceImpl.java | 143 ++++++++++++++++++ .../indexcoll/ScreenPyHistoryScoreDao.xml | 32 ++++ .../ScreenPyHistoryScoreDetailDao.xml | 18 +++ 19 files changed, 1180 insertions(+) create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDetailDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailEntity.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreEntity.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreService.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDTO.java new file mode 100644 index 0000000000..55e7648c2b --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDTO.java @@ -0,0 +1,95 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dto.indexcollect; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 平阴历史得分主表 + * + * @author generator generator@elink-cn.com + */ +@Data +public class ScreenPyHistoryScoreDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID 主键 + */ + private String id; + + /** + * 客户Id + */ + private String customerId; + + /** + * 标题 + */ + private String title; + + /** + * 起始时间 + */ + private Date startTime; + + /** + * 截止时间 + */ + private Date endTime; + + /** + * 发布时间 + */ + private Date releaseTime; + + /** + * 删除标识 0未删除;1已删除 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDetailDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDetailDTO.java new file mode 100644 index 0000000000..b8e0cf7132 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyHistoryScoreDetailDTO.java @@ -0,0 +1,126 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dto.indexcollect; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 平阴历史得分明细表 + * + * @author generator generator@elink-cn.com + */ +@Data +public class ScreenPyHistoryScoreDetailDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID 主键 + */ + private String id; + + /** + * 客户Id + */ + private String customerId; + + /** + * screen_py_history_score.id + */ + private String historyScoreId; + + /** + * 街道组织Id + */ + private String agencyId; + + /** + * 街道名称 + */ + private String agencyName; + + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + + /** + * 事件赋分 + */ + private BigDecimal sjff; + + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + + /** + * 日核周调 + */ + private BigDecimal rhzt; + + /** + * 亮点工作 + */ + private BigDecimal ldgz; + + /** + * 其他工作 + */ + private BigDecimal qtgz; + + /** + * 能力得分 + */ + private BigDecimal nldf; + + /** + * 删除标识 0未删除;1已删除 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java new file mode 100644 index 0000000000..b5b030e4a1 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java @@ -0,0 +1,42 @@ +package com.epmet.dto.indexcollect.form; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class HistoryScoreComputeFormDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface Compute extends CustomerClientShowGroup {} + + /** + * 组织Id + */ + @NotBlank(message = "组织Id不能为空", groups = Compute.class) + private String agencyId; + /** + * 计算类型 grid:网格活跃度 event:事件赋分 + */ + @NotBlank(message = "计算类型不能为空", groups = Compute.class) + private String type; + /** + * 起始时间 + */ + private Date startTime; + /** + * 截止时间 + */ + private Date endTime; + + private String customerId; + private String userId; + + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java new file mode 100644 index 0000000000..6b4964a53b --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java @@ -0,0 +1,99 @@ +package com.epmet.dto.indexcollect.form; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class HistoryScoreFormDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface Add extends CustomerClientShowGroup {} + public interface Edit extends CustomerClientShowGroup {} + + /** + * id + */ + @NotBlank(message = "标题不能为空", groups = Edit.class) + private String id; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空", groups = Add.class) + private String title; + + /** + * 起始时间 + */ + private Date startTime; + + /** + * 截止时间 + */ + private Date endTime; + + /** + * 截止时间 + */ + private List detailList; + + private String customerId; + private String userId; + + + @Data + public static class Detail implements Serializable { + /** + * 街道组织Id + */ + private String agencyId; + + /** + * 街道名称 + */ + private String agencyName; + + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + + /** + * 事件赋分 + */ + private BigDecimal sjff; + + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + + /** + * 日核周调 + */ + private BigDecimal rhzt; + + /** + * 亮点工作 + */ + private BigDecimal ldgz; + + /** + * 其他工作 + */ + private BigDecimal qtgz; + + /** + * 能力得分 + */ + private BigDecimal nldf; + } + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java new file mode 100644 index 0000000000..f443bdd220 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java @@ -0,0 +1,47 @@ +package com.epmet.dto.indexcollect.form; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class HistoryScoreListFormDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标题 + */ + private String title; + + /** + * 起始时间 + */ + private Date startTime; + + /** + * 截止时间 + */ + private Date endTime; + + /** + * 当前页 + */ + private Integer pageNo = 1; + + /** + * 每页记录数 + */ + private Integer pageSize = 20; + + /** + * 是否分页【true分 false不分】 + */ + private Boolean isPage; + + private String customerId; + private String userId; + + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java new file mode 100644 index 0000000000..1295b36036 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java @@ -0,0 +1,24 @@ +package com.epmet.dto.indexcollect.result; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class HistoryScoreComputeResultDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 组织Id + */ + private String agencyId; + + /** + * 分数 + */ + private BigDecimal score; + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java new file mode 100644 index 0000000000..97a60160b4 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java @@ -0,0 +1,103 @@ +package com.epmet.dto.indexcollect.result; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class HistoryScoreDetailResultDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface Add extends CustomerClientShowGroup {} + public interface Edit extends CustomerClientShowGroup {} + + /** + * id + */ + private String id; + + /** + * 客户Id + */ + private String customerId; + + /** + * 标题 + */ + private String title; + + /** + * 起始时间 + */ + private Date startTime; + + /** + * 截止时间 + */ + private Date endTime; + + /** + * 发布时间 + */ + private Date releaseTime; + + /** + * 截止时间 + */ + private List detailList; + + @Data + public static class Detail implements Serializable { + /** + * 街道组织Id + */ + private String agencyId; + + /** + * 街道名称 + */ + private String agencyName; + + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + + /** + * 事件赋分 + */ + private BigDecimal sjff; + + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + + /** + * 日核周调 + */ + private BigDecimal rhzt; + + /** + * 亮点工作 + */ + private BigDecimal ldgz; + + /** + * 其他工作 + */ + private BigDecimal qtgz; + + /** + * 能力得分 + */ + private BigDecimal nldf; + } + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java new file mode 100644 index 0000000000..719c9ba594 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java @@ -0,0 +1,33 @@ +package com.epmet.dto.indexcollect.result; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class HistoryScoreListResultDTO implements Serializable { + private static final long serialVersionUID = -4316054054019675419L; + + /** + * id + */ + private String id; + /** + * 标题 + */ + private String title; + /** + * 时间区间 + */ + private String time; + /** + * 发布者 + */ + private String createdBy; + private String createdById; + /** + * 发布时间 + */ + private String releaseTime; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java new file mode 100644 index 0000000000..80ec8ea225 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java @@ -0,0 +1,123 @@ +package com.epmet.controller; + +import com.epmet.commons.tools.annotation.LoginUser; +import com.epmet.commons.tools.aop.NoRepeatSubmit; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.indexcollect.form.HistoryScoreComputeFormDTO; +import com.epmet.dto.indexcollect.form.HistoryScoreFormDTO; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreComputeResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyHistoryScoreService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 平阴历史得分主表 + * + * @author generator generator@elink-cn.com + */ +@Slf4j +@RestController +@RequestMapping("screenPyHistoryScore") +public class ScreenPyHistoryScoreController { + + @Autowired + private ScreenPyHistoryScoreService screenPyHistoryScoreService; + + + @RequestMapping("list") + public Result> list(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreListFormDTO formDTO) { + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + return new Result>().ok(screenPyHistoryScoreService.list(formDTO)); + } + + @NoRepeatSubmit + @PostMapping("add") + public Result save(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreFormDTO dto) { + ValidatorUtils.validateEntity(dto, HistoryScoreFormDTO.Add.class); + dto.setCustomerId(tokenDto.getCustomerId()); + dto.setUserId(tokenDto.getUserId()); + screenPyHistoryScoreService.save(dto); + return new Result(); + } + + @PostMapping("edit") + public Result update(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreFormDTO dto) { + ValidatorUtils.validateEntity(dto, HistoryScoreFormDTO.Edit.class); + dto.setCustomerId(tokenDto.getCustomerId()); + dto.setUserId(tokenDto.getUserId()); + screenPyHistoryScoreService.update(dto); + return new Result(); + } + + @PostMapping("deleteById") + public Result deleteById(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreFormDTO dto) { + ValidatorUtils.validateEntity(dto, HistoryScoreFormDTO.Edit.class); + dto.setCustomerId(tokenDto.getCustomerId()); + dto.setUserId(tokenDto.getUserId()); + screenPyHistoryScoreService.deleteById(dto); + return new Result(); + } + + @RequestMapping("detail") + public Result detail(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, HistoryScoreFormDTO.Edit.class); + formDTO.setCustomerId(tokenDto.getCustomerId()); + return new Result().ok(screenPyHistoryScoreService.detail(formDTO)); + } + + /*@PostMapping("export") + public void export(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreListFormDTO formDTO, HttpServletResponse response) throws IOException { + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + formDTO.setIsPage(false); + ExcelWriter excelWriter = null; + formDTO.setPageNo(NumConstant.ONE); + formDTO.setPageSize(NumConstant.TEN_THOUSAND); + try { + String fileName = "迁入管理" + DateUtils.format(new Date()) + ".xlsx"; + excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcMoveInRecordExcel.class).build(); + WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build(); + PageData data = null; + List list = null; + do { + data = screenPyHistoryScoreService.list(formDTO); + list = ConvertUtils.sourceToTarget(data.getList(), IcMoveInRecordExcel.class); + formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE); + excelWriter.write(list, writeSheet); + } while (CollectionUtils.isNotEmpty(list) && list.size() == formDTO.getPageSize()); + } catch (EpmetException e) { + response.reset(); + response.setCharacterEncoding("UTF-8"); + response.setHeader("content-type", "application/json; charset=UTF-8"); + PrintWriter printWriter = response.getWriter(); + Result result = new Result<>().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), e.getMsg()); + printWriter.write(JSON.toJSONString(result)); + printWriter.close(); + } catch (Exception e) { + log.error("export exception", e); + } finally { + if (excelWriter != null) { + excelWriter.finish(); + } + } + }*/ + + @RequestMapping("computescore") + public Result computeScore(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreComputeFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, HistoryScoreComputeFormDTO.Compute.class); + formDTO.setCustomerId(tokenDto.getCustomerId()); + return new Result().ok(screenPyHistoryScoreService.computeScore(formDTO)); + } + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java new file mode 100644 index 0000000000..cfe869723b --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java @@ -0,0 +1,36 @@ +package com.epmet.dao.evaluationindex.indexcoll; /** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreEntity; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 平阴历史得分主表 + * + * @author generator generator@elink-cn.com + */ +@Mapper +public interface ScreenPyHistoryScoreDao extends BaseDao { + + List selectHistoryScoreList(HistoryScoreListFormDTO formDTO); +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java new file mode 100644 index 0000000000..50823809c2 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java @@ -0,0 +1,34 @@ +package com.epmet.dao.evaluationindex.indexcoll; /** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 平阴历史得分明细表 + * + * @author generator generator@elink-cn.com + */ +@Mapper +public interface ScreenPyHistoryScoreDetailDao extends BaseDao { + + void delByHistoryScoreId(@Param("historyScoreId") String historyScoreId, @Param("userId") String userId); + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailEntity.java new file mode 100644 index 0000000000..9d5b7b9851 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailEntity.java @@ -0,0 +1,94 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.entity.evaluationindex.indexcoll; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 平阴历史得分明细表 + * + * @author generator generator@elink-cn.com + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("screen_py_history_score_detail") +public class ScreenPyHistoryScoreDetailEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户Id + */ + private String customerId; + + /** + * screen_py_history_score.id + */ + private String historyScoreId; + + /** + * 街道组织Id + */ + private String agencyId; + + /** + * 街道名称 + */ + private String agencyName; + + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + + /** + * 事件赋分 + */ + private BigDecimal sjff; + + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + + /** + * 日核周调 + */ + private BigDecimal rhzt; + + /** + * 亮点工作 + */ + private BigDecimal ldgz; + + /** + * 其他工作 + */ + private BigDecimal qtgz; + + /** + * 能力得分 + */ + private BigDecimal nldf; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreEntity.java new file mode 100644 index 0000000000..db484429cd --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyHistoryScoreEntity.java @@ -0,0 +1,64 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.entity.evaluationindex.indexcoll; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 平阴历史得分主表 + * + * @author generator generator@elink-cn.com + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("screen_py_history_score") +public class ScreenPyHistoryScoreEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户Id + */ + private String customerId; + + /** + * 标题 + */ + private String title; + + /** + * 起始时间 + */ + private Date startTime; + + /** + * 截止时间 + */ + private Date endTime; + + /** + * 发布时间 + */ + private Date releaseTime; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java new file mode 100644 index 0000000000..e12ce41e1c --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java @@ -0,0 +1,10 @@ +package com.epmet.service.evaluationindex.indexcoll; + +/** + * 平阴历史得分明细表 + * + * @author generator generator@elink-cn.com + */ +public interface ScreenPyHistoryScoreDetailService { + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreService.java new file mode 100644 index 0000000000..c92ba2cfaa --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreService.java @@ -0,0 +1,30 @@ +package com.epmet.service.evaluationindex.indexcoll; + +import com.epmet.commons.tools.page.PageData; +import com.epmet.dto.indexcollect.form.HistoryScoreComputeFormDTO; +import com.epmet.dto.indexcollect.form.HistoryScoreFormDTO; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreComputeResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.dto.result.IcMoveInListResultDTO; + +/** + * 平阴历史得分主表 + * + * @author generator generator@elink-cn.com + */ +public interface ScreenPyHistoryScoreService { + + PageData list(HistoryScoreListFormDTO formDTO); + + void save(HistoryScoreFormDTO dto); + + void update(HistoryScoreFormDTO dto); + + void deleteById(HistoryScoreFormDTO dto); + + HistoryScoreDetailResultDTO detail(HistoryScoreFormDTO formDTO); + + HistoryScoreComputeResultDTO computeScore(HistoryScoreComputeFormDTO formDTO); +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java new file mode 100644 index 0000000000..ace200d468 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java @@ -0,0 +1,27 @@ +package com.epmet.service.evaluationindex.indexcoll.impl; + +import com.epmet.commons.dynamic.datasource.annotation.DataSource; +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.constant.DataSourceConstant; +import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailDao; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailEntity; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 平阴历史得分明细表 + * + * @author generator generator@elink-cn.com + */ +@Slf4j +@Service +@DataSource(DataSourceConstant.EVALUATION_INDEX_READ) +public class ScreenPyHistoryScoreDetailServiceImpl extends BaseServiceImpl implements ScreenPyHistoryScoreDetailService { + + @Autowired + private ScreenPyHistoryScoreDetailDao screenPyHistoryScoreDetailDao; + + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java new file mode 100644 index 0000000000..51b81f888b --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java @@ -0,0 +1,143 @@ +package com.epmet.service.evaluationindex.indexcoll.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.epmet.commons.dynamic.datasource.annotation.DataSource; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.constant.DataSourceConstant; +import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDao; +import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailDao; +import com.epmet.dto.indexcollect.ScreenPyHistoryScoreDetailDTO; +import com.epmet.dto.indexcollect.form.HistoryScoreComputeFormDTO; +import com.epmet.dto.indexcollect.form.HistoryScoreFormDTO; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreComputeResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.dto.result.IcMoveInListResultDTO; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailEntity; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreEntity; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailService; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyHistoryScoreService; +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; + +import java.util.ArrayList; +import java.util.List; + +/** + * 平阴历史得分主表 + * + * @author generator generator@elink-cn.com + */ +@Slf4j +@Service +@DataSource(DataSourceConstant.EVALUATION_INDEX_READ) +public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreService { + + @Autowired + private ScreenPyHistoryScoreDao screenPyHistoryScoreDao; + @Autowired + private ScreenPyHistoryScoreDetailServiceImpl screenPyHistoryScoreDetailServiceImpl; + @Autowired + private ScreenPyHistoryScoreDetailDao screenPyHistoryScoreDetailDao; + + + @Override + public PageData list(HistoryScoreListFormDTO formDTO) { + PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()); + List list = screenPyHistoryScoreDao.selectHistoryScoreList(formDTO); + PageInfo pageInfo = new PageInfo<>(list); + return new PageData<>(list, pageInfo.getTotal()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(HistoryScoreFormDTO formDTO) { + //1.主表新增数据 + ScreenPyHistoryScoreEntity entity = ConvertUtils.sourceToTarget(formDTO, ScreenPyHistoryScoreEntity.class); + screenPyHistoryScoreDao.insert(entity); + //2.明细表新增数据 + List list = new ArrayList<>(); + formDTO.getDetailList().forEach(dto -> { + ScreenPyHistoryScoreDetailEntity detailEntity = ConvertUtils.sourceToTarget(dto, ScreenPyHistoryScoreDetailEntity.class); + detailEntity.setCustomerId(formDTO.getCustomerId()); + detailEntity.setHistoryScoreId(entity.getId()); + list.add(detailEntity); + }); + screenPyHistoryScoreDetailServiceImpl.insertBatch(list); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(HistoryScoreFormDTO formDTO) { + ScreenPyHistoryScoreEntity entity = screenPyHistoryScoreDao.selectById(formDTO.getId()); + if (entity == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查到相关信息", "未查到相关信息"); + } + //1.更新主表 + ScreenPyHistoryScoreEntity newEntity = ConvertUtils.sourceToTarget(formDTO, ScreenPyHistoryScoreEntity.class); + newEntity.setId(entity.getId()); + screenPyHistoryScoreDao.updateById(newEntity); + //2.更新字表 字表先删后增 + List list = new ArrayList<>(); + formDTO.getDetailList().forEach(dto -> { + ScreenPyHistoryScoreDetailEntity detailEntity = ConvertUtils.sourceToTarget(dto, ScreenPyHistoryScoreDetailEntity.class); + detailEntity.setCustomerId(entity.getCustomerId()); + detailEntity.setHistoryScoreId(entity.getId()); + list.add(detailEntity); + }); + screenPyHistoryScoreDetailDao.delByHistoryScoreId(formDTO.getId(), formDTO.getUserId()); + screenPyHistoryScoreDetailServiceImpl.insertBatch(list); + } + + @Override + public void deleteById(HistoryScoreFormDTO formDTO) { + ScreenPyHistoryScoreEntity entity = screenPyHistoryScoreDao.selectById(formDTO.getId()); + if (entity == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查到相关信息", "未查到相关信息"); + } + entity.setDelFlag("1"); + screenPyHistoryScoreDao.updateById(entity); + screenPyHistoryScoreDetailDao.delByHistoryScoreId(formDTO.getId(), formDTO.getUserId()); + } + + @Override + public HistoryScoreDetailResultDTO detail(HistoryScoreFormDTO formDTO) { + HistoryScoreDetailResultDTO resultDTO = new HistoryScoreDetailResultDTO(); + //1.主表数据 + ScreenPyHistoryScoreEntity entity = screenPyHistoryScoreDao.selectById(formDTO.getId()); + if (entity == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查到相关信息", "未查到相关信息"); + } + resultDTO = ConvertUtils.sourceToTarget(entity, HistoryScoreDetailResultDTO.class); + //2.字表数据 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ScreenPyHistoryScoreDetailEntity::getHistoryScoreId, formDTO.getId()); + wrapper.eq(ScreenPyHistoryScoreDetailEntity::getDelFlag, "1"); + List list = screenPyHistoryScoreDetailDao.selectList(wrapper); + List detailList = ConvertUtils.sourceToTarget(list, HistoryScoreDetailResultDTO.Detail.class); + resultDTO.setDetailList(detailList); + return resultDTO; + } + + @Override + public HistoryScoreComputeResultDTO computeScore(HistoryScoreComputeFormDTO formDTO) { + HistoryScoreComputeResultDTO resultDTO = new HistoryScoreComputeResultDTO(); + if ("grid".equals(formDTO.getType())) { + //网格活跃度每周得分=(活跃网格数/本街镇网格数)x100+(正常网格数/本街镇网格数)x80 + //本街镇网格数基于本街镇基础网格总数进行计算,不包含专属网格 + + } else if ("event".equals(formDTO.getType())) { + //事件赋分每周得分=(活跃网格数/末级网格数)x100+(正常运行网格数/末级网格数)x80 + //1周内每个末级网格有五天及五天以上上传事件或开展例行工作的为活跃网格;有2天及2天以上,5天以下上传事件或开展例行工作的为正常运行网格;只有1天上传事件或开展例行工作的为僵尸网格 + } + return resultDTO; + } +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml new file mode 100644 index 0000000000..7a79fbaa32 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml new file mode 100644 index 0000000000..fa2d907120 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml @@ -0,0 +1,18 @@ + + + + + + + UPDATE + screen_py_history_score_detail + SET + updated_by = #{userId}, + updated_time = NOW(), + del_flag = '1' + WHERE + history_score_id = #{historyScoreId} + AND del_flag = '0' + + + From e5b1df2c4b8ea19bada2c7c4a28f61fd3ab8edf3 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Tue, 13 Dec 2022 17:26:54 +0800 Subject: [PATCH 099/111] =?UTF-8?q?=E6=8F=90=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/govorg/form/GridLivelyFormDTO.java | 3 ++ .../feign/DataAggregatorOpenFeignClient.java | 7 ++++ ...DataAggregatorOpenFeignClientFallback.java | 8 ++++ .../govorg/impl/GovOrgServiceImpl.java | 7 +++- .../form/HistoryScoreComputeFormDTO.java | 10 +++-- .../result/HistoryScoreComputeResultDTO.java | 4 +- .../data-statistical-server/pom.xml | 6 +++ .../impl/ScreenPyHistoryScoreServiceImpl.java | 40 ++++++++++++++++--- 8 files changed, 72 insertions(+), 13 deletions(-) diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/GridLivelyFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/GridLivelyFormDTO.java index 6c1f23785b..a6f2026789 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/GridLivelyFormDTO.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/GridLivelyFormDTO.java @@ -33,4 +33,7 @@ public class GridLivelyFormDTO implements Serializable { @NotBlank(message = "结束查询时间不能为空", groups = {Grid.class}) private String endTime; + //数据区分 type=historyScore表示以平阴中间库网格数据为准来计算 + private String type = ""; + } diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/DataAggregatorOpenFeignClient.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/DataAggregatorOpenFeignClient.java index f979ead709..8d2624af35 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/DataAggregatorOpenFeignClient.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/DataAggregatorOpenFeignClient.java @@ -7,6 +7,7 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.dataaggre.dto.epmetuser.form.ResisByPolicyRulesFormDTO; import com.epmet.dataaggre.dto.epmetuser.result.ResiByPolicyInfoResultDTO; import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; +import com.epmet.dataaggre.dto.govorg.result.GridLivelyResultDTO; import com.epmet.dataaggre.feign.impl.DataAggregatorOpenFeignClientFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -33,4 +34,10 @@ public interface DataAggregatorOpenFeignClient { */ @PostMapping("data/aggregator/icuser/listByPolicyRules") Result> listByPolicyRules(@RequestBody ResisByPolicyRulesFormDTO input); + + /** + * 网格活跃度统计 + */ + @PostMapping(value = "data/aggregator/org/gridlively") + Result> grdiLively(@RequestBody GridLivelyFormDTO form); } diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallback.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallback.java index 2cec07e6b3..c180033e19 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallback.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/feign/impl/DataAggregatorOpenFeignClientFallback.java @@ -7,8 +7,11 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.dataaggre.dto.epmetuser.form.ResisByPolicyRulesFormDTO; import com.epmet.dataaggre.dto.epmetuser.result.ResiByPolicyInfoResultDTO; import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; +import com.epmet.dataaggre.dto.govorg.result.GridLivelyResultDTO; import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient; +import java.util.List; + public class DataAggregatorOpenFeignClientFallback implements DataAggregatorOpenFeignClient { /** * 定时任务导出网格活跃统计表 @@ -24,4 +27,9 @@ public class DataAggregatorOpenFeignClientFallback implements DataAggregatorOpen public Result> listByPolicyRules(ResisByPolicyRulesFormDTO input) { return ModuleUtils.feignConError(ServiceConstant.DATA_AGGREGATOR_SERVER, "listByPolicyRules", input); } + + @Override + public Result> grdiLively(GridLivelyFormDTO form) { + return ModuleUtils.feignConError(ServiceConstant.DATA_AGGREGATOR_SERVER, "grdiLively",form); + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java index 196126509c..67fd1cd832 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java @@ -707,7 +707,12 @@ public class GovOrgServiceImpl implements GovOrgService { @Override public List grdiLively(GridLivelyFormDTO formDTO) { //1.查询当前组织的直属下级组织列表及组织下的网格总数 - LinkedList subList = customerAgencyDao.subAgencyListAndGridSumNum(formDTO.getAgencyId()); + LinkedList subList = new LinkedList<>(); + if(StringUtils.isNotBlank(formDTO.getType())&&"".equals(formDTO.getType())){ + //TODO + }else { + subList = customerAgencyDao.subAgencyListAndGridSumNum(formDTO.getAgencyId()); + } //2.查询直属下级组织下网格在查询时间段内存在例行工作次数的网格,一天一条 List workList = epmetUserService.getGridDateRoutineWorkList(formDTO); //3.查询直属下级组织下网格在查询时间段内存在上报事件(直接立项)数的网格,一天一条 diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java index b5b030e4a1..47dce61362 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreComputeFormDTO.java @@ -27,13 +27,15 @@ public class HistoryScoreComputeFormDTO implements Serializable { @NotBlank(message = "计算类型不能为空", groups = Compute.class) private String type; /** - * 起始时间 + * 起始时间,yyyyMMdd */ - private Date startTime; + @NotBlank(message = "起始时间不能为空", groups = {Compute.class}) + private String startTime; /** - * 截止时间 + * 终止时间,yyyyMMdd */ - private Date endTime; + @NotBlank(message = "终止时间不能为空", groups = {Compute.class}) + private String endTime; private String customerId; private String userId; diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java index 1295b36036..79ec85658f 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java @@ -1,10 +1,8 @@ package com.epmet.dto.indexcollect.result; -import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; import lombok.Data; import java.io.Serializable; -import java.math.BigDecimal; @Data public class HistoryScoreComputeResultDTO implements Serializable { @@ -19,6 +17,6 @@ public class HistoryScoreComputeResultDTO implements Serializable { /** * 分数 */ - private BigDecimal score; + private String score; } diff --git a/epmet-module/data-statistical/data-statistical-server/pom.xml b/epmet-module/data-statistical/data-statistical-server/pom.xml index b04561cd9a..35c84f863b 100644 --- a/epmet-module/data-statistical/data-statistical-server/pom.xml +++ b/epmet-module/data-statistical/data-statistical-server/pom.xml @@ -148,6 +148,12 @@ 2.0.0 compile + + com.epmet + data-aggregator-client + 2.0.0 + compile + diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java index 51b81f888b..0a0f72c178 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java @@ -2,13 +2,19 @@ package com.epmet.service.evaluationindex.indexcoll.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.epmet.commons.dynamic.datasource.annotation.DataSource; +import com.epmet.commons.tools.constant.NumConstant; 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.utils.ConvertUtils; +import com.epmet.commons.tools.utils.Result; import com.epmet.constant.DataSourceConstant; import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDao; import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailDao; +import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; +import com.epmet.dataaggre.dto.govorg.result.GridLivelyResultDTO; +import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient; import com.epmet.dto.indexcollect.ScreenPyHistoryScoreDetailDTO; import com.epmet.dto.indexcollect.form.HistoryScoreComputeFormDTO; import com.epmet.dto.indexcollect.form.HistoryScoreFormDTO; @@ -28,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; @@ -47,6 +54,8 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ private ScreenPyHistoryScoreDetailServiceImpl screenPyHistoryScoreDetailServiceImpl; @Autowired private ScreenPyHistoryScoreDetailDao screenPyHistoryScoreDetailDao; + @Autowired + private DataAggregatorOpenFeignClient dataAggregatorOpenFeignClient; @Override @@ -130,14 +139,35 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ @Override public HistoryScoreComputeResultDTO computeScore(HistoryScoreComputeFormDTO formDTO) { HistoryScoreComputeResultDTO resultDTO = new HistoryScoreComputeResultDTO(); + resultDTO.setAgencyId(formDTO.getAgencyId()); + //计算百分比使用,保留小数点后两位 + NumberFormat numberFormat = NumberFormat.getInstance(); + numberFormat.setMaximumFractionDigits(NumConstant.TWO); if ("grid".equals(formDTO.getType())) { - //网格活跃度每周得分=(活跃网格数/本街镇网格数)x100+(正常网格数/本街镇网格数)x80 - //本街镇网格数基于本街镇基础网格总数进行计算,不包含专属网格 - + /** + * 网格活跃度每周得分=(活跃网格数/本街镇网格数)x100+(正常网格数/本街镇网格数)x80 + * 1周内每个末级网格有五天及五天以上上传事件或开展例行工作的为活跃网格;有2天及2天以上,5天以下上传事件或开展例行工作的为正常运行网格;只有1天上传事件或开展例行工作的为僵尸网格 + * 本街镇网格数基于本街镇基础网格总数进行计算,不包含专属网格 + */ + //1.获取街道下时间区间内的网格活跃度数据 + GridLivelyFormDTO form = ConvertUtils.sourceToTarget(formDTO, GridLivelyFormDTO.class); + form.setType("historyScore"); + Result> result = dataAggregatorOpenFeignClient.grdiLively(form); + if (!result.success() || result.getData() == null) { + throw new RenException("统计街道下网格活跃度数据失败"); + } + GridLivelyResultDTO gridLively = result.getData().get(NumConstant.ZERO); + String score = (gridLively.getGridSumNum() <= 0) ? "0" : numberFormat.format(((float) gridLively.getGridLivelyNum() / (float) gridLively.getGridSumNum()) * 100 + (gridLively.getGridOrdinaryNum() / gridLively.getGridSumNum()) * 80); + resultDTO.setScore(score); } else if ("event".equals(formDTO.getType())) { - //事件赋分每周得分=(活跃网格数/末级网格数)x100+(正常运行网格数/末级网格数)x80 - //1周内每个末级网格有五天及五天以上上传事件或开展例行工作的为活跃网格;有2天及2天以上,5天以下上传事件或开展例行工作的为正常运行网格;只有1天上传事件或开展例行工作的为僵尸网格 + /** + * 事件赋分= 街道下末级网格上报事件数量乘以对应的每项事件分值的累加和除以街道下有效未离职状态的网格员总数 + * 加上街道下末级网格例行工作数量乘以对应的每项事件分值的累加和除以街道下有效未离职状态的网格员总数 + */ + //TODO } return resultDTO; } + + } From 17af4ef4070aabccac1a4aa53f8091bc80e7cb80 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Wed, 14 Dec 2022 09:52:15 +0800 Subject: [PATCH 100/111] =?UTF-8?q?=E6=9D=83=E9=87=8D=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ScreenPyWeightConfigurationDTO.java | 106 ++++++++++++++++++ .../form/WeightConfigurationFormDTO.java | 58 ++++++++++ .../form/WeightConfigurationListFormDTO.java | 31 +++++ .../WeightConfigurationListResultDTO.java | 41 +++++++ ...ScreenPyWeightConfigurationController.java | 70 ++++++++++++ .../ScreenPyWeightConfigurationDao.java | 40 +++++++ .../ScreenPyWeightConfigurationEntity.java | 74 ++++++++++++ .../ScreenPyWeightConfigurationService.java | 23 ++++ ...creenPyWeightConfigurationServiceImpl.java | 74 ++++++++++++ .../ScreenPyWeightConfigurationDao.xml | 24 ++++ 10 files changed, 541 insertions(+) create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyWeightConfigurationDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationFormDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationListFormDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/WeightConfigurationListResultDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyWeightConfigurationController.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyWeightConfigurationEntity.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyWeightConfigurationService.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyWeightConfigurationDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyWeightConfigurationDTO.java new file mode 100644 index 0000000000..b38a036873 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyWeightConfigurationDTO.java @@ -0,0 +1,106 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dto.indexcollect; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 平阴政法能力权重配置 + * + * @author generator generator@elink-cn.com + */ +@Data +public class ScreenPyWeightConfigurationDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID 主键 + */ + private String id; + + /** + * 客户Id + */ + private String customerId; + + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + + /** + * 事件赋分 + */ + private BigDecimal sjff; + + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + + /** + * 日核周调 + */ + private BigDecimal rhzt; + + /** + * 亮点工作 + */ + private BigDecimal ldgz; + + /** + * 其他工作 + */ + private BigDecimal qtgz; + + /** + * 删除标识 0未删除;1已删除 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationFormDTO.java new file mode 100644 index 0000000000..c816171923 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationFormDTO.java @@ -0,0 +1,58 @@ +package com.epmet.dto.indexcollect.form; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class WeightConfigurationFormDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface Add extends CustomerClientShowGroup {} + public interface Edit extends CustomerClientShowGroup {} + + /** + * id + */ + @NotBlank(message = "标题不能为空", groups = Edit.class) + private String id; + + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + + /** + * 事件赋分 + */ + private BigDecimal sjff; + + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + + /** + * 日核周调 + */ + private BigDecimal rhzt; + + /** + * 亮点工作 + */ + private BigDecimal ldgz; + + /** + * 其他工作 + */ + private BigDecimal qtgz; + + private String customerId; + private String userId; + + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationListFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationListFormDTO.java new file mode 100644 index 0000000000..0b3b3b79ba --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/WeightConfigurationListFormDTO.java @@ -0,0 +1,31 @@ +package com.epmet.dto.indexcollect.form; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WeightConfigurationListFormDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 当前页 + */ + private Integer pageNo = 1; + + /** + * 每页记录数 + */ + private Integer pageSize = 20; + + /** + * 是否分页【true分 false不分】 + */ + private Boolean isPage; + + private String customerId; + private String userId; + + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/WeightConfigurationListResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/WeightConfigurationListResultDTO.java new file mode 100644 index 0000000000..c25999074d --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/WeightConfigurationListResultDTO.java @@ -0,0 +1,41 @@ +package com.epmet.dto.indexcollect.result; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class WeightConfigurationListResultDTO implements Serializable { + private static final long serialVersionUID = -4316054054019675419L; + + /** + * id + */ + private String id; + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + /** + * 事件赋分 + */ + private BigDecimal sjff; + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + /** + * 日核周调 + */ + private BigDecimal rhzt; + /** + * 亮点工作 + */ + private BigDecimal ldgz; + /** + * 其他工作 + */ + private BigDecimal qtgz; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyWeightConfigurationController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyWeightConfigurationController.java new file mode 100644 index 0000000000..81064ee2f7 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyWeightConfigurationController.java @@ -0,0 +1,70 @@ +package com.epmet.controller; + +import com.epmet.commons.tools.annotation.LoginUser; +import com.epmet.commons.tools.aop.NoRepeatSubmit; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dto.indexcollect.form.WeightConfigurationFormDTO; +import com.epmet.dto.indexcollect.form.WeightConfigurationListFormDTO; +import com.epmet.dto.indexcollect.result.WeightConfigurationListResultDTO; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyWeightConfigurationService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 平阴政法能力权重配置 + * + * @author generator generator@elink-cn.com + */ +@Slf4j +@RestController +@RequestMapping("screenPyWeightConfiguration") +public class ScreenPyWeightConfigurationController { + + @Autowired + private ScreenPyWeightConfigurationService screenPyWeightConfigurationService; + + + @RequestMapping("list") + public Result> list(@LoginUser TokenDto tokenDto, @RequestBody WeightConfigurationListFormDTO formDTO) { + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + return new Result>().ok(screenPyWeightConfigurationService.list(formDTO)); + } + + @NoRepeatSubmit + @PostMapping("add") + public Result save(@LoginUser TokenDto tokenDto, @RequestBody WeightConfigurationFormDTO dto) { + ValidatorUtils.validateEntity(dto, WeightConfigurationFormDTO.Add.class); + dto.setCustomerId(tokenDto.getCustomerId()); + dto.setUserId(tokenDto.getUserId()); + screenPyWeightConfigurationService.save(dto); + return new Result(); + } + + @PostMapping("edit") + public Result update(@LoginUser TokenDto tokenDto, @RequestBody WeightConfigurationFormDTO dto) { + ValidatorUtils.validateEntity(dto, WeightConfigurationFormDTO.Edit.class); + dto.setCustomerId(tokenDto.getCustomerId()); + dto.setUserId(tokenDto.getUserId()); + screenPyWeightConfigurationService.update(dto); + return new Result(); + } + + @PostMapping("deleteById") + public Result deleteById(@LoginUser TokenDto tokenDto, @RequestBody WeightConfigurationFormDTO dto) { + ValidatorUtils.validateEntity(dto, WeightConfigurationFormDTO.Edit.class); + dto.setCustomerId(tokenDto.getCustomerId()); + dto.setUserId(tokenDto.getUserId()); + screenPyWeightConfigurationService.deleteById(dto); + return new Result(); + } + + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java new file mode 100644 index 0000000000..212a504579 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java @@ -0,0 +1,40 @@ +package com.epmet.dao.evaluationindex.indexcoll; /** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.form.WeightConfigurationListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.dto.indexcollect.result.WeightConfigurationListResultDTO; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreEntity; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyWeightConfigurationEntity; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 平阴政法能力权重配置 + * + * @author generator generator@elink-cn.com + */ +@Mapper +public interface ScreenPyWeightConfigurationDao extends BaseDao { + + List selectWeightConfigurationList(WeightConfigurationListFormDTO formDTO); + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyWeightConfigurationEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyWeightConfigurationEntity.java new file mode 100644 index 0000000000..1997025a99 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyWeightConfigurationEntity.java @@ -0,0 +1,74 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.entity.evaluationindex.indexcoll; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 平阴政法能力权重配置 + * + * @author generator generator@elink-cn.com + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("screen_py_weight_configuration") +public class ScreenPyWeightConfigurationEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户Id + */ + private String customerId; + + /** + * 网格活跃度 + */ + private BigDecimal wghyd; + + /** + * 事件赋分 + */ + private BigDecimal sjff; + + /** + * 雪亮工程 + */ + private BigDecimal xlgc; + + /** + * 日核周调 + */ + private BigDecimal rhzt; + + /** + * 亮点工作 + */ + private BigDecimal ldgz; + + /** + * 其他工作 + */ + private BigDecimal qtgz; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyWeightConfigurationService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyWeightConfigurationService.java new file mode 100644 index 0000000000..fe5b41076b --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyWeightConfigurationService.java @@ -0,0 +1,23 @@ +package com.epmet.service.evaluationindex.indexcoll; + +import com.epmet.commons.tools.page.PageData; +import com.epmet.dto.indexcollect.form.WeightConfigurationFormDTO; +import com.epmet.dto.indexcollect.form.WeightConfigurationListFormDTO; +import com.epmet.dto.indexcollect.result.WeightConfigurationListResultDTO; + +/** + * 平阴政法能力权重配置 + * + * @author generator generator@elink-cn.com + */ +public interface ScreenPyWeightConfigurationService { + + PageData list(WeightConfigurationListFormDTO formDTO); + + void save(WeightConfigurationFormDTO dto); + + void update(WeightConfigurationFormDTO dto); + + void deleteById(WeightConfigurationFormDTO dto); + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java new file mode 100644 index 0000000000..aefe5cb8eb --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java @@ -0,0 +1,74 @@ +package com.epmet.service.evaluationindex.indexcoll.impl; + +import com.epmet.commons.dynamic.datasource.annotation.DataSource; +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.constant.DataSourceConstant; +import com.epmet.dao.evaluationindex.indexcoll.ScreenPyWeightConfigurationDao; +import com.epmet.dto.indexcollect.form.WeightConfigurationFormDTO; +import com.epmet.dto.indexcollect.form.WeightConfigurationListFormDTO; +import com.epmet.dto.indexcollect.result.WeightConfigurationListResultDTO; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyWeightConfigurationEntity; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyWeightConfigurationService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 平阴政法能力权重配置 + * + * @author generator generator@elink-cn.com + */ +@Slf4j +@Service +@DataSource(DataSourceConstant.EVALUATION_INDEX_READ) +public class ScreenPyWeightConfigurationServiceImpl extends BaseServiceImpl implements ScreenPyWeightConfigurationService { + + + @Override + public PageData list(WeightConfigurationListFormDTO formDTO) { + PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()); + List list = baseDao.selectWeightConfigurationList(formDTO); + PageInfo pageInfo = new PageInfo<>(list); + return new PageData<>(list, pageInfo.getTotal()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(WeightConfigurationFormDTO formDTO) { + //1.主表新增数据 + ScreenPyWeightConfigurationEntity entity = ConvertUtils.sourceToTarget(formDTO, ScreenPyWeightConfigurationEntity.class); + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(WeightConfigurationFormDTO formDTO) { + ScreenPyWeightConfigurationEntity entity = baseDao.selectById(formDTO.getId()); + if (entity == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查到相关信息", "未查到相关信息"); + } + ScreenPyWeightConfigurationEntity newEntity = ConvertUtils.sourceToTarget(formDTO, ScreenPyWeightConfigurationEntity.class); + newEntity.setId(entity.getId()); + baseDao.updateById(newEntity); + } + + @Override + public void deleteById(WeightConfigurationFormDTO formDTO) { + ScreenPyWeightConfigurationEntity entity = baseDao.selectById(formDTO.getId()); + if (entity == null) { + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "未查到相关信息", "未查到相关信息"); + } + entity.setDelFlag("1"); + baseDao.updateById(entity); + } + + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml new file mode 100644 index 0000000000..7c286faf1a --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml @@ -0,0 +1,24 @@ + + + + + + + + From 6b645c6572c9ddd275825b1ddf4b3a368a1c3da0 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Wed, 14 Dec 2022 10:23:08 +0800 Subject: [PATCH 101/111] =?UTF-8?q?=E6=9D=83=E9=87=8D=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../result/HistoryScoreListResultDTO.java | 4 +-- .../ScreenPyWeightConfigurationDao.java | 3 +++ .../impl/ScreenPyHistoryScoreServiceImpl.java | 19 +++++++++++++ ...creenPyWeightConfigurationServiceImpl.java | 2 +- .../indexcoll/ScreenPyHistoryScoreDao.xml | 7 ++--- .../ScreenPyWeightConfigurationDao.xml | 27 ++++++++++++++++--- 6 files changed, 52 insertions(+), 10 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java index 719c9ba594..656a0dd50c 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreListResultDTO.java @@ -23,8 +23,8 @@ public class HistoryScoreListResultDTO implements Serializable { /** * 发布者 */ - private String createdBy; - private String createdById; + private String updatedBy; + private String updatedById; /** * 发布时间 */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java index 212a504579..2d2d431f6e 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.java @@ -17,6 +17,7 @@ package com.epmet.dao.evaluationindex.indexcoll; /** import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.indexcollect.ScreenPyWeightConfigurationDTO; import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; import com.epmet.dto.indexcollect.form.WeightConfigurationListFormDTO; import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; @@ -37,4 +38,6 @@ public interface ScreenPyWeightConfigurationDao extends BaseDao selectWeightConfigurationList(WeightConfigurationListFormDTO formDTO); + ScreenPyWeightConfigurationDTO selectOneDTO(); + } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java index 0a0f72c178..4e6d4e4207 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java @@ -12,10 +12,12 @@ import com.epmet.commons.tools.utils.Result; import com.epmet.constant.DataSourceConstant; import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDao; import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailDao; +import com.epmet.dao.evaluationindex.indexcoll.ScreenPyWeightConfigurationDao; import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; import com.epmet.dataaggre.dto.govorg.result.GridLivelyResultDTO; import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient; import com.epmet.dto.indexcollect.ScreenPyHistoryScoreDetailDTO; +import com.epmet.dto.indexcollect.ScreenPyWeightConfigurationDTO; import com.epmet.dto.indexcollect.form.HistoryScoreComputeFormDTO; import com.epmet.dto.indexcollect.form.HistoryScoreFormDTO; import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; @@ -34,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; @@ -56,6 +59,8 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ private ScreenPyHistoryScoreDetailDao screenPyHistoryScoreDetailDao; @Autowired private DataAggregatorOpenFeignClient dataAggregatorOpenFeignClient; + @Autowired + private ScreenPyWeightConfigurationDao screenPyWeightConfigurationDao; @Override @@ -73,11 +78,18 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ ScreenPyHistoryScoreEntity entity = ConvertUtils.sourceToTarget(formDTO, ScreenPyHistoryScoreEntity.class); screenPyHistoryScoreDao.insert(entity); //2.明细表新增数据 + ScreenPyWeightConfigurationDTO wcDTO = screenPyWeightConfigurationDao.selectOneDTO(); List list = new ArrayList<>(); formDTO.getDetailList().forEach(dto -> { ScreenPyHistoryScoreDetailEntity detailEntity = ConvertUtils.sourceToTarget(dto, ScreenPyHistoryScoreDetailEntity.class); detailEntity.setCustomerId(formDTO.getCustomerId()); detailEntity.setHistoryScoreId(entity.getId()); + if (null != wcDTO) { + BigDecimal nldf = detailEntity.getWghyd().multiply(wcDTO.getWghyd()).add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())) + .add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())).add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())) + .add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())).add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())); + detailEntity.setNldf(nldf); + } list.add(detailEntity); }); screenPyHistoryScoreDetailServiceImpl.insertBatch(list); @@ -96,10 +108,17 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ screenPyHistoryScoreDao.updateById(newEntity); //2.更新字表 字表先删后增 List list = new ArrayList<>(); + ScreenPyWeightConfigurationDTO wcDTO = screenPyWeightConfigurationDao.selectOneDTO(); formDTO.getDetailList().forEach(dto -> { ScreenPyHistoryScoreDetailEntity detailEntity = ConvertUtils.sourceToTarget(dto, ScreenPyHistoryScoreDetailEntity.class); detailEntity.setCustomerId(entity.getCustomerId()); detailEntity.setHistoryScoreId(entity.getId()); + if (null != wcDTO) { + BigDecimal nldf = detailEntity.getWghyd().multiply(wcDTO.getWghyd()).add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())) + .add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())).add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())) + .add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())).add(detailEntity.getWghyd().multiply(wcDTO.getWghyd())); + detailEntity.setNldf(nldf); + } list.add(detailEntity); }); screenPyHistoryScoreDetailDao.delByHistoryScoreId(formDTO.getId(), formDTO.getUserId()); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java index aefe5cb8eb..7616671c45 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyWeightConfigurationServiceImpl.java @@ -28,7 +28,7 @@ import java.util.List; */ @Slf4j @Service -@DataSource(DataSourceConstant.EVALUATION_INDEX_READ) +@DataSource(DataSourceConstant.EVALUATION_INDEX) public class ScreenPyWeightConfigurationServiceImpl extends BaseServiceImpl implements ScreenPyWeightConfigurationService { diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml index 7a79fbaa32..055e9672d6 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml @@ -10,11 +10,11 @@ a.title, CONCAT(DATE_FORMAT(a.start_time,'%Y年%m月%d日'),'-',DATE_FORMAT(a.end_time,'%Y年%m月%d日')) `time`, DATE_FORMAT(a.release_time,'%Y-%m-%d %H:%i') releaseTime, - a.created_by createdById, - b.real_name createdBy + a.updated_by updatedById, + b.real_name updatedBy FROM screen_py_history_score a - LEFT JOIN epmet_user.customer_staff b ON a.customer_id = b.customer_id AND a.created_by = b.user_id + LEFT JOIN epmet_user.customer_staff b ON a.customer_id = b.customer_id AND a.updated_by = b.user_id WHERE a.del_flag = '0' @@ -26,6 +26,7 @@ + ORDER BY a.start_time DESC diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml index 7c286faf1a..747639f09a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml @@ -5,8 +5,8 @@ + + From 7eaae3423bef06daf3344a7e0e0c622f0f6b7362 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Wed, 14 Dec 2022 14:28:00 +0800 Subject: [PATCH 102/111] =?UTF-8?q?=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../result/HistoryScoreDetailResultDTO.java | 18 +++++- .../ScreenPyHistoryScoreController.java | 55 +++++++++++++++---- .../ScreenPyHistoryScoreDetailDao.java | 6 ++ .../epmet/excel/HistoryScoreDetailExcel.java | 54 ++++++++++++++++++ .../ScreenPyHistoryScoreDetailService.java | 8 +++ ...ScreenPyHistoryScoreDetailServiceImpl.java | 19 ++++++- .../indexcoll/ScreenPyHistoryScoreDao.xml | 4 +- .../ScreenPyHistoryScoreDetailDao.xml | 45 +++++++++++++++ 8 files changed, 189 insertions(+), 20 deletions(-) create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java index 97a60160b4..35981cc764 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java @@ -3,7 +3,6 @@ package com.epmet.dto.indexcollect.result; import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; import lombok.Data; -import javax.validation.constraints.NotBlank; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @@ -14,8 +13,11 @@ public class HistoryScoreDetailResultDTO implements Serializable { private static final long serialVersionUID = 1L; - public interface Add extends CustomerClientShowGroup {} - public interface Edit extends CustomerClientShowGroup {} + public interface Add extends CustomerClientShowGroup { + } + + public interface Edit extends CustomerClientShowGroup { + } /** * id @@ -54,6 +56,16 @@ public class HistoryScoreDetailResultDTO implements Serializable { @Data public static class Detail implements Serializable { + /** + * id + */ + private String id; + + /** + * screen_py_history_score.id + */ + private String historyScoreId; + /** * 街道组织Id */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java index 80ec8ea225..db203c81c9 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java @@ -1,10 +1,23 @@ package com.epmet.controller; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.fastjson.JSON; 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.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.page.PageData; 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.ExcelUtils; import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.poi.excel.handler.CustomerTitleHandler; +import com.epmet.commons.tools.utils.poi.excel.handler.ExcelFillCellMergeStrategy; +import com.epmet.commons.tools.utils.poi.excel.handler.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.indexcollect.form.HistoryScoreComputeFormDTO; import com.epmet.dto.indexcollect.form.HistoryScoreFormDTO; @@ -12,14 +25,23 @@ import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; import com.epmet.dto.indexcollect.result.HistoryScoreComputeResultDTO; import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.excel.HistoryScoreDetailExcel; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailService; import com.epmet.service.evaluationindex.indexcoll.ScreenPyHistoryScoreService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Date; +import java.util.List; + /** * 平阴历史得分主表 * @@ -32,6 +54,8 @@ public class ScreenPyHistoryScoreController { @Autowired private ScreenPyHistoryScoreService screenPyHistoryScoreService; + @Autowired + private ScreenPyHistoryScoreDetailService screenPyHistoryScoreDetailService; @RequestMapping("list") @@ -76,32 +100,39 @@ public class ScreenPyHistoryScoreController { return new Result().ok(screenPyHistoryScoreService.detail(formDTO)); } - /*@PostMapping("export") + @PostMapping("export") public void export(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreListFormDTO formDTO, HttpServletResponse response) throws IOException { formDTO.setCustomerId(tokenDto.getCustomerId()); formDTO.setUserId(tokenDto.getUserId()); + formDTO.setIsPage(false); ExcelWriter excelWriter = null; formDTO.setPageNo(NumConstant.ONE); - formDTO.setPageSize(NumConstant.TEN_THOUSAND); + formDTO.setPageSize(NumConstant.FIVE_HUNDRED); try { - String fileName = "迁入管理" + DateUtils.format(new Date()) + ".xlsx"; - excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcMoveInRecordExcel.class).build(); - WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build(); - PageData data = null; - List list = null; + String fileName = "历史得分" + DateUtils.format(new Date()) + ".xlsx"; + excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), HistoryScoreDetailExcel.class).build(); + //String title= "11月-12月"; + PageData data = null; + List list = null; do { - data = screenPyHistoryScoreService.list(formDTO); - list = ConvertUtils.sourceToTarget(data.getList(), IcMoveInRecordExcel.class); + data = screenPyHistoryScoreDetailService.selectScoreDetailList(formDTO); + + for (HistoryScoreDetailResultDTO d : data.getList()){ + list = ConvertUtils.sourceToTarget(d.getDetailList(), HistoryScoreDetailExcel.class); + //一跳一条记录一个sheet页 + WriteSheet writeSheet = EasyExcel.writerSheet(d.getTitle()).registerWriteHandler(new FreezeAndFilter()).build(); + //WriteSheet writeSheet = EasyExcel.writerSheet(d.getTitle()).registerWriteHandler(new CustomerTitleHandler(title)).build(); + excelWriter.write(list, writeSheet); + } formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE); - excelWriter.write(list, writeSheet); } while (CollectionUtils.isNotEmpty(list) && list.size() == formDTO.getPageSize()); } catch (EpmetException e) { response.reset(); response.setCharacterEncoding("UTF-8"); response.setHeader("content-type", "application/json; charset=UTF-8"); PrintWriter printWriter = response.getWriter(); - Result result = new Result<>().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), e.getMsg()); + Result result = new Result<>().error(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),e.getMsg()); printWriter.write(JSON.toJSONString(result)); printWriter.close(); } catch (Exception e) { @@ -111,7 +142,7 @@ public class ScreenPyHistoryScoreController { excelWriter.finish(); } } - }*/ + } @RequestMapping("computescore") public Result computeScore(@LoginUser TokenDto tokenDto, @RequestBody HistoryScoreComputeFormDTO formDTO) { diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java index 50823809c2..0a39d1186f 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.java @@ -17,10 +17,14 @@ package com.epmet.dao.evaluationindex.indexcoll; /** import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 平阴历史得分明细表 * @@ -31,4 +35,6 @@ public interface ScreenPyHistoryScoreDetailDao extends BaseDao selectScoreDetailList(HistoryScoreListFormDTO formDTO); + } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java new file mode 100644 index 0000000000..c4e519cd00 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java @@ -0,0 +1,54 @@ +package com.epmet.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.HeadStyle; +import com.alibaba.excel.enums.poi.FillPatternTypeEnum; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 政法能力历史得分-导出 + * + * @author generator generator@elink-cn.com + */ +@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44) +@Data +public class HistoryScoreDetailExcel implements Serializable { + + private static final long serialVersionUID = -12110233388005838L; + @ExcelProperty(value = "下级单位") + @ColumnWidth(15) + private String agencyName; + + @ExcelProperty(value = "网格活跃度") + @ColumnWidth(15) + private BigDecimal wghyd; + + @ExcelProperty(value = "事件赋值得分") + @ColumnWidth(20) + private BigDecimal sjff; + + @ExcelProperty(value = "雪亮工程") + @ColumnWidth(15) + private BigDecimal xlgc; + + @ExcelProperty(value = "日核周调") + @ColumnWidth(15) + private BigDecimal rhzt; + + @ExcelProperty(value = "亮点工作") + @ColumnWidth(15) + private BigDecimal ldgz; + + @ExcelProperty(value = "其他工作") + @ColumnWidth(15) + private BigDecimal qtgz; + + @ExcelProperty(value = "能力得分") + @ColumnWidth(15) + private BigDecimal nldf; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java index e12ce41e1c..0fea59c676 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailService.java @@ -1,5 +1,11 @@ package com.epmet.service.evaluationindex.indexcoll; +import com.epmet.commons.tools.page.PageData; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; + +import java.util.List; + /** * 平阴历史得分明细表 * @@ -7,4 +13,6 @@ package com.epmet.service.evaluationindex.indexcoll; */ public interface ScreenPyHistoryScoreDetailService { + PageData selectScoreDetailList(HistoryScoreListFormDTO formDTO); + } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java index ace200d468..aab939444f 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreDetailServiceImpl.java @@ -2,14 +2,22 @@ package com.epmet.service.evaluationindex.indexcoll.impl; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.page.PageData; import com.epmet.constant.DataSourceConstant; import com.epmet.dao.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailDao; +import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailEntity; import com.epmet.service.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailService; +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 java.util.List; + /** * 平阴历史得分明细表 * @@ -17,11 +25,16 @@ import org.springframework.stereotype.Service; */ @Slf4j @Service -@DataSource(DataSourceConstant.EVALUATION_INDEX_READ) +@DataSource(DataSourceConstant.EVALUATION_INDEX) public class ScreenPyHistoryScoreDetailServiceImpl extends BaseServiceImpl implements ScreenPyHistoryScoreDetailService { - @Autowired - private ScreenPyHistoryScoreDetailDao screenPyHistoryScoreDetailDao; + @Override + public PageData selectScoreDetailList(HistoryScoreListFormDTO formDTO) { + PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()); + List list = baseDao.selectScoreDetailList(formDTO); + PageInfo pageInfo = new PageInfo<>(list); + return new PageData<>(list, pageInfo.getTotal()); + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml index 055e9672d6..1d1e0c7276 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml @@ -21,10 +21,10 @@ AND a.title LIKE concat('%', #{title}, '%') - AND a.start_time >= #{startTime} + AND DATE_FORMAT(a.start_time,'%Y-%m-%d') >= #{startTime} - + ORDER BY a.start_time DESC diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml index fa2d907120..2f7462a6d4 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml @@ -15,4 +15,49 @@ AND del_flag = '0' + + + + + + + + From 3ee341474ee9745773b3443339326a0f3c22e423 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Wed, 14 Dec 2022 15:40:04 +0800 Subject: [PATCH 103/111] todo --- .../evaluationindex/EvaluationIndexDao.java | 3 ++ .../EvaluationIndexService.java | 3 ++ .../impl/EvaluationIndexServiceImpl.java | 8 ++++ .../govorg/impl/GovOrgServiceImpl.java | 3 +- .../evaluationindex/EvaluationIndexDao.xml | 9 +++++ .../result/HistoryScoreComputeResultDTO.java | 2 +- .../result/HistoryScoreSjffResultDTO.java | 25 ++++++++++++ .../indexcoll/ScreenPyHistoryScoreDao.java | 8 ++++ .../impl/ScreenPyHistoryScoreServiceImpl.java | 10 ++++- .../indexcoll/ScreenPyHistoryScoreDao.xml | 40 +++++++++++++++++++ 10 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreSjffResultDTO.java diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/EvaluationIndexDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/EvaluationIndexDao.java index ab22fe402c..703145272a 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/EvaluationIndexDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/EvaluationIndexDao.java @@ -23,6 +23,7 @@ import com.epmet.dataaggre.dto.evaluationindex.ScreenCustomerGridDTO; import com.epmet.dataaggre.dto.evaluationindex.ScreenGovernRankDataDailyDTO; import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; import com.epmet.dataaggre.dto.govorg.result.GridDateIdResultDTO; +import com.epmet.dataaggre.dto.govorg.result.GridLivelyResultDTO; import com.epmet.dataaggre.dto.govproject.form.ProjectCategoryTotalFormDTO; import com.epmet.dataaggre.dto.govproject.result.ProjectCategoryTotalResultDTO; import org.apache.ibatis.annotations.Mapper; @@ -128,4 +129,6 @@ public interface EvaluationIndexDao { * @return */ List getSubAllGridByAgencyPath(@Param("fullAgencyPath") String fullAgencyPath); + + GridLivelyResultDTO streetGridList(GridLivelyFormDTO formDTO); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/EvaluationIndexService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/EvaluationIndexService.java index a5260a60ba..8d67d2bcf8 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/EvaluationIndexService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/EvaluationIndexService.java @@ -8,6 +8,7 @@ import com.epmet.dataaggre.dto.evaluationindex.ScreenCustomerGridDTO; import com.epmet.dataaggre.dto.evaluationindex.ScreenGovernRankDataDailyDTO; import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; import com.epmet.dataaggre.dto.govorg.result.GridDateIdResultDTO; +import com.epmet.dataaggre.dto.govorg.result.GridLivelyResultDTO; import com.epmet.dataaggre.dto.govproject.form.ProjectCategoryTotalFormDTO; import com.epmet.dataaggre.dto.govproject.result.ProjectCategoryTotalResultDTO; @@ -103,4 +104,6 @@ public interface EvaluationIndexService { * @author sun */ List getGridProejctToProjectMain(GridLivelyFormDTO formDTO); + + GridLivelyResultDTO streetGridList(GridLivelyFormDTO formDTO); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java index 7fa4518b2d..a74fc4ea86 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java @@ -13,6 +13,7 @@ import com.epmet.dataaggre.dto.evaluationindex.ScreenCustomerGridDTO; import com.epmet.dataaggre.dto.evaluationindex.ScreenGovernRankDataDailyDTO; import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; import com.epmet.dataaggre.dto.govorg.result.GridDateIdResultDTO; +import com.epmet.dataaggre.dto.govorg.result.GridLivelyResultDTO; import com.epmet.dataaggre.dto.govproject.form.ProjectCategoryTotalFormDTO; import com.epmet.dataaggre.dto.govproject.result.ProjectCategoryTotalResultDTO; import com.epmet.dataaggre.service.evaluationindex.EvaluationIndexService; @@ -248,4 +249,11 @@ public class EvaluationIndexServiceImpl implements EvaluationIndexService { return evaluationIndexDao.getGridProejctToProjectMain(formDTO); } + @Override + public GridLivelyResultDTO streetGridList(GridLivelyFormDTO formDTO) { + GridLivelyResultDTO resultDTO = evaluationIndexDao.streetGridList(formDTO); + resultDTO.setAgencyId(formDTO.getAgencyId()); + return resultDTO; + } + } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java index 67fd1cd832..f8c5a28397 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java @@ -709,7 +709,8 @@ public class GovOrgServiceImpl implements GovOrgService { //1.查询当前组织的直属下级组织列表及组织下的网格总数 LinkedList subList = new LinkedList<>(); if(StringUtils.isNotBlank(formDTO.getType())&&"".equals(formDTO.getType())){ - //TODO + GridLivelyResultDTO dto = evaluationIndexService.streetGridList(formDTO); + subList.add(dto); }else { subList = customerAgencyDao.subAgencyListAndGridSumNum(formDTO.getAgencyId()); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/EvaluationIndexDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/EvaluationIndexDao.xml index 70c5f2d7d6..0b42e97357 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/EvaluationIndexDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/EvaluationIndexDao.xml @@ -236,4 +236,13 @@ order by parentAgencyId,gridName + + diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java index 79ec85658f..f89b49bfca 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreComputeResultDTO.java @@ -17,6 +17,6 @@ public class HistoryScoreComputeResultDTO implements Serializable { /** * 分数 */ - private String score; + private String score = "0"; } diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreSjffResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreSjffResultDTO.java new file mode 100644 index 0000000000..8efdff7216 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreSjffResultDTO.java @@ -0,0 +1,25 @@ +package com.epmet.dto.indexcollect.result; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class HistoryScoreSjffResultDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 上报事件总得分 + */ + private Integer eventScore; + /** + * 例行工作总得分 + */ + private Integer projectScore; + /** + * 网格员总数 + */ + private Integer gridStaffNum; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java index cfe869723b..97d9cdc287 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.java @@ -17,8 +17,10 @@ package com.epmet.dao.evaluationindex.indexcoll; /** import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.indexcollect.form.HistoryScoreComputeFormDTO; import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreSjffResultDTO; import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreEntity; import org.apache.ibatis.annotations.Mapper; @@ -33,4 +35,10 @@ import java.util.List; public interface ScreenPyHistoryScoreDao extends BaseDao { List selectHistoryScoreList(HistoryScoreListFormDTO formDTO); + + HistoryScoreSjffResultDTO sumEventScore(HistoryScoreComputeFormDTO formDTO); + + HistoryScoreSjffResultDTO sumProjectScore(HistoryScoreComputeFormDTO formDTO); + + HistoryScoreSjffResultDTO sumGridNum(HistoryScoreComputeFormDTO formDTO); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java index 4e6d4e4207..d5358f0f6d 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java @@ -24,6 +24,7 @@ import com.epmet.dto.indexcollect.form.HistoryScoreListFormDTO; import com.epmet.dto.indexcollect.result.HistoryScoreComputeResultDTO; import com.epmet.dto.indexcollect.result.HistoryScoreDetailResultDTO; import com.epmet.dto.indexcollect.result.HistoryScoreListResultDTO; +import com.epmet.dto.indexcollect.result.HistoryScoreSjffResultDTO; import com.epmet.dto.result.IcMoveInListResultDTO; import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreDetailEntity; import com.epmet.entity.evaluationindex.indexcoll.ScreenPyHistoryScoreEntity; @@ -183,7 +184,14 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ * 事件赋分= 街道下末级网格上报事件数量乘以对应的每项事件分值的累加和除以街道下有效未离职状态的网格员总数 * 加上街道下末级网格例行工作数量乘以对应的每项事件分值的累加和除以街道下有效未离职状态的网格员总数 */ - //TODO + //查询街道下时间区间内事件总分 + HistoryScoreSjffResultDTO dto1 = screenPyHistoryScoreDao.sumEventScore(formDTO); + //查询街道下时间区间内例行工作总分 + HistoryScoreSjffResultDTO dto2 = screenPyHistoryScoreDao.sumProjectScore(formDTO); + //查询街道下有效网格员数 + HistoryScoreSjffResultDTO dto3 = screenPyHistoryScoreDao.sumGridNum(formDTO); + String score = numberFormat.format(((float) dto1.getEventScore() / (float) dto3.getGridStaffNum()) + (dto2.getProjectScore() / dto3.getGridStaffNum())); + resultDTO.setScore(score); } return resultDTO; } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml index 1d1e0c7276..91374a561a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDao.xml @@ -29,5 +29,45 @@ ORDER BY a.start_time DESC + + + + + + From 4446205167f01a4ef88ea6781bc318e838a0bb07 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Wed, 14 Dec 2022 16:56:11 +0800 Subject: [PATCH 104/111] =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/handler/CustomerTitleHandler.java | 61 +++++++++++++++++++ .../result/HistoryScoreDetailResultDTO.java | 5 ++ .../ScreenPyHistoryScoreController.java | 10 +-- .../epmet/excel/HistoryScoreDetailExcel.java | 26 +++++--- .../ScreenPyHistoryScoreDetailDao.xml | 4 +- 5 files changed, 92 insertions(+), 14 deletions(-) create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/CustomerTitleHandler.java diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/CustomerTitleHandler.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/CustomerTitleHandler.java new file mode 100644 index 0000000000..fe575e54b8 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/handler/CustomerTitleHandler.java @@ -0,0 +1,61 @@ +package com.epmet.commons.tools.utils.poi.excel.handler; + +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.write.handler.CellWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; +import org.springframework.util.PropertyPlaceholderHelper; + +import java.util.List; +import java.util.Properties; + +/** + * desc:标头策略 + * + */ +public class CustomerTitleHandler implements CellWriteHandler { + private String title = "xixihaha"; + PropertyPlaceholderHelper placeholderHelper = new PropertyPlaceholderHelper("${", "}"); + public CustomerTitleHandler(String title) { + this.title = title; + } + /*public CustomerTitleHandler(String title) { + this.title = "nihao s"; + }*/ + @Override + public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) { + if (head != null) { + List headNameList = head.getHeadNameList(); + if (CollectionUtils.isNotEmpty(headNameList)) { + Properties properties = new Properties(); + properties.setProperty("title", title); + headNameList.set(1, placeholderHelper.replacePlaceholders(headNameList.get(1), properties)); + } + } + } + @Override + public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, + Cell cell, Head head, Integer integer, Boolean aBoolean) { + + } + + @Override + public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, + WriteCellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) { + + } + + @Override + public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, + List> list, Cell cell, Head head, Integer integer, Boolean aBoolean) { + + } +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java index 35981cc764..546ac9c4e6 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/result/HistoryScoreDetailResultDTO.java @@ -44,6 +44,11 @@ public class HistoryScoreDetailResultDTO implements Serializable { */ private Date endTime; + /** + * 时间区间 + */ + private String time; + /** * 发布时间 */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java index db203c81c9..56a1a2f853 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java @@ -2,6 +2,7 @@ package com.epmet.controller; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.fastjson.JSON; import com.epmet.commons.tools.annotation.LoginUser; @@ -111,8 +112,8 @@ public class ScreenPyHistoryScoreController { formDTO.setPageSize(NumConstant.FIVE_HUNDRED); try { String fileName = "历史得分" + DateUtils.format(new Date()) + ".xlsx"; - excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), HistoryScoreDetailExcel.class).build(); - //String title= "11月-12月"; + excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), HistoryScoreDetailExcel.class).excelType(ExcelTypeEnum.XLSX).build(); + PageData data = null; List list = null; do { @@ -120,9 +121,8 @@ public class ScreenPyHistoryScoreController { for (HistoryScoreDetailResultDTO d : data.getList()){ list = ConvertUtils.sourceToTarget(d.getDetailList(), HistoryScoreDetailExcel.class); - //一跳一条记录一个sheet页 - WriteSheet writeSheet = EasyExcel.writerSheet(d.getTitle()).registerWriteHandler(new FreezeAndFilter()).build(); - //WriteSheet writeSheet = EasyExcel.writerSheet(d.getTitle()).registerWriteHandler(new CustomerTitleHandler(title)).build(); + //一条主表记录一个sheet页 + WriteSheet writeSheet = EasyExcel.writerSheet(d.getTitle()).registerWriteHandler(new CustomerTitleHandler(d.getTime())).build(); excelWriter.write(list, writeSheet); } formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java index c4e519cd00..6ed3d58446 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java @@ -2,6 +2,7 @@ package com.epmet.excel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadStyle; import com.alibaba.excel.enums.poi.FillPatternTypeEnum; import lombok.Data; @@ -19,35 +20,44 @@ import java.math.BigDecimal; public class HistoryScoreDetailExcel implements Serializable { private static final long serialVersionUID = -12110233388005838L; - @ExcelProperty(value = "下级单位") + //@ExcelProperty(value = "下级单位") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "下级单位"}) @ColumnWidth(15) + @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44) private String agencyName; - @ExcelProperty(value = "网格活跃度") + //@ExcelProperty(value = "网格活跃度") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "网格活跃度"}) @ColumnWidth(15) private BigDecimal wghyd; - @ExcelProperty(value = "事件赋值得分") + //@ExcelProperty(value = "事件赋值得分") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "事件赋值得分"}) @ColumnWidth(20) private BigDecimal sjff; - @ExcelProperty(value = "雪亮工程") + //@ExcelProperty(value = "雪亮工程") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "雪亮工程"}) @ColumnWidth(15) private BigDecimal xlgc; - @ExcelProperty(value = "日核周调") + //@ExcelProperty(value = "日核周调") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "日核周调"}) @ColumnWidth(15) private BigDecimal rhzt; - @ExcelProperty(value = "亮点工作") + //@ExcelProperty(value = "亮点工作") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "亮点工作"}) @ColumnWidth(15) private BigDecimal ldgz; - @ExcelProperty(value = "其他工作") + //@ExcelProperty(value = "其他工作") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "其他工作"}) @ColumnWidth(15) private BigDecimal qtgz; - @ExcelProperty(value = "能力得分") + //@ExcelProperty(value = "能力得分") + @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "能力得分"}) @ColumnWidth(15) private BigDecimal nldf; diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml index 2f7462a6d4..bd238aabfe 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml @@ -18,13 +18,15 @@ + @@ -113,27 +118,234 @@ SUM( c.SCORE ) AS totalScore FROM screen_py_event_data a - INNER JOIN epmet_user.patrol_routine_work b ON a.EVENT_ID = b.ID - AND b.DEL_FLAG = '0' INNER JOIN customer_patrol_work_type_dict c ON a.CATEGORY_CODE = c.CATEGORY_CODE AND c.IS_DISABLE = 'enable' WHERE a.DEL_FLAG = '0' AND a.EVENT_TYPE = 'work' - AND DATE_FORMAT( a.EVENT_CREATE_TIME, '%Y-%m-%d' ) >= #{startTime} + AND DATE_FORMAT( a.EVENT_CREATE_TIME, '%Y%m%d' ) >= #{startTime} - AND DATE_FORMAT( a.EVENT_CREATE_TIME, '%Y-%m-%d' ) <= #{endTime} + AND DATE_FORMAT( a.EVENT_CREATE_TIME, '%Y%m%d' ) <= #{endTime} - AND b.GRID_ID = #{orgId} + AND a.ORG_ID = #{orgId} - AND b.PIDS LIKE CONCAT('%', #{orgId}, '%') + AND a.PIDS LIKE CONCAT('%', #{orgId}, '%') + + + AND a.STAFF_NAME LIKE CONCAT('%', #{name}, '%') + + + AND a.MOBILE LIKE CONCAT('%', #{mobile}, '%') + GROUP BY a.CATEGORY_CODE ) a WHERE CATEGORY_CODE IS NOT NULL + + + + + + + + + diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/GridstaffWorkInfoPingyinDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/GridstaffWorkInfoPingyinDTO.java index 161a63e263..b277c2bee9 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/GridstaffWorkInfoPingyinDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/GridstaffWorkInfoPingyinDTO.java @@ -84,4 +84,10 @@ public class GridstaffWorkInfoPingyinDTO { private String happenTimeString; + private String title; + private String staffName; + private String mobile; + private String orgId; + private String pids; + } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPyEventDataEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPyEventDataEntity.java index 8039234f00..2b31ed2fed 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPyEventDataEntity.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/screen/ScreenPyEventDataEntity.java @@ -25,16 +25,16 @@ public class ScreenPyEventDataEntity extends BaseEpmetEntity { // * 客户Id // */ //private String customerId; - // - ///** - // * 上级组织Id - // */ - //private String parentId; - // - ///** - // * 所有上级ID,用英文逗号分开 - // */ - //private String allParentIds; + + /** + * 上级组织Id + */ + private String orgId; + + /** + * 所有上级ID,用英文逗号分开 + */ + private String pids; /** * 事件Id @@ -56,6 +56,12 @@ public class ScreenPyEventDataEntity extends BaseEpmetEntity { */ private String categoryCode; + private String title; + + private String staffName; + + private String mobile; + ///** // * 父类事件分类编码 // */ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPyEventDataServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPyEventDataServiceImpl.java index 01e9dbda03..b916f891a7 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPyEventDataServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenPyEventDataServiceImpl.java @@ -4,14 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.constant.DataSourceConstant; +import com.epmet.dao.evaluationindex.screen.ScreenProjectDataDao; import com.epmet.dao.evaluationindex.screen.ScreenPyEventDataDao; import com.epmet.dto.screen.form.SavePyEventDataFormDTO; +import com.epmet.entity.evaluationindex.screen.ScreenProjectDataEntity; import com.epmet.entity.evaluationindex.screen.ScreenPyEventDataEntity; import com.epmet.service.evaluationindex.screen.ScreenPyEventDataService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + /** * 上报到市平台中间库的事件 * @@ -23,6 +27,8 @@ import org.springframework.stereotype.Service; @DataSource(DataSourceConstant.EVALUATION_INDEX) public class ScreenPyEventDataServiceImpl extends BaseServiceImpl implements ScreenPyEventDataService { + @Resource + private ScreenProjectDataDao screenProjectDataDao; /** * 保存同步到中间库的数据 * @@ -41,6 +47,14 @@ public class ScreenPyEventDataServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ScreenPyEventDataEntity::getEventId, entity.getEventId()); wrapper.eq(ScreenPyEventDataEntity::getEventType, entity.getEventType()); @@ -60,6 +74,11 @@ public class ScreenPyEventDataServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ScreenPyEventDataEntity::getEventId, entity.getEventId()); wrapper.eq(ScreenPyEventDataEntity::getEventType, entity.getEventType()); diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java index 3577f3311d..5c554f218d 100755 --- a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java +++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffWorkInfoPingyinServiceImpl.java @@ -114,6 +114,8 @@ public class GridstaffWorkInfoPingyinServiceImpl extends BaseServiceImpl data; @@ -144,6 +146,11 @@ public class GridstaffWorkInfoPingyinServiceImpl extends BaseServiceImpl SELECT m.*, + cs.REAL_NAME AS staffName, + cs.MOBILE, prwt.WORK_TYPE_CODE AS workTypeSecondCode, substring_index(prwt.ALL_P_CODE,':',1) AS workTypeFirstCode FROM epmet_user.patrol_routine_work m + INNER JOIN customer_staff cs ON m.USER_ID = cs.USER_ID LEFT JOIN patrol_routine_work_type prwt ON m.ID = prwt.ROUTINE_WORK_ID WHERE m.CUSTOMER_ID = #{customerId} AND m.ID = #{id} + + AND DATE_FORMAT( HAPPEN_TIME, '%Y-%m-%d' ) >= #{startTime} + + + AND DATE_FORMAT( HAPPEN_TIME, '%Y-%m-%d' ) <= #{endTime} + AND m.DEL_FLAG = '0' From 30ca77205941a99f52aa4c6bfd099719c1ec154f Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Wed, 14 Dec 2022 17:56:30 +0800 Subject: [PATCH 107/111] =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/dto/indexcollect/form/HistoryScoreFormDTO.java | 9 ++++++++- .../dto/indexcollect/form/HistoryScoreListFormDTO.java | 5 ++++- .../indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java index 6b4964a53b..f5e26d5101 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreFormDTO.java @@ -1,9 +1,12 @@ package com.epmet.dto.indexcollect.form; +import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +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.math.BigDecimal; import java.util.Date; @@ -20,7 +23,7 @@ public class HistoryScoreFormDTO implements Serializable { /** * id */ - @NotBlank(message = "标题不能为空", groups = Edit.class) + @NotBlank(message = "id不能为空", groups = Edit.class) private String id; /** @@ -32,11 +35,15 @@ public class HistoryScoreFormDTO implements Serializable { /** * 起始时间 */ + @NotNull(message = "起始时间不能为空", groups = {Add.class}) + @JsonFormat(pattern = "yyyy-MM-dd") private Date startTime; /** * 截止时间 */ + @NotNull(message = "截止时间不能为空", groups = {Add.class}) + @JsonFormat(pattern = "yyyy-MM-dd") private Date endTime; /** diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java index f443bdd220..dd55b7d679 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java @@ -1,5 +1,6 @@ package com.epmet.dto.indexcollect.form; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; @@ -18,11 +19,13 @@ public class HistoryScoreListFormDTO implements Serializable { /** * 起始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date startTime; /** * 截止时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date endTime; /** @@ -38,7 +41,7 @@ public class HistoryScoreListFormDTO implements Serializable { /** * 是否分页【true分 false不分】 */ - private Boolean isPage; + private Boolean isPage = true; private String customerId; private String userId; diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java index df553e0d9d..2280b513cf 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java @@ -40,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.NumberFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -77,6 +78,7 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ public void save(HistoryScoreFormDTO formDTO) { //1.主表新增数据 ScreenPyHistoryScoreEntity entity = ConvertUtils.sourceToTarget(formDTO, ScreenPyHistoryScoreEntity.class); + entity.setReleaseTime(new Date()); screenPyHistoryScoreDao.insert(entity); //2.明细表新增数据 ScreenPyWeightConfigurationDTO wcDTO = screenPyWeightConfigurationDao.selectOneDTO(); From 8a349a3b57c8884b62da6f203b15a7069319c602 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Thu, 15 Dec 2022 09:32:22 +0800 Subject: [PATCH 108/111] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ScreenPyHistoryScoreServiceImpl.java | 2 +- .../indexcoll/ScreenPyHistoryScoreDetailDao.xml | 14 +++++++------- .../indexcoll/ScreenPyWeightConfigurationDao.xml | 12 ++++++------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java index 2280b513cf..cb41b6905b 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyHistoryScoreServiceImpl.java @@ -151,7 +151,7 @@ public class ScreenPyHistoryScoreServiceImpl implements ScreenPyHistoryScoreServ //2.字表数据 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ScreenPyHistoryScoreDetailEntity::getHistoryScoreId, formDTO.getId()); - wrapper.eq(ScreenPyHistoryScoreDetailEntity::getDelFlag, "1"); + wrapper.eq(ScreenPyHistoryScoreDetailEntity::getDelFlag, "0"); wrapper.orderByDesc(ScreenPyHistoryScoreDetailEntity::getNldf); List list = screenPyHistoryScoreDetailDao.selectList(wrapper); List detailList = ConvertUtils.sourceToTarget(list, HistoryScoreDetailResultDTO.Detail.class); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml index bd238aabfe..df3891e1b8 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyHistoryScoreDetailDao.xml @@ -47,13 +47,13 @@ history_score_id, agency_id, agency_name, - wghyd, - sjff, - xlgc, - rhzt, - ldgz, - qtgz, - nldf + FORMAT(wghyd, 2)wghyd, + FORMAT(sjff, 2)sjff, + FORMAT(xlgc, 2)xlgc, + FORMAT(rhzt, 2)rhzt, + FORMAT(ldgz, 2)ldgz, + FORMAT(qtgz, 2)qtgz, + FORMAT(nldf, 2)nldf FROM screen_py_history_score_detail WHERE diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml index 747639f09a..4a29b5dc19 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyWeightConfigurationDao.xml @@ -7,12 +7,12 @@ SELECT id, customer_id, - wghyd, - sjff, - xlgc, - rhzt, - ldgz, - qtgz + FORMAT(wghyd, 2)wghyd, + FORMAT(sjff, 2)sjff, + FORMAT(xlgc, 2)xlgc, + FORMAT(rhzt, 2)rhzt, + FORMAT(ldgz, 2)ldgz, + FORMAT(qtgz, 2)qtgz FROM screen_py_weight_configuration WHERE From adc1995985f340fc46bc8586140db7f3487786fe Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Thu, 15 Dec 2022 12:20:39 +0800 Subject: [PATCH 109/111] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E8=B5=8B=E5=80=BC?= =?UTF-8?q?=E5=BE=97=E5=88=86=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/EventCategoryFormDTO.java | 6 +- .../result/OrgEventScoreResultDTO.java | 44 ++++ .../controller/PingYinEventController.java | 12 +- .../dao/evaluationindex/PingYinEventDao.java | 15 ++ .../evaluationindex/PingYinEventService.java | 11 + .../impl/PingYinEventServiceImpl.java | 43 +++- .../evaluationindex/PingYinEventDao.xml | 235 +++++++++++++++++- 7 files changed, 359 insertions(+), 7 deletions(-) create mode 100644 epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/result/OrgEventScoreResultDTO.java diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/form/EventCategoryFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/form/EventCategoryFormDTO.java index f9cd88c5e5..4907c3cf08 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/form/EventCategoryFormDTO.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/form/EventCategoryFormDTO.java @@ -30,7 +30,11 @@ public class EventCategoryFormDTO implements Serializable { * 组织类型 组织:agency,网格:grid */ private String orgType; - + private String areaCode; + /** + * 组织级别 + */ + private String orgLevel; @NotBlank(message = "结束时间不能为空",groups = {EventCategoryForm.class,CategoryEventExportForm.class}) private String endTime; diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/result/OrgEventScoreResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/result/OrgEventScoreResultDTO.java new file mode 100644 index 0000000000..f7b2a334ba --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/evaluationindex/result/OrgEventScoreResultDTO.java @@ -0,0 +1,44 @@ +package com.epmet.dataaggre.dto.evaluationindex.result;/** + * @author ZhaoQiFeng + * @date 2022/12/14 + * @apiNote + */ + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2022/12/14 13:39 + */ +@Data +public class OrgEventScoreResultDTO implements Serializable { + private static final long serialVersionUID = 2570384890580378137L; + private String orgName; + /** + * 上报事件数 + */ + private String projectCount; + /** + * 上报事件总分 + */ + private String projectScore; + /** + * 例行工作数 + */ + private String workCount; + /** + * 例行工作总分 + */ + private String workScore; + /** + * 网格员数量 + */ + private String memberCount; + /** + * 考核得分 + */ + private String aveScore; +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/PingYinEventController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/PingYinEventController.java index 8ec1f0089b..b42855202d 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/PingYinEventController.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/PingYinEventController.java @@ -1,6 +1,6 @@ package com.epmet.dataaggre.controller; -import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.EasyExcelFactory; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; @@ -19,6 +19,7 @@ import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryFormDTO; import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryListFormDTO; import com.epmet.dataaggre.dto.evaluationindex.result.EventCategoryListResultDTO; import com.epmet.dataaggre.dto.evaluationindex.result.EventScoreTotalResultDTO; +import com.epmet.dataaggre.dto.evaluationindex.result.OrgEventScoreResultDTO; import com.epmet.dataaggre.service.evaluationindex.PingYinEventService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -141,8 +142,8 @@ public class PingYinEventController { //分类统计 List categoryList = pingYinEventService.getEventCategorySoreExport(tokenDto, formDTO); //设置输出流和模板信息 - excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build(); - WriteSheet writeSheet = EasyExcel.writerSheet(0) + excelWriter = EasyExcelFactory.write(outputStream).withTemplate(inputStream).build(); + WriteSheet writeSheet = EasyExcelFactory.writerSheet(0) .registerWriteHandler(new CustomMergeStrategy(categoryList.stream().map(EventCategoryResultDTO::getEventType).collect(Collectors.toList()), 0)) .registerWriteHandler(new CustomMergeStrategy(categoryList.stream().map(EventCategoryResultDTO::getParentCategoryName).collect(Collectors.toList()), 1)) .build(); @@ -150,6 +151,11 @@ public class PingYinEventController { FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); excelWriter.fill(categoryList, fillConfig, writeSheet); excelWriter.fill(scoreTotal, writeSheet); + + List orgScoreList = pingYinEventService.getOrgEventScoreList(formDTO); + WriteSheet writeSheet1 = EasyExcelFactory.writerSheet(1).build(); + excelWriter.fill(orgScoreList, fillConfig, writeSheet1); + excelWriter.fill(scoreTotal, writeSheet1); } catch (EpmetException e) { response.reset(); response.setCharacterEncoding("UTF-8"); diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/PingYinEventDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/PingYinEventDao.java index 66f9962f37..f0b44c9d89 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/PingYinEventDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/evaluationindex/PingYinEventDao.java @@ -21,6 +21,7 @@ import com.epmet.dataaggre.dto.evaluationindex.EventCategoryResultDTO; import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryFormDTO; import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryListFormDTO; import com.epmet.dataaggre.dto.evaluationindex.result.EventCategoryListResultDTO; +import com.epmet.dataaggre.dto.evaluationindex.result.OrgEventScoreResultDTO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -139,4 +140,18 @@ public interface PingYinEventDao { * @Date 2022/12/9 13:41 */ List selectWorkCategoryForExport(); + + /** + * 下级得分 + * + * @Param formDTO + * @Return {@link List< OrgEventScoreResultDTO>} + * @Author zhaoqifeng + * @Date 2022/12/15 9:31 + */ + List selectOrgEventScoreList(EventCategoryFormDTO formDTO); + + List selectGridEventScoreList(EventCategoryFormDTO formDTO); + + String getAreaCode(@Param("agencyId")String agencyId); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/PingYinEventService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/PingYinEventService.java index 1e4bb50c07..35f22c00c4 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/PingYinEventService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/PingYinEventService.java @@ -7,6 +7,7 @@ import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryFormDTO; import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryListFormDTO; import com.epmet.dataaggre.dto.evaluationindex.result.EventCategoryListResultDTO; import com.epmet.dataaggre.dto.evaluationindex.result.EventScoreTotalResultDTO; +import com.epmet.dataaggre.dto.evaluationindex.result.OrgEventScoreResultDTO; import java.util.List; @@ -56,4 +57,14 @@ public interface PingYinEventService { * @Date 2022/12/9 9:55 */ List getEventCategorySoreExport (TokenDto tokenDto, EventCategoryFormDTO formDTO); + + /** + * 下级得分 + * + * @Param formDTO + * @Return {@link List< OrgEventScoreResultDTO>} + * @Author zhaoqifeng + * @Date 2022/12/15 11:05 + */ + List getOrgEventScoreList(EventCategoryFormDTO formDTO); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/PingYinEventServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/PingYinEventServiceImpl.java index 2ac0e78511..e605d5e291 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/PingYinEventServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/PingYinEventServiceImpl.java @@ -11,12 +11,14 @@ import com.epmet.commons.tools.redis.common.bean.GridInfoCache; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.constant.EventConstant; +import com.epmet.dataaggre.constant.OrgConstant; import com.epmet.dataaggre.dao.evaluationindex.PingYinEventDao; import com.epmet.dataaggre.dto.evaluationindex.EventCategoryResultDTO; import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryFormDTO; import com.epmet.dataaggre.dto.evaluationindex.form.EventCategoryListFormDTO; import com.epmet.dataaggre.dto.evaluationindex.result.EventCategoryListResultDTO; import com.epmet.dataaggre.dto.evaluationindex.result.EventScoreTotalResultDTO; +import com.epmet.dataaggre.dto.evaluationindex.result.OrgEventScoreResultDTO; import com.epmet.dataaggre.service.evaluationindex.PingYinEventService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -29,6 +31,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -151,7 +154,6 @@ public class PingYinEventServiceImpl implements PingYinEventService { */ @Override public EventScoreTotalResultDTO getEventScoreTotal(EventCategoryFormDTO formDTO) { - formDTO.setCustomerId("6f203e30de1a65aab7e69c058826cd80"); EventScoreTotalResultDTO result = new EventScoreTotalResultDTO(); Long projectScore = pingYinEventDao.getProjectTotalScore(formDTO); Long workScore = pingYinEventDao.getWorkTotalScore(formDTO); @@ -191,7 +193,6 @@ public class PingYinEventServiceImpl implements PingYinEventService { formDTO.setOrgType("agency"); } formDTO.setCustomerId(tokenDto.getCustomerId()); - formDTO.setCustomerId("6f203e30de1a65aab7e69c058826cd80"); //获取项目分类 List projectCategoryList = pingYinEventDao.selectProjectCategoryForExport(formDTO.getCustomerId()); //获取项目赋值得分统计 @@ -220,4 +221,42 @@ public class PingYinEventServiceImpl implements PingYinEventService { result.addAll(workCategoryList); return result; } + + /** + * 下级得分 + * + * @param formDTO + * @Param formDTO + * @Return {@link List< OrgEventScoreResultDTO >} + * @Author zhaoqifeng + * @Date 2022/12/15 11:05 + */ + @Override + public List getOrgEventScoreList(EventCategoryFormDTO formDTO) { + if (OrgConstant.GRID.equals((formDTO.getOrgLevel()))) { + return Collections.emptyList(); + } + List result; + //获取areacode + if (StringUtils.isBlank(formDTO.getAreaCode())) { + formDTO.setAreaCode(pingYinEventDao.getAreaCode(formDTO.getOrgId())); + } + if (OrgConstant.COMMUNITY.equals(formDTO.getOrgLevel())) { + result = pingYinEventDao.selectGridEventScoreList(formDTO); + } else { + result = pingYinEventDao.selectOrgEventScoreList(formDTO); + } + result.forEach(item -> { + item.setAveScore("0.00"); + if (!NumConstant.ZERO_STR.equals(item.getMemberCount())) { + BigDecimal projectScore = new BigDecimal(item.getProjectScore()); + BigDecimal workScore = new BigDecimal(item.getWorkScore()); + BigDecimal total = projectScore.add(workScore); + BigDecimal count = new BigDecimal(item.getMemberCount()); + BigDecimal ave = total.divide(count, NumConstant.TWO, RoundingMode.HALF_UP); + item.setAveScore(ave.toString()); + } + }); + return result; + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/PingYinEventDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/PingYinEventDao.xml index 54c52e5095..2fc6e9e53d 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/PingYinEventDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/evaluationindex/PingYinEventDao.xml @@ -287,7 +287,7 @@ + + + + From 4d90a611b2e6cddbd8050abce7c2be7f0bc72f19 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Thu, 15 Dec 2022 12:55:28 +0800 Subject: [PATCH 110/111] =?UTF-8?q?=E7=BD=91=E6=A0=BC=E5=91=98=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../indexcollect/ScreenPyGridStaffDTO.java | 117 ++++++++++++++++++ .../feign/DataStatisticalOpenFeignClient.java | 4 + ...ataStatisticalOpenFeignClientFallBack.java | 6 + .../ScreenPyGridStaffController.java | 36 ++++++ .../indexcoll/ScreenPyGridStaffDao.java | 36 ++++++ .../indexcoll/ScreenPyGridStaffEntity.java | 84 +++++++++++++ .../indexcoll/ScreenPyGridStaffService.java | 15 +++ .../impl/ScreenPyGridStaffServiceImpl.java | 53 ++++++++ .../indexcoll/ScreenPyGridStaffDao.xml | 18 +++ .../impl/GridstaffInfoPingyinServiceImpl.java | 19 +++ 10 files changed, 388 insertions(+) create mode 100644 epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyGridStaffDTO.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyGridStaffController.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyGridStaffDao.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyGridStaffEntity.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyGridStaffService.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyGridStaffServiceImpl.java create mode 100644 epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyGridStaffDao.xml diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyGridStaffDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyGridStaffDTO.java new file mode 100644 index 0000000000..89e5acb5a1 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/ScreenPyGridStaffDTO.java @@ -0,0 +1,117 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.dto.indexcollect; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 平阴区网格员基础信息 + * + * @author generator generator@elink-cn.com + */ +@Data +public class ScreenPyGridStaffDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID 主键 + */ + private String id; + + /** + * 客户Id + */ + private String customerId; + + /** + * 网格Id + */ + private String gridId; + + /** + * 网格编码 + */ + private String gridCode; + + /** + * 网格名称 + */ + private String gridName; + + /** + * 网格名称 + */ + private String pids; + + /** + * 工作人员Id + */ + private String staffId; + + /** + * 网格员姓名 + */ + private String staffName; + + /** + * 手机号 + */ + private String mobile; + + /** + * 是否离职,格式为Y:是、N:否 + */ + private String isLeave; + + + /** + * 删除标识 0未删除;1已删除 + */ + private String delFlag; + + /** + * 乐观锁 + */ + private Integer revision; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新人 + */ + private String updatedBy; + + /** + * 更新时间 + */ + private Date updatedTime; + + +} diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java index e6cff07c10..0f90ba3d7f 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/DataStatisticalOpenFeignClient.java @@ -8,6 +8,7 @@ import com.epmet.dto.basereport.result.EventInfoResultDTO; import com.epmet.dto.extract.form.*; import com.epmet.dto.group.form.GroupStatsFormDTO; import com.epmet.dto.group.form.GroupTotalFormDTO; +import com.epmet.dto.indexcollect.ScreenPyGridStaffDTO; import com.epmet.dto.org.form.GridBaseInfoFormDTO; import com.epmet.dto.org.result.CustomerAgencyDTO; import com.epmet.dto.org.result.CustomerGridDTO; @@ -383,4 +384,7 @@ public interface DataStatisticalOpenFeignClient { @PostMapping("/data/stats/datareporting/saveData") Result saveData(@RequestBody SavePyEventDataFormDTO formDTO); + + @PostMapping("/data/stats/screenPyStaffData/savelist") + Result saveList(@RequestBody List dtoList); } diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java index 7eb0e45316..39be018129 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/feign/impl/DataStatisticalOpenFeignClientFallBack.java @@ -9,6 +9,7 @@ import com.epmet.dto.basereport.result.EventInfoResultDTO; import com.epmet.dto.extract.form.*; import com.epmet.dto.group.form.GroupStatsFormDTO; import com.epmet.dto.group.form.GroupTotalFormDTO; +import com.epmet.dto.indexcollect.ScreenPyGridStaffDTO; import com.epmet.dto.org.form.GridBaseInfoFormDTO; import com.epmet.dto.org.result.CustomerAgencyDTO; import com.epmet.dto.org.result.CustomerGridDTO; @@ -378,4 +379,9 @@ public class DataStatisticalOpenFeignClientFallBack implements DataStatisticalOp public Result saveData(SavePyEventDataFormDTO formDTO) { return ModuleUtils.feignConError(ServiceConstant.DATA_STATISTICAL_SERVER, "SavePyEventDataFormDTO", formDTO); } + + @Override + public Result saveList(List dtoList) { + return ModuleUtils.feignConError(ServiceConstant.DATA_STATISTICAL_SERVER, "saveList", dtoList); + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyGridStaffController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyGridStaffController.java new file mode 100644 index 0000000000..d622b70bab --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyGridStaffController.java @@ -0,0 +1,36 @@ +package com.epmet.controller; + +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.indexcollect.ScreenPyGridStaffDTO; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyGridStaffService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 平阴区网格员基础信息 + * + * @author generator generator@elink-cn.com + */ +@Slf4j +@RestController +@RequestMapping("screenPyGridStaff") +public class ScreenPyGridStaffController { + + @Autowired + private ScreenPyGridStaffService screenPyStaffDataService; + + + @PostMapping("savelist") + public Result saveList(@RequestBody List dtoList) { + screenPyStaffDataService.saveList(dtoList); + return new Result(); + } + + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyGridStaffDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyGridStaffDao.java new file mode 100644 index 0000000000..396f2d6b8c --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/indexcoll/ScreenPyGridStaffDao.java @@ -0,0 +1,36 @@ +package com.epmet.dao.evaluationindex.indexcoll; /** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyGridStaffEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 平阴区网格员基础信息 + * + * @author generator generator@elink-cn.com + */ +@Mapper +public interface ScreenPyGridStaffDao extends BaseDao { + + ScreenPyGridStaffEntity selectStaff(@Param("gridId") String gridId, @Param("staffId") String staffId); + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyGridStaffEntity.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyGridStaffEntity.java new file mode 100644 index 0000000000..1c59536017 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/evaluationindex/indexcoll/ScreenPyGridStaffEntity.java @@ -0,0 +1,84 @@ +/** + * Copyright 2018 人人开源 https://www.renren.io + *

+ * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + *

+ * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + *

+ * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.epmet.entity.evaluationindex.indexcoll; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 平阴区网格员基础信息 + * + * @author generator generator@elink-cn.com + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("screen_py_grid_staff") +public class ScreenPyGridStaffEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * 客户Id + */ + private String customerId; + + /** + * 网格Id + */ + private String gridId; + + /** + * 网格编码 + */ + private String gridCode; + + /** + * 网格名称 + */ + private String gridName; + + /** + * 网格名称 + */ + private String pids; + + /** + * 工作人员Id + */ + private String staffId; + + /** + * 网格员姓名 + */ + private String staffName; + + /** + * 手机号 + */ + private String mobile; + + /** + * 是否离职,格式为Y:是、N:否 + */ + private String isLeave; + +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyGridStaffService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyGridStaffService.java new file mode 100644 index 0000000000..057a9aa6af --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/ScreenPyGridStaffService.java @@ -0,0 +1,15 @@ +package com.epmet.service.evaluationindex.indexcoll; + +import com.epmet.dto.indexcollect.ScreenPyGridStaffDTO; + +import java.util.List; + +/** + * 平阴区网格员基础信息 + * + * @author generator generator@elink-cn.com + */ +public interface ScreenPyGridStaffService { + + void saveList(List dtoList); +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyGridStaffServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyGridStaffServiceImpl.java new file mode 100644 index 0000000000..35fc1058a7 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/ScreenPyGridStaffServiceImpl.java @@ -0,0 +1,53 @@ +package com.epmet.service.evaluationindex.indexcoll.impl; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.epmet.commons.dynamic.datasource.annotation.DataSource; +import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; +import com.epmet.commons.tools.constant.StrConstant; +import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; +import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.redis.common.CustomerStaffRedis; +import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.constant.DataSourceConstant; +import com.epmet.dao.evaluationindex.indexcoll.ScreenPyGridStaffDao; +import com.epmet.dto.indexcollect.ScreenPyGridStaffDTO; +import com.epmet.entity.evaluationindex.indexcoll.ScreenPyGridStaffEntity; +import com.epmet.service.evaluationindex.indexcoll.ScreenPyGridStaffService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 平阴区网格员基础信息 + * + * @author generator generator@elink-cn.com + */ +@Slf4j +@Service +@DataSource(DataSourceConstant.EVALUATION_INDEX) +public class ScreenPyGridStaffServiceImpl extends BaseServiceImpl implements ScreenPyGridStaffService { + + @Override + public void saveList(List dtoList) { + dtoList.forEach(d -> { + CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(StrConstant.PY_CUSTOMER, d.getStaffId()); + if (null == staffInfo) { + throw new EpmetException(String.format("查询工作人员%s缓存信息失败...", d.getStaffId())); + } + ScreenPyGridStaffEntity entity = baseDao.selectStaff(d.getGridId(), d.getStaffId()); + //存在就更新 不存在就新增 + if (null != entity) { + ScreenPyGridStaffEntity entity1 = ConvertUtils.sourceToTarget(d, ScreenPyGridStaffEntity.class); + entity1.setId(entity.getId()); + entity1.setPids(("".equals(staffInfo.getAgencyPIds()) ? staffInfo.getAgencyId() : staffInfo.getAgencyPIds() + ":") + staffInfo.getAgencyId()); + baseDao.updateById(entity1); + } else { + ScreenPyGridStaffEntity saveEntity = ConvertUtils.sourceToTarget(d, ScreenPyGridStaffEntity.class); + saveEntity.setId(IdWorker.getIdStr()); + saveEntity.setPids(("".equals(staffInfo.getAgencyPIds()) ? staffInfo.getAgencyId() : staffInfo.getAgencyPIds() + ":") + staffInfo.getAgencyId()); + insert(saveEntity); + } + }); + } +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyGridStaffDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyGridStaffDao.xml new file mode 100644 index 0000000000..207b413c14 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/indexcoll/ScreenPyGridStaffDao.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffInfoPingyinServiceImpl.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffInfoPingyinServiceImpl.java index 34ea9c0da5..732df55207 100755 --- a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffInfoPingyinServiceImpl.java +++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GridstaffInfoPingyinServiceImpl.java @@ -7,6 +7,7 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.form.CustomerGridStaffListFormDTO; import com.epmet.dto.form.GridStaffUploadtFormDTO; +import com.epmet.dto.indexcollect.ScreenPyGridStaffDTO; import com.epmet.dto.result.CustomerGridStaffListResultDTO; import com.epmet.dto.result.GridStaffUploadResultDTO; import com.epmet.dto.user.result.GridUserInfoDTO; @@ -119,6 +120,7 @@ public class GridstaffInfoPingyinServiceImpl extends BaseServiceImpl staffList = new ArrayList<>(); result.getData().forEach(r -> { GridstaffInfoPingyinEntity entity = ConvertUtils.sourceToTarget(r, GridstaffInfoPingyinEntity.class); entity.setQxBm("370124"); @@ -142,7 +144,24 @@ public class GridstaffInfoPingyinServiceImpl extends BaseServiceImpl Date: Thu, 15 Dec 2022 13:36:20 +0800 Subject: [PATCH 111/111] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=A1=8C=E9=AB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../indexcollect/form/HistoryScoreListFormDTO.java | 10 ++++------ .../controller/ScreenPyHistoryScoreController.java | 2 +- .../java/com/epmet/excel/HistoryScoreDetailExcel.java | 11 ++--------- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java index dd55b7d679..0e61017efe 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/indexcollect/form/HistoryScoreListFormDTO.java @@ -1,10 +1,8 @@ package com.epmet.dto.indexcollect.form; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; -import java.util.Date; @Data public class HistoryScoreListFormDTO implements Serializable { @@ -19,14 +17,14 @@ public class HistoryScoreListFormDTO implements Serializable { /** * 起始时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date startTime; + //@JsonFormat(pattern = "yyyy-MM-dd") + private String startTime; /** * 截止时间 */ - @JsonFormat(pattern = "yyyy-MM-dd") - private Date endTime; + //@JsonFormat(pattern = "yyyy-MM-dd") + private String endTime; /** * 当前页 diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java index 56a1a2f853..8c3e16bae9 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenPyHistoryScoreController.java @@ -122,7 +122,7 @@ public class ScreenPyHistoryScoreController { for (HistoryScoreDetailResultDTO d : data.getList()){ list = ConvertUtils.sourceToTarget(d.getDetailList(), HistoryScoreDetailExcel.class); //一条主表记录一个sheet页 - WriteSheet writeSheet = EasyExcel.writerSheet(d.getTitle()).registerWriteHandler(new CustomerTitleHandler(d.getTime())).build(); + WriteSheet writeSheet = EasyExcel.writerSheet("(" + d.getTitle() + ")").registerWriteHandler(new CustomerTitleHandler(d.getTime())).build(); excelWriter.write(list, writeSheet); } formDTO.setPageNo(formDTO.getPageNo() + NumConstant.ONE); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java index 6ed3d58446..e086132a19 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/excel/HistoryScoreDetailExcel.java @@ -2,7 +2,7 @@ package com.epmet.excel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.alibaba.excel.annotation.write.style.HeadStyle; import com.alibaba.excel.enums.poi.FillPatternTypeEnum; import lombok.Data; @@ -16,47 +16,40 @@ import java.math.BigDecimal; * @author generator generator@elink-cn.com */ @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44) +@HeadRowHeight(40) @Data public class HistoryScoreDetailExcel implements Serializable { private static final long serialVersionUID = -12110233388005838L; - //@ExcelProperty(value = "下级单位") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "下级单位"}) @ColumnWidth(15) @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44) private String agencyName; - //@ExcelProperty(value = "网格活跃度") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "网格活跃度"}) @ColumnWidth(15) private BigDecimal wghyd; - //@ExcelProperty(value = "事件赋值得分") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "事件赋值得分"}) @ColumnWidth(20) private BigDecimal sjff; - //@ExcelProperty(value = "雪亮工程") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "雪亮工程"}) @ColumnWidth(15) private BigDecimal xlgc; - //@ExcelProperty(value = "日核周调") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "日核周调"}) @ColumnWidth(15) private BigDecimal rhzt; - //@ExcelProperty(value = "亮点工作") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "亮点工作"}) @ColumnWidth(15) private BigDecimal ldgz; - //@ExcelProperty(value = "其他工作") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "其他工作"}) @ColumnWidth(15) private BigDecimal qtgz; - //@ExcelProperty(value = "能力得分") @ExcelProperty(value = {"平阴县街道(镇)政法能力得分排行", "${title}", "能力得分"}) @ColumnWidth(15) private BigDecimal nldf;