.gitignore
@@ -30,3 +30,4 @@ /kidgrow-web/kidgrow-web-manager/src/main/resources/static/package-lock.json /kidgrow-web/kidgrow-web-manager/src/main/resources/static.zip /git /kidgrow-web/kidgrow-web-manager/src/main/resources/static.rar kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-api/src/main/java/com/kidgrow/filecenter/feign/FileService.java
@@ -60,5 +60,12 @@ */ @PostMapping(value="byteUplaod") FileInfo byteUplaod(@RequestParam("fileName") String fileName,@RequestBody byte[] bytes); /** * 文件上传 根据fileType选择上传方式 hospitalId departmentId * @param file * @return */ @PostMapping(value="/feignUploadHosIdAndDepId",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) FileInfo feignUploadHosIdAndDepId(@RequestPart("file") MultipartFile file,@RequestParam("imgType") String imgType,@RequestParam("hospitalId") String hospitalId,@RequestParam("departmentId") String departmentId); } kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-api/src/main/java/com/kidgrow/filecenter/feign/fallback/FileServiceFallbackFactory.java
@@ -51,6 +51,11 @@ public FileInfo byteUplaod(String fileName, byte[] bytes) { return null; } @Override public FileInfo feignUploadHosIdAndDepId(MultipartFile file, String imgType, String hospitalId, String departmentId) { return null; } }; } } kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java
@@ -6,6 +6,7 @@ import com.kidgrow.filecenter.model.FileInfo; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.util.Map; @@ -43,5 +44,11 @@ */ ResultBody baseDownLoad(Map<String, Object> map) throws Exception; FileInfo byteUplaod(String fileName, InputStream inputStream, int size); FileInfo byteUplaod(String fileName, InputStream inputStream, int size) throws IOException; /** * 文件上传 根据fileType选择上传方式 hospitalId departmentId * @param file * @return */ FileInfo feignUploadHosIdAndDepId(MultipartFile file, String imgType, String hospitalId, String departmentId)throws Exception; } kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java
@@ -320,7 +320,7 @@ } @Override public FileInfo byteUplaod(String fileName, InputStream inputStream,int size) { public FileInfo byteUplaod(String fileName, InputStream inputStream,int size) throws IOException { String houzhui=fileName.substring(fileName.lastIndexOf(".")+1); String newFileName= RandomValueUtils.uuid()+"."+houzhui; FileInfo newfileInfo=new FileInfo(); @@ -332,7 +332,37 @@ newfileInfo.setSource("aliyun"); newfileInfo.setImgType(houzhui); newfileInfo.setCreateTime(new Date()); this.fileUpLoadOss(newfileInfo,OssPathEn+"pdf/"+newFileName,inputStream); this.fileUpLoadOss(newfileInfo,"pdf/"+newFileName,inputStream); baseMapper.insert(newfileInfo); inputStream.close(); return newfileInfo; } @Override public FileInfo feignUploadHosIdAndDepId(MultipartFile file, String imgType, String hospitalId, String departmentId) throws Exception { List<String> lassStr= Arrays.asList("png","bmp","dib","gif","jfif","jpe","jpeg","jpg","tif","tiff","ico"); String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1); if(!lassStr.contains(suffix)){ return null; } String name = file.getOriginalFilename(); String fileName= UUID.randomUUID().toString().replaceAll("-",""); //image/jpeg;base64 String newFileName=fileName+name.substring(name.lastIndexOf(".")); FileInfo newfileInfo=new FileInfo(); newfileInfo.setName(newFileName); newfileInfo.setId(IdUtil.fastSimpleUUID()); newfileInfo.setSize(file.getSize()); newfileInfo.setIsImg(true); newfileInfo.setContentType("image/jpeg"); newfileInfo.setSource("aliyun"); newfileInfo.setImgType(imgType); newfileInfo.setCreateTime(new Date()); String folderByDate =DateUtil.formatDate(new Date()); String filePath = FilePath(imgType, folderByDate, hospitalId, departmentId); InputStream inputStream = file.getInputStream(); this.fileUpLoadOss(newfileInfo,filePath+newFileName,inputStream); inputStream.close(); baseMapper.insert(newfileInfo); return newfileInfo; } kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java
@@ -69,6 +69,15 @@ return fileService.uploadForThumbnails(file,imgType); } /** * 文件上传 根据fileType选择上传方式 hospitalId departmentId * @param file * @return */ @PostMapping(value="/feignUploadHosIdAndDepId",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public FileInfo feignUploadHosIdAndDepId(@RequestPart("file") MultipartFile file,@RequestParam("imgType") String imgType,@RequestParam("hospitalId") String hospitalId,@RequestParam("departmentId") String departmentId) throws Exception { return fileService.feignUploadHosIdAndDepId(file,imgType,hospitalId,departmentId); } /** * base64上传图片 */ @PostMapping(value="baseUplaod",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @@ -91,7 +100,7 @@ * byte[]上传 */ @PostMapping(value="byteUplaod") public FileInfo byteUplaod(@RequestParam("fileName") String fileName,@RequestBody byte[] bytes){ public FileInfo byteUplaod(@RequestParam("fileName") String fileName,@RequestBody byte[] bytes) throws IOException{ if(bytes.length == 0){ return null; } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/EquipmentDockingService.java
New file @@ -0,0 +1,19 @@ package com.kidgrow.oprationcenter.feign; import com.kidgrow.common.constant.ServiceNameConstants; import com.kidgrow.common.model.ResultBody; import com.kidgrow.oprationcenter.feign.fallback.EquipmentDockingServiceFallbackFactory; import com.kidgrow.oprationcenter.model.EquipmentDocking; 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; @FeignClient(value = ServiceNameConstants.OPRATION_SERVER,configuration= FeignHttpInterceptorConfig.class, fallbackFactory = EquipmentDockingServiceFallbackFactory.class, decode404 = true) public interface EquipmentDockingService { @PostMapping("equipmentdocking/isAuthorize") Boolean isAuthorize(@RequestBody EquipmentDocking equipmentDocking); @PostMapping("equipmentdocking/query") ResultBody findByObject(@RequestBody EquipmentDocking equipmentDocking); } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/fallback/EquipmentDockingServiceFallbackFactory.java
New file @@ -0,0 +1,28 @@ package com.kidgrow.oprationcenter.feign.fallback; import com.kidgrow.common.model.ResultBody; import com.kidgrow.oprationcenter.feign.EquipmentDockingService; import com.kidgrow.oprationcenter.model.EquipmentDocking; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @Slf4j @Component public class EquipmentDockingServiceFallbackFactory implements FallbackFactory<EquipmentDockingService> { @Override public EquipmentDockingService create(Throwable throwable) { return new EquipmentDockingService() { @Override public Boolean isAuthorize(EquipmentDocking equipmentDocking) { return null; } @Override public ResultBody findByObject(EquipmentDocking equipmentDocking) { return null; } }; } } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/EquipmentDocking.java
New file @@ -0,0 +1,102 @@ package com.kidgrow.oprationcenter.model; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.kidgrow.common.model.SuperModel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import org.hibernate.validator.constraints.NotEmpty; import javax.validation.constraints.NotNull; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> * @Description: <br> * @Project: 用户中心<br> * @CreateDate: Created in 2020-10-19 11:14:58 <br> * @Author: <a href="4345453@kidgrow.com">liuke</a> * @version 1.0 */ @Data @EqualsAndHashCode(callSuper = false) @NoArgsConstructor @AllArgsConstructor @TableName("equipment_docking") public class EquipmentDocking extends SuperModel { private static final long serialVersionUID=1L; /** * 医院名称 */ @NotEmpty(message = "医院名称不能为空") private String hospitalName; /** * 科室名称 */ @NotEmpty(message = "科室名称不能为空") private String departName; /** * 医院唯一标识 */ @NotNull(message = "医院唯一标识不能为空") @JsonSerialize(using = ToStringSerializer.class) private Long hospitalId; /** * 部门唯一表示 */ @NotNull(message = "部门唯一表示不能为空") @JsonSerialize(using = ToStringSerializer.class) private Long departId; /** * 设备厂家名称 */ @NotEmpty(message = "设备厂家名称不能为空") private String companyName; /** * 设备型号 */ @NotEmpty(message = "设备型号不能为空") private String unitType; /** * 设备品牌 */ @NotEmpty(message = "设备品牌不能为空") private String equipmentBrand; /** * 设备机器码 */ @NotEmpty(message = "设备机器码不能为空") private String machineCode; /** * hospital_id+depart_id+machine_code 进行md5加密生成的32位小写的字符串 */ // @NotEmpty(message = "hospital_id+depart_id+machine_code 进行md5加密生成的32位小写的字符串不能为空") private String outAccesskey; /** * 设备厂家联系人电话 */ @NotEmpty(message = "设备厂家联系人电话不能为空") private String contactPhone; /** * 设备厂家联系人名称 */ @NotEmpty(message = "设备厂家联系人名称不能为空") private String contactName; /** * 备注信息 */ private String remarkComment; /** * 状态,1启用,0停用 */ private Boolean enabled; /** * 是否删除,1删除,0未删除 */ @TableLogic private Boolean isDel; } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/SaasClientPay.java
@@ -130,9 +130,6 @@ @JsonSerialize( using = ToStringSerializer.class ) @TableId( type = IdType.ASSIGN_ID ) @DateTimeFormat( pattern = "yyyy-MM-dd HH:mm:ss" ) kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/EquipmentDockingMapper.java
New file @@ -0,0 +1,34 @@ package com.kidgrow.oprationcenter.mapper; import com.kidgrow.db.mapper.SuperMapper; import com.kidgrow.oprationcenter.model.EquipmentDocking; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> * @Description: <br> * @Project: 用户中心<br> * @CreateDate: Created in 2020-10-19 11:14:58 <br> * @Author: <a href="4345453@kidgrow.com">liuke</a> * @version 1.0 */ public interface EquipmentDockingMapper extends SuperMapper<EquipmentDocking> { /** * 分页查询列表 * @param page * @param params * @return */ List<EquipmentDocking> findList(Page<EquipmentDocking> page, @Param("p") Map<String, Object> params); /** * 根据EquipmentDocking对象当做查询条件进行查询 * @param * @return EquipmentDocking对象 */ EquipmentDocking findByObject(@Param("p") EquipmentDocking equipmentDocking); } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IEquipmentDockingService.java
New file @@ -0,0 +1,40 @@ package com.kidgrow.oprationcenter.service; import com.kidgrow.common.model.PageResult; import com.kidgrow.common.service.ISuperService; import com.kidgrow.oprationcenter.model.EquipmentDocking; import java.util.Map; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> * @Description: <br> * @Project: 用户中心<br> * @CreateDate: Created in 2020-10-19 11:14:58 <br> * @Author: <a href="4345453@kidgrow.com">liuke</a> * @version 1.0 */ public interface IEquipmentDockingService extends ISuperService<EquipmentDocking> { /** * 列表 * @param params * @return */ PageResult<EquipmentDocking> findList(Map<String, Object> params); /** * 根据EquipmentDocking对象当做查询条件进行查询 * @param equipmentDocking * @return EquipmentDocking对象 */ EquipmentDocking findByObject(EquipmentDocking equipmentDocking); /** * 是否授权 * @param equipmentDocking * @return */ boolean isAuthorize(EquipmentDocking equipmentDocking); } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/EquipmentDockingServiceImpl.java
New file @@ -0,0 +1,74 @@ package com.kidgrow.oprationcenter.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kidgrow.common.model.PageResult; import com.kidgrow.common.service.impl.SuperServiceImpl; import com.kidgrow.oprationcenter.mapper.EquipmentDockingMapper; import com.kidgrow.oprationcenter.model.EquipmentDocking; import com.kidgrow.oprationcenter.service.IEquipmentDockingService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> * @Description: <br> * @Project: 用户中心<br> * @CreateDate: Created in 2020-10-19 11:14:58 <br> * @Author: <a href="4345453@kidgrow.com">liuke</a> * @version 1.0 */ @Slf4j @Service public class EquipmentDockingServiceImpl extends SuperServiceImpl<EquipmentDockingMapper, EquipmentDocking> implements IEquipmentDockingService { /** * 列表 * @param params * @return */ @Override public PageResult<EquipmentDocking> findList(Map<String, Object> params){ Page<EquipmentDocking> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); List<EquipmentDocking> list = baseMapper.findList(page, params); return PageResult.<EquipmentDocking>builder().data(list).code(0).count(page.getTotal()).build(); } /** * 根据EquipmentDocking对象当做查询条件进行查询 * @param equipmentDocking * @return EquipmentDocking */ @Override public EquipmentDocking findByObject(EquipmentDocking equipmentDocking){ return baseMapper.findByObject(equipmentDocking); } /** * 是否授权 * @param equipmentDocking * @return */ @Override public boolean isAuthorize(EquipmentDocking equipmentDocking) { EquipmentDocking byObject = baseMapper.findByObject(equipmentDocking); if(byObject==null){ log.error("没有查到数据"); return false; }else { if (byObject.getIsDel()) { log.error("该设备已经删除"); return false; }else { if (byObject.getEnabled()) { return true; }else { log.error("该设备已禁用"); return false; } } } } } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/EquipmentDockingMapper.xml
New file @@ -0,0 +1,97 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!----> <mapper namespace="com.kidgrow.oprationcenter.mapper.EquipmentDockingMapper"> <!--定义查询列--> <sql id="Column_List"> * </sql> <!--sql查询片段--> <sql id="where"> <where> <!--查询条件自行添加--> is_del=0 <if test="p.id != null and p.id !=''"> and id = #{p.id} </if> <if test="p.hospitalName != null and p.hospitalName !=''"> and hospital_name = #{p.hospitalName} </if> <if test="p.departName != null and p.departName !=''"> and depart_name = #{p.departName} </if> <if test="p.hospitalId != null and p.hospitalId !=''"> and hospital_id = #{p.hospitalId} </if> <if test="p.departId != null and p.departId !=''"> and depart_id = #{p.departId} </if> <if test="p.companyName != null and p.companyName !=''"> and company_name = #{p.companyName} </if> <if test="p.unitType != null and p.unitType !=''"> and unit_type = #{p.unitType} </if> <if test="p.equipmentBrand != null and p.equipmentBrand !=''"> and equipment_brand = #{p.equipmentBrand} </if> <if test="p.machineCode != null and p.machineCode !=''"> and machine_code = #{p.machineCode} </if> <if test="p.outAccesskey != null and p.outAccesskey !=''"> and out_accesskey = #{p.outAccesskey} </if> <if test="p.contactPhone != null and p.contactPhone !=''"> and contact_phone = #{p.contactPhone} </if> <if test="p.contactName != null and p.contactName !=''"> and contact_name = #{p.contactName} </if> <if test="p.remarkComment != null and p.remarkComment !=''"> and remark_comment = #{p.remarkComment} </if> <if test="p.createUserId != null and p.createUserId !=''"> and create_user_id = #{p.createUserId} </if> <if test="p.createUserName != null and p.createUserName !=''"> and create_user_name = #{p.createUserName} </if> <if test="p.createTime != null and p.createTime !=''"> and create_time = #{p.createTime} </if> <if test="p.updateUserId != null and p.updateUserId !=''"> and update_user_id = #{p.updateUserId} </if> <if test="p.updateUserName != null and p.updateUserName !=''"> and update_user_name = #{p.updateUserName} </if> <if test="p.updateTime != null and p.updateTime !=''"> and update_time = #{p.updateTime} </if> <if test="p.enabled != null and p.enabled !=''"> and enabled = #{p.enabled} </if> <if test="p.isDel != null and p.isDel !=''"> and is_del = #{p.isDel} </if> </where> </sql> <!--定义根据-EquipmentDocking当作查询条件返回对象--> <select id="findByObject" resultType="com.kidgrow.oprationcenter.model.EquipmentDocking"> select <include refid="Column_List"/> from equipment_docking <include refid="where"/> order by id desc limit 1 </select> <!--定义根据-EquipmentDocking当作查询条件返回对象集合--> <select id="findList" resultType="com.kidgrow.oprationcenter.model.EquipmentDocking"> select <include refid="Column_List"/> from equipment_docking <include refid="where"/> order by id desc </select> </mapper> kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/EquipmentDockingController.java
New file @@ -0,0 +1,155 @@ package com.kidgrow.oprationcenter.controller; import com.kidgrow.common.controller.BaseController; import com.kidgrow.common.model.PageResult; import com.kidgrow.common.model.ResultBody; import com.kidgrow.common.utils.StringUtils; import com.kidgrow.oprationcenter.model.EquipmentDocking; import com.kidgrow.oprationcenter.service.IEquipmentDockingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.DigestUtils; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> * * @Description: * @Project: 用户中心 * @CreateDate: Created in 2020-10-19 11:14:58 <br> * @Author: <a href="4345453@kidgrow.com">liuke</a> * @version: 1.0 */ @Slf4j @RestController @RequestMapping("/equipmentdocking") @Api(tags = "") public class EquipmentDockingController extends BaseController { @Autowired private IEquipmentDockingService equipmentDockingService; /** * 列表 */ @ApiOperation(value = "查询列表") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"), @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer") }) @GetMapping public PageResult list(@RequestParam Map<String, Object> params) { if (!params.containsKey("page")) { params.put("page", 1); } if (!params.containsKey("limit")) { params.put("limit", 10); } return equipmentDockingService.findList(params); } /** * 查询 */ @ApiOperation(value = "查询") @GetMapping("/{id}") public ResultBody findById(@PathVariable Long id) { EquipmentDocking model = equipmentDockingService.getById(id); return ResultBody.ok().data(model).msg("查询成功"); } /** * 根据EquipmentDocking当做查询条件进行查询 */ @ApiOperation(value = "根据EquipmentDocking当做查询条件进行查询") @PostMapping("/query") public ResultBody findByObject(@RequestBody EquipmentDocking equipmentDocking) { EquipmentDocking model = equipmentDockingService.findByObject(equipmentDocking); return ResultBody.ok().data(model).msg("查询成功"); } /** * 新增or更新 */ @ApiOperation(value = "保存") @PostMapping public ResultBody save(@Valid @RequestBody EquipmentDocking equipmentDocking, BindingResult bindingResult) { List<String> errMsg = new ArrayList<>(); if (bindingResult.hasErrors()) { for (ObjectError error : bindingResult.getAllErrors()) { errMsg.add(error.getDefaultMessage()); } return ResultBody.failed().msg(errMsg.toString()); } else { boolean v = false; String md5Password = DigestUtils.md5DigestAsHex(("" + equipmentDocking.getHospitalId() + equipmentDocking.getDepartId() + equipmentDocking.getMachineCode()).getBytes()); equipmentDocking.setOutAccesskey(md5Password); v = equipmentDockingService.saveOrUpdate(equipmentDocking); if (v) { return ResultBody.ok().data(equipmentDocking).msg("保存成功"); } else { return ResultBody.failed().msg("保存失败"); } } } /** * 更新状态 */ @ApiOperation(value = "更新状态") @PostMapping("update") public ResultBody update(@RequestBody EquipmentDocking equipmentDocking) { boolean v = equipmentDockingService.saveOrUpdate(equipmentDocking); if (v) { return ResultBody.ok(); } else { return ResultBody.failed().data("更新失败"); } } /** * 删除 */ @ApiOperation(value = "删除") @DeleteMapping("/{id}") public ResultBody delete(@PathVariable Long id) { boolean v = equipmentDockingService.removeById(id); if (v) { return ResultBody.ok().msg("删除成功"); } else { return ResultBody.failed().msg("删除失败"); } } /** * 是否授权 * * @param equipmentDocking * @return */ @PostMapping("isAuthorize") public Boolean isAuthorize(@RequestBody EquipmentDocking equipmentDocking) { if (StringUtils.isBlank(equipmentDocking.getMachineCode())) { log.error("请输入机器码"); return false; } if (StringUtils.isBlank(equipmentDocking.getOutAccesskey())) { log.error("请输入授权秘钥"); return false; } return equipmentDockingService.isAuthorize(equipmentDocking); } } kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
@@ -92,6 +92,7 @@ - product_order_record - saas_client_pay - pay_manager - equipment_docking ignoreSqls: - com.kidgrow.usercenter.mapper.SysRoleMapper.findAll - com.kidgrow.oprationcenter.mapper.ConsumptionRecordMapper.findDetailList @@ -106,7 +107,8 @@ mchID: 1386873502 key: GSFcX6WdgRTAS6154EW14WE3SGBSER49 # certPath: D:\develop\chengxu\houtai\3cc.txt # 从微信商户平台下载的安全证书存放的路径、我放在resources下面,切记一定要看看target目录下的class文件下有没有打包apiclient_cert.p12文件 payNotifyUrl: http://open.zuul.kidgrow.cloud/api-opration/wxController/callback # 微信支付成功的异步通知接口 # payNotifyUrl: http://open.zuul.kidgrow.cloud/api-opration/wxController/callback # 微信支付成功的异步通知接口 payNotifyUrl: ${kidgrow.pay.wxpay.payNotifyUrl} # 微信支付成功的异步通知接口 domain: https://api.mch.weixin.qq.com #支付宝app支付 alipay: @@ -115,8 +117,10 @@ format: JSON charset: utf-8 signType: RSA2 returnUrl: http://open.zuul.kidgrow.cloud/api-opration/alipay/return notifyUrl: http://open.zuul.kidgrow.cloud/api-opration/alipay/notify # returnUrl: http://open.zuul.kidgrow.cloud/api-opration/alipay/return # notifyUrl: http://open.zuul.kidgrow.cloud/api-opration/alipay/notify returnUrl: ${kidgrow.pay.alipay.returnUrl} notifyUrl: ${kidgrow.pay.alipay.notifyUrl} app-private-key: MIIEowIBAAKCAQEA9wDq+cxVvN3q3sUdqku/vHGwddzj5a7Re1ixbDZUPX/8CLvMTPZo8qJ0j14HxnjgVMCX3Wo1u5L4zPlqXzW5UVhPuVUnr5VToRGrOspOZBfY81gj/fJGmF2Mln0XlSqeoPRAS9SGEdEa9S87mAX3BjtyZhU2a7gxnd1/ca2QJxwgMXLX00MJl3ZrpngVFYXR/s16MV87FVq+Gfhk8tTPT25PVfufUmS7RRbiZriirNQPOYgCKQ4mi03oAGXTZGS2I3V59iph2ui89IJm4iS11t4RLqQf8Yyr+Z0rTaIfqJPQ9QMaJdl1VRaFU2jGToGIWpVe7eP/mWfG4ZBYlrVvhQIDAQABAoIBADVgG2bTgwuHIQP2sIxmRg6gurMdgpnVhysSZXSu4NFRYNM6UdGnxdH4zRtWBHQdFsz5uVd9ZhMclWsl0pi0cVFktgWkoyjMKgA6YzgXE42JobYkK9LqkdrHDGRQr9HqHdFGNsasLDSZbSvigww87b6JBhWNK+9nJEGq5alZCjeI7bTK8YlFmOlgRJ6oe1tzmYOpQMDwsZoWFx9xN9+SHursZ8bQymTRLcfZIt6vMK8rv0L/MIhxCC51hxT88gyT5Pm4087c30qbS5IlpeKqPC0TkVuvRgASZ348dP09Lf6KpAf06cMixeu0SSCGVOGyqCDgI/yn2H9XCk6++HyyCNkCgYEA/fNmCoBMSbhayyAU9TF/UPF9Msyy465JuHp1yKYJaM1L/a2C3YG7gjO8tvVxq64qFH62b4XU+Qq/arIHHdiGObzLN101oRtAqCMG8IWgM1Rd66HvEwyOnroqZarSnSmg1Uwktz9qFdmRGhGB4ePGfDWQ6yxm7l9H/U/VHalFOF8CgYEA+P8rBSP7AyKDGOXiPRFFkuOK++bxWQ0yC0V7m/XYsihqEfhunMPoHlUDpHM6d571ftHXCljdQ+0hK7xGXAD4Tqyf9wsK+/oRwOrEdHCLU9k8iFVYbo5KO/IwqXpsrlrI2ragPod8xETIGzxqm9IsSDQNXcvnViZI09cxyj6OcpsCgYArK6ZsIJVXbuyYXVLSv+BZ3UOgUCYVCHrlzoOZYYh19Xh2nnmBuF0s7CinnZ/+RHRI2aWf3ctvrsENnUgSbc2boRmWxtSoF57tNk8mskCimTQCK5wdy+Ou3gz5DYoSR5Jc0D3pnPEm176QBOvkf7ktQlnpcLnqye3OBTVAfpcS1wKBgQCOm55pCE14YyjQdsFXlm/RjC8KzR9HkI4r9HSyQ2ED0K/HcRDxCicEUE6QvkorPsh+BPLzgyffAo4v/VoS0Z9ld+r6U8HLxVKrugogYmD5+f54WuEWGLqdkL2cI3jhdy94TIaEqZak1nwBVV39tqcUB3PsV588MRse8S4cFi4BpwKBgEZTMUcEQ2pHIrcVZXHSp5GTBXY70J5xCh+uO5F4iBhmVWaqOECi1/c6Nz3SYyizsIspZG3gzYvEoe7KVaMmkCWlRW0NcXMuN0KnE70J4YoFw3WhWKNh0zQAL57lMAQkPoZVusYePCQyct9j7EboNoPgyB2CvKU152FJkkl1c4XB alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlxD+qCFXTnJrwbGgKPNEcZqrPpHnNoJDTdP+zhWI7ABv/rASfOhWZi56vyQhKldgbc01VBFa0myTpECHlPMZn32DGNg8DIxuV+LEIT+l2Lqjn4wQtX3zUNPHR3bTZlMEVw9JYQZI+XR2i4ZWoOszo6ahAO9SxEuNUlsCSBDMEIPaEjGJmu57X+os8TRlgj8Mxo90JVqSZlRq7eFc7wVTMe5e9p9ITctdiB+utkO0/rSh4T+VUaV1zNk8/n5jh0xDSXL4QdEe832Naeu67Y6w6vezkvF9GUwEmfJqs6PH3sF1gOKgjakbFXauEOJXnXEdyMmOKhG93jT+9GtvV/ywmwIDAQAB kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/service/impl/SuperServiceImpl.java
@@ -105,8 +105,9 @@ if (null != entity) { Class<?> cls = entity.getClass(); TableInfo tableInfo = TableInfoHelper.getTableInfo(cls); if (null != tableInfo && StringUtils.isNotEmpty(tableInfo.getKeyProperty())) { Object idVal = ReflectionKit.getMethodValue(cls, entity, tableInfo.getKeyProperty()); if (null != tableInfo && StringUtils.isNotBlank(tableInfo.getKeyProperty())) { // Object idVal = ReflectionKit.getMethodValue(cls, entity, tableInfo.getKeyProperty()); Object idVal = ReflectionKit.getFieldValue(entity,tableInfo.getKeyProperty()); if (StringUtils.checkValNull(idVal) || Objects.isNull(getById((Serializable) idVal))) { if (StrUtil.isEmpty(msg)) { msg = "已存在"; kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisConstant.java
@@ -10,4 +10,6 @@ String USER_ORGANIZATION="USER_ORGANIZATION"; String ORGANIZATION="ORGANIZATION"; String EQUIPMENT_DOCKING_TIME="EquipmentDockingTime"; } kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/resources/application.yml
@@ -231,6 +231,8 @@ - /api-opration/wxController/callback - /api-opration/alipay/notify - /api-opration/alipay/return - /api-record/DiagnosticUnfinishedFegin/equipmentList - /api-record/DiagnosticUnfinishedFegin/equipmentUpload # - /api-user/syshospital/findAllByMap # - /api-user/sysdictionaries/findAll # - /api-user/sysdepartment/findListByHospitalId @@ -267,7 +269,9 @@ /api-evaluation/evaluationxrayinfo/checkQRCode, /api-opration/wxController/callback, /api-opration/alipay/return, /api-opration/alipay/notify /api-opration/alipay/notify, /api-record/DiagnosticUnfinishedFegin/equipmentList, /api-record/DiagnosticUnfinishedFegin/equipmentUpload # /api-user/syshospital/findAllByMap, # /api-user/sysdictionaries/findAll, # /api-user/sysdepartment/findListByHospitalId kidgrow-uaa/kidgrow-uaa-server/src/main/resources/application.yml
@@ -56,7 +56,7 @@ security: code: # 忽略验证码的应用编号 ignoreClientCode: app,hospital,webApp,readxapp ignoreClientCode: app,hospital,readxapp encrypt: key-store: kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/equipmentDocking.html
New file @@ -0,0 +1,352 @@ <div class="layui-card"> <div class="layui-card-header"> <h2 class="header-title">第三方设备对接</h2> <span class="layui-breadcrumb pull-right"> <a href="#!home_console">首页</a> <a><cite>第三方设备对接</cite></a> </span> </div> <div class="layui-card-body"> <div class="layui-form toolbar"> <input name="hospitalName" id="hospitalName-serch" placeholder="按医院名称" type="text" class="layui-input search-input" maxlength="50" autocomplete="off" />  <input type="hidden" id="hospitalId-serch" /> <select id="departmentId-serch" lay-filter="department_clients"> <option value="">--科室--</option> </select>  <button id="app-btn-search" class="layui-btn icon-btn permissions" permissions="equipmentDocking-list"><i class="layui-icon"></i>搜索</button> <button id="docto-templete-btn-add" class="layui-btn icon-btn permissions" permissions="equipmentDocking-edit"><i class="layui-icon"></i>添加</button> </div> <!-- 数据表格 --> <table class="layui-table permissions" permissions="equipmentDocking-list" id="app-table" lay-filter="app-table"></table> </div> </div> <!-- 表格操作列 --> <script type="text/html" id="equipment-docking-bar"> <a class="layui-btn layui-btn-primary layui-btn-xs permissions" permissions="equipmentDocking-edit" lay-event="edit">修改</a> <a class="layui-btn layui-btn-xs permissions" permissions="equipmentDocking-del" lay-event="del">删除</a> </script> <!-- 表格状态列 --> <script type="text/html" id="equipment-docking-state"> <input type="checkbox" lay-filter="equipment-docking-state" value="{{d.id}}" lay-skin="switch" lay-text="正常|锁定" {{d.enabled==true?'checked':''}} class="permissions" permissions="equipmentDocking-enable"/> </script> <!-- 表单弹窗 --> <script type="text/html" id="app-model"> <form id="app-form" lay-filter="app-form" class="layui-form model-form"> <input name="id" type="hidden"/> <div class="layui-form-item"> <label class="layui-form-label" style="width: 75px;">所在医院</label> <div class="layui-input-block" style="width: 150px;"> <input name="hospitalName" id="hospitalName" placeholder="请输入医院名称" type="text" class="layui-input" maxlength="50" lay-verify="required" required style="width: 150px;" /> <input type="hidden" name="hospitalId" id="hospitalId" /> <input type="hidden" name="id" id="id" /> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">科室</label> <div class="layui-input-block" style="width: 150px;"> <input name="departName" id="departmentName" placeholder="请选择科室" type="hidden" class="layui-input" maxlength="20" /> <select id="departmentId" name="departId" lay-filter="departmentId" placeholder="请选择科室" lay-verify="required" required> <option value="">-请选择科室-</option> </select> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">设备厂家名称</label> <div class="layui-input-block"> <input name="companyName" lay-verify="required" required type="text" class="layui-input" /> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">设备型号</label> <div class="layui-input-block"> <input name="unitType" lay-verify="required" required type="text" class="layui-input" /> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">设备品牌</label> <div class="layui-input-block"> <input name="equipmentBrand" lay-verify="required" required type="text" class="layui-input" /> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">设备电脑机器码</label> <div class="layui-input-block"> <input name="machineCode" lay-verify="required" required type="text" class="layui-input" /> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">安装日期</label> <div class="layui-input-block"> <input type="text" name="createTime" class="layui-input search-input" lay-verify="required" required id="startTime" placeholder="开始时间"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">安装联系人</label> <div class="layui-input-block"> <input name="contactName" lay-verify="required" required type="text" class="layui-input" /> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">安装联系人电话</label> <div class="layui-input-block"> <input name="contactPhone" lay-verify="required|phone" required type="text" class="layui-input" /> </div> </div> <div class="layui-form-item model-form-footer"> <button class="layui-btn layui-btn-primary" ew-event="closeDialog" type="button">取消</button> <button class="layui-btn" id="sure" lay-filter="equipmentDocking-form-submit" permissions=" equipmentDocking-edit" lay-submit>保存</button> </div> </form> </script> <script> layui.use(['form', 'table', 'laydate', 'util','autocomplete','laydate', 'config', 'admin'], function () { var form = layui.form; var table = layui.table; var config = layui.config; var layer = layui.layer; var util = layui.util; var admin = layui.admin; var autocomplete = layui.autocomplete; var laydate = layui.laydate; //自动完成-医院名称 autocomplete.render({ elem: $('#hospitalName-serch')[0], keywordsName: 'hospitalName', //查询关键字名称 url: config.base_server + 'api-user/syshospital/findByName', template_val: '{{d.hospitalName}}', //选择后文本框显示的数据字段 template_txt: "<div class='layui-table-cell'>{{d.hospitalName}}</div>", //下拉列表模板 onselect: function (resp) { $("#hospitalId-serch").val(resp.id); //重新装载科室 getdepartmentSerch(resp.id); } }); //获取科室 var getdepartmentSerch = function (data) { admin.req('api-user/sysdepartment/findListByHospitalId', { id: data }, function (data) { layer.closeAll('loading'); if (0 === data.code) { department = data.data; $('#departmentId-serch').empty(); if (data.data.length > 0) { $('#departmentName-serch').val(data.data[0].departmentName); $('#departmentId-serch').append(new Option("请选择", "", false, false)); } $.each(data.data, function (index, item) { //往下拉菜单里添加元素 $('#departmentId-serch').append(new Option(item.departmentName, item.id, false, false)); form.render('select', 'app-form'); }) form.render(); } else { layer.msg(data.msg, { icon: 2, time: 2000 }); } }, 'get'); } // 添加按钮点击事件 $('#docto-templete-btn-add').click(function () { showEditModel(undefined, 1); }); //// 刷新 $('#docto-templete-btn-update').click(function () { table.reload('app-table', { where: {} }); }); // 渲染表格 table.render({ elem: '#app-table', url: config.base_server + 'api-opration/equipmentdocking', method: 'GET', headers: { 'Authorization': 'Bearer ' + config.getToken().access_token }, page: true, cols: [[ { field: 'hospitalName',align:'center', width: '10%', title: '医院名称' }, // { field: 'hospitalId',align:'center', width: '10%', title: '医院唯一标识' }, { field: 'departName',align:'center', width: '10%', title: '科室名称' }, // { field: 'departId',align:'center', width: '10%', title: '科室唯一标识' }, { field: 'companyName',align:'center', width: '5%', title: '设备厂家名称' }, { field: 'unitType',align:'center', width: '10%', title: '设备型号' }, { field: 'equipmentBrand',align:'center', width: '5%', title: '设备品牌' }, { field: 'machineCode',align:'center', width: '10%', title: '设备电脑机器码' }, { field: 'createTime',align:'center', width: '10%', title: '安装日期',templet: "<div>{{layui.util.toDateString(d.createTime, 'yyyy/MM/dd')}}</div>" }, { field: 'contactName',align:'center', width: '5%', title: '安装联系人' }, { field: 'contactPhone',align:'center', width: '5%', title: '安装联系人电话' }, { field: 'enabled',align:'center', width: '5%', templet: '#equipment-docking-state', title: '状态'}, { field: 'outAccesskey',align:'center', width: '10%', title: 'AccessKey' }, { field: 'id',align:'center', width: '10%', toolbar: '#equipment-docking-bar', title: '操作',fixed: 'right' }, ]], done: function(res){ permissionsInput(res,config); } }); //获取科室 var getdepartment = function (data) { admin.req('api-user/sysdepartment/findListByHospitalId', { id: data }, function (data) { layer.closeAll('loading'); if (0 === data.code) { department = data.data; $('#departmentId').empty(); if (data.data.length > 0) { $('#departmentName').val(data.data[0].departmentName); } $.each(data.data, function (index, item) { //往下拉菜单里添加元素 $('#departmentId').append(new Option(item.departmentName, item.id, false, false)); form.render('select', 'app-form'); }) form.render(); } else { layer.msg(data.msg, { icon: 2, time: 2000 }); } }, 'get'); } // 工具条点击事件 table.on('tool(app-table)', function (obj) { var data = obj.data; var layEvent = obj.event; if (layEvent === 'edit') { // 查看详情 showEditModel(data, 2); }else if(layEvent === 'del'){ layer.confirm('确定删除此用户吗?', function (i) { layer.close(i); layer.load(2); admin.req('api-opration/equipmentdocking/' + obj.data.id, {}, function (data) { layer.closeAll('loading'); if (data.code == 0) { layer.msg(data.msg, { icon: 1, time: 2000 }); table.reload('app-table', {}); } else { layer.msg(data.msg, { icon: 2, time: 2000 }); } }, 'delete'); }); } }); // 搜索按钮点击事件 $('#app-btn-search').click(function () { var departId = $('#departmentId-serch').val(); var hospitalId = $('#hospitalId-serch').val(); var templeteTitle = $('#templeteTitle').val(); table.reload('app-table', { where: { hospitalId: hospitalId, departId: departId } }); }); // 修改user状态 form.on('switch(equipment-docking-state)', function (obj) { layer.load(2); admin.req('api-opration/equipmentdocking/update', JSON.stringify({ id: obj.elem.value, enabled: obj.elem.checked ? true : false }), function (data) { layer.closeAll('loading'); if (data.code == 0) { layer.msg(data.msg, { icon: 1, time: 2000 }); table.reload('app-table', {}); } else { layer.msg(data.msg, { icon: 2, time: 2000 }); $(obj.elem).prop('checked', !obj.elem.checked); form.render('checkbox'); } }, 'POST'); }); // 表单提交事件 form.on('submit(equipmentDocking-form-submit)', function (data) { layer.load(2); admin.req('api-opration/equipmentdocking', JSON.stringify(data.field), function (data) { layer.closeAll('loading'); if (data.code == 0) { // layer.msg(data.msg, { icon: 1, time: 2000 }); layer.closeAll(); table.reload('app-table', {}); } else { layer.msg(data.msg, { icon: 2, time: 2000 }); } }, "POST"); return false; }); // // 显示编辑弹窗 var showEditModel = function (data, index) { var title = ""; if (index == 1) { title = "新增"; } else if (index == 2) { title = "修改"; } layer.open({ type: 1, title: title, area: '450px', offset: '120px', content: $('#app-model').html(), success: function () { $('#app-form')[0].reset(); $('#app-form').attr('method', 'POST'); if (data) { if(index==1){ $('#sure').hide(); } form.val('app-form', data); console.log(data,"1111111111111") //重新装载科室 getdepartment(data.hospitalId); form.render(); } //自动完成-医院名称 autocomplete.render({ elem: $('#hospitalName')[0], keywordsName: 'hospitalName', //查询关键字名称 url: config.base_server + 'api-user/syshospital/findByName', template_val: '{{d.hospitalName}}', //选择后文本框显示的数据字段 template_txt: "<div class='layui-table-cell'>{{d.hospitalName}}</div>", //下拉列表模板 onselect: function (resp) { $("#hospitalId").val(resp.id); //重新装载科室 getdepartment(resp.id); } }); //执行一个laydate实例 laydate.render({ elem: '#startTime' //指定元素 ,type: 'datetime' }); //新增 和 更新 科室触发的事件 form.on('select(departmentId)', function () { //将部门名称赋值 $('#departmentName').val($(this)[0].innerHTML); }); } }); }; }); </script> kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/saasClientPay.html
@@ -8,8 +8,7 @@ </div> <div class="layui-card-body"> <div class="layui-form toolbar"> <input name="hospitalName" id="hospitalName-seach" placeholder="按医院名称" type="text" class="layui-input search-input" maxlength="50" autocomplete="off" />  <input type="hidden" id="hospitalId" /> <select id="departmentId" lay-filter="department_clients"> <option>--科室--</option> @@ -20,12 +19,14 @@ <div class="layui-col-sm4"> <input type="text" class="layui-input search-input" id="startTime" placeholder="开始时间"> 至 <input type="text" class="layui-input search-input" id="endTime" placeholder="结束时间">   <input name="hospitalName" id="hospitalName-seach" placeholder="按医院名称" type="text" class="layui-input search-input" maxlength="50" autocomplete="off" />  </div> <button id="app-btn-search" class="layui-btn icon-btn permissions" permissions="sysdictionaries-list"><i <button id="app-btn-search" class="layui-btn icon-btn permissions" permissions="saasclientpay-list"><i class="layui-icon"></i>搜索</button> <button id="piliangjiesuan" class="layui-btn icon-btn permissions" permissions="sysdictionaries-edit"><i <button id="piliangjiesuan" class="layui-btn icon-btn permissions" permissions="saasclientpay-edit"><i class="layui-icon"></i>批量结算</button> <button id="export" class="layui-btn icon-btn permissions" permissions="sysdictionaries-edit"><i <button id="export" class="layui-btn icon-btn permissions" permissions="saasclientpay-export"><i class="layui-icon"></i>导出</button> </div> @@ -53,7 +54,7 @@ laydate.render({ elem: '#endTime' //指定元素 }); // permissionsInput(null, config); // 获取应用列表 // layer.load(2); @@ -220,6 +221,7 @@ } }); } //比较日期大小 function compareDate(logintime, logouttime) { var arys1 = new Array(); pom.xml
@@ -51,7 +51,7 @@ <easypoi.version>4.1.0</easypoi.version> <poi.version>4.1.0</poi.version> <druid-starter>1.1.10</druid-starter> <mybatis-plus-boot-starter.version>3.3.1</mybatis-plus-boot-starter.version> <mybatis-plus-boot-starter.version>3.4.0</mybatis-plus-boot-starter.version> <p6spy.version>3.8.6</p6spy.version> <swagger.version>2.9.2</swagger.version> <guava.version>28.1-jre</guava.version>