forked from kidgrow-microservices-platform

zhaoxiaohao
2020-12-30 d1f6a557ae1a7886aa6a54bd3923b3483db02a68
Merge branch 'master' into dev
3 files added
15 files modified
831 ■■■■ changed files
kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/Dockerfile 4 ●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/DataNeedMapper.xml 6 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/Dockerfile 4 ●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/model/SysDepartment.java 11 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/vo/HospitalListVo.java 9 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysHospitalMapper.xml 2 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/Dockerfile 4 ●●● patch | view | raw | blame | history
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/ExcelUtils.java 290 ●●●●● patch | view | raw | blame | history
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/excelModel/BackPatientOrderParam.java 20 ●●●●● patch | view | raw | blame | history
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/excelModel/ExportField.java 30 ●●●●● patch | view | raw | blame | history
kidgrow-springcloud/kidgrow-springcloud-zuul/Dockerfile 4 ●●● patch | view | raw | blame | history
kidgrow-uaa/kidgrow-uaa-server/Dockerfile 2 ●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/apiUrl.js 2 ●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/dataNeed.html 37 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html 12 ●●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_form_base.html 30 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html 353 ●●●●● patch | view | raw | blame | history
pom.xml 11 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-filecenter/kidgrow-filecenter-server/Dockerfile
@@ -2,6 +2,8 @@
FROM openjdk:8-jdk-alpine
# 作者(可选)
MAINTAINER kidgrow
##时区
RUN echo "Asia/Shanghai" > /etc/timezone
# 删除无用组件 优化容器体积(可选)
RUN rm -rf /var/lib/apt/lists/*
# 创建jar包存放目录
@@ -11,4 +13,4 @@
# copy当前工程jar包至容器内
COPY ${JAR_FILE} /usr/local/kidgrow/app.jar
# 运行jar包
ENTRYPOINT ["java","-Xms64m","-Xmx256m","-jar","/usr/local/kidgrow/app.jar"]
ENTRYPOINT ["java","-Xms64m","-Xmx1000m","-jar","/usr/local/kidgrow/app.jar"]
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/DataNeedMapper.xml
@@ -74,6 +74,12 @@
            <if test="p.createTime != null and p.createTime !=''">
                and create_time = #{p.createTime}
            </if>
            <if test="p.createTimeBegin != null and p.createTimeBegin !=''">
                and create_time &gt;=  #{p.createTimeBegin}
            </if>
            <if test="p.createTimeEnd != null and p.createTimeEnd !=''">
                and create_time &lt;= #{p.createTimeEnd}
            </if>
            <if test="p.updateTime != null and p.updateTime !=''">
                and update_time = #{p.updateTime}
            </if>
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/Dockerfile
@@ -2,6 +2,8 @@
FROM openjdk:8-jdk-alpine
# 作者(可选)
MAINTAINER kidgrow
##时区
RUN echo "Asia/Shanghai" > /etc/timezone
# 删除无用组件 优化容器体积(可选)
RUN rm -rf /var/lib/apt/lists/*
# 创建jar包存放目录
@@ -11,4 +13,4 @@
# copy当前工程jar包至容器内
COPY ${JAR_FILE} /usr/local/kidgrow/app.jar
# 运行jar包
ENTRYPOINT ["java","-Xms64m","-Xmx400m","-jar","/usr/local/kidgrow/app.jar"]
ENTRYPOINT ["java","-Xms64m","-Xmx600m","-jar","/usr/local/kidgrow/app.jar"]
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/model/SysDepartment.java
@@ -102,4 +102,15 @@
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private Date healthEndTime;
    /**
     * 部门联系人
     */
    private String departmentLink;
    /**
     * 部门联系人
     */
    private String departmentTel;
}
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/vo/HospitalListVo.java
@@ -114,4 +114,13 @@
     * 是否试用,true正式,false试用
     */
    private Boolean OrderType;
    /**
     * 部门联系人
     */
    private String departmentLink;
    /**
     * 部门联系人
     */
    private String departmentTel;
}
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysHospitalMapper.xml
@@ -265,6 +265,8 @@
        DEP.is_del,
        DEP.is_pay,
        DEP.enabled,
        DEP.department_link,
        DEP.department_tel,
        hospitals.*
        FROM
        sys_department DEP
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/Dockerfile
@@ -2,6 +2,8 @@
FROM openjdk:8-jdk-alpine
# 作者(可选)
MAINTAINER kidgrow
##时区
RUN echo "Asia/Shanghai" > /etc/timezone
# 删除无用组件 优化容器体积(可选)
RUN rm -rf /var/lib/apt/lists/*
# 创建jar包存放目录
@@ -11,4 +13,4 @@
# copy当前工程jar包至容器内
COPY ${JAR_FILE} /usr/local/kidgrow/app.jar
# 运行jar包
ENTRYPOINT ["java","-Xms64m","-Xmx400m","-jar","/usr/local/kidgrow/app.jar"]
ENTRYPOINT ["java","-Xms64m","-Xmx600m","-jar","/usr/local/kidgrow/app.jar"]
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/ExcelUtils.java
New file
@@ -0,0 +1,290 @@
package com.kidgrow.common.utils;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import com.google.common.collect.Lists;
import com.kidgrow.common.utils.excelModel.ExportField;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.util.*;
/**
 * @author : heyanfeng
 * create at:  2019-05-27  19:11
 * @description: excel
 */
