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; + } + } +}