Procházet zdrojové kódy

数据导入导出

LIVE_YE před 2 roky
rodič
revize
96f0977122

+ 12 - 0
ruoyi-admin/pom.xml

@@ -24,6 +24,18 @@
             <optional>true</optional> <!-- 表示依赖不会传递 -->
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <version>2.6.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+
+
         <!-- swagger3-->
         <dependency>
             <groupId>io.springfox</groupId>

+ 4 - 4
ruoyi-admin/src/main/resources/application-druid.yml

@@ -30,10 +30,10 @@ spring:
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭
-                enabled: false
-                url:
-                username:
-                password:
+                enabled: true
+                url: jdbc:mysql://60.171.171.235:3386/qss_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+                username: qss_db
+                password: S6u269%6
             # 初始连接数
             initialSize: 10
             # 最小连接池数量

+ 5 - 5
ruoyi-admin/src/main/resources/application-prod.yml

@@ -27,14 +27,14 @@ spring:
             master:
                 url: jdbc:mysql://127.0.0.1:3306/qianshan_credit_interests?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: root
-                password: UEB^RX$z
+                password: zhaoshang@2018
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭
-                enabled: false
-                url: 
-                username: 
-                password: 
+                enabled: true
+                    url: jdbc:mysql://60.171.171.235:3386/qss_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
+                    username: qss_db
+                    password: S6u269%6
             # 初始连接数
             initialSize: 5
             # 最小连接池数量