@Slf4j
public class ExcelUtils {
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response){
        ExportParams exportParams = new ExportParams(title, sheetName);
        exportParams.setCreateHeadRows(isCreateHeader);
        defaultExport(list, pojoClass, fileName, response, exportParams);
    }
    public static void  exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response){
        defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
    }
    public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){
        defaultExport(list, fileName, response);
    }
    public static void exportExcel(String fileName,ExportParams exportParams, List<ExcelExportEntity> entities,List<Map<String, Object>> list,HttpServletResponse response){
        defaultExport(fileName,exportParams,entities,list,response);
    }
    private  static void defaultExport(String fileName,ExportParams exportParams, List<ExcelExportEntity> entities,List<Map<String, Object>> list,HttpServletResponse response ){
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, list);
        if (workbook != null){
        downLoadExcel(fileName, response, workbook);}
    }
    private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) {
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);
        if (workbook != null) {
            downLoadExcel(fileName, response, workbook);
        }
    }
    private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            log.error("excel异常:{}",e.getMessage());
        }
    }
    private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {
        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
        if (workbook != null){
        downLoadExcel(fileName, response, workbook);}
    }
    public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass){
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            File file = new File(filePath);
            list = ExcelImportUtil.importExcel(file, pojoClass, params);
        }catch (NoSuchElementException e){
            throw new IllegalArgumentException("模板不能为空");
        } catch (Exception e) {
            log.error("excel异常:{}",e.getMessage());
        }
        return list;
    }
    public static <T> List<T> importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, Class<T> pojoClass){
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(inputStream, pojoClass, params);
        }catch (NoSuchElementException e){
            throw new IllegalArgumentException("模板不能为空");
        } catch (Exception e) {
            log.error("excel异常:{}",e.getMessage());
        }
        return list;
    }
    public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){
        if (file == null){
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
        }catch (NoSuchElementException e){
            throw new IllegalArgumentException("excel文件不能为空");
        } catch (Exception e) {
            log.error("excel异常:{}",e.getMessage());
        }
        return list;
    }
    /**
     * description: 动态生成excel 列
     * create by heyanfeng at 2019-05-29 18:02
     * @param ef
     * @param entities
     */
    public static void dynamicNewAddExcel(List<ExportField> ef, List<ExcelExportEntity> entities) {
        //单元格的excel 表头
        ef.forEach(item -> {
            //需要合并单元格的表头
            List<ExportField> children = item.getChildren();
            if(!CollectionUtils.isEmpty(children)){
                ExcelExportEntity parent = new ExcelExportEntity(item.getFiledChineseName(), item.getEntityAttrName());
                List<ExcelExportEntity> entitiesChildren = Lists.newArrayList();
                children.forEach(e -> {
                    entitiesChildren.add(new ExcelExportEntity(e.getFiledChineseName(),e.getEntityAttrName(),30));
                });
                parent.setNeedMerge(true);
                parent.setList(entitiesChildren);
                entities.add(parent);
            }else{
                entities.add(new ExcelExportEntity(item.getFiledChineseName(),item.getEntityAttrName(),30));
            }
        });
    }
    /**
     * description: 根据属性名称 获取属性的值
     * create by heyanfeng at 2019-05-29 19:26
     * @return Object
     * @param fieldName
     * @param o
     */
     public static  Object getFieldValueByName(String fieldName,Object o){
        try{
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = o.getClass().getMethod(getter, new Class[] {});
            Object value = method.invoke(o, new Object[]{});
            return  value;
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }
    /**
     * description: 组装excel 数据
     * create by heyanfeng at 2019-05-29 20:30
     * @return  List<Map<String, Object>>
     * @param ef
     * @param statisData
     */
    public static List<Map<String, Object>> dynamicListDataByKey(List<ExportField> ef, List<?> statisData) {
        //最终的数据
        List<Map<String, Object>> datas = new ArrayList<>();
        Map map;
        for (Object t : statisData) {
            map = new HashMap();
            for (int j = 0; j < ef.size(); j++) {
                List<ExportField> children = ef.get(j).getChildren();
                if(!CollectionUtils.isEmpty(children)){
                   //遍历需要合并单元格的子列
                    traversechildren(map, t, children,ef.get(j).getEntityAttrName());
                }else if(StringUtils.isNotBlank(ef.get(j).getEntityAttrName())){
                    map.put(ef.get(j).getEntityAttrName(),getFieldValueByName(ef.get(j).getEntityAttrName(),t));
                }
            }
            datas.add(map);
        }
        return datas;
    }
    /**
    * description: 遍历需要合并单元格的子列
    * create by heyanfeng at 2019-05-31 14:19
    */
    private static void traversechildren(Map map, Object t, List<ExportField> children,String entityAttrName) {
        ArrayList<Map<String,Object>> childrenMaps = Lists.newArrayList();
        Map<String,Object> childrenMap= new HashMap();
        for (int k = 0; k < children.size(); k++) {
            if(StringUtils.isNotBlank(children.get(k).getEntityAttrName())){
                childrenMap.put(children.get(k).getEntityAttrName(),getFieldValueByName(children.get(k).getEntityAttrName(),t));
            }
        }
        childrenMaps.add(childrenMap);
        map.put(entityAttrName,childrenMaps);
    }
    /**
    * description: 组装sql 查询条件
    * create by heyanfeng at 2019-05-30 10:09
    */
//    public static String getExcelSql(List<ExportField> exportField) {
//        String fileds;
//        StringBuilder stringBuilder = new StringBuilder();
//        exportField.forEach(item -> {
//            //如果存在需要合并表头的列 则遍历
//            List<ExportField> children = item.getChildren();
//            if(!CollectionUtils.isEmpty(children)){
//                children.forEach(e -> {
//                    if(StringUtils.isNotBlank(e.getFiled())){
//                        stringBuilder.append(e.getFiled() + GlobalConstant.PIC_SPLIT);
//                    }
//                });
//            }else if(StringUtils.isNotBlank(item.getFiled())){
//                stringBuilder.append(item.getFiled() + GlobalConstant.PIC_SPLIT);
//            }
//        });
//        stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(GlobalConstant.PIC_SPLIT));
//        fileds = stringBuilder.toString();
//        return fileds;
//    }
    /**
     * description: 组装sql 查询条件
     * create by heyanfeng at 2019-05-30 10:09
     */
//    public static String getGroupBySql(List<ExportField> exportField) {
//        String fileds;
//        //是否加入 group by
//        Boolean[] flag = {false};
//        StringBuilder stringBuilder = new StringBuilder();
//        exportField.forEach(item -> {
//            if(item.getGroupBy() == null && StringUtils.isNotBlank(item.getFiled())){
//                stringBuilder.append(item.getFiled() + GlobalConstant.PIC_SPLIT);
//            }else if(item.getGroupBy() != null  && item.getGroupBy() == YESNOEnum.YES.getValue()){
//                flag[0] = true;
//            }
//        });
//        stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(GlobalConstant.PIC_SPLIT));
//        fileds =  stringBuilder.toString();
//        if (flag[0]){
//            fileds =   " group by " + fileds;
//            return  fileds;
//        }
//        return "";
//    }
    /**
    * description: 检查导出字段是否为空
    * create by heyanfeng at 2019-05-30 10:10
    */
    public  static void checkExportField( List<ExportField> exportField) {
        if(CollectionUtils.isEmpty(exportField)){
            throw new IllegalArgumentException("导出的字段不能为空");
        }
    }
    /**
    * description: 动态导出生成excel
    * create by heyanfeng at 2019-05-30 10:37
    */
    public static void DynamicExcel(String fileName, String title,String sheet,List<ExportField> exportField, HttpServletResponse response, List<?> list) {
        //生成动态列
        List<ExcelExportEntity> entities = Lists.newArrayList();
        ExcelUtils.dynamicNewAddExcel(exportField, entities);
        //组装数据entities
        List<Map<String, Object>> maps = ExcelUtils.dynamicListDataByKey(exportField, list);
        ExcelUtils.exportExcel(fileName,new ExportParams(title, sheet),entities,maps,response);
    }
}
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/excelModel/BackPatientOrderParam.java
New file
@@ -0,0 +1,20 @@
package com.kidgrow.common.utils.excelModel;
//import io.swagger.annotations.ApiModel;
//import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @program family_dr_api
 * @description: 管理后台患者订单
 * @author: luqiang
 * @create: 2019/05/24 19:14
 */
