From e9cbc4b86621cfdc2b7039e56fad760e80865389 Mon Sep 17 00:00:00 2001 From: zhaoxiaohao <279049017@qq.com> Date: Tue, 17 Nov 2020 17:53:36 +0800 Subject: [PATCH] Merge branch 'dev' of ssh://192.168.2.240:29418/kidgrow-microservices-platform into dev --- kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/SreeningOrganizationService.java | 28 ++++ kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/importScreeningOrganization.html | 170 ++++++++++++++++++++++++ kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/screeningOrganization.html | 18 ++ kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/fallback/ScreeningOrganizatonServiceFallbackFactory.java | 31 ++++ kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/template/机构导入模板.xlsx | 0 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ScreeningOrganizationInfoController.java | 88 +++++++++++- kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ScreeningOrganizationExcel.java | 47 ++++++ 7 files changed, 372 insertions(+), 10 deletions(-) diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/SreeningOrganizationService.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/SreeningOrganizationService.java new file mode 100644 index 0000000..8816ab1 --- /dev/null +++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/SreeningOrganizationService.java @@ -0,0 +1,28 @@ +package com.kidgrow.oprationcenter.feign; + +import com.kidgrow.common.constant.ServiceNameConstants; +import com.kidgrow.common.model.ResultBody; +import com.kidgrow.oprationcenter.feign.fallback.ScreeningOrganizatonServiceFallbackFactory; +import com.kidgrow.oprationcenter.model.ScreeningOrganizationInfo; +import com.kidgrow.ribbon.config.FeignHttpInterceptorConfig; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> + * + * @Description: <br> + * @Project: <br> + * @CreateDate: Created in 2020/11/16 15:54 <br> + * @Author: <a href="78125310@kidgrow.com">dougang</a> + */ +@FeignClient(value = ServiceNameConstants.OPRATION_SERVER,configuration= FeignHttpInterceptorConfig.class, + fallbackFactory = ScreeningOrganizatonServiceFallbackFactory.class, decode404 = true) +public interface SreeningOrganizationService { + /** + * feign rpc访问远程 接口 + */ + @PostMapping(value = "/screeningorganizationinfo/query") + ResultBody findByObject(@RequestBody ScreeningOrganizationInfo organizationInfo); +} diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/fallback/ScreeningOrganizatonServiceFallbackFactory.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/fallback/ScreeningOrganizatonServiceFallbackFactory.java new file mode 100644 index 0000000..c618ec2 --- /dev/null +++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/fallback/ScreeningOrganizatonServiceFallbackFactory.java @@ -0,0 +1,31 @@ +package com.kidgrow.oprationcenter.feign.fallback; + + +import com.kidgrow.common.model.ResultBody; +import com.kidgrow.oprationcenter.feign.SreeningOrganizationService; +import com.kidgrow.oprationcenter.model.ScreeningOrganizationInfo; +import feign.hystrix.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> + * + * @Description: <br> + * @Project: <br> + * @CreateDate: Created in 2020/11/16 15:58 <br> + * @Author: <a href="78125310@kidgrow.com">dougang</a> + */ +@Component +public class ScreeningOrganizatonServiceFallbackFactory implements FallbackFactory<SreeningOrganizationService> { + + @Override + public SreeningOrganizationService create(Throwable throwable) { + return new SreeningOrganizationService(){ + + @Override + public ResultBody findByObject(ScreeningOrganizationInfo organizationInfo) { + return ResultBody.failed().msg("saveProductDetail的FeignClient调用失败"); + } + }; + } +} diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ScreeningOrganizationExcel.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ScreeningOrganizationExcel.java new file mode 100644 index 0000000..2eef69b --- /dev/null +++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ScreeningOrganizationExcel.java @@ -0,0 +1,47 @@ +package com.kidgrow.oprationcenter.model; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> + * + * @version 1.0 + * @Description: 筛查机构信息表<br> + * @Project: 用户中心<br> + * @CreateDate: Created in 2020-10-12 17:10:31 <br> + * @Author: <a href="78125310@kidgrow.com">dougang</a> + */ +@Data +public class ScreeningOrganizationExcel implements Serializable { + private static final long serialVersionUID = -5886012896705137070L; + + /** + * 机构名称 + */ + @Excel(name = "机构名称", height = 20, width = 30, isImportField = "true_st") + private String organizationName; + /** + * 联系人 + */ + @Excel(name = "联系人", height = 20, width = 30, isImportField = "true_st") + private String contactName; + /** + * 联系电话 + */ + @Excel(name = "电话", height = 20, width = 30, isImportField = "true_st") + private String contactNumber; + /** + * 机构简称 + */ + @Excel(name = "机构简称", height = 20, width = 30, isImportField = "true_st") + private String abbreviation; + + /** + * 机构编码 + */ + @Excel(name = "编码", height = 20, width = 30, isImportField = "true_st") + private String organizationNo; +} diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ScreeningOrganizationInfoController.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ScreeningOrganizationInfoController.java index 9c856e7..0a12b38 100644 --- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ScreeningOrganizationInfoController.java +++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ScreeningOrganizationInfoController.java @@ -1,11 +1,14 @@ package com.kidgrow.oprationcenter.controller; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONObject; import com.kidgrow.common.controller.BaseController; import com.kidgrow.common.model.PageResult; import com.kidgrow.common.model.ResultBody; +import com.kidgrow.common.utils.ExcelUtil; import com.kidgrow.common.utils.QRCodeUtil; +import com.kidgrow.oprationcenter.model.ScreeningOrganizationExcel; import com.kidgrow.oprationcenter.model.ScreeningOrganizationInfo; import com.kidgrow.oprationcenter.service.IScreeningOrganizationInfoService; import com.kidgrow.redis.util.RedisUtils; @@ -20,13 +23,12 @@ import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import sun.misc.BASE64Decoder; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -180,22 +182,88 @@ out = response.getOutputStream(); fileInputStream = new ByteArrayInputStream(arr); int len = 0; - byte[] by = new byte[1024*10]; - while ((len = fileInputStream.read(by))>0){ - out.write(by,0,len); + byte[] by = new byte[1024 * 10]; + while ((len = fileInputStream.read(by)) > 0) { + out.write(by, 0, len); } - }catch (Exception w){ - log.error("",w); - }finally { + } catch (Exception w) { + log.error("", w); + } finally { try { out.close(); fileInputStream.close(); - }catch(Exception w){ + } catch (Exception w) { } } } + + /** + * 导入文件 + */ + @ApiOperation(value = "导入") + @PostMapping("/import") + public ResultBody downLoad(@RequestParam("file") MultipartFile excel, + @RequestParam("hospitalId") String hospitalId, + @RequestParam("areaCode") String areaCode, + @RequestParam("areaName") String areaName, + @RequestParam("hospitalName") String hospitalName) { + + int rowNum = 0; + + try { + if (!excel.isEmpty()) { + List<ScreeningOrganizationExcel> list = ExcelUtil.importExcel(excel, 0, 1, ScreeningOrganizationExcel.class); + rowNum = list.size(); + if (rowNum > 0) { + List<ScreeningOrganizationInfo> users = new ArrayList<>(rowNum); + String[] area = areaCode.split("#"); + + list.forEach(u -> { + ScreeningOrganizationInfo user = new ScreeningOrganizationInfo(); + BeanUtil.copyProperties(u, user); + user.setSourceHospitalName(hospitalName); + user.setSourceHospitalId(Long.parseLong(hospitalId)); + user.setProvince(area[0]); + user.setCity(area[1]); + user.setArea(area[2]); + user.setAreaCode(areaName); + users.add(user); + }); + organizationInfoService.saveBatch(users); + } + } + } catch (Exception e) { + log.error("导入失败", e); + } + return ResultBody.ok().msg("导入数据成功,一共【" + rowNum + "】行"); + } + + /** + * 下载模板 + */ + @ApiOperation(value = "下载模板") + @PostMapping("/export") + public void export(HttpServletResponse response) { + try { + InputStream inStream =this.getClass().getResourceAsStream("/static/pages/template/机构导入模板.xlsx"); + // 设置输出的格式 + response.reset(); + response.setContentType("bin"); + response.addHeader("Content-Disposition", "attachment; filename=机构导入模板.xlsx"); + // 循环取出流中的数据 + byte[] b = new byte[100]; + int len; + + while ((len = inStream.read(b)) > 0) { + response.getOutputStream().write(b, 0, len); + } + inStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/importScreeningOrganization.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/importScreeningOrganization.html new file mode 100644 index 0000000..b28d09d --- /dev/null +++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/importScreeningOrganization.html @@ -0,0 +1,170 @@ +<form id="app-form-add" lay-filter="app-form-add" class="layui-form model-form"> + <div style="display:flex"> + <div class="layui-form-item"> + <div class="layui-inline"> + <label class="layui-form-label" style="width: 75px;">所在医院</label> + <div class="layui-input-block" style="width: 150px;"> + <input name="sourceHospitalName" id="sourceHospitalName" placeholder="请输入医院名称" type="text" class="layui-input" + maxlength="50" lay-verify="required" required style="width: 150px;"/> + <input type="hidden" name="sourceHospitalId" id="sourceHospitalId"/> + </div> + </div> + </div> + </div> + <div style="display:flex"> + <div class="layui-form-item"> + <label class="layui-form-label" style="width: 75px;">所在区域</label> + <div class="layui-inline" style="width: 134px;"> + <select lay-verify="required" required id="OrganizationProvince" placeholder="省份" + lay-filter="OrganizationProvince" > + </select> + </div> + <div class="layui-inline" style="width: 134px;"> + <select id="OrganizationCity" lay-verify="required" required placeholder="市" lay-filter="OrganizationCity"> + <option value="">选择市</option> + </select> + </div> + <div class="layui-inline" style="width: 134px;"> + <select id="OrganizationArea" lay-verify="required" required placeholder="区县" lay-filter="OrganizationArea"> + <option value="">选择区县</option> + </select> + </div> + </div> + </div> + </div> + + <div style="display:flex"> + <div class="layui-form-item"> + <div class="layui-inline"> + <label class="layui-form-label" style="width: 75px;">文件上传</label> + <div class="layui-input-block" style="width: 150px;"> + <button class="layui-btn test" id="import">选择文件</button> + </div> + </div> + </div> + </div> + + <div class="layui-form-item model-form-footer"> + <button class="layui-btn" type="button" id="downLoadTemplate" >下载导入模板</button> + <button class="layui-btn layui-btn-primary" ew-event="closeDialog" type="button">取消</button> + </div> +</form> + +<script> + layui.use(['form', 'laydate', 'util', 'config', 'admin', 'autocomplete', 'area'], function () { + var form = layui.form; + var config = layui.config; + var autocomplete = layui.autocomplete; + var $ = layui.jquery; + var area = layui.area; + var upload = layui.upload; + + form.render(); + + //省份数据加载 + area.areaData("#OrganizationProvince", 1, "", ""); + + //装载市区数据 + form.on("select(OrganizationProvince)", function (data) { + area.areasClear("#OrganizationArea", 3); + area.areaData("#OrganizationCity", 2, data.value, ""); + }); + //装载区县数据 + form.on("select(OrganizationCity)", function (data) { + area.areaData("#OrganizationArea", 3, data.value, ""); + }); + + //自动完成-医院名称 + autocomplete.render({ + elem: $('#sourceHospitalName')[0], + keywordsName: 'hospitalName', //查询关键字名称 + url: config.base_server + 'api-opration/hospitalscreening/findByName', + template_val: '{{d.hospitalName}}', //选择后文本框显示的数据字段 + template_txt: "<div class='layui-table-cell'>{{d.hospitalName}}</div>", //下拉列表模板 + onselect: function (resp) { + $("#sourceHospitalId").val(resp.id); + } + }); + + upload.render({ + //绑定元素 + elem: '#import' + //上传接口 + ,url: config.base_server + 'api-opration/screeningorganizationinfo/import' + ,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。 + layer.load(); //上传loading + } + ,done: function(data){ + layer.closeAll("loading"); + //上传完毕回调 + if (0 === data.code) { + layer.closeAll(); + parent.layui.table.reload('app-table', {}); + } else { + layer.msg(data.msg, { icon: 2, time: 2000 }); + } + } + ,error: function(){ + //请求异常回调 + layer.msg("操作异常", { icon: 2, time: 2000 }); + } + //允许的文件类型 + ,accept:'file' + ,exts: 'xls|xlsx' + //选择文件后是否自动上传 + ,auto: true, + headers: { + "Authorization": "Bearer " + config.getToken().access_token + } + ,data: { + hospitalId: function(){ + return $('#sourceHospitalId').val(); + }, + areaCode:function(){ + return $('#OrganizationProvince').val() + "#" + $('#OrganizationCity').val() + "#" + + $('#OrganizationArea').val(); + }, + areaName:function(){ + return $("#OrganizationProvince option:selected").text() + $("#OrganizationCity option:selected").text()+ + $("#OrganizationArea option:selected").text(); + }, + hospitalName:function(){ + return $("#sourceHospitalName").val(); + } + } + + + }); + + $('#downLoadTemplate').click(function () { + var url = config.base_server + "api-opration/screeningorganizationinfo/export"; + // 获取XMLHttpRequest + var xmlResquest = new XMLHttpRequest(); + // 发起请求 + xmlResquest.open("POST", url, true); + // 设置请求头类型 + xmlResquest.setRequestHeader("Content-type", "application/json"); + xmlResquest.setRequestHeader("Authorization","Bearer " + config.getToken().access_token); + xmlResquest.responseType = "blob"; + + // 返回 + xmlResquest.onload = function() { + if (this.status == 200) { + var fileName = "机构导入模板.xlsx"; + var blob = this.response; + var a = document.createElement('a'); + a.innerHTML = fileName; + // 指定生成的文件名 + a.download = fileName; + a.href = URL.createObjectURL(blob); + document.body.appendChild(a); + var evt = document.createEvent("MouseEvents"); + evt.initEvent("click", false, false); + a.dispatchEvent(evt); + document.body.removeChild(a); + } + }; + xmlResquest.send(); + }); + }); +</script> \ No newline at end of file diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/screeningOrganization.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/screeningOrganization.html index 4509de1..be1ea41 100644 --- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/screeningOrganization.html +++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/keaigao/screeningOrganization.html @@ -25,6 +25,8 @@ </button> <button id="screeningOrganization-btn-add" class="layui-btn icon-btn"><i class="layui-icon"></i>添加筛查机构 </button> + <button id="screeningOrganization-btn-import" class="layui-btn icon-btn"><i class="layui-icon"></i>导入筛查机构 + </button> <table class="layui-table" id="app-table" lay-filter="app-table"></table> </div> </div> @@ -223,5 +225,21 @@ window.open(url); } + // 导入按钮点击事件 + $('#screeningOrganization-btn-import').click(function () { + showEditModel_import("导入"); + }); + + var showEditModel_import = function (title, data) { + admin.popupCenter({ + title: title, + path: 'pages/keaigao/importScreeningOrganization.html', + area: '600px', + offset: '0px', + finish: function () { + } + }); + }; + }); </script> \ No newline at end of file diff --git "a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/template/\346\234\272\346\236\204\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/template/\346\234\272\346\236\204\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" new file mode 100644 index 0000000..fb878bb --- /dev/null +++ "b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/template/\346\234\272\346\236\204\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" Binary files differ -- Gitblit v1.8.0