+ 68 - 50
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -16,11 +16,10 @@ import org.apache.commons.lang3.time.DateFormatUtils;
 
 /**
  * 时间工具类
- * 
+ *
  * @author ruoyi
  */
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils
-{
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
     public static String YYYY = "yyyy";
 
     public static String YYYY_MM = "yyyy-MM";
@@ -32,63 +31,52 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
 
     private static String[] parsePatterns = {
-            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
 
     /**
      * 获取当前Date型日期
-     * 
+     *
      * @return Date() 当前日期
      */
-    public static Date getNowDate()
-    {
+    public static Date getNowDate() {
         return new Date();
     }
 
     /**
      * 获取当前日期, 默认格式为yyyy-MM-dd
-     * 
+     *
      * @return String
      */
-    public static String getDate()
-    {
+    public static String getDate() {
         return dateTimeNow(YYYY_MM_DD);
     }
 
-    public static final String getTime()
-    {
+    public static final String getTime() {
         return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
     }
 
-    public static final String dateTimeNow()
-    {
+    public static final String dateTimeNow() {
         return dateTimeNow(YYYYMMDDHHMMSS);
     }
 
-    public static final String dateTimeNow(final String format)
-    {
+    public static final String dateTimeNow(final String format) {
         return parseDateToStr(format, new Date());
     }
 
-    public static final String dateTime(final Date date)
-    {
+    public static final String dateTime(final Date date) {
         return parseDateToStr(YYYY_MM_DD, date);
     }
 
-    public static final String parseDateToStr(final String format, final Date date)
-    {
+    public static final String parseDateToStr(final String format, final Date date) {
         return new SimpleDateFormat(format).format(date);
     }
 
-    public static final Date dateTime(final String format, final String ts)
-    {
-        try
-        {
+    public static final Date dateTime(final String format, final String ts) {
+        try {
             return new SimpleDateFormat(format).parse(ts);
-        }
-        catch (ParseException e)
-        {
+        } catch (ParseException e) {
             throw new RuntimeException(e);
         }
     }
@@ -96,8 +84,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期路径 即年/月/日 如2018/08/08
      */
-    public static final String datePath()
-    {
+    public static final String datePath() {
         Date now = new Date();
         return DateFormatUtils.format(now, "yyyy/MM/dd");
     }
@@ -105,8 +92,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期路径 即年/月/日 如20180808
      */
-    public static final String dateTime()
-    {
+    public static final String dateTime() {
         Date now = new Date();
         return DateFormatUtils.format(now, "yyyyMMdd");
     }
@@ -114,18 +100,13 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期型字符串转化为日期 格式
      */
-    public static Date parseDate(Object str)
-    {
-        if (str == null)
-        {
+    public static Date parseDate(Object str) {
+        if (str == null) {
             return null;
         }
-        try
-        {
+        try {
             return parseDate(str.toString(), parsePatterns);
-        }
-        catch (ParseException e)
-        {
+        } catch (ParseException e) {
             return null;
         }
     }
@@ -133,8 +114,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 获取服务器启动时间
      */
-    public static Date getServerStartDate()
-    {
+    public static Date getServerStartDate() {
         long time = ManagementFactory.getRuntimeMXBean().getStartTime();
         return new Date(time);
     }
@@ -142,16 +122,14 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 计算相差天数
      */
-    public static int differentDaysByMillisecond(Date date1, Date date2)
-    {
+    public static int differentDaysByMillisecond(Date date1, Date date2) {
         return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
     }
 
     /**
      * 计算两个时间差
      */
-    public static String getDatePoor(Date endDate, Date nowDate)
-    {
+    public static String getDatePoor(Date endDate, Date nowDate) {
         long nd = 1000 * 24 * 60 * 60;
         long nh = 1000 * 60 * 60;
         long nm = 1000 * 60;
@@ -172,8 +150,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 增加 LocalDateTime ==> Date
      */
-    public static Date toDate(LocalDateTime temporalAccessor)
-    {
+    public static Date toDate(LocalDateTime temporalAccessor) {
         ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
@@ -181,8 +158,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 增加 LocalDate ==> Date
      */
-    public static Date toDate(LocalDate temporalAccessor)
-    {
+    public static Date toDate(LocalDate temporalAccessor) {
         LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
@@ -216,5 +192,47 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         }
     }
 
+    /**
+     * 获取给定日期N天后的日期
+     *
+     * @param dateTime
+     * @param days
+     * @return
+     */
+    public static String getDateAfterNDays(String dateTime, int days) {
+        Calendar calendar = Calendar.getInstance();
+        String[] dateTimeArray = dateTime.split("-");
+        int year = Integer.parseInt(dateTimeArray[0]);
+        int month = Integer.parseInt(dateTimeArray[1]);
+        int day = Integer.parseInt(dateTimeArray[2]);
+        calendar.set(year, month - 1, day);
+        long time = calendar.getTimeInMillis();// 给定时间与1970 年 1 月 1 日的00:00:00.000的差。以毫秒显示
+        calendar.setTimeInMillis(time + days * 1000 * 60 * 60 * 24);// 用给定的 long值设置此Calendar的当前时间值
+        return calendar.get(Calendar.YEAR)// 年
+                + "-" + (calendar.get(Calendar.MONTH) + 1)// 月
+                + "-" + calendar.get(Calendar.DAY_OF_MONTH)// 日
+                ;
+    }
+
+
+    public static String getAddDate(String dateTime,int n) {
+
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
+        Date holdDate = null;
+        try {
+            holdDate = simpleDateFormat.parse(dateTime);
+            Calendar calendar =new GregorianCalendar();
+            calendar.setTime(holdDate);
+            calendar.add(calendar.DATE, n);
+            Date utilDate = calendar.getTime();
+            holdDate =new Date(utilDate.getTime());
+            String rDate = simpleDateFormat.format(holdDate);
+            return rDate;
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
 
 }

+ 13 - 0
ruoyi-system/src/main/java/com/ruoyi/system/asynchronous/AsynchronousService.java

@@ -0,0 +1,13 @@
+package com.ruoyi.system.asynchronous;
+
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AsynchronousService {
+
+    @Async
+    public void springAsynchronousMethod(){
+
+    }
+}

+ 93 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/OdsQssHsjcxx.java

@@ -0,0 +1,93 @@
+package com.ruoyi.system.domain;
+
+
+public class OdsQssHsjcxx {
+
+    /** 证件号码 */
+    private String sfzhm;
+
+    /** 姓名 */
+    private String xm;
+
+    /** 手机号码 */
+    private String sjhm;
+
+    /** 采集时间 */
+    private String cjsj;
+
+    /** 检测出具时间 */
+    private String jgcjss;
+
+    /** 检测地点 */
+    private String jcdd;
+
+    /** 检测结果 */
+    private String jcjg;
+
+    /** 数据来源 */
+    private String sjly;
+
+    public String getJcdd() {
+        return jcdd;
+    }
+
+    public String getSfzhm() {
+        return sfzhm;
+    }
+
+    public String getXm() {
+        return xm;
+    }
+
+    public String getSjhm() {
+        return sjhm;
+    }
+
+    public String getCjsj() {
+        return cjsj;
+    }
+
+    public String getJgcjss() {
+        return jgcjss;
+    }
+
+    public String getJcjg() {
+        return jcjg;
+    }
+
+    public String getSjly() {
+        return sjly;
+    }
+
+    public void setSfzhm(String sfzhm) {
+        this.sfzhm = sfzhm;
+    }
+
+    public void setXm(String xm) {
+        this.xm = xm;
+    }
+
+    public void setSjhm(String sjhm) {
+        this.sjhm = sjhm;
+    }
+
+    public void setCjsj(String cjsj) {
+        this.cjsj = cjsj;
+    }
+
+    public void setJgcjss(String jgcjss) {
+        this.jgcjss = jgcjss;
+    }
+
+    public void setJcjg(String jcjg) {
+        this.jcjg = jcjg;
+    }
+
+    public void setSjly(String sjly) {
+        this.sjly = sjly;
+    }
+
+    public void setJcdd(String jcdd) {
+        this.jcdd = jcdd;
+    }
+}

+ 17 - 8
ruoyi-system/src/main/java/com/ruoyi/system/domain/UserInfo.java

@@ -22,24 +22,24 @@ public class UserInfo extends BaseEntity
     @Excel(name = "姓名")
     private String name;
 
+    @Excel(name = "比对结果")
+    private String detectionResult;
+
     /** 性别 */
-    @Excel(name = "性别")
     private String gender;
 
     /** 年龄 */
-    @Excel(name = "年龄")
     private Integer age;
 
     /** 身份证号码 */
-    @Excel(name = "身份证号")
+    @Excel(name = "身份证号")
     private String idCard;
 
-    /** 联系号码 */
-    @Excel(name = "联系号码")
+    /** 手机号 */
+    @Excel(name = "手机号码")
     private String phoneNum;
 
     /** 部门id */
-    @Excel(name = "部门id")
     private String deptId;
 
 
@@ -64,7 +64,7 @@ public class UserInfo extends BaseEntity
     private String focusCrowdStyle;
 
     /** 检测频次(汉字拼接后) */
-    @Excel(name = "检测频次(汉字拼接后)")
+    @Excel(name = "检测频次")
     private String detectionFrequency;
 
     /** 检测频次(次数) */
@@ -84,7 +84,11 @@ public class UserInfo extends BaseEntity
     @Excel(name = "比对结束时间")
     private String endTime;
 
-    public void setId(Long id) 
+    public String getDetectionResult() {
+        return detectionResult;
+    }
+
+    public void setId(Long id)
     {
         this.id = id;
     }
@@ -245,6 +249,10 @@ public class UserInfo extends BaseEntity
         this.deptId = deptId;
     }
 
+    public void setDetectionResult(String detectionResult) {
+        this.detectionResult = detectionResult;
+    }
+
     @Override
     public String toString() {
         return "UserInfo{" +
@@ -264,6 +272,7 @@ public class UserInfo extends BaseEntity
                 ", detectionNumber='" + detectionNumber + '\'' +
                 ", detectionScope='" + detectionScope + '\'' +
                 ", deptName='" + deptName + '\'' +
+                ", detectionResult='" + detectionResult + '\'' +
                 ", startTime='" + startTime + '\'' +
                 ", endTime='" + endTime + '\'' +
                 '}';

+ 8 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserInfoMapper.java

@@ -1,7 +1,10 @@
 package com.ruoyi.system.mapper;
 
 import java.util.List;
+
+import com.ruoyi.system.domain.OdsQssHsjcxx;
 import com.ruoyi.system.domain.UserInfo;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 导入人员信息Mapper接口
@@ -9,7 +12,7 @@ import com.ruoyi.system.domain.UserInfo;
  * @author ruoyi
  * @date 2022-08-11
  */
-public interface UserInfoMapper 
+public interface UserInfoMapper
 {
     /**
      * 查询导入人员信息
@@ -58,4 +61,8 @@ public interface UserInfoMapper
      * @return 结果
      */
     public int deleteUserInfoByIds(Long[] ids);
+
+    List<OdsQssHsjcxx> thirdNucleicAcid(@Param("startTime") String startTime, @Param("endTime")String endTime, @Param("idCardList")List<String> idCardList);
+
+    void insertUserInfoList(@Param("userList")List<UserInfo> userList);
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserNucleicTimeMapper.java

@@ -94,4 +94,6 @@ public interface UserNucleicTimeMapper
     public List<UserNucleicTime> getJobStyle(Date weekTime);
 
     public int getHeSuanCount(Long deptId);
+
+    void insertUserNucleicTimeList(@Param("userNucleicTimeList")List<UserNucleicTime> userNucleicTimeList);
 }

+ 9 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/OdsQssHsjcxxService.java

@@ -0,0 +1,9 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.OdsQssHsjcxx;
+
+import java.util.List;
+
+public interface OdsQssHsjcxxService {
+    List<OdsQssHsjcxx> thirdNucleicAcid(String startTime, String endTime, List<String> idCardList);
+}

+ 41 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OdsQssHsjcxxServiceImpl.java

@@ -0,0 +1,41 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.system.domain.OdsQssHsjcxx;
+import com.ruoyi.system.mapper.UserInfoMapper;
+import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.service.OdsQssHsjcxxService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class OdsQssHsjcxxServiceImpl  implements OdsQssHsjcxxService {
+
+    @Autowired
+    private UserInfoMapper userInfoMapper;
+
+
+
+    /**
+     * 从第三方库获取核酸数据
+     */
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
+    @DataSource(value = DataSourceType.SLAVE)
+    @Override
+    public List<OdsQssHsjcxx> thirdNucleicAcid(String startTime,String endTime, List<String> idCardList) {
+        System.out.println("batchInsert 查询数据开始========");
+        long start1 = System.currentTimeMillis();
+        List<OdsQssHsjcxx> accountingDataVos = userInfoMapper.thirdNucleicAcid(startTime,endTime,idCardList);
+        if(accountingDataVos!=null){
+            //taskService.insertAccountingData(accountingDataVos);
+        }
+        long end1 = System.currentTimeMillis();
+        System.out.println("---------------查询数据耗时" + (end1 - start1) + "---------------");
+        return accountingDataVos;
+    }
+}

+ 185 - 76
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserInfoServiceImpl.java

@@ -4,59 +4,67 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.TypeReference;
+import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.enums.DataSourceType;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.http.HttpClientUtils;
 import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.system.domain.OdsQssHsjcxx;
 import com.ruoyi.system.domain.UserInfo;
+import com.ruoyi.system.domain.UserNucleicTime;
 import com.ruoyi.system.mapper.SysDictTypeMapper;
 import com.ruoyi.system.mapper.UserInfoMapper;
+import com.ruoyi.system.mapper.UserNucleicTimeMapper;
 import com.ruoyi.system.service.IUserInfoService;
+import com.ruoyi.system.service.OdsQssHsjcxxService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.net.URLDecoder;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 导入人员信息Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2022-08-11
  */
 @Service
-public class UserInfoServiceImpl implements IUserInfoService
-{
+public class UserInfoServiceImpl implements IUserInfoService {
     @Autowired
     private UserInfoMapper userInfoMapper;
     @Autowired
-    private SysDictTypeMapper dictTypeMapper;
+    private OdsQssHsjcxxService qdsQssHsjcxxService;
+    @Autowired
+    private UserNucleicTimeMapper userNucleicTimeMapper;
 
     /**
      * 查询导入人员信息
-     * 
+     *
      * @param id 导入人员信息主键
      * @return 导入人员信息
      */
     @Override
-    public UserInfo selectUserInfoById(Long id)
-    {
+    public UserInfo selectUserInfoById(Long id) {
         return userInfoMapper.selectUserInfoById(id);
     }
 
     /**
      * 查询导入人员信息列表
-     * 
+     *
      * @param userInfo 导入人员信息
      * @return 导入人员信息
      */
     @Override
-    public List<UserInfo> selectUserInfoList(UserInfo userInfo)
-    {
+    public List<UserInfo> selectUserInfoList(UserInfo userInfo) {
         SysUser user = SecurityUtils.getLoginUser().getUser();
         userInfo.setDeptId(String.valueOf(user.getDeptId()));
         return userInfoMapper.selectUserInfoList(userInfo);
@@ -65,136 +73,237 @@ public class UserInfoServiceImpl implements IUserInfoService
 
     /**
      * 新增导入人员信息
-     * 
+     *
      * @param userInfo 导入人员信息
      * @return 结果
      */
     @Override
-    public int insertUserInfo(UserInfo userInfo)
-    {
+    public int insertUserInfo(UserInfo userInfo) {
         userInfo.setCreateTime(DateUtils.getNowDate());
         return userInfoMapper.insertUserInfo(userInfo);
     }
 
     /**
      * 修改导入人员信息
-     * 
+     *
      * @param userInfo 导入人员信息
      * @return 结果
      */
     @Override
-    public int updateUserInfo(UserInfo userInfo)
-    {
+    public int updateUserInfo(UserInfo userInfo) {
         userInfo.setUpdateTime(DateUtils.getNowDate());
         return userInfoMapper.updateUserInfo(userInfo);
     }
 
     /**
      * 批量删除导入人员信息
-     * 
+     *
      * @param ids 需要删除的导入人员信息主键
      * @return 结果
      */
     @Override
-    public int deleteUserInfoByIds(Long[] ids)
-    {
+    public int deleteUserInfoByIds(Long[] ids) {
         return userInfoMapper.deleteUserInfoByIds(ids);
     }
 
     /**
      * 删除导入人员信息信息
-     * 
+     *
      * @param id 导入人员信息主键
      * @return 结果
      */
     @Override
-    public int deleteUserInfoById(Long id)
-    {
+    public int deleteUserInfoById(Long id) {
         return userInfoMapper.deleteUserInfoById(id);
     }
 
     /**
      * 核酸比对人员导入
-     * @param jobStyle  职业类别
+     *
+     * @param jobStyle        职业类别
      * @param focusCrowdStyle 重点人群分类
      * @param detectionNumber 检测频次(次数)
-     * @param detectionScope 检测频次(时间范围)
-     * @param startTime 比对开始时间
-     * @param endTime 比对结束时间
+     * @param detectionScope  检测频次(时间范围)
+     * @param startTime       比对开始时间
+     * @param endTime         比对结束时间
      * @return
      * @throws Exception
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public String importUser(List<UserInfo> userList, String jobStyle, String focusCrowdStyle, String detectionNumber,
-                             String detectionScope, String startTime, String endTime) throws Exception{
+                             String detectionScope, String startTime, String endTime) throws Exception {
+
+        System.out.println("接口开始========");
+        long start1 = System.currentTimeMillis();
+
+        StringBuilder sb = new StringBuilder();
+        for (UserInfo userInfo : userList) {
+            if(userInfo.getIdCard().length()!=18){
+                sb.append(userInfo.getName()).append(",");
+            }
+        }
+
+        if(StringUtils.isNotEmpty(sb.toString())){
+            return "操作失败,以下人员身份证格式错我【"+sb.toString()+"】";
+        }
 
         //todo 获取当前上传人员部门id
         SysUser user = SecurityUtils.getLoginUser().getUser();
         String deptId = String.valueOf(user.getDeptId());
 
-        //计算两个时间相隔的天数
+        //获取上传名单的所有身份证号
+        List<String> idCardList = userList.stream().map(UserInfo::getIdCard).collect(Collectors.toList());
 
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-        Date date1 = simpleDateFormat.parse(startTime);
-        Date date2 = simpleDateFormat.parse(endTime);
-        int dNum = DateUtils.differentDaysByMillisecond(date1,date2)+1;
+        //从第三方数据库查询人员核酸计录
+        List<OdsQssHsjcxx> OdsQssHsjcxxList = qdsQssHsjcxxService.thirdNucleicAcid(startTime, endTime, idCardList);
 
-        /*if(dNum<=Integer.getInteger(detectionScope)){
 
+        List<UserNucleicTime> UserNucleicTimeList = new ArrayList<>();
 
-        }else{
+        int index = 0;
+        int res1 = 0;
+        int res2 = 0;
+        String date = null;
+        for (UserInfo userInfo : userList) {
 
-        }*/
+            userInfo.setDeptId(deptId);
+            //采集地点
+            StringBuilder collectPlace = new StringBuilder();
+            //核酸采集时间
+            StringBuilder nucleicCollectTime = new StringBuilder();
+            //核酸结果时间
+            StringBuilder nucleicResultsTime = new StringBuilder();
 
-        String token = getToken();
-        String http = "http://60.171.171.235:9090/service/api/wjw/qsyyhsdbfx";
-       /* String http = "http://60.171.171.235:9090/service/api/wjw/qsyyhsdbfx";
-        StringBuilder params = new StringBuilder();
-        params.append("client_id=066676ef5f7947e794b879550078cfb8").append("&access_token=").append(token);
-        params.append("&sfzhm=340323200806306216").append("&sjhm=13585154184");
-        params.append("&xm=陶建筑").append("&beginTime=2022-01-01%2010:00:59").append("&endTime=2022-08-14%2010:00:59");
+            userInfo.setJobStyle(jobStyle);
+            userInfo.setFocusCrowdStyle(focusCrowdStyle);
+            userInfo.setDetectionFrequency(detectionNumber + "/" + detectionScope);
+            userInfo.setDetectionNumber(detectionNumber);
+            userInfo.setDetectionScope(detectionScope);
+            userInfo.setStartTime(startTime);
+            userInfo.setEndTime(endTime);
+            userInfo.setCreateBy(user.getUserName());
+            userInfo.setUpdateBy(user.getUserName());
+            //判断结果是否合格,默认合格
+            Boolean bl = true;
+            //创建一个死循环
+            for (int i = 2; i > 1; i++) {
+                //计算开始时间加上检测频次(时间范围)后的时间
+                date = DateUtils.getAddDate(startTime, Integer.parseInt(detectionScope));
+                int res = endTime.compareTo(date);//res>0(endTime>date),res=0(endTime=date),res<0(endTime<date)
+                if (res > 0) {
+                    index = 0;
+                    for (OdsQssHsjcxx odsQssHsjcxx : OdsQssHsjcxxList) {
+                        //判断 核酸采集时间是不是在 startTime和date之间
+                        res1 = odsQssHsjcxx.getCjsj().compareTo(startTime);
+                        res2 = date.compareTo(odsQssHsjcxx.getCjsj());
+                        if (userInfo.getIdCard().equals(odsQssHsjcxx.getSfzhm()) && res1 >= 0 && res2 >= 0) {
 
-        String url = HttpClientUtils.encode(params.toString());
+                            if (StringUtils.isNotEmpty(collectPlace.toString())) {
+                                collectPlace.append("/");
+                            }
+                            collectPlace.append(odsQssHsjcxx.getJcdd());
 
-        String data = HttpUtils.sendGet(http, url);
-        List<Map<String,Object>> list = JSON.parseObject(data,new TypeReference<ArrayList<Map<String,Object>>>(){});*/
+                            if (StringUtils.isNotEmpty(nucleicCollectTime.toString())) {
+                                nucleicCollectTime.append("/");
+                            }
+                            nucleicCollectTime.append(odsQssHsjcxx.getCjsj());
 
+                            if (StringUtils.isNotEmpty(nucleicResultsTime.toString())) {
+                                nucleicResultsTime.append("/");
+                            }
+                            nucleicResultsTime.append(odsQssHsjcxx.getJgcjss());
 
+                            index++;
+                            //当index与detectionNumber相等时,满足条件,跳出当前循环
+                            if (index == Integer.parseInt(detectionNumber)) {
+                                startTime = date;
+                                break;
+                            }
+                        }
+                    }
+                    if (index < Integer.parseInt(detectionNumber)) {
+                        bl = false;
+                    }
+                } else {
+                    index = 0;
+                    for (OdsQssHsjcxx odsQssHsjcxx : OdsQssHsjcxxList) {
+                        //判断 核酸采集时间是不是在 startTime和date之间
+                        res1 = odsQssHsjcxx.getCjsj().compareTo(startTime);
+                        res2 = date.compareTo(odsQssHsjcxx.getCjsj());
+                        if (userInfo.getIdCard().equals(odsQssHsjcxx.getSfzhm()) && res1 >= 0 && res2 >= 0) {
 
-        //todo 向医院查询上传名单人员核酸数据(将时间段内所有人员数据查询出来),之后与上传人员名单比较,提取身份证号相同的数据
-        List<Map<String,Object>> yyMap = new ArrayList<>();
-        StringBuilder params = new StringBuilder();
-        for (UserInfo userInfo : userList) {
-            params.append("client_id=066676ef5f7947e794b879550078cfb8").append("&access_token=").append(token);
-            params.append("&sfzhm=").append(userInfo.getIdCard()).append("&sjhm=").append(userInfo.getPhoneNum());
-            params.append("&xm=").append(userInfo.getName()).append("&beginTime=").append(startTime).append("&endTime=").append(endTime);
-            String url = HttpClientUtils.encode(params.toString());
-            String data = HttpUtils.sendGet(http, url);
-            List<Map<String,Object>> list = JSON.parseObject(data,new TypeReference<ArrayList<Map<String,Object>>>(){});
-            yyMap.addAll(list);
-            //释放StringBuilder资源,重置params长度
-            params.setLength(0);
+                            if (StringUtils.isNotEmpty(collectPlace.toString())) {
+                                collectPlace.append("/");
+                            }
+                            collectPlace.append(odsQssHsjcxx.getJcdd());
+
+                            if (StringUtils.isNotEmpty(nucleicCollectTime.toString())) {
+                                nucleicCollectTime.append("/");
+                            }
+                            nucleicCollectTime.append(odsQssHsjcxx.getCjsj());
+
+                            if (StringUtils.isNotEmpty(nucleicResultsTime.toString())) {
+                                nucleicResultsTime.append("/");
+                            }
+                            nucleicResultsTime.append(odsQssHsjcxx.getJgcjss());
+
+                            index++;
+                            //当index与detectionNumber相等时,满足条件,跳出当前循环
+                            if (index == Integer.parseInt(detectionNumber)) {
+                                //跳出死循环
+                                i = -1;
+                                break;
+                            }
+                        }
+                    }
+                    if (index < Integer.parseInt(detectionNumber)) {
+                        bl = false;
+                        //跳出死循环
+                        i = -1;
+                    }
+                }
+            }
+            userInfo.setCollectPlace(collectPlace.toString());
+            userInfo.setNucleicCollectTime(nucleicCollectTime.toString());
+            userInfo.setNucleicResultsTime(nucleicResultsTime.toString());
+            if (bl) {
+                userInfo.setDetectionResult("正常");
+            } else {
+                userInfo.setDetectionResult("异常");
+            }
+
+        }
+
+
+        for (OdsQssHsjcxx odsQssHsjcxx : OdsQssHsjcxxList) {
+            for (UserInfo userInfo : userList) {
+                if (userInfo.getIdCard().equals(odsQssHsjcxx.getSfzhm())) {
+                    UserNucleicTime userNucleicTime = new UserNucleicTime();
+                    userNucleicTime.setInfoId(userInfo.getId());
+                    userNucleicTime.setIdCard(odsQssHsjcxx.getSfzhm());
+                    userNucleicTime.setCollectPlace(odsQssHsjcxx.getJcdd());
+                    userNucleicTime.setNucleicCollectTime(odsQssHsjcxx.getCjsj());
+                    userNucleicTime.setNucleicResultsTime(odsQssHsjcxx.getJgcjss());
+                    userNucleicTime.setJobStyle(jobStyle);
+                    userNucleicTime.setFocusCrowdStyle(focusCrowdStyle);
+                    userNucleicTime.setName(userInfo.getName());
+                    userNucleicTime.setPhoneNum(userInfo.getPhoneNum());
+                    userNucleicTime.setDeptId(deptId);
+                    UserNucleicTimeList.add(userNucleicTime);
+                }
+            }
         }
+
+        //批量保存
+        userInfoMapper.insertUserInfoList(userList);
+        userNucleicTimeMapper.insertUserNucleicTimeList(UserNucleicTimeList);
+
+        long end1 = System.currentTimeMillis();
+        System.out.println("---------------接口耗时" + (end1 - start1) + "---------------");
+
         return "操作成功";
     }
 
 
-    /**
-     * 获取政务网token
-     */
-    public String getToken() throws Exception{
-        String token = "";
-
-        Map<String, String> paramMap = new HashMap<>();
-        paramMap.put("client_id", "066676ef5f7947e794b879550078cfb8");
-        paramMap.put("client_secret", "r9jCwdTO");
-
-        //StringBuilder params = new StringBuilder();
-        //params.append("client_id=066676ef5f7947e794b879550078cfb8&client_secret=r9jCwdTO");
-        String http = "http://60.171.171.235:9090/oauth/token";
-        String data = HttpClientUtils.doGet(http, paramMap);
-        JSONObject jsonObject = JSONObject.parseObject(data);
-        token = jsonObject.getString("access_token");
-        return token;
-    }
 }

+ 60 - 7
ruoyi-system/src/main/resources/mapper/system/UserInfoMapper.xml

@@ -23,6 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptName"    column="dept_name"    />
         <result property="startTime"    column="start_time"    />
         <result property="endTime"    column="end_time"    />
+        <result property="detectionResult"    column="detection_result"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
@@ -31,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectUserInfoVo">
-        select id, name, gender, age, id_card, phone_num, dept_id, collect_place, nucleic_collect_time, nucleic_results_time, job_style, focus_crowd_style, detection_frequency, detection_number, detection_scope, dept_name, start_time, end_time, create_by, create_time, update_by, update_time, remark from user_info
+        select id, name, gender, age, id_card, phone_num, dept_id, collect_place, nucleic_collect_time, nucleic_results_time, job_style, focus_crowd_style, detection_frequency, detection_number, detection_scope, dept_name, start_time, end_time,detection_result, create_by, create_time, update_by, update_time, remark from user_info
     </sql>
 
     <select id="selectUserInfoList" parameterType="UserInfo" resultMap="UserInfoResult">
@@ -40,15 +41,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
             <if test="idCard != null  and idCard != ''"> and id_card = #{idCard}</if>
             <if test="phoneNum != null  and phoneNum != ''"> and phone_num = #{phoneNum}</if>
-            <if test="nucleicCollectTime != null  and nucleicCollectTime != ''"> and nucleic_collect_time = #{nucleicCollectTime}</if>
-            <if test="nucleicResultsTime != null  and nucleicResultsTime != ''"> and nucleic_results_time = #{nucleicResultsTime}</if>
+            <if test="collectPlace != null  and collectPlace != ''"> and collect_place = like concat('%', #{collectPlace}, '%')</if>
             <if test="jobStyle != null  and jobStyle != ''"> and job_style = #{jobStyle}</if>
             <if test="focusCrowdStyle != null  and focusCrowdStyle != ''"> and focus_crowd_style = #{focusCrowdStyle}</if>
             <if test="detectionFrequency != null  and detectionFrequency != ''"> and detection_frequency = #{detectionFrequency}</if>
             <if test="deptId != null  and deptId != ''"> and dept_id = #{deptId}</if>
-
-            <if test="startTime != null  and startTime != ''"> and start_time > #{startTime}</if>
-            <if test="endTime != null  and endTime != ''"> and #{endTime}>=end_time</if>
+            <if test="startTime != null  and startTime != ''"> and start_time = #{startTime}</if>
+            <if test="endTime != null  and endTime != ''"> and #{endTime} = end_time</if>
 
         </where>
     </select>
@@ -57,7 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectUserInfoVo"/>
         where id = #{id}
     </select>
-        
+
     <insert id="insertUserInfo" parameterType="UserInfo">
         insert into user_info
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -107,6 +106,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remark != null">#{remark},</if>
          </trim>
     </insert>
+    <insert id="insertUserInfoList" >
+        insert into user_info (name,
+                               id_card,
+                               phone_num,
+                               dept_id,
+                               collect_place,
+                               nucleic_collect_time,
+                               nucleic_results_time,
+                               job_style,
+                               focus_crowd_style,
+                               detection_frequency,
+                               detection_number,
+                               detection_scope,
+                               start_time,
+                               end_time,
+                               detection_result,
+                               create_by,
+                               update_by,
+                               update_time,
+                               create_time)
+        values
+        <foreach item="user" collection="userList" separator=",">
+            (#{user.name},
+            #{user.idCard},
+            #{user.phoneNum},
+            #{user.deptId},
+            #{user.collectPlace},
+            #{user.nucleicCollectTime},
+            #{user.nucleicResultsTime},
+            #{user.jobStyle},
+            #{user.focusCrowdStyle},
+            #{user.detectionFrequency},
+            #{user.detectionNumber},
+            #{user.detectionScope},
+            #{user.startTime},
+            #{user.endTime},
+            #{user.detectionResult},
+            #{user.createBy},
+            #{user.updateBy},
+            sysdate(),sysdate())
+        </foreach>
+    </insert>
 
     <update id="updateUserInfo" parameterType="UserInfo">
         update user_info
@@ -145,4 +186,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+
+    <select id="thirdNucleicAcid" resultType="com.ruoyi.system.domain.OdsQssHsjcxx">
+        select sfzhm,xm,sjhm,cjsj,jgcjss,jcdd,jcjg,sjly
+        from ods_qss_hsjcxx
+        where cjsj > #{startTime}  and #{endTime}>=cjsj
+        and sfzhm in
+        <foreach item="idCard" collection="idCardList" open="(" separator="," close=")">
+            #{idCard}
+        </foreach>
+    </select>
+
 </mapper>

+ 29 - 0
ruoyi-system/src/main/resources/mapper/system/UserNucleicTimeMapper.xml

@@ -66,6 +66,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
     </insert>
 
+    <insert id="insertUserNucleicTimeList">
+        insert into user_nucleic_time (
+        info_id,
+        id_card,
+        collect_place,
+        nucleic_collect_time,
+        nucleic_results_time,
+        nucleic_result,
+        job_style,
+        focus_crowd_style,
+        name,
+        phone_num,
+        dept_id)
+        values
+        <foreach item="userNucleicTime" collection="userNucleicTimeList" separator=",">
+            (#{userNucleicTime.infoId},
+            #{userNucleicTime.idCard},
+            #{userNucleicTime.collectPlace},
+            #{userNucleicTime.nucleicCollectTime},
+            #{userNucleicTime.nucleicResultsTime},
+            #{userNucleicTime.nucleicResult},
+            #{userNucleicTime.jobStyle},
+            #{userNucleicTime.focusCrowdStyle},
+            #{userNucleicTime.name},
+            #{userNucleicTime.phoneNum},
+            #{userNucleicTime.deptId})
+        </foreach>
+    </insert>
+
     <update id="updateUserNucleicTime" parameterType="UserNucleicTime">
         update user_nucleic_time
         <trim prefix="SET" suffixOverrides=",">