forked from kidgrow-microservices-platform

bingbing
2020-10-26 34589cd092e0de8cfd704cd59608ed0f36f6093a
Merge branch 'pay_master' into dev
9 files added
10 files modified
986 ■■■■■ changed files
.gitignore 1 ●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-api/src/main/java/com/kidgrow/filecenter/feign/FileService.java 7 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-api/src/main/java/com/kidgrow/filecenter/feign/fallback/FileServiceFallbackFactory.java 5 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/IFileService.java 6 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-biz/src/main/java/com/kidgrow/filecenter/service/impl/AbstractIFileService.java 29 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/src/main/java/com/kidgrow/filecenter/controller/FileController.java 9 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/EquipmentDockingService.java 19 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/feign/fallback/EquipmentDockingServiceFallbackFactory.java 28 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/EquipmentDocking.java 102 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/EquipmentDockingMapper.java 34 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IEquipmentDockingService.java 40 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/EquipmentDockingServiceImpl.java 74 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/EquipmentDockingMapper.xml 97 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/EquipmentDockingController.java 160 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml 1 ●●●● patch | view | raw | blame | history
kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisConstant.java 2 ●●●●● patch | view | raw | blame | history
kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/resources/application.yml 6 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/equipmentDocking.html 352 ●●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/saasClientPay.html 14 ●●●●● patch | view | raw | blame | history
.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
@@ -44,4 +44,10 @@
    ResultBody baseDownLoad(Map<String, Object> map) throws Exception;
    FileInfo byteUplaod(String fileName, InputStream inputStream, int size);
    /**
     * 文件上传 根据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
@@ -336,5 +336,34 @@
        baseMapper.insert(newfileInfo);
        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)
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-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,160 @@
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;
            if(equipmentDocking.getId()==null){
                //hospital_id+depart_id+machine_code进行md5加密生成的32位小写的字符串
                String md5Password = DigestUtils.md5DigestAsHex((""+equipmentDocking.getHospitalId()+equipmentDocking.getDepartId()+equipmentDocking.getMachineCode()).getBytes());
                equipmentDocking.setOutAccesskey(md5Password);
                v = equipmentDockingService.saveOrUpdate(equipmentDocking);
            }else {
                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
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-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" />&emsp;
                    <input type="hidden" id="hospitalId-serch" />
            <select id="departmentId-serch" lay-filter="department_clients">
                <option value="">--科室--</option>
            </select>&emsp;
            <button id="app-btn-search" class="layui-btn icon-btn permissions" permissions="equipmentDocking-list"><i class="layui-icon">&#xe615;</i>搜索</button>
            <button id="docto-templete-btn-add" class="layui-btn icon-btn permissions" permissions="equipmentDocking-edit"><i class="layui-icon">&#xe654;</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" />&emsp;
            <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="结束时间"> &emsp;
                    <input name="hospitalName" id="hospitalName-seach" placeholder="按医院名称" type="text"
                    class="layui-input search-input" maxlength="50" autocomplete="off" />&emsp;
            </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">&#xe615;</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">&#xe654;</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">&#xe654;</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();