commit e5d91984bf10f9763da0ed5e37618524642192d4
Author: zhanghai <120228220@qq.com>
Date: Wed Jun 26 14:50:42 2024 +0800
提交初始代码
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..59fe4fe
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..5bf8b57
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jpa-buddy.xml b/.idea/jpa-buddy.xml
new file mode 100644
index 0000000..898e07a
--- /dev/null
+++ b/.idea/jpa-buddy.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..010c400
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..cdc56fa
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+
+ org.example
+ LianzhongCollect
+ 1.0-SNAPSHOT
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.9
+
+
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.2
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.22
+ compile
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ com.microsoft.sqlserver
+ sqljdbc4
+ 4.0
+
+
+
+ com.google.code.gson
+ gson
+ 2.8.6
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.3.4.RELEASE
+
+
+
+
+
+
+
+ 8
+ 8
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/jiashi/CommonResult.java b/src/main/java/com/jiashi/CommonResult.java
new file mode 100644
index 0000000..eb931e7
--- /dev/null
+++ b/src/main/java/com/jiashi/CommonResult.java
@@ -0,0 +1,24 @@
+package com.jiashi;
+
+import lombok.Data;
+
+/**
+ * @ClassName CommonResult
+ * @Description
+ * @Author linjj
+ * @Date 2024/5/7 10:51
+ * @Version 1.0
+ */
+@Data
+public class CommonResult {
+
+
+ private Integer code;
+
+ private String msgCode;
+
+ private String msg;
+
+ private T data;
+
+}
diff --git a/src/main/java/com/jiashi/FileUploader.java b/src/main/java/com/jiashi/FileUploader.java
new file mode 100644
index 0000000..8114f59
--- /dev/null
+++ b/src/main/java/com/jiashi/FileUploader.java
@@ -0,0 +1,81 @@
+package com.jiashi;
+
+import com.google.gson.Gson;
+import com.jiashi.service.FormField;
+import okhttp3.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+public class FileUploader {
+
+
+ public static CommonResult uploadFilesWithParams(List files, String uploadUrl, List params) throws IOException {
+ OkHttpClient client = new OkHttpClient.Builder()
+ .connectTimeout(600, TimeUnit.SECONDS)
+ .readTimeout(600, TimeUnit.SECONDS)
+ .writeTimeout(600, TimeUnit.SECONDS)
+ .build();
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ for (File file : files) {
+ RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+// RequestBody body = RequestBody.create(MediaType.parse("image/jpeg"), file);
+ builder.addFormDataPart("files", file.getName(), body);
+ }
+ for(FormField formField:params){
+ builder.addFormDataPart(formField.getKey(), formField.getValue());
+ }
+ // 下行是上传的json的对象,其中上面的fileName和下行的fromData需和后台接口名字一致
+ RequestBody requestBody = builder.setType(MultipartBody.FORM).build();
+ final Request request = new Request.Builder()
+ .url(uploadUrl)
+ .post(requestBody)
+ .build();
+
+ Response response = client.newCall(request).execute();
+ String responseBody = response.body().string();
+ CommonResult commonResult = new Gson().fromJson(responseBody, CommonResult.class);
+ return commonResult;
+
+ }
+
+ public static void deleteFolder(File folder) {
+ if (folder.isDirectory()) {
+ File[] files = folder.listFiles();
+ if (files != null) {
+ for (File file : files) {
+ deleteFolder(file);
+ }
+ }
+ }
+ folder.delete();
+ }
+
+ public static void main(String[] args) throws IOException {
+ List files = new ArrayList<>();
+ files.add(new File("C:\\jiahsi-saomiao\\413425_刘燊杨_20221009_004624\\16763947060057863381.jpg"));
+// files.add(new File("C:\\jiahsi-saomiao\\413425_刘燊杨_20221009_004624\\16763947060420811242.jpg"));
+
+
+ // 额外的表单字段参数
+ List params = new ArrayList<>();
+ params.add(new FormField("uploadFileParams", "[ {\"inpatientNo\":\"35131\", \"disDate\":\"2020-07-30 00:00:00.000\", \"fileTitle\":\"16763947060057863381.jpg\", \"uploadFileName\":\"16763947060057863381.jpg\", \"assortId\":\"078F7675CB0048EDBE586D59831C57B0\" ,\n" +
+ "\"patientId\":\"12312312\",\n" +
+ "\"name\":\"长三\",\n" +
+ "\"admissDate\":\"2022-02-01\",\n" +
+ "\"sex\":\"男女\"\n" +
+ "}\n" +
+ "]"));
+
+ // 上传URL
+ String uploadUrl = "http://192.168.16.116:8711/api/downplatform/fileUploadJpg";
+
+ // 执行批量上传
+ uploadFilesWithParams(files, uploadUrl, params);
+ }
+
+
+}
diff --git a/src/main/java/com/jiashi/Main.java b/src/main/java/com/jiashi/Main.java
new file mode 100644
index 0000000..b8bcd68
--- /dev/null
+++ b/src/main/java/com/jiashi/Main.java
@@ -0,0 +1,23 @@
+package com.jiashi;
+
+import com.jiashi.service.UpdateService;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+import java.util.concurrent.ExecutionException;
+
+@EnableAsync
+@SpringBootApplication
+@EnableJpaRepositories
+@EnableJpaAuditing
+@EnableScheduling
+public class Main {
+ public static void main(String[] args) throws ExecutionException, InterruptedException {
+ SpringApplication.run(Main.class, args);
+
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jiashi/MyDateUtil.java b/src/main/java/com/jiashi/MyDateUtil.java
new file mode 100644
index 0000000..90db2a6
--- /dev/null
+++ b/src/main/java/com/jiashi/MyDateUtil.java
@@ -0,0 +1,208 @@
+package com.jiashi;
+
+import lombok.SneakyThrows;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+public class MyDateUtil {
+
+ //获取之前的年限
+ public static String getBeforeAgeYear(int age) {
+ Calendar calBegin = Calendar.getInstance();
+ calBegin.setTime(new Date());
+ calBegin.add(Calendar.YEAR, -age);
+ Date time = calBegin.getTime();
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return format.format(time);
+ }
+
+
+ //计算两个日期相差年数
+ public static int yearDateDiff(String startDate, Date endDate) {
+ Calendar calBegin = Calendar.getInstance(); //获取日历实例
+ Calendar calEnd = Calendar.getInstance();
+ calBegin.setTime(stringTodate(startDate, "yyyy-MM-dd")); //字符串按照指定格式转化为日期
+ calEnd.setTime(endDate);
+ return calEnd.get(Calendar.YEAR) - calBegin.get(Calendar.YEAR);
+ }
+
+ /**
+ * *字符串的日期格式的计算
+ */
+ @SneakyThrows
+ public static int daysBetween(String smdate, String bdate) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(sdf.parse(smdate));
+ long time1 = cal.getTimeInMillis();
+ cal.setTime(sdf.parse(bdate));
+ long time2 = cal.getTimeInMillis();
+ long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+ return Integer.parseInt(String.valueOf(between_days));
+ }
+
+
+ @SneakyThrows
+ public static int daysBetween(Date smdate, Date bdate) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(smdate);
+ long time1 = cal.getTimeInMillis();
+ cal.setTime(bdate);
+ long time2 = cal.getTimeInMillis();
+ long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+ return Integer.parseInt(String.valueOf(between_days));
+ }
+
+
+ public static int hoursBetween(Date smdate, Date bdate) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(smdate);
+ long time1 = cal.getTimeInMillis();
+ cal.setTime(bdate);
+ long time2 = cal.getTimeInMillis();
+ long between_days = (time2 - time1) / (1000 * 3600);
+
+ return Integer.parseInt(String.valueOf(between_days));
+ }
+
+ //字符串按照指定格式转化为日期
+ public static Date stringTodate(String dateStr, String formatStr) {
+ // 如果时间为空则默认当前时间
+ Date date = null;
+ SimpleDateFormat format = new SimpleDateFormat(formatStr);
+ if (dateStr != null && !dateStr.equals("")) {
+ String time = "";
+ try {
+ Date dateTwo = format.parse(dateStr);
+ time = format.format(dateTwo);
+ date = format.parse(time);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ } else {
+ String timeTwo = format.format(new Date());
+ try {
+ date = format.parse(timeTwo);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ }
+ return date;
+ }
+
+ @SneakyThrows
+ public static String getYearAgoAndAfter(int year, int y) {
+ DateFormat df = new SimpleDateFormat("yyyy");
+ Date date = df.parse(String.valueOf(year));
+ Calendar instance = Calendar.getInstance();
+ instance.setTime(date);
+ instance.add(Calendar.YEAR, y);
+ Date time = instance.getTime();
+ DateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
+ return yyyyMMdd.format(time);
+ }
+
+ @SneakyThrows
+ public static String getyyyyAgoAndAfter(int year, int y) {
+ DateFormat df = new SimpleDateFormat("yyyy");
+ Date date = df.parse(String.valueOf(year));
+ Calendar instance = Calendar.getInstance();
+ instance.setTime(date);
+ instance.add(Calendar.YEAR, y);
+ Date time = instance.getTime();
+ return df.format(time);
+ }
+
+
+ @SneakyThrows
+ public static boolean isTodayTrade(Date currDate, Date tradeDate) {
+ //判断当前时间是否大于当天21:00 ,如果是是在今天内。
+ //判断当前时间是否大于昨天21:00,则不在当天内
+ Calendar calendar = Calendar.getInstance(Locale.CHINA);
+ calendar.setTime(currDate);
+ calendar.add(Calendar.DAY_OF_YEAR, -1);
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+ String yyyyMMddYestoday = df.format(calendar.getTime());
+ String yes21 = yyyyMMddYestoday + " 21:00:00";
+ DateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date yes21Date = yyyyMMddHHmmss.parse(yes21);
+
+
+ String yyyyMMddToday = df.format(currDate);
+ String today21 = yyyyMMddToday + " 21:00:00";
+ Date toy21Date = yyyyMMddHHmmss.parse(today21);
+
+
+ //交易时间小于昨天的21点,一定是昨天开的仓
+ if (tradeDate.before(yes21Date)) {
+ return false;
+ }
+
+ //交易时间大于昨天的21点。交易时间小于今天的21点。且当前时间小于今天的21点。
+ if (tradeDate.after(yes21Date) && tradeDate.before(toy21Date) && currDate.before(toy21Date)) {
+ return true;
+ }
+
+ //交易时间大与今天的21点。
+ if (tradeDate.after(toy21Date) && currDate.after(toy21Date)) {
+ return true;
+ }
+
+ return false;
+ }
+
+
+ public static String dateToString(Date date, String format) {
+ DateFormat df = new SimpleDateFormat(format);
+ return df.format(date);
+ }
+
+ /**
+ * 前后相等
+ *
+ * @param date
+ * @param timeStr1
+ * @param timeStr2
+ * @return
+ */
+ public static boolean dateBetweenTime1AndTime2(Date date, String timeStr1, String timeStr2) {
+ String formatStr = "HH:mm:ss";
+ Date date1 = stringTodate(timeStr1, formatStr);
+ Date date2 = stringTodate(timeStr2, formatStr);
+ Date curdate = stringTodate(dateToString(date, formatStr), formatStr);
+ if ((date1.before(curdate) || date1.equals(curdate)) && (curdate.before(date2) || curdate.equals(date2))) {
+ return true;
+ }
+ return false;
+ }
+
+
+
+ public static boolean dateBetweenTime1AndTime3(Date date, String timeStr1, String timeStr2) {
+ String formatStr = "HH:mm:ss";
+ Date date1 = stringTodate(timeStr1, formatStr);
+ Date date2 = stringTodate(timeStr2, formatStr);
+ Date curdate = stringTodate(dateToString(date, formatStr), formatStr);
+ if ((date1.before(curdate) && (curdate.before(date2) || curdate.equals(date2)))) {
+ return true;
+ }
+ return false;
+ }
+
+
+ public static boolean dateBefore(String timeStr1, String timeStr2) {
+ String formatStr = "HH:mm:ss";
+ Date date1 = stringTodate(timeStr1, formatStr);
+ Date date2 = stringTodate(timeStr2, formatStr);
+ return date1.before(date2);
+ }
+
+}
diff --git a/src/main/java/com/jiashi/SpringUtil.java b/src/main/java/com/jiashi/SpringUtil.java
new file mode 100644
index 0000000..942c70a
--- /dev/null
+++ b/src/main/java/com/jiashi/SpringUtil.java
@@ -0,0 +1,37 @@
+package com.jiashi;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+@Lazy(value = false)
+@Component
+public class SpringUtil implements ApplicationContextAware {
+ private static ApplicationContext applicationContext;
+
+ //获取applicationContext
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ if (SpringUtil.applicationContext == null) {
+ SpringUtil.applicationContext = applicationContext;
+ }
+ }
+
+ //通过class获取Bean.
+ public static T getBean(Class clazz) {
+ return getApplicationContext().getBean(clazz);
+ }
+
+
+ public static void publishEvent(ApplicationEvent event) {
+ applicationContext.publishEvent(event);
+ }
+
+}
diff --git a/src/main/java/com/jiashi/dao/CardInfoRepository.java b/src/main/java/com/jiashi/dao/CardInfoRepository.java
new file mode 100644
index 0000000..d7e4448
--- /dev/null
+++ b/src/main/java/com/jiashi/dao/CardInfoRepository.java
@@ -0,0 +1,25 @@
+package com.jiashi.dao;
+
+import com.jiashi.service.CardInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Repository
+public interface CardInfoRepository extends JpaRepository, JpaSpecificationExecutor {
+
+ @Transactional(rollbackFor = Exception.class)
+ @Modifying
+ @Query("update CardInfo set state=:state where id = :id")
+ public void updateState(String id,Integer state);
+
+ @Transactional(rollbackFor = Exception.class)
+ @Modifying
+ @Query("update CardInfo set state=:state where id in :ids")
+ public void updateState(List ids, Integer state);
+}
diff --git a/src/main/java/com/jiashi/dao/DataQuery.java b/src/main/java/com/jiashi/dao/DataQuery.java
new file mode 100644
index 0000000..fa63b4a
--- /dev/null
+++ b/src/main/java/com/jiashi/dao/DataQuery.java
@@ -0,0 +1,80 @@
+package com.jiashi.dao;
+
+import com.jiashi.service.CardInfo;
+import com.jiashi.service.Picture;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Repository;
+
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Repository
+public class DataQuery {
+
+
+ @Autowired
+ private CardInfoRepository cardInfoRepository;
+
+ @Autowired
+ private PictureRepository pictureRepository;
+
+ public List dateQuery(){
+ Specification specification = (root, query, cb) -> {
+ List predicates = new ArrayList<>();
+ predicates.add(cb.equal(root.get("state"), 0));
+ return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+ };
+
+ Sort.Order sortCreateTime = Sort.Order.asc("outdate");
+ Sort sort = Sort.by(sortCreateTime);
+ Pageable pageable = PageRequest.of(0, 100, sort);
+ Page all = cardInfoRepository.findAll(specification, pageable);
+ return all.toList();
+ }
+
+
+ public void updateBatch(List cardInfos){
+ for(CardInfo cardInfo:cardInfos){
+ cardInfo.setState(1);
+ }
+ cardInfoRepository.saveAll(cardInfos);
+ }
+
+
+ public void updateBatchState(List cardInfos,Integer state){
+ List ids = new ArrayList<>();
+ for(CardInfo cardInfo:cardInfos){
+ String id = cardInfo.getId();
+ ids.add(id);
+ }
+ cardInfoRepository.updateState(ids,state);
+ }
+
+
+ public void updateBatchState(CardInfo cardInfo,Integer state){
+
+ cardInfoRepository.updateState(cardInfo.getId(),state);
+
+ }
+
+
+ public List getPictures(String FileId){
+
+ Specification specification = (root, query, cb) -> {
+ List predicates = new ArrayList<>();
+ predicates.add(cb.equal(root.get("fileid"), FileId));
+ return cb.and(predicates.toArray(new Predicate[predicates.size()]));
+ };
+ List all = pictureRepository.findAll(specification);
+ return all;
+ }
+
+
+}
diff --git a/src/main/java/com/jiashi/dao/PictureRepository.java b/src/main/java/com/jiashi/dao/PictureRepository.java
new file mode 100644
index 0000000..f0bce87
--- /dev/null
+++ b/src/main/java/com/jiashi/dao/PictureRepository.java
@@ -0,0 +1,11 @@
+package com.jiashi.dao;
+
+import com.jiashi.service.CardInfo;
+import com.jiashi.service.Picture;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PictureRepository extends JpaRepository, JpaSpecificationExecutor {
+}
diff --git a/src/main/java/com/jiashi/service/CardInfo.java b/src/main/java/com/jiashi/service/CardInfo.java
new file mode 100644
index 0000000..92f7adb
--- /dev/null
+++ b/src/main/java/com/jiashi/service/CardInfo.java
@@ -0,0 +1,58 @@
+package com.jiashi.service;
+
+import com.jiashi.MyDateUtil;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.boot.test.autoconfigure.data.cassandra.DataCassandraTest;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.util.Date;
+
+@Entity
+@Table(name = "t_card_info_upload")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CardInfo {
+
+// t.id,t.patno,t.patname,t.outdate,t.indate,t.outdeptname,t.patsex,t.patbirthday
+
+ @Id
+ private String id;
+ @Column(name="patno")
+ private String patno;
+ @Column(name="patname")
+ private String patname;
+
+ @Column(name="outdate")
+ private Date outdate;
+ @Column(name="indate")
+ private Date indate;
+ @Column(name="outdeptname")
+ private String outdeptname;
+ @Column(name="patsex")
+ private String patsex;
+ @Column(name="patbirthday")
+ private Date patbirthday;
+ private Integer state;
+
+
+ public String getOutdateStr(){
+ return MyDateUtil.dateToString(this.outdate,"yyyy-MM-dd");
+ }
+
+ public String getOutdateStr2(){
+ return MyDateUtil.dateToString(this.outdate,"yyyy-MM-dd HH:mm:ss");
+ }
+
+
+ public String getIndateStr(){
+ return MyDateUtil.dateToString(this.indate,"yyyy-MM-dd HH:mm:ss");
+ }
+}
+
+
diff --git a/src/main/java/com/jiashi/service/FormField.java b/src/main/java/com/jiashi/service/FormField.java
new file mode 100644
index 0000000..b07c423
--- /dev/null
+++ b/src/main/java/com/jiashi/service/FormField.java
@@ -0,0 +1,15 @@
+package com.jiashi.service;
+
+import lombok.Getter;
+
+@Getter
+public class FormField {
+
+ String key;
+ String value;
+
+ public FormField(String key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+}
diff --git a/src/main/java/com/jiashi/service/Picture.java b/src/main/java/com/jiashi/service/Picture.java
new file mode 100644
index 0000000..47786bf
--- /dev/null
+++ b/src/main/java/com/jiashi/service/Picture.java
@@ -0,0 +1,37 @@
+package com.jiashi.service;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "T_Picture")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Picture {
+
+ @Id
+ @Column(name="picid")
+ private String picid;
+ @Column(name="picname")
+ private String picname;
+ @Column(name="fileid")
+ private String fileid;
+ @Column(name="rotatedegree")
+ private Double rotatedegree;
+
+ @Column(name="pickind")
+ private String pickind;
+
+ public String getFileUrl(){
+ String fileUrl = "d:/pic/" + this.getFileid() + "/" + this.getPicname();
+ return fileUrl;
+ }
+
+}
diff --git a/src/main/java/com/jiashi/service/UpdateService.java b/src/main/java/com/jiashi/service/UpdateService.java
new file mode 100644
index 0000000..cd4ee9c
--- /dev/null
+++ b/src/main/java/com/jiashi/service/UpdateService.java
@@ -0,0 +1,157 @@
+package com.jiashi.service;
+
+import com.google.gson.Gson;
+import com.jiashi.CommonResult;
+import com.jiashi.FileUploader;
+import com.jiashi.dao.DataQuery;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+@Component
+@Slf4j
+public class UpdateService {
+
+ @Autowired
+ private DataQuery dataQuery;
+
+ public List updateData(){
+ List cardInfos = dataQuery.dateQuery();
+ dataQuery.updateBatchState(cardInfos,1);
+ return cardInfos;
+ }
+
+ @PostConstruct
+ public void upload() {
+ String uniUrl = "http://10.2.3.24";
+ List cardInfos = null;
+ ExecutorService executor2 = Executors.newFixedThreadPool(2);
+ ExecutorService executor = Executors.newFixedThreadPool(5);
+ do {
+ try{
+ cardInfos = this.updateData();
+ List futures2 = new ArrayList<>();
+ for (CardInfo cardInfo : cardInfos) {
+ log.info("开始同步"+cardInfo.getPatno());
+ Future future2 = executor2.submit(()->{
+ try{
+ List pictures = dataQuery.getPictures(cardInfo.getId());
+ if(pictures==null||pictures.size()==0){
+ //如果是空的则不同步
+ dataQuery.updateBatchState(cardInfo,5);
+ return;
+ }
+ List futures = new ArrayList<>();
+ for (Picture picture : pictures) {
+ Future future = executor.submit(() -> {
+ try {
+ String dir = "d:\\pic\\"+picture.getFileid();
+ // 创建File对象
+ File directory = new File(dir);
+
+ // 判断目录是否存在
+ if (!directory.exists()) {
+ // 目录不存在,创建目录
+ boolean created = directory.mkdirs();
+ if (created) {
+ log.info("目录创建成功:" + dir);
+ } else {
+ log.info("目录创建失败:" + dir);
+ }
+ }
+ String cmd = "D:\\lianzhong\\Debug\\Debug\\lianzhong.exe 003 192.168.8.74 " + cardInfo.getId() + " " + picture.getPicid() + " " + cardInfo.getPatno() + " " + cardInfo.getOutdateStr() + " " + picture.getPicname() + " " + picture.getFileUrl() + " " + uniUrl + " " + picture.getRotatedegree();
+ log.info(cmd);
+ java.lang.Process process = java.lang.Runtime.getRuntime().exec(cmd);//执行命令生成cube
+ process.waitFor();
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ e.printStackTrace();
+ }
+
+ });
+ futures.add(future);
+ }
+ for (Future future : futures) {
+ try {
+ future.get();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ } catch (ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ List files = new ArrayList<>();
+ List uploadInfos = new ArrayList<>();
+ for(Picture picture : pictures){
+ files.add(new File(picture.getFileUrl()));
+ UploadInfo uploadInfo = new UploadInfo(cardInfo.getPatno(), cardInfo.getOutdateStr2(), picture.getPicname(), picture.getPicname(), picture.getPickind(), cardInfo.getId(), cardInfo.getPatname(), cardInfo.getIndateStr(), cardInfo.getPatsex());
+ uploadInfos.add(uploadInfo);
+ }
+
+
+ // 额外的表单字段参数
+ List params = new ArrayList<>();
+ String s = new Gson().toJson(uploadInfos);
+ params.add(new FormField("uploadFileParams", s));
+ log.info("请求参数:"+s);
+ // 上传
+ try {
+ CommonResult commonResult = FileUploader.uploadFilesWithParams(files, "http://10.2.130.59:8712/api/downplatform/fileUploadJpg", params);
+ if(commonResult.getCode()==0){
+ dataQuery.updateBatchState(cardInfo,3);
+
+ }else{
+ dataQuery.updateBatchState(cardInfo,4);
+ log.error(commonResult.getMsg());
+ }
+ } catch (Exception e) {
+ dataQuery.updateBatchState(cardInfo,4);
+ log.error(e.getMessage(),e);
+ }
+ // 删除文件
+// String dir = "d:\\pic\\"+cardInfo.getId();
+// File file = new File(dir);
+// FileUploader.deleteFolder(file);
+ }catch (Exception e){
+ dataQuery.updateBatchState(cardInfo,4);
+ log.error(e.getMessage(),e);
+ e.printStackTrace();
+ }
+ });
+ futures2.add(future2);
+
+ }
+
+
+ for (Future future : futures2) {
+ try {
+ future.get();
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ } catch (ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }catch(Exception e) {
+ log.error(e.getMessage(),e);
+ }
+
+
+ }while (cardInfos != null && cardInfos.size() > 0) ;
+
+
+ }
+}
diff --git a/src/main/java/com/jiashi/service/UploadInfo.java b/src/main/java/com/jiashi/service/UploadInfo.java
new file mode 100644
index 0000000..0a632f7
--- /dev/null
+++ b/src/main/java/com/jiashi/service/UploadInfo.java
@@ -0,0 +1,150 @@
+package com.jiashi.service;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * [ {"inpatientNo":"35131", "disDate":"2020-07-30 00:00:00.000", "fileTitle":"0001.jpg", "uploadFileName":"1.jpg", "assortId":"078F7675CB0048EDBE586D59831C57B0" ,
+ * "patientId":"12312312",
+ * "name":"长三",
+ * "admissDate":"住院时间",
+ * "sex":"男女"
+ * }
+ * ]
+ */
+@Data
+
+public class UploadInfo {
+ private String inpatientNo;
+ private String disDate;
+ private String fileTitle;
+ private String uploadFileName;
+ private String assortId;
+ private String patientId;
+ private String name;
+ private String admissDate;
+ private String sex;
+
+ public UploadInfo(String inpatientNo, String disDate, String fileTitle, String uploadFileName, String assortId, String patientId, String name, String admissDate, String sex) {
+ this.inpatientNo = inpatientNo;
+ this.disDate = disDate;
+ this.fileTitle = fileTitle;
+ this.uploadFileName = uploadFileName;
+ this.assortId = assortId;
+ this.patientId = patientId;
+ this.name = name;
+ this.admissDate = admissDate;
+ this.sex = sex;
+ this.ssAssortId();
+ }
+
+
+ public void ssAssortId() {
+ switch (assortId) {
+ case "1":
+ this.assortId = "2111";
+ break;
+ case "2":
+ this.assortId = "2112";
+ break;
+ case "3":
+ this.assortId = "2113";
+ break;
+ case "4":
+ this.assortId = "2114";
+ break;
+ case "5":
+ this.assortId = "2115";
+ break;
+ case "6":
+ this.assortId = "2116";
+ break;
+ case "7":
+ this.assortId = "2117";
+ break;
+ case "8":
+ this.assortId = "2118";
+ break;
+ case "9":
+ this.assortId = "2119";
+ break;
+ case "10":
+ this.assortId = "21110";
+ break;
+ case "11":
+ this.assortId = "21111";
+ break;
+ case "12":
+ this.assortId = "21112";
+ break;
+ case "13":
+ this.assortId = "21113";
+ break;
+ case "14":
+ this.assortId = "21114";
+ break;
+ case "15":
+ this.assortId = "21115";
+ break;
+ case "16":
+ this.assortId = "21116";
+ break;
+ case "17":
+ this.assortId = "21117";
+ break;
+ case "18":
+ this.assortId = "21118";
+ break;
+ case "19":
+ this.assortId = "21119";
+ break;
+ case "20":
+ this.assortId = "21120";
+ break;
+ case "21":
+ this.assortId = "21121";
+ break;
+ case "22":
+ this.assortId = "21122";
+ break;
+ case "23":
+ this.assortId = "21123";
+ break;
+ case "24":
+ this.assortId = "21124";
+ break;
+ case "25":
+ this.assortId = "21125";
+ break;
+ case "26":
+ this.assortId = "21126";
+ break;
+ case "27":
+ this.assortId = "21127";
+ break;
+ case "28":
+ this.assortId = "21128";
+ break;
+ case "29":
+ this.assortId = "21129";
+ break;
+ case "30":
+ this.assortId = "21130";
+ break;
+ case "31":
+ this.assortId = "21131";
+ break;
+ case "32":
+ this.assortId = "21132";
+ break;
+ case "33":
+ this.assortId = "21133";
+ break;
+ default:
+ this.assortId = "21133";
+ }
+
+
+
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..e21629f
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,17 @@
+
+server:
+ port: 8282
+
+spring:
+ datasource:
+ url: jdbc:sqlserver://10.2.130.59:1433;DatabaseName=u_medrecord
+ username: sa
+ password: admin123
+ # url: jdbc:sqlserver://10.36.116.108:1433;DatabaseName=emr_record
+ # username: sa
+ # password: xjgs+docus911
+ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+
+ jpa:
+ database-platform: org.hibernate.dialect.SQLServerDialect
+
diff --git a/src/main/resources/lianzhong.sql b/src/main/resources/lianzhong.sql
new file mode 100644
index 0000000..aa586ff
--- /dev/null
+++ b/src/main/resources/lianzhong.sql
@@ -0,0 +1,15 @@
+SELECT * into t_card_info_upload from T_card_info ;
+
+ALTER TABLE [dbo].[t_card_info_upload] ADD [state] tinyint NULL;
+
+
+CREATE NONCLUSTERED INDEX [index_state]
+ON [dbo].[t_card_info_upload] (
+ [state]
+)
+
+
+CREATE NONCLUSTERED INDEX [index_outdate]
+ON [dbo].[t_card_info_upload] (
+ [outdate]
+)
\ No newline at end of file
diff --git a/src/test/java/com/jiashi/DataTest.java b/src/test/java/com/jiashi/DataTest.java
new file mode 100644
index 0000000..21bb193
--- /dev/null
+++ b/src/test/java/com/jiashi/DataTest.java
@@ -0,0 +1,19 @@
+//package com.jiashi;
+//
+//import com.jiashi.dao.DataQuery;
+//import org.junit.jupiter.api.Test;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.test.context.SpringBootTest;
+//import org.springframework.test.context.ContextConfiguration;
+//
+//@SpringBootTest
+//public class DataTest {
+//
+// @Autowired
+// private DataQuery dataQuery;
+//
+// @Test
+// public void test(){
+//// dataQuery.getCardInfo();
+// }
+//}
diff --git a/src/test/java/com/jiashi/FileUploader.java b/src/test/java/com/jiashi/FileUploader.java
new file mode 100644
index 0000000..9fa9299
--- /dev/null
+++ b/src/test/java/com/jiashi/FileUploader.java
@@ -0,0 +1,78 @@
+package com.jiashi;
+
+import okhttp3.*;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+public class FileUploader {
+
+
+ public static void uploadFilesWithParams(List files, String uploadUrl, List params) throws IOException {
+ OkHttpClient client = new OkHttpClient.Builder()
+ .connectTimeout(600, TimeUnit.SECONDS)
+ .readTimeout(600, TimeUnit.SECONDS)
+ .writeTimeout(600, TimeUnit.SECONDS)
+ .build();
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ for (File file : files) {
+ RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+// RequestBody body = RequestBody.create(MediaType.parse("image/jpeg"), file);
+ builder.addFormDataPart("files", file.getName(), body);
+ }
+ for(FormField formField:params){
+ builder.addFormDataPart(formField.key, formField.value);
+ }
+ // 下行是上传的json的对象,其中上面的fileName和下行的fromData需和后台接口名字一致
+ RequestBody requestBody = builder.setType(MultipartBody.FORM).build();
+ final Request request = new Request.Builder()
+ .url(uploadUrl)
+ .post(requestBody)
+ .build();
+
+ Response response = client.newCall(request).execute();
+ String responseBody = response.body().string();
+
+ // 输出请求结果
+ System.out.println(responseBody);
+ }
+
+ public static void main(String[] args) throws IOException {
+ List files = new ArrayList<>();
+ files.add(new File("C:\\Downloads\\LH0001.jpg"));
+
+// files.add(new File("C:\\jiahsi-saomiao\\413425_刘燊杨_20221009_004624\\16763947060420811242.jpg"));
+
+
+ // 额外的表单字段参数
+ List params = new ArrayList<>();
+ params.add(new FormField("uploadFileParams", "[ {\"inpatientNo\":\"35131\", \"disDate\":\"2020-07-30 00:00:00.000\", \"fileTitle\":\"16763947060057863381.jpg\", \"uploadFileName\":\"16763947060057863381.jpg\", \"assortId\":\"078F7675CB0048EDBE586D59831C57B0\" ,\n" +
+ "\"patientId\":\"12312312\",\n" +
+ "\"name\":\"长三\",\n" +
+ "\"admissDate\":\"2022-02-01\",\n" +
+ "\"sex\":\"男女\"\n" +
+ "}\n" +
+ "]"));
+
+ // 上传URL
+ String uploadUrl = "http://192.168.16.116:8711/api/downplatform/fileUploadJpg";
+
+ // 执行批量上传
+ uploadFilesWithParams(files, uploadUrl, params);
+ }
+
+ // 用于表单字段的辅助类
+ static class FormField {
+ String key;
+ String value;
+
+ FormField(String key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+ }
+}