//@ApiModel(value = "管理后台患者订单")
@Data
public class BackPatientOrderParam {
//    @ApiModelProperty("导出字段,逗号分割")
    private List<ExportField> exportField;
}
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/excelModel/ExportField.java
New file
@@ -0,0 +1,30 @@
package com.kidgrow.common.utils.excelModel;
import lombok.Data;
import java.util.List;
/**
 * @author : heyanfeng
 * create at:  2019-05-27  22:00
 * @description:
 */
//@ApiModel(value = "管理后台患者订单导出的字段")
@Data
public class ExportField {
//    @ApiModelProperty("实体映射的字段")
    private String entityAttrName;
//    @ApiModelProperty("导出字段,中文描述")
    private String filedChineseName;
//    @ApiModelProperty("组装sql 字段")
    private String filed;
//    @ApiModelProperty("sql-group-by去除字段:0 否 1是")
    private Integer groupBy;
//    @ApiModelProperty("合并单元格")
    private List<ExportField>  children;
}
kidgrow-springcloud/kidgrow-springcloud-zuul/Dockerfile
@@ -2,6 +2,8 @@
FROM openjdk:8-jdk-alpine
# 作者(可选)
MAINTAINER kidgrow
##时区
RUN echo "Asia/Shanghai" > /etc/timezone
# 删除无用组件 优化容器体积(可选)
RUN rm -rf /var/lib/apt/lists/*
# 创建jar包存放目录
@@ -13,4 +15,4 @@
# 接收指定内存
ENV JAVA_OPTS=$JAVA_OPTS
# 运行jar包
ENTRYPOINT ["java","-Xms64m","-Xmx256m","-jar","/usr/local/kidgrow/app.jar"]
ENTRYPOINT ["java","-Xms64m","-Xmx1000m","-jar","/usr/local/kidgrow/app.jar"]
kidgrow-uaa/kidgrow-uaa-server/Dockerfile
@@ -89,4 +89,4 @@
# copy当前工程jar包至容器内
COPY ${JAR_FILE} /usr/local/kidgrow/app.jar
# 运行jar包
ENTRYPOINT ["java","-Xms64m","-Xmx256m","-jar","/usr/local/kidgrow/app.jar"]
ENTRYPOINT ["java","-Xms64m","-Xmx600m","-jar","/usr/local/kidgrow/app.jar"]
kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/apiUrl.js
@@ -1,7 +1,7 @@
 var my_api_server_url = 'http://127.0.0.1:8888/';
// var my_api_server_url = 'http://192.168.2.240:8888/';
// var my_api_server_url = 'http://open.zuul.kidgrow.cloud/';
 // var my_api_server_url = 'zuul.kidgrow.cloud/';
//  var my_api_server_url = 'https://zuul.kidgrow.cloud/';
//var my_api_server_url = 'https://zuul.kidgrow.cloud/';
if(my_api_server_url.indexOf("http")<0)
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/dataNeed.html
@@ -126,10 +126,30 @@
        var laydate = layui.laydate;
        //执行一个laydate实例
        laydate.render({
            elem: '#test1' //指定元素
            elem: '#test1', //指定元素
            done: function (value, date, endDate) {
                var startDate = new Date(value).getTime();
                var endTime = new Date($('#test2').val()).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#test1').val($('#test2').val());
                } else {
                    $('#custom_beginTime').val($("#test1").val())
                }
            }
        });
        laydate.render({
            elem: '#test2' //指定元素
            elem: '#test2', //指定元素
            done: function (value, date, endDate) {
                var startDate = new Date($('#test1').val()).getTime();
                var endTime = new Date(value).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#test2').val($('#test1').val());
                } else {
                    $('#custom_endTime').val($("#test2").val())
                }
            }
        });
        // 渲染表格
@@ -148,7 +168,8 @@
                { field: 'needType',align:'center', width: 100, title: '数据类型', templet: function (d) { if (d.needType == 1) { return '筛查' } else { return '就诊' } } },// 0就诊数据 1筛查
                { field: 'needTags',align:'center', width: 100, align: 'center', toolbar: '#app-table-bar', title: '需求标签' },
                { field: 'enabled',align:'center', width: 200, toolbar: '#app-table-bar1', title: '处理状态', },
                { field: 'downTime',align:'center', width: 250, title: '下载时间', templet: "<div>{{layui.util.toDateString(d.downTime, 'yyyy-MM-dd HH:mm')}}</div>" }
                { field: 'downTime',align:'center', width: 250, title: '下载时间', templet: "<div>{{layui.util.toDateString(d.downTime, 'yyyy-MM-dd HH:mm')}}</div>" },
                { field: 'creatTime',align:'center', width: 250, title: '创建时间', templet: "<div>{{layui.util.toDateString(d.creatTime, 'yyyy-MM-dd')}}</div>" }
            ]],done:function(res){
                permissionsInput(res,config);
            }
@@ -212,17 +233,17 @@
        // 搜索按钮点击事件
        $('#app-btn-search').click(function () {
            var key = $('#app-edit-search').val();
            var needBegintime = $('#test1').val();
            var needEndtime = $('#test2').val();
            if (needBegintime != null && needEndtime != null) {
                var flag = compareDate(needBegintime, needEndtime);
            var createTimeBegin = $('#test1').val();
            var createTimeEnd = $('#test2').val();
            if (createTimeBegin != null && createTimeEnd != null) {
                var flag = compareDate(createTimeBegin, createTimeEnd);
                if (!flag) {
                    layer.msg('结束时间不得小于开始时间');
                    return;
                }
            }
            table.reload('app-table', { where: { doctorName: key, needBegintime: needBegintime, needEndtime: needEndtime },page: {curr: 1  }  });
            table.reload('app-table', { where: { doctorName: key, createTimeBegin: createTimeBegin, createTimeEnd: createTimeEnd },page: {curr: 1  }  });
        });
        //比较日期大小
        function compareDate(logintime, logouttime) {
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
@@ -106,7 +106,7 @@
                    },
                    {
                        field: 'hospitalLink',
                        width: "6%",
                        width: "7%",
                        title: '联系人'
                    },
                    {
@@ -115,6 +115,16 @@
                        title: '联系方式'
                    },
                    {
                        field: 'departmentLink',
                        width: "6%",
                        title: '科室联系人'
                    },
                    {
                        field: 'departmentTel',
                        width: "8%",
                        title: '科室联系方式'
                    },
                    {
                        field: 'orderType', width: 80,  title: '状态', templet: function (d) {
                            if(d.orderType==null){
                                return "";
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_form_base.html
@@ -19,6 +19,22 @@
    </div>
    <div class="layui-form-item">
        <div class="layui-row">
            <div class="layui-col-sm5">
                <label class="layui-form-label">医院联系人</label>
                <div class="layui-input-block">
                    <input name="hospitalLink" type="text" class="layui-input" maxlength="20" style="width: 200px;" />
                </div>
            </div>
            <div class="layui-col-sm5">
                <label class="layui-form-label">医院电话</label>
                <div class="layui-input-block">
                    <input name="hospitalTel" id="hospitalTel" type="text" class="layui-input" maxlength="20" />
                </div>
            </div>
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-row">
            <div class="layui-col-sm4">
                <label class="layui-form-label">科室名称</label>
                <div class="layui-input-block">
@@ -27,15 +43,15 @@
                    &emsp;</div>
            </div>
            <div class="layui-col-sm3">
                <label class="layui-form-label">联系电话</label>
                <label class="layui-form-label">科室电话</label>
                <div class="layui-input-block">
                    <input name="hospitalTel" id="hospitalTel" type="text" class="layui-input" maxlength="20" />
                    <input name="departmentTel" id="departmentTel" type="text" class="layui-input" maxlength="20" />
                </div>
            </div>
            <div class="layui-col-sm3">
                <label class="layui-form-label">联系人</label>
                <label class="layui-form-label">科室联系人</label>
                <div class="layui-input-block">
                    <input name="hospitalLink" type="text" class="layui-input" maxlength="20" style="width: 200px;" />
                    <input name="departmentLink" id="departmentLink" type="text" class="layui-input" maxlength="20" style="width: 200px;" />
                </div>
            </div>
        </div>
@@ -343,7 +359,9 @@
                            saleUserId: '' + $("#saleUserName").val(),
                            saleUserName: $("#saleUserName option:selected").text(),
                            saleUserTel: $("#saleUserTel").val(),
                            accountsCount: $("#accountsCount").val()
                            accountsCount: $("#accountsCount").val(),
                            departmentTel: $("#departmentTel").val(),
                            departmentLink: $("#departmentLink").val(),
                        };
                        admin.req('api-user/sysdepartment/'+data.data.id, JSON.stringify(departmentData),
                            function (data) {
@@ -469,6 +487,8 @@
                                        $("#accountsCount").val(departData[0]
                                            .accountsCount);
                                        $('#saleUserName').val(departData[0].saleUserId);
                                        $('#departmentLink').val(departData[0].departmentLink);
                                        $('#departmentTel').val(departData[0].departmentTel);
                                        if (hosIdForEdit != "") {
                                            $("#serverUserTel").val(departData[0]
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html
@@ -80,12 +80,12 @@
                        <div class="layui-row">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">当前软件服务周期:</label>
                                <div class="layui-input-block" >
                                <div class="layui-input-block">
                                    <input autocomplete="off" name="contractBeginTime_not" disabled
                                        id="contractBeginTime_not" type="text" placeholder="请输开始时间" class="layui-input"
                                        maxlength="50" readonly
                                        style="border: none; display: inline-block;width: 30%;" />
                                       <span id="contractBeginTime_not_heng"> 至 </span>
                                    <span id="contractBeginTime_not_heng"> 至 </span>
                                    <input autocomplete="off" name="contractEndTime_not" disabled
                                        id="contractEndTime_not" type="text" placeholder="请输入结束时间" class="layui-input"
                                        maxlength="50" readonly
@@ -137,6 +137,17 @@
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">签订日期</label>
                                <div class="layui-input-block">
                                    <input autocomplete="off" name="contractTime" id="contractTime" type="text"
                                        class="layui-input" maxlength="50" lay-verify="required" style="display: inline-block;width: 40%;" required />
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
@@ -169,13 +180,14 @@
                                <label class="layui-form-label">读片充值量:</label>
                                <div class="layui-input-inline">
                                    <input autocomplete="off" id="custom_ailightCount"
                                        onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text"
                                        onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text"
                                        class="layui-input" maxlength="50" />
                                </div>
                            </div>
                            <div class="layui-col-sm6">
                                <div class="layui-input-inline">
                                    <input type="checkbox" id="custom_isShare" name="gongxiang" value="1" lay-skin="primary" title="是否共享" />
                                    <input type="checkbox" id="custom_isShare" name="gongxiang" value="1"
                                        lay-skin="primary" title="是否共享" />
                                </div>
                            </div>
                        </div>
@@ -184,8 +196,8 @@
                        <div class="layui-row">
                            <div class="layui-col-sm12">
                                <div class="layui-input-inline" style="width: 160px;text-align: right;">
                                    <input type="checkbox" id="termType" lay-skin="primary" name="termType" value="true" checked
                                        title="期限限制" />
                                    <input type="checkbox" id="termType" lay-skin="primary" name="termType" value="true"
                                        checked title="期限限制" />
                                </div>
                                <div class="layui-col-sm4" style="margin-right: 30px;">
                                    <input autocomplete="off" id="custom_beginTime" type="text" placeholder="请输开始时间"
@@ -262,7 +274,7 @@
        //充值进行中
        var isRun = false;
        //执行一个laydate实例
        var contractBeginTime= laydate.render({
        var contractBeginTime = laydate.render({
            elem: '#contractBeginTime', //指定元素
            done: function (value, date, endDate) {
                var startDate = new Date(value).getTime();
@@ -270,11 +282,11 @@
                if (endTime <= startDate) {
                    layer.msg('结束时间不能小于或等于开始时间');
                    var end = new Date($('#contractEndTime').val())
                    end.setDate(end.getDate()-1)
                    end.setDate(end.getDate() - 1)
                    $('#contractBeginTime').val(util.toDateString(end, "yyyy-MM-dd"));
                } else {
                    var flag=termTypeTime();
                    if(!false){
                    var flag = termTypeTime();
                    if (!flag) {
                        return false;
                    }
                    $('#custom_beginTime').val($("#contractBeginTime").val())
@@ -298,15 +310,33 @@
                if (endTime <= startDate) {
                    layer.msg('结束时间不能小于或等于开始时间');
                    var begin = new Date($('#contractBeginTime').val())
                    begin.setDate(begin.getDate()+1)
                    begin.setDate(begin.getDate() + 1)
                    $('#contractEndTime').val(util.toDateString(begin, "yyyy-MM-dd"));
                    // $('#contractEndTime').val($('#contractBeginTime').val());
                } else {
                    var flag=termTypeTime();
                    if(!false){
                    var flag = termTypeTime();
                    if (!flag) {
                        return false;
                    }
                    $('#custom_endTime').val($("#contractEndTime").val())
                    //将自定义的开始时间都限制
                    custom_beginTimes.config.min = {
                        year: layui.util.toDateString(begin, "yyyy"),
                        month: layui.util.toDateString(begin, "MM") - 1,//关键
                        date: layui.util.toDateString(begin, "dd"),
                        hours: layui.util.toDateString(begin, "HH"),
                        minutes: layui.util.toDateString(begin, "mm"),
                        seconds: layui.util.toDateString(begin, "ss")
                    }
                    custom_beginTimes.config.max = {
                        year: date.year,
                        month: date.month - 1,//关键
                        date: date.date,
                        hours: date.hours,
                        minutes: date.minutes,
                        seconds: date.seconds
                    }
                    //将自定义的结束时间都限制
                    custom_endTimes.config.max = {
                        year: date.year,
                        month: date.month - 1,//关键
@@ -328,43 +358,48 @@
                }
            }
        });
        function termTypeTime(){
        function termTypeTime() {
            var listData = admin.getTempData("t_tempProduct");
            var max= "";
            var min= '';
            if(listData!=null&&listData.length>0){
                listData.forEach((element,index) => {
                    if(index==0){
                        max=element.endTime;
                        min=element.beginTime;
                    }else{
            var max = "";
            var min = '';
            if (listData != null && listData.length > 0) {
                listData.forEach((element, index) => {
                    if (index == 0) {
                        max = element.endTime;
                        min = element.beginTime;
                    } else {
                        if (dateUtil.compareDate(min, element.beginTime)) {
                        min=element.beginTime;
                            min = element.beginTime;
                        }
                        if (dateUtil.compareDate( element.endTime,max)) {
                            max=element.endTime;
                        if (dateUtil.compareDate(element.endTime, max)) {
                            max = element.endTime;
                        }
                    }
                });
            } else {
                return true;
            }
            if(dateUtil.compareDate( $('#contractBeginTime').val(),min)){
            if (dateUtil.compareDate($('#contractBeginTime').val(), min)) {
                layer.msg("合同的时间必须小于待充值的开始时间")
                $('#contractBeginTime').val(contractBeginTime_cheng);
                return false;
            }else{
                contractBeginTime_cheng=$('#contractBeginTime').val()
            } else {
                contractBeginTime_cheng = $('#contractBeginTime').val()
            }
            if(dateUtil.compareDate(max, $('#contractEndTime').val())){
            if (dateUtil.compareDate(max, $('#contractEndTime').val())) {
                layer.msg("合同的时间必须小于待充值的开始时间")
                $('#contractEndTime').val(contractEndTime_cheng);
                return false;
            }else{
                contractEndTime_cheng=$('#contractEndTime').val()
            } else {
                contractEndTime_cheng = $('#contractEndTime').val()
            }
        }
        laydate.render({
            elem: '#contractTime' //指定元素
        });
        laydate.render({
            elem: '#contractBeginTime_not' //指定元素
        });
@@ -500,13 +535,13 @@
            admin.req('api-opration/productorderdetail/getContractBeginEndTimeAndNum', { departmentId: departmentId },
                function (data) {
                    if (data.code == 0) {
                        if(data.data.beginTime==undefined){
                        if (data.data.beginTime == undefined) {
                            $("#contractBeginTime_not").hide();
                            $("#contractEndTime_not").hide();
                            $("#contractBeginTime_not_heng").hide();
                            $("#contractNum_not").hide();
                            form.render();
                        }else{
                        } else {
                            $("#contractBeginTime_not").val(layui.util.toDateString(data.data.beginTime, "yyyy-MM-dd"));
                            $("#contractEndTime_not").val(layui.util.toDateString(data.data.endTime, "yyyy-MM-dd"));
                            $("#contractBeginTime").val(layui.util.toDateString(data.data.beginTime, "yyyy-MM-dd"));
@@ -563,7 +598,7 @@
                                minutes: layui.util.toDateString(data.data.endTime, "mm"),
                                seconds: layui.util.toDateString(data.data.endTime, "ss")
                            }
                        $("#contractNum_not").val(data.data.count);
                            $("#contractNum_not").val(data.data.count);
                        }
                    }
@@ -715,7 +750,7 @@
                var listNum = 0;
                if (!strUtil.isEmpty(listData)) {
                    listData.forEach(item => {
                        if(item.proType==1){
                        if (item.proType == 1) {
                            listNum += item.ailightCount;
                        }
                    })
@@ -727,7 +762,7 @@
                } else {
                    contractNum = $("#contractNum").val();
                    //将自定义的读片量赋值
                    $("#custom_ailightCount").val($("#contractNum").val()-listNum);
                    $("#custom_ailightCount").val($("#contractNum").val() - listNum);
                }
            })
            //自定义的确定
@@ -840,14 +875,14 @@
                //将所选的时间不得大于  合同的时间
                var contractBeginTime = $("#contractBeginTime").val();
                var contractEndTime = $("#contractEndTime").val();
                if (!strUtil.isEmpty(data.beginTime)){
                    if (dateUtil.compareDate( contractBeginTime,data.beginTime)) {
                if (!strUtil.isEmpty(data.beginTime)) {
                    if (dateUtil.compareDate(contractBeginTime, data.beginTime)) {
                        layer.msg("开始时间必须大于合同的开始时间!");
                        return false;
                    }
                }
                if (!strUtil.isEmpty(data.endTime)){
                    if (dateUtil.compareDate(data.endTime,contractEndTime)) {
                if (!strUtil.isEmpty(data.endTime)) {
                    if (dateUtil.compareDate(data.endTime, contractEndTime)) {
                        layer.msg("结束时间必须小于合同的结束时间!");
                        return false;
                    }
@@ -871,17 +906,17 @@
            }
        });
        //将自定义的数量重新赋值
        function zidingyiNum(){
        function zidingyiNum() {
            var listData = admin.getTempData("t_tempProduct");
            var listNum = 0;
            if (!strUtil.isEmpty(listData)) {
                listData.forEach(item => {
                    if(item.proType==1){
                    if (item.proType == 1) {
                        listNum += item.ailightCount;
                    }
                })
            }
            $("#custom_ailightCount").val($("#contractNum").val()-listNum);
            $("#custom_ailightCount").val($("#contractNum").val() - listNum);
        }
        function isthenNum(num) {
            if (num <= 0) {
@@ -891,7 +926,7 @@
            var listNum = 0;
            if (!strUtil.isEmpty(listData)) {
                listData.forEach(item => {
                    if(item.proType==1){
                    if (item.proType == 1) {
                        listNum += item.ailightCount;
                    }
                })
@@ -984,120 +1019,122 @@
                layer.load(2);
                var listData = admin.getTempData("t_tempProduct");
                // if (listData != null) {
                    var count= 0;
                    if(listData!=null){
                        listData.forEach(element => {
                            if(element.proType==1){
                                count+=element.ailightCount;
                            }
                        });
                    }
                    if(count!=data.field.contractNum){
                        layer.closeAll('loading');
                        layer.msg("合同读片充值量与套餐充值量不一致")
                        return false;
                    }
                    if (data.field != null) {
                        var len=listData!=null&&listData.length>0 ? listData.length : 0
                        layer.confirm("确定要将待充值列表中的" + len + "个产品充值给当前医院的科室吗?", {
                            btn: ["确定", "返回"]
                        }, function () {
                            isRun = true;
                            data.field.contractBeginTime = data.field.contractBeginTime +
                                " 00:00:00";
                            data.field.contractEndTime = data.field.contractEndTime +
                                " 23:59:59";
                            // data.field.contractTime = data.field.contractTime + " 00:00:00";
                            delete data.field.contractNum_not
                            delete data.field.contractBeginTime_not
                            delete data.field.contractEndTime_not
                            admin.req('api-opration/contract', JSON.stringify(data.field),
                                function (data) {
                                    layer.closeAll('loading');
                                    if (data.code === 0) {
                                        var orderData = data.data;
                                        //处理订单明细数据
                                        var listDetailData = new Array();
                                        $.each(listData, function (index, item) {
                                            var detailData = {
                                                orderId: orderData.id + '',
                                                proId: item.termType == null ? item.id + '' : "0",
                                                proType: item.proType,
                                                proName: item.proName,
                                                isShare: item.isShare,
                                                ailightCount: item.ailightCount != null ? item.ailightCount : 0,
                                                recordCount: item.recordCount != null ? item.recordCount : 0,
                                                termType: item.termType,
                                                proBegintime: item.beginTime != "" ? item.beginTime +
                                                    ' 00:00:00' : "",
                                                proEndtime: item.endTime != "" ? item.endTime +
                                                    ' 00:00:00' : "",
                                                orderAilightCount: item.ailightCount,
                                                orderRecordCount: item.recordCount != null ? item.recordCount : 0,
                                            };
                                            listDetailData.push(detailData);
                                        })
                var count = 0;
                if (listData != null) {
                    listData.forEach(element => {
                        if (element.proType == 1) {
                            count += element.ailightCount;
                        }
                    });
                }
                if (count != data.field.contractNum) {
                    layer.closeAll('loading');
                    layer.msg("合同读片充值量与套餐充值量不一致")
                    return false;
                }
                if (data.field != null) {
                    var len = listData != null && listData.length > 0 ? listData.length : 0
                    layer.confirm("确定要将待充值列表中的" + len + "个产品充值给当前医院的科室吗?", {
                        btn: ["确定", "返回"]
                    }, function () {
                        isRun = true;
                        data.field.contractBeginTime = data.field.contractBeginTime +
                            " 00:00:00";
                        data.field.contractEndTime = data.field.contractEndTime +
                            " 23:59:59";
                        data.field.contractTime = data.field.contractTime +
                            " 00:00:00";
                        // data.field.contractTime = data.field.contractTime + " 00:00:00";
                        delete data.field.contractNum_not
                        delete data.field.contractBeginTime_not
                        delete data.field.contractEndTime_not
                        admin.req('api-opration/contract', JSON.stringify(data.field),
                            function (data) {
                                layer.closeAll('loading');
                                if (data.code === 0) {
                                    var orderData = data.data;
                                    //处理订单明细数据
                                    var listDetailData = new Array();
                                    $.each(listData, function (index, item) {
                                        var detailData = {
                                            orderId: orderData.id + '',
                                            proId: item.termType == null ? item.id + '' : "0",
                                            proType: item.proType,
                                            proName: item.proName,
                                            isShare: item.isShare,
                                            ailightCount: item.ailightCount != null ? item.ailightCount : 0,
                                            recordCount: item.recordCount != null ? item.recordCount : 0,
                                            termType: item.termType,
                                            proBegintime: item.beginTime != "" ? item.beginTime +
                                                ' 00:00:00' : "",
                                            proEndtime: item.endTime != "" ? item.endTime +
                                                ' 00:00:00' : "",
                                            orderAilightCount: item.ailightCount,
                                            orderRecordCount: item.recordCount != null ? item.recordCount : 0,
                                        };
                                        listDetailData.push(detailData);
                                    })
                                        if (listDetailData.length <=0) {
                                            var detailData = {
                                                orderId: orderData.id + '',
                                                proId:  "0",
                                                proType: 1,
                                                proName: "软件服务周期",
                                                isShare: 0,
                                                ailightCount:  0,
                                                recordCount: 0,
                                                proBegintime: $("#contractBeginTime").val()+' 00:00:00' ,
                                                proEndtime: $("#contractEndTime").val()+' 00:00:00' ,
                                                orderAilightCount: 0,
                                                orderRecordCount: 0,
                                            };
                                            listDetailData.push(detailData)
                                        }
                                            //提交订单数据
                                            admin.req(
                                                'api-opration/productorderdetail/saveall',
                                                JSON.stringify(listDetailData),
                                                function (data) {
                                                    isRun = false;
                                                    layer.closeAll('loading');
                                                    if (data.code === 0) {
                                                        //现将临时数据清理
                                                        admin.putTempData(
                                                            "t_tempProduct",
                                                            "");
                                                        layer.msg(data.msg, {
                                                            icon: 1,
                                                            time: 2000
                                                        }, function () {
                                                            admin
                                                                .finishPopupCenter();
                                                        });
                                                    } else {
                                                        layer.msg(data.msg, {
                                                            icon: 2,
                                                            time: 1000
                                                        });
                                                    }
                                                }, 'POST');
                                            // layer.closeAll();
                                            // layer.msg("充值数据成功!");
                                            // isRun = false;
                                    } else {
                                        layer.msg(data.msg, {
                                            icon: 2,
                                            time: 1000
                                        });
                                        isRun = false;
                                    if (listDetailData.length <= 0) {
                                        var detailData = {
                                            orderId: orderData.id + '',
                                            proId: "0",
                                            proType: 1,
                                            proName: "软件服务周期",
                                            isShare: 0,
                                            ailightCount: 0,
                                            recordCount: 0,
                                            proBegintime: $("#contractBeginTime").val() + ' 00:00:00',
                                            proEndtime: $("#contractEndTime").val() + ' 00:00:00',
                                            orderAilightCount: 0,
                                            orderRecordCount: 0,
                                        };
                                        listDetailData.push(detailData)
                                    }
                                }, 'POST');
                        })
                    } else {
                        layer.msg("数据异常!", {
                            icon: 2,
                            time: 1000
                        });
                    }
                                    //提交订单数据
                                    admin.req(
                                        'api-opration/productorderdetail/saveall',
                                        JSON.stringify(listDetailData),
                                        function (data) {
                                            isRun = false;
                                            layer.closeAll('loading');
                                            if (data.code === 0) {
                                                //现将临时数据清理
                                                admin.putTempData(
                                                    "t_tempProduct",
                                                    "");
                                                layer.msg(data.msg, {
                                                    icon: 1,
                                                    time: 2000
                                                }, function () {
                                                    admin
                                                        .finishPopupCenter();
                                                });
                                            } else {
                                                layer.msg(data.msg, {
                                                    icon: 2,
                                                    time: 1000
                                                });
                                            }
                                        }, 'POST');
                                    // layer.closeAll();
                                    // layer.msg("充值数据成功!");
                                    // isRun = false;
                                } else {
                                    layer.msg(data.msg, {
                                        icon: 2,
                                        time: 1000
                                    });
                                    isRun = false;
                                }
                            }, 'POST');
                    })
                } else {
                    layer.msg("数据异常!", {
                        icon: 2,
                        time: 1000
                    });
                }
                // } else {
                //     layer.msg("请先将要充值的产品加入待充值!", {
                //         icon: 2,
pom.xml
@@ -431,11 +431,22 @@
                <artifactId>easypoi-base</artifactId>
                <version>${easypoi.version}</version>
            </dependency>
<!--            <dependency>-->
<!--                <groupId>cn.afterturn</groupId>-->
<!--                <artifactId>easypoi-web</artifactId>-->
<!--                <version>${easypoi.version}</version>-->
<!--            </dependency>-->
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-annotation</artifactId>
                <version>${easypoi.version}</version>
            </dependency>
            <dependency>
                <groupId>org.modelmapper</groupId>
                <artifactId>modelmapper</artifactId>
                <version>${modle-mapper.version}</version>
            </dependency>
            <!-- swagger -->
            <dependency>
                <groupId>io.springfox</groupId>