From 11bd027cf2420fef7540074cca7bdcb29b847f48 Mon Sep 17 00:00:00 2001 From: zhangchao Date: Thu, 23 May 2024 09:26:48 +0800 Subject: [PATCH] =?UTF-8?q?#fix:=E6=96=B0=E5=A2=9E=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E5=88=86=E6=AE=B5=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/PregnantBuildController.java | 20 +++ .../operate/web/facade/BookbuildingFacade.java | 179 +++++++++++++-------- .../lyms/platform/operate/web/utils/FileUtils.java | 76 +++++++++ 3 files changed, 209 insertions(+), 66 deletions(-) create mode 100644 platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/FileUtils.java diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java index 3bfd312..d51ac79 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/PregnantBuildController.java @@ -643,6 +643,26 @@ public class PregnantBuildController extends BaseController { } /** + * 视频分片上传 + * @param fileName 文件名称 + * @param file 原文件 + * @param chunk 分片 + * @param chunks 分片总数 + * @return + */ + @RequestMapping(value = "/uploadVideo", method = RequestMethod.POST) + @ResponseBody + public BaseResponse uploadVideo(@RequestParam(value="fileName") String fileName, + @RequestParam(value="file") MultipartFile file, + @RequestParam(value="chunk") int chunk, + @RequestParam(value="chunks") int chunks){ + + return bookbuildingFacade.uploadVideo(fileName,file,chunk,chunks); + + } + + + /** * 图片上次 * * @param request diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java index 31c19da..791ca78 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/facade/BookbuildingFacade.java @@ -26,6 +26,7 @@ import com.lyms.platform.operate.web.request.*; import com.lyms.platform.operate.web.result.*; import com.lyms.platform.operate.web.service.ITrackDownService; import com.lyms.platform.operate.web.utils.CommonsHelper; +import com.lyms.platform.operate.web.utils.FileUtils; import com.lyms.platform.operate.web.utils.JdbcUtil; import com.lyms.platform.operate.web.worker.BatchUpdateLymsPatient; import com.lyms.platform.permission.dao.master.CouponMapper; @@ -53,6 +54,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; @@ -479,7 +481,7 @@ public class BookbuildingFacade { PatientService patientService = new PatientService(); patientService.setSerInfos(yunRequest.getSerInfos()); patientService.setPerType(1); - if(userId!=null){ + if (userId != null) { patientService.setCreateUser(String.valueOf(userId)); } //开通日期与建档日期一致 @@ -608,7 +610,7 @@ public class BookbuildingFacade { //根据patient查询是否存在追访信息 TrackDownRecordQuery downRecordQuery = new TrackDownRecordQuery(); downRecordQuery.setParentId(patient.getId()); - // downRecordQuery.setStatus(3); + // downRecordQuery.setStatus(3); List records = trackDownRecordService.queryTrackDown(downRecordQuery); if (CollectionUtils.isNotEmpty(records)) {//存在则进行修改,只修改基本信息,不修改显示状态和追访类型 TrackDownRecord trackDownRecord1 = records.get(0); @@ -1296,15 +1298,15 @@ public class BookbuildingFacade { final List patientList = patientsService.queryPatient(patientsQuery); if (CollectionUtils.isNotEmpty(patientList)) { - final String date= DateUtil.getyyyy_MM_dd(DateUtil.addDay(new Date(),0)); - final String planTime = date+ " 16:30:00"; + final String date = DateUtil.getyyyy_MM_dd(DateUtil.addDay(new Date(), 0)); + final String planTime = date + " 16:30:00"; commonThreadPool.execute(new Runnable() { @Override public void run() { for (Patients patients : patientList) { //TODO 处理建档短信提醒逻辑 List messages = new ArrayList<>(); - final String hospitalId=patients.getHospitalId(); + final String hospitalId = patients.getHospitalId(); String title = "建档成功提醒短信"; String messageContent = "【" + getHospitalName(hospitalId) + "】" + "您已成功建档!请微信-添加朋友-公众号-搜索“美生孕育”关注;点击开通成功提醒,手机号获取验证码成功登录宝贝孕程小程序。请您经常登录【宝贝孕程】小程序并持续关注【美生孕育】公众号,以便于您享受孕期的私有化服务,会依据您的年龄、孕周、单双胎、高危风险因素给予专题文章、个性指导、产检提醒等,让您了解、掌握和促进健康孕育,让我们携手并进一起迎接小宝宝的降生。"; MsgRequest request = new MsgRequest(); @@ -1337,32 +1339,32 @@ public class BookbuildingFacade { logger.info("bookbuildingMsg end"); } - private static String getHospitalName(String hospitalId){ + private static String getHospitalName(String hospitalId) { //TODO 暂时这样处理后期优化 - if ("2100002419".equals(hospitalId)){ - return "大同市第一人民医院"; - }else if ("1000000016".equals(hospitalId)){ + if ("2100002419".equals(hospitalId)) { + return "大同市第一人民医院"; + } else if ("1000000016".equals(hospitalId)) { return "秦皇岛市第二医院"; - }else if ("2100002421".equals(hospitalId)){ + } else if ("2100002421".equals(hospitalId)) { return "邢台威县人民医院"; - }else if ("1000000115".equals(hospitalId)){ - return "南和区人民医院"; - }else if("2100001296".equals(hospitalId)){ + } else if ("1000000115".equals(hospitalId)) { + return "南和区人民医院"; + } else if ("2100001296".equals(hospitalId)) { return "临城县人民医院"; - }else if("2100001306".equals(hospitalId)){ - return "临西县人民医院"; + } else if ("2100001306".equals(hospitalId)) { + return "临西县人民医院"; } - return ""; + return ""; } /** * 大同服务内容提醒 上午9点推送 * 开通服务第1天、第7天、第14天、第21天、第28天去推送 */ - public void serviceSync(){ + public void serviceSync() { logger.info("serviceSync startup..."); final String hospitalId = "2100002419"; - Date day=DateUtil.getYMDTime(); + Date day = DateUtil.getYMDTime(); PatientsQuery patientsQuery = new PatientsQuery(); patientsQuery.setHospitalId(hospitalId); patientsQuery.setExtEnable(false); @@ -1370,15 +1372,15 @@ public class BookbuildingFacade { patientsQuery.setYn(YnEnums.YES.getId()); patientsQuery.setServiceType(ServiceTypeEnums.ADD_SERVICE.getId()); patientsQuery.setServiceStatus(ServiceStatusEnums.ADD_OPEN.getId()); - Date seven= DateUtil.addDay(day,-7); - Date fourteen= DateUtil.addDay(day,-14); - Date twenty=DateUtil.addDay(day,-21); - Date twentyEight=DateUtil.addDay(day,-28); - Map params=new HashMap<>(); - params.put("seven",seven); - params.put("fourteen",fourteen); - params.put("twenty",twenty); - params.put("twentyEight",twentyEight); + Date seven = DateUtil.addDay(day, -7); + Date fourteen = DateUtil.addDay(day, -14); + Date twenty = DateUtil.addDay(day, -21); + Date twentyEight = DateUtil.addDay(day, -28); + Map params = new HashMap<>(); + params.put("seven", seven); + params.put("fourteen", fourteen); + params.put("twenty", twenty); + params.put("twentyEight", twentyEight); patientsQuery.setServiceTime("1"); patientsQuery.setMapTime(params); final List patientList = patientsService.queryPatient(patientsQuery); @@ -1390,9 +1392,9 @@ public class BookbuildingFacade { for (int i = 0, j = patientList.size(); i < j; i++) { Patients patients = patientList.get(i); try { - patientServiceFacade.sendServiceMsg(patients,SmsServiceEnums.FWKT.getId(),"您好,请点击此处查看开通服务内容详情。","大同市第一人民医院",patients.getType(),null); + patientServiceFacade.sendServiceMsg(patients, SmsServiceEnums.FWKT.getId(), "您好,请点击此处查看开通服务内容详情。", "大同市第一人民医院", patients.getType(), null); } catch (Exception e) { - logger.error("weekSync InterruptedException," + e.getMessage()); + logger.error("weekSync InterruptedException," + e.getMessage()); } } } @@ -3461,6 +3463,51 @@ public class BookbuildingFacade { return patientId; } + public BaseResponse uploadVideo(String fileName, + MultipartFile file, + int chunk, int chunks) { + BaseObjectResponse objectResponse = new BaseObjectResponse(); + try { + + //临时路径 + String tempsDirPath="tempsDir"; + //创建临时文件储存目录 + File tempsDir = new File(BASE_IMG_PATH + File.separator + tempsDirPath, fileName); + if (!tempsDir.exists()) { + tempsDir.mkdirs(); + } + //储存为临时文件 + File tempFile = new File(tempsDir.getAbsolutePath(), fileName + ".part" + chunk); + file.transferTo(tempFile); + //检查分片是否下载完成 + int successChunks = FileUtils.getInstance().successChunks(fileName, chunks); + + if (successChunks == chunks) { + //正式路径 + String imgPath = DateUtil.getYmd(new Date()); + //分片下载完成后合并分片为文件 + FileUtils.getInstance().mergeChunks(tempsDir.getAbsolutePath(), + BASE_IMG_PATH + File.separator +imgPath + , fileName, chunks); + //返回文件地址 + objectResponse.setData(imgPath + "/" + fileName); + objectResponse.setErrorcode(ErrorCodeConstants.SUCCESS); + objectResponse.setErrormsg("成功"); + } else { + objectResponse.setErrorcode(1); + objectResponse.setErrormsg("上传中"); + } + return objectResponse; + } catch (Exception e) { + ExceptionUtils.catchException(e, "上传文件发生异常"); + objectResponse.setErrorcode(ErrorCodeConstants.SYSTEM_ERROR); + objectResponse.setErrormsg(ErrorCodeConstants.SYSTEM_ERROR_DESCRIPTION); + return objectResponse; + } + + } + + public BaseResponse uploadImg(MultipartFile file) { //如果文件不为空,写入上传路径 BaseObjectResponse objectResponse = new BaseObjectResponse(); @@ -4477,7 +4524,7 @@ public class BookbuildingFacade { serInfos.add(params); patientService.setSerInfos(serInfos); patientService.setPerType(1); - if (StringUtils.isNotEmpty(patient.getFirstCheckId())){ + if (StringUtils.isNotEmpty(patient.getFirstCheckId())) { patientService.setCreateUser(patient.getFirstCheckId()); } @@ -4942,7 +4989,7 @@ public class BookbuildingFacade { patientsQuery.setType(1); boolean b = false; Patients patient = null; - Integer num=1; + Integer num = 1; if (StringUtils.isNotEmpty(map.get("cardNo"))) { patientsQuery.setCardNo(map.get("cardNo").trim()); //判断该身份证号码是否有孕妇建档 在该医院 @@ -4950,8 +4997,8 @@ public class BookbuildingFacade { if (CollectionUtils.isNotEmpty(patients)) { b = true; patient = patients.get(0); - if (patient.getNextCheckTime()!=null&&patient.getNextCheckTime().compareTo(DateUtil.parseYMD(map.get("nextCheckTime")))<0){ - num=2; + if (patient.getNextCheckTime() != null && patient.getNextCheckTime().compareTo(DateUtil.parseYMD(map.get("nextCheckTime"))) < 0) { + num = 2; } } else { patient = new Patients(); @@ -4973,9 +5020,9 @@ public class BookbuildingFacade { patient.setLastReportDoctorName(users.get(0).getName()); } } - if (StringUtils.isEmpty(map.get("lastMenses"))){ + if (StringUtils.isEmpty(map.get("lastMenses"))) { patient.setLastMenses(DateUtil.getCurrentDueDate(map.get("currentDueDate"), map.get("bookbuildingDate"))); - }else { + } else { patient.setLastMenses(DateUtil.parseYMD(map.get("lastMenses"))); } Integer type = 1; //1孕妇 2儿童 3产妇 @@ -5024,17 +5071,17 @@ public class BookbuildingFacade { patient.setAge(Integer.valueOf(map.get("age"))); patient.setBirth(DateUtil.parseYMD(map.get("birth"))); - // patient.setAddressRegister(map.get("xian") + map.get("xiang") + map.get("cun")); + // patient.setAddressRegister(map.get("xian") + map.get("xiang") + map.get("cun")); patient.setPhone(map.get("phone").trim()); patient.setFirstCheckId(String.valueOf(patient.getOperator())); patient.setFirstCheckTime(patient.getBookbuildingDate()); if (patient.getLastMenses() != null) { patient.setBuildDays(DateUtil.getDays(patient.getLastMenses(), new Date())); - String dueDate=null; - if (StringUtils.isNotEmpty(map.get("dueDate"))){ - dueDate= map.get("dueDate"); - }else { - dueDate=DateUtil.getyyyy_MM_dd(DateUtil.addDay(patient.getLastMenses(), 42 * 7)); + String dueDate = null; + if (StringUtils.isNotEmpty(map.get("dueDate"))) { + dueDate = map.get("dueDate"); + } else { + dueDate = DateUtil.getyyyy_MM_dd(DateUtil.addDay(patient.getLastMenses(), 42 * 7)); } patient.setDueDate(DateUtil.parseYMD(dueDate)); } @@ -5100,11 +5147,11 @@ public class BookbuildingFacade { patient.setNextCheckTime(DateUtil.parseYMD(map.get("nextCheckTime"))); if (patient.getDueDate() != null) { } else { - String dueDate=null; - if (StringUtils.isNotEmpty(map.get("dueDate"))){ - dueDate= map.get("dueDate"); - }else { - dueDate=DateUtil.getyyyy_MM_dd(DateUtil.addDay(patient.getLastMenses(), 42 * 7)); + String dueDate = null; + if (StringUtils.isNotEmpty(map.get("dueDate"))) { + dueDate = map.get("dueDate"); + } else { + dueDate = DateUtil.getyyyy_MM_dd(DateUtil.addDay(patient.getLastMenses(), 42 * 7)); } patient.setDueDate(DateUtil.parseYMD(dueDate)); @@ -5127,7 +5174,7 @@ public class BookbuildingFacade { } - // Integer num = Integer.valueOf(map.get("num")); + // Integer num = Integer.valueOf(map.get("num")); AntExRecordModel antExRecordModel = new AntExRecordModel(); AntExChuModel antExChuModel = new AntExChuModel(); String riskFactor = map.get("name"); @@ -5213,7 +5260,7 @@ public class BookbuildingFacade { antExChuModel.setProdDoctor(String.valueOf(patient.getOperator())); - antExChuModel= antenatalExaminationService.addOneAntEx(antExChuModel); + antExChuModel = antenatalExaminationService.addOneAntEx(antExChuModel); antExRecordModel.setfId(antExChuModel.getId()); antExRecordService.addOneRecord(antExRecordModel); //初诊是添加追访记录 @@ -5222,26 +5269,26 @@ public class BookbuildingFacade { if (num > 1) { - antExRecordModel.setId(null); - antExRecordModel.setType(2); - AntenatalExaminationModel antenatalExaminationModel = new AntenatalExaminationModel(); - antenatalExaminationModel.setYn(1); - antenatalExaminationModel.setParentId(patient.getId()); - antenatalExaminationModel.setPid(patient.getPid()); - antenatalExaminationModel.setCheckDoctor(String.valueOf(patient.getOperator())); - antenatalExaminationModel.setHospitalId("2100001504"); - antenatalExaminationModel.setName(map.get("username")); - antenatalExaminationModel.setRiskScore(antExChuModel.getHighriskSocre()); - antenatalExaminationModel.setRiskFactor(antExChuModel.getHighrisk()); - antenatalExaminationModel.setLastMenses(patient.getLastMenses()); - antenatalExaminationModel.setNextCheckTime(DateUtil.parseYMD(map.get("nextCheckTime"))); - antenatalExaminationModel.setCurrentDueDate(map.get("currentDueDate")); - antenatalExaminationModel.setCheckDate(DateUtil.parseYMD(map.get("checkDate"))); - antenatalExaminationModel=antenatalExaminationService.addOneBabyAnt(antenatalExaminationModel); + antExRecordModel.setId(null); + antExRecordModel.setType(2); + AntenatalExaminationModel antenatalExaminationModel = new AntenatalExaminationModel(); + antenatalExaminationModel.setYn(1); + antenatalExaminationModel.setParentId(patient.getId()); + antenatalExaminationModel.setPid(patient.getPid()); + antenatalExaminationModel.setCheckDoctor(String.valueOf(patient.getOperator())); + antenatalExaminationModel.setHospitalId("2100001504"); + antenatalExaminationModel.setName(map.get("username")); + antenatalExaminationModel.setRiskScore(antExChuModel.getHighriskSocre()); + antenatalExaminationModel.setRiskFactor(antExChuModel.getHighrisk()); + antenatalExaminationModel.setLastMenses(patient.getLastMenses()); + antenatalExaminationModel.setNextCheckTime(DateUtil.parseYMD(map.get("nextCheckTime"))); + antenatalExaminationModel.setCurrentDueDate(map.get("currentDueDate")); + antenatalExaminationModel.setCheckDate(DateUtil.parseYMD(map.get("checkDate"))); + antenatalExaminationModel = antenatalExaminationService.addOneBabyAnt(antenatalExaminationModel); antExRecordModel.setfId(antenatalExaminationModel.getId()); antExRecordService.addOneRecord(antExRecordModel); - //添加复诊时添加追访信息 - antenatalExaminationFacade.addTrackDownInfo(patient.getOperator(), patient, map.get("nextCheckTime")); + //添加复诊时添加追访信息 + antenatalExaminationFacade.addTrackDownInfo(patient.getOperator(), patient, map.get("nextCheckTime")); } } }); diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/FileUtils.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/FileUtils.java new file mode 100644 index 0000000..20a5306 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/utils/FileUtils.java @@ -0,0 +1,76 @@ +package com.lyms.platform.operate.web.utils; + +import java.io.*; +import java.util.concurrent.ConcurrentHashMap; + +public class FileUtils { + //记录已经上传成功的分片文件数量,线程安全 + private static ConcurrentHashMap successChunksCount = new ConcurrentHashMap<>(); + private static FileUtils instance = new FileUtils(); + + public static FileUtils getInstance(){ + return instance; + } + + /** + * 每上传成功一个文件的分片,就在文件名对应的值加1 + * 对比分片总数,如果上传成功分片数等于分片总数则调用合并文件方法 + * @param fileName + * @param chunks + * @return + */ + public int successChunks(String fileName,int chunks){ + int chunksNow = successChunksCount.get(fileName)==null ? 0 : successChunksCount.get(fileName); + chunksNow ++; + if(chunks==chunksNow){ + successChunksCount.remove(fileName); + }else{ + successChunksCount.put(fileName, chunksNow); + } + return chunksNow; + } + + /** + * 上传完成后合并分片文件 + * @param sourceDirPath 分片的目录地址 + * @param destDirPath 合成后存放的目录地址 + * @param fileName 文件名 + * @param chunks 分片总数 + * @return + * @throws FileNotFoundException + */ + public boolean mergeChunks(String sourceDirPath, + String destDirPath,String fileName,int chunks) throws Exception{ + //创建目标目录 + File destDir = new File(destDirPath); + if(!destDir.exists()){ + destDir.mkdirs(); + } + //创建目标文件流 + BufferedOutputStream destOutputStream = + new BufferedOutputStream(new FileOutputStream(destDir+"/"+fileName)); + + //循环将每个分片的数据写入目标文件 + byte[] fileBuffer = new byte[1024];//文件读写缓存 + int readBytesLength = 0;//每次读取字节数 + System.out.println(("开始合并文件="+fileName)); + for(int i=0; i