Pārlūkot izejas kodu

项目4库bug修改

JiangPengLi 4 mēneši atpakaļ
vecāks
revīzija
47a18da41c
15 mainītis faili ar 426 papildinājumiem un 670 dzēšanām
  1. 30 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/enums/NullValueEnum.java
  2. 10 3
      projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/SubInfoMapper.xml
  3. 2 1
      projects-service/src/main/java/com/rtrh/projects/modules/projects/po/SubInfoGxj.java
  4. 6 12
      projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/SubInfoQueryServiceImpl.java
  5. 24 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoBaseDetailVo.java
  6. 5 20
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoCbVO.java
  7. 11 12
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoTcVO.java
  8. 6 20
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoXjVO.java
  9. 8 22
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZjVO.java
  10. 4 2
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZkVO.java
  11. 69 137
      projects/src/main/java/com/rtrh/projects/web/controller/subject/SubInfoExportController.java
  12. 241 432
      projects/src/main/webapp/vmodules/subject/subInfo/editSubInfo.jsp
  13. 2 1
      projects/src/main/webapp/vmodules/subject/subInfo/tz/cb.jsp
  14. 6 6
      projects/src/main/webapp/vmodules/subject/subInfo/tz/cb_sum.jsp
  15. 2 2
      projects/src/main/webapp/vmodules/subject/subInfo/tz/xmzk.jsp

+ 30 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/enums/NullValueEnum.java

@@ -0,0 +1,30 @@
+package com.rtrh.projects.modules.projects.enums;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 空值枚举
+ */
+@Getter
+@AllArgsConstructor
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
+public enum NullValueEnum {
+
+    UNKNOWN_INDUS_KIND("UNKNOWN_INDUS_KIND", "未知行业"),
+    UNKNOWN_CATEGORY("UNKNOWN_CATEGORY", "未知分类");
+
+    private final String code;
+    private final String desc;
+
+    public static NullValueEnum getEnum(String code) {
+        return Arrays.stream(values()).filter(x -> x.code.equals(code)).findFirst().orElse(null);
+    }
+    public static String getMessage(String code) {
+        NullValueEnum anEnum = getEnum(code);
+        return anEnum != null ? getEnum(code).desc : null;
+    }
+}

+ 10 - 3
projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/SubInfoMapper.xml

@@ -188,10 +188,10 @@
                 and s.subject_id = #{vo.subjectId}
             </if>
             <if test="vo.indusKind!=null and vo.indusKind!=''">
-                <if test='vo.indusKind != "."'>
+                <if test='vo.indusKind != "@com.rtrh.projects.modules.projects.enums.NullValueEnum@UNKNOWN_INDUS_KIND.code"'>
                     and s.indus_kind like CONCAT(#{vo.indusKind}, '%')
                 </if>
-                <if test='vo.indusKind.toString() == "."'>
+                <if test='vo.indusKind.toString() == "@com.rtrh.projects.modules.projects.enums.NullValueEnum@UNKNOWN_INDUS_KIND.code"'>
                     AND ISNULL(s.indus_kind)
                 </if>
             </if>
@@ -206,7 +206,14 @@
                 and s.unit_desc = #{vo.sbdw}
             </if>
             <if test="vo.abc!=null and vo.abc!=''">
-                and s.abc = #{vo.abc}
+                <choose>
+                    <when test='vo.abc.toString() =="UNKNOWN_CATEGORY"'>
+                        and s.abc is null
+                    </when>
+                    <otherwise>
+                        and s.abc = #{vo.abc}
+                    </otherwise>
+                </choose>
             </if>
             <if test="vo.status!=null and vo.status!=''">
                 and s.status = #{vo.status}

+ 2 - 1
projects-service/src/main/java/com/rtrh/projects/modules/projects/po/SubInfoGxj.java

@@ -5,6 +5,7 @@ import com.rtrh.projects.modules.system.po.TableBaseColomn;
 import lombok.*;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -45,7 +46,7 @@ public class SubInfoGxj extends TableBaseColomn implements Serializable {
     private String indusName;
 
     // 总金额
-    private Float amtTotal;
+    private BigDecimal amtTotal;
 
     // abc类型
     private String abc;

+ 6 - 12
projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/SubInfoQueryServiceImpl.java

@@ -16,8 +16,7 @@ import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 import com.rtrh.projects.modules.projects.dao.*;
 import com.rtrh.projects.modules.projects.dto.SubFixCbSearch;
-import com.rtrh.projects.modules.projects.enums.RptContKindEnum;
-import com.rtrh.projects.modules.projects.enums.SubInfoStatusEnum;
+import com.rtrh.projects.modules.projects.enums.*;
 import com.rtrh.projects.modules.projects.po.*;
 import com.rtrh.projects.modules.projects.service.SubPreNewService;
 import com.rtrh.projects.modules.projects.vo.*;
@@ -41,8 +40,6 @@ import com.google.common.base.CaseFormat;
 import com.rtrh.common.util.StringUtil;
 import com.rtrh.core.repository.Page;
 import com.rtrh.projects.modules.hik.service.IHikApiService;
-import com.rtrh.projects.modules.projects.enums.ProjectStatusEnum;
-import com.rtrh.projects.modules.projects.enums.SubIsHideStatusEnum;
 import com.rtrh.projects.modules.projects.mapper.StaticsMapper;
 import com.rtrh.projects.modules.projects.mapper.SubInfoMapper;
 import com.rtrh.projects.modules.projects.service.SubInfoQueryService;
@@ -254,10 +251,6 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
         if (StringUtils.isNotBlank(queryVO.getIndusKinds())){
             queryVO.setIndusKind(queryVO.getIndusKinds());
         }
-        // Optional.ofNullable(queryVO.getIndusKinds()).ifPresent(s -> {
-        //     String[] split = s.split(",");
-        //     queryVO.setIks(Arrays.asList(split));
-        // });
 
 
         PageHelper.startPage(page.getPageNo(), page.getPageSize());
@@ -286,7 +279,7 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
             num = list.stream().filter(e -> queryVO.getStatus().equals(e.getStatus())).count();
         }
         // abc类统计
-        Map<String, Long> abc = list.stream().collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getAbc(), "."), Collectors.counting()));
+        Map<String, Long> abc = list.stream().collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getAbc(), NullValueEnum.UNKNOWN_CATEGORY.getCode()), Collectors.counting()));
         // 建设地点统计
         List<TSystable> jsddDict = tSysTableService.getByKind(SysTableKind.JSDD);
         Map<String, String> jsddNameMap = jsddDict.stream().collect(Collectors.toMap(TSystable::getCode, TSystable::getTitle));
@@ -301,19 +294,20 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
         // 行业统计
         List<SubIndu> hyflDict = subInduService.queryParentAll();
         Map<String, String> hyflNameMap = hyflDict.stream().collect(Collectors.toMap(SubIndu::getCode, SubIndu::getTitle));
+        hyflNameMap.put(NullValueEnum.UNKNOWN_INDUS_KIND.getCode(), NullValueEnum.UNKNOWN_INDUS_KIND.getDesc());
         Map<String, Long> indusKind = list.stream()
                 .collect(Collectors.groupingBy(e -> {
                             if (StringUtils.isNotBlank(e.getIndusKind()) && e.getIndusKind().length() >= 2) {
                                 return e.getIndusKind().substring(0, 2);
                             }
-                            return StringUtils.defaultIfBlank(e.getIndusKind(), ".");
+                            return NullValueEnum.UNKNOWN_INDUS_KIND.getCode();
                         },
                         Collectors.counting()));
         List<StatisticsVO.KvNum> hyflList = new ArrayList<>();
         indusKind.forEach((k, v) -> {
             hyflList.add(new StatisticsVO.KvNum()
                     .setCode(k)
-                    .setName(hyflNameMap.getOrDefault(k, ""))
+                    .setName(hyflNameMap.getOrDefault(k, k))
                     .setNum(v));
         });
         StatisticsVO vo = new StatisticsVO()
@@ -321,7 +315,7 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
                 .setANum(abc.getOrDefault("A", 0L))
                 .setBNum(abc.getOrDefault("B", 0L))
                 .setCNum(abc.getOrDefault("C", 0L) + abc.getOrDefault("c", 0L))
-                .setNNum(abc.getOrDefault(".", 0L))
+                .setNNum(abc.getOrDefault(NullValueEnum.UNKNOWN_CATEGORY.getCode(), 0L))
                 .setJsddData(jsddList)
                 .setHyflData(hyflList);
 

+ 24 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoBaseDetailVo.java

@@ -0,0 +1,24 @@
+package com.rtrh.projects.modules.projects.vo.export;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SubInfoBaseDetailVo {
+    @Excel(name = "序号", orderNum = "0")
+    private String index;
+
+    @Excel(name = "项目名称", orderNum = "1", width = 20.0)
+    private String subName;
+
+    @Excel(name = "项目所在地", orderNum = "2", width = 15.0)
+    private String subjectName;
+
+    @Excel(name = "项目建设内容", orderNum = "3", width = 70.0)
+    private String content;
+
+    @Excel(name = "计划总投资(亿元)", orderNum = "4", width = 20.0)
+    private BigDecimal amtTotal;
+}

+ 5 - 20
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoCbVO.java

@@ -2,29 +2,14 @@ package com.rtrh.projects.modules.projects.vo.export;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import lombok.Data;
-
-import java.math.BigDecimal;
+import lombok.EqualsAndHashCode;
 
 @Data
-public class SubInfoCbVO {
-    @Excel(name = "序号")
-    private String index;
-
-    @Excel(name = "项目名称",width = 20.0)
-    private String subName;
-
-    @Excel(name = "项目所在地",width = 15.0)
-    private String subjectName;
-
-    @Excel(name = "项目建设内容",width = 70.0)
-    private String content;
-
-    @Excel(name = "计划总投资(亿元)",width = 20.0)
-    private BigDecimal amtTotal;
-
-    @Excel(name = "进展情况")
+@EqualsAndHashCode(callSuper = true)
+public class SubInfoCbVO extends SubInfoBaseDetailVo {
+    @Excel(name = "进展情况", orderNum = "5", width = 30.0)
     private String progress;
 
-    @Excel(name = "备注")
+    @Excel(name = "备注",orderNum = "6", width = 30.0)
     private String remark;
 }

+ 11 - 12
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoTcVO.java

@@ -1,7 +1,6 @@
 package com.rtrh.projects.modules.projects.vo.export;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -9,27 +8,27 @@ import java.util.Date;
 
 @Data
 public class SubInfoTcVO {
-    @Excel(name = "序号")
+    @Excel(name = "序号", orderNum = "0")
     private String index;
 
-    @Excel(name = "项目名称",width = 20.0)
+    @Excel(name = "项目名称", orderNum = "1", width = 20.0)
     private String subName;
 
-    @Excel(name = "项目所在地",width = 15.0)
+    @Excel(name = "项目所在地", orderNum = "2", width = 15.0)
     private String subjectName;
 
-    @Excel(name = "项目建设内容",width = 70.0)
+    @Excel(name = "项目基本情况", orderNum = "3", width = 70.0)
     private String content;
 
-    @Excel(name = "计划总投资(亿元)",width = 20.0)
-    private Float amtTotal;
+    @Excel(name = "计划总投资(亿元)", orderNum = "4", width = 20.0)
+    private BigDecimal amtTotal;
 
-    @Excel(name = "预计开工时间",format = "yyyy-MM-dd",width = 15.0)
-    private Date beginDate;
+    @Excel(name = "升规入统时间",format = "yyyy年MM月",orderNum = "5",width = 15.0)
+    private Date rtDate;
 
-    @Excel(name = "前期手续办理情况")
-    private String preContent;
+    @Excel(name = "进展情况", orderNum = "6", width = 30.0)
+    private String progress;
 
-    @Excel(name = "备注")
+    @Excel(name = "备注", orderNum = "7", width = 30.0)
     private String remark;
 }

+ 6 - 20
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoXjVO.java

@@ -1,35 +1,21 @@
 package com.rtrh.projects.modules.projects.vo.export;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
-import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
-public class SubInfoXjVO {
-    @Excel(name = "序号")
-    private String index;
+@EqualsAndHashCode(callSuper = true)
+public class SubInfoXjVO extends SubInfoBaseDetailVo{
 
-    @Excel(name = "项目名称",width = 20.0)
-    private String subName;
-
-    @Excel(name = "项目所在地",width = 15.0)
-    private String subjectName;
-
-    @Excel(name = "项目建设内容",width = 50.0)
-    private String content;
-
-    @Excel(name = "计划总投资(亿元)",width = 70.0)
-    private Float amtTotal;
-
-    @Excel(name = "预计开工时间",format = "yyyy-MM-dd",width = 15.0)
+    @Excel(name = "预计开工时间", format = "yyyy年MM月", width = 15.0, orderNum = "5")
     private Date beginDate;
 
-    @Excel(name = "前期手续办理情况")
+    @Excel(name = "前期手续办理情况", orderNum = "6", width = 50.0)
     private String preContent;
 
-    @Excel(name = "备注")
+    @Excel(name = "备注", orderNum = "7",width = 30.0)
     private String remark;
 }

+ 8 - 22
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZjVO.java

@@ -1,38 +1,24 @@
 package com.rtrh.projects.modules.projects.vo.export;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
-import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
-public class SubInfoZjVO {
-    @Excel(name = "序号")
-    private String index;
+@EqualsAndHashCode(callSuper = true)
+public class SubInfoZjVO extends SubInfoBaseDetailVo {
 
-    @Excel(name = "项目名称",width = 20.0)
-    private String subName;
-
-    @Excel(name = "项目所在地",width = 15.0)
-    private String subjectName;
-
-    @Excel(name = "项目建设内容",width = 70.0)
-    private String content;
-
-    @Excel(name = "计划总投资(亿元)",width = 20.0)
-    private Float amtTotal;
-
-    @Excel(name = "建成投产时间",format = "yyyy-MM-dd",width = 15.0)
+    @Excel(name = "建成投产时间", format = "yyyy年MM月", width = 15.0, orderNum = "5")
     private Date endDate;
 
-    @Excel(name = "年度投资")
-    private String yearAmtSj;
+    @Excel(name = "年度投资", orderNum = "6")
+    private String yearPlanAmt;
 
-    @Excel(name = "进展情况")
+    @Excel(name = "进展情况", width = 30.0, orderNum = "7")
     private String progress;
 
-    @Excel(name = "备注")
+    @Excel(name = "备注", width = 30.0, orderNum = "8")
     private String remark;
 }

+ 4 - 2
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZkVO.java

@@ -3,12 +3,14 @@ package com.rtrh.projects.modules.projects.vo.export;
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
-public class SubInfoZkVO {
+@EqualsAndHashCode(callSuper = true)
+public class SubInfoZkVO extends SubInfoBaseDetailVo {
     @Excel(name = "序号")
     private String index;
 
@@ -22,7 +24,7 @@ public class SubInfoZkVO {
     private String content;
 
     @Excel(name = "计划总投资(亿元)",width = 20.0)
-    private Float amtTotal;
+    private BigDecimal amtTotal;
 
     @Excel(name = "状态",width = 10.0)
     private String statusName;

+ 69 - 137
projects/src/main/java/com/rtrh/projects/web/controller/subject/SubInfoExportController.java

@@ -46,6 +46,7 @@ import com.rtrh.projects.outapi.result.JsonResult;
 import com.rtrh.projects.web.util.SheetData;
 import com.rtrh.projects.web.util.SheetHead;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.streaming.SXSSFSheet;
@@ -876,110 +877,14 @@ public class SubInfoExportController extends BaseController {
                 .collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getIndusKind(), "未知行业")));
         Workbook workbook;
         if (SubInfoStatusEnum.CB.getCode().equals(queryVO.getStatus())) {
-            List<SubInfoCbVO> exportList = new ArrayList<>();
-            // 合计行
-            SubInfoCbVO hjCount = new SubInfoCbVO();
-            hjCount.setIndex(String.format("合计(%s个)",list.size()));
-            exportList.add(hjCount);
-
-            int index = 1;
-            List<Integer> allSize = new ArrayList<>();
-            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
-                String key = entry.getKey();
-                List<SubInfoGxj> value = entry.getValue();
-                List<SubInfoCbVO> hyList = new ArrayList<>();
-                // 行业合计行
-                SubInfoCbVO hyCount = new SubInfoCbVO();
-                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
-                // 每条数据行
-                hyList.add(hyCount);
-                for (int i = 0; i < value.size(); i++) {
-                    SubInfoGxj subInfoGxj = value.get(i);
-                    SubInfoCbVO vo = new SubInfoCbVO();
-                    BeanUtils.copyProperties(subInfoGxj,vo);
-                    vo.setIndex(i + 1 + "");
-                    hyList.add(vo);
-                }
-                // 添加前计算合并行
-                allSize.add(exportList.size() + 2);
-                exportList.addAll(hyList);
-                index++;
-            }
-            ExportParams exportParams = getExportParams();
-            exportParams.setTitle("“四个一批”工业项目表(储备项目库)");
-            exportParams.setSheetName("储备项目库");
-            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoCbVO.class, exportList);
-            extracted(response, list, workbook, allSize);
+            ExportParams exportParams = new ExportParams("“四个一批”工业项目表(储备项目库)", "储备项目库", ExcelType.XSSF);
+            exportDetail(response, exportParams, SubInfoCbVO.class, list, hyDictMap, groupMap);
         }else if (SubInfoStatusEnum.XJ.getCode().equals(queryVO.getStatus())){
-            List<SubInfoXjVO> exportList = new ArrayList<>();
-            // 合计行
-            SubInfoXjVO hjCount = new SubInfoXjVO();
-            hjCount.setIndex(String.format("合计(%s个)",list.size()));
-            exportList.add(hjCount);
-
-            int index = 1;
-            List<Integer> allSize = new ArrayList<>();
-            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
-                String key = entry.getKey();
-                List<SubInfoGxj> value = entry.getValue();
-                List<SubInfoXjVO> hyList = new ArrayList<>();
-                // 行业合计行
-                SubInfoXjVO hyCount = new SubInfoXjVO();
-                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
-                // 每条数据行
-                hyList.add(hyCount);
-                for (int i = 0; i < value.size(); i++) {
-                    SubInfoGxj subInfoGxj = value.get(i);
-                    SubInfoXjVO vo = new SubInfoXjVO();
-                    BeanUtils.copyProperties(subInfoGxj,vo);
-                    vo.setIndex(i + 1 + "");
-                    hyList.add(vo);
-                }
-                // 添加前计算合并行
-                allSize.add(exportList.size() + 2);
-                exportList.addAll(hyList);
-                index++;
-            }
-            ExportParams exportParams = getExportParams();
-            exportParams.setTitle("“四个一批”工业项目表(新建项目库)");
-            exportParams.setSheetName("新建项目库");
-            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoXjVO.class, exportList);
-            extracted(response, list, workbook, allSize);
+            ExportParams exportParams = new ExportParams("“四个一批”工业项目表(新建项目库)","新建项目库",ExcelType.XSSF);
+            exportDetail(response, exportParams, SubInfoXjVO.class, list, hyDictMap, groupMap);
         }else if (SubInfoStatusEnum.ZJ.getCode().equals(queryVO.getStatus())){
-            List<SubInfoZjVO> exportList = new ArrayList<>();
-            // 合计行
-            SubInfoZjVO hjCount = new SubInfoZjVO();
-            hjCount.setIndex(String.format("合计(%s个)",list.size()));
-            exportList.add(hjCount);
-
-            int index = 1;
-            List<Integer> allSize = new ArrayList<>();
-            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
-                String key = entry.getKey();
-                List<SubInfoGxj> value = entry.getValue();
-                List<SubInfoZjVO> hyList = new ArrayList<>();
-                // 行业合计行
-                SubInfoZjVO hyCount = new SubInfoZjVO();
-                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
-                // 每条数据行
-                hyList.add(hyCount);
-                for (int i = 0; i < value.size(); i++) {
-                    SubInfoGxj subInfoGxj = value.get(i);
-                    SubInfoZjVO vo = new SubInfoZjVO();
-                    BeanUtils.copyProperties(subInfoGxj,vo);
-                    vo.setIndex(i + 1 + "");
-                    hyList.add(vo);
-                }
-                // 添加前计算合并行
-                allSize.add(exportList.size() + 2);
-                exportList.addAll(hyList);
-                index++;
-            }
-            ExportParams exportParams = getExportParams();
-            exportParams.setTitle("“四个一批”工业项目表(在建项目库)");
-            exportParams.setSheetName("在建项目库");
-            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoZjVO.class, exportList);
-            extracted(response, list, workbook, allSize);
+            ExportParams exportParams = new ExportParams("“四个一批”工业项目表(在建项目库)","在建项目库",ExcelType.XSSF);
+            exportDetail(response, exportParams, SubInfoZjVO.class, list, hyDictMap, groupMap);
         }else if(SubInfoStatusEnum.TC.getCode().equals(queryVO.getStatus())) {
             List<SubInfoTcVO> exportList = new ArrayList<>();
             // 合计行
@@ -1002,6 +907,8 @@ public class SubInfoExportController extends BaseController {
                     SubInfoGxj subInfoGxj = value.get(i);
                     SubInfoTcVO vo = new SubInfoTcVO();
                     BeanUtils.copyProperties(subInfoGxj,vo);
+                    BigDecimal divide = subInfoGxj.getAmtTotal() != null ? subInfoGxj.getAmtTotal().divide(BigDecimal.valueOf(10000), 2, RoundingMode.HALF_UP) : BigDecimal.ZERO;
+                    vo.setAmtTotal(divide);
                     vo.setIndex(i + 1 + "");
                     hyList.add(vo);
                 }
@@ -1010,9 +917,8 @@ public class SubInfoExportController extends BaseController {
                 exportList.addAll(hyList);
                 index++;
             }
-            ExportParams exportParams = getExportParams();
-            exportParams.setTitle("“四个一批”工业项目表(投产项目库)");
-            exportParams.setSheetName("投产项目库");
+            list.clear();
+            ExportParams exportParams = new ExportParams("“四个一批”工业项目表(投产项目库)","投产项目库",ExcelType.XSSF);
             workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoTcVO.class, exportList);
             extracted(response, list, workbook, allSize);
         }else {
@@ -1037,6 +943,7 @@ public class SubInfoExportController extends BaseController {
                     SubInfoGxj subInfoGxj = value.get(i);
                     SubInfoZkVO vo = new SubInfoZkVO();
                     BeanUtils.copyProperties(subInfoGxj,vo);
+                    vo.setAmtTotal(convertAmount(subInfoGxj.getAmtTotal()));
                     vo.setIndex(i + 1 + "");
                     hyList.add(vo);
                 }
@@ -1045,9 +952,8 @@ public class SubInfoExportController extends BaseController {
                 exportList.addAll(hyList);
                 index++;
             }
-            ExportParams exportParams = getExportParams();
-            exportParams.setTitle("“四个一批”工业项目表(项目总库)");
-            exportParams.setSheetName("项目总库");
+            list.clear();
+            ExportParams exportParams = new ExportParams("“四个一批”工业项目表(项目总库)", "项目总库", ExcelType.XSSF);
             workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoZkVO.class, exportList);
             // workbook = ExcelExportUtil.exportBigExcel(exportParams, SubInfoZkVO.class, new IExcelExportServer() {
             //     /**
@@ -1075,6 +981,51 @@ public class SubInfoExportController extends BaseController {
         }
     }
 
+    private <K extends SubInfoBaseDetailVo> void exportDetail(HttpServletResponse response,ExportParams exportParams,Class<K> clazz, List<SubInfoGxj> list, Map<String, String> hyDictMap, Map<String, List<SubInfoGxj>> groupMap) {
+        List<K> exportList = new ArrayList<>();
+        // 合计行
+        K hjCount = BeanUtils.instantiateClass(clazz);
+        hjCount.setIndex(String.format("合计(%s个)", list.size()));
+        BigDecimal total = list.stream().reduce(BigDecimal.ZERO, (a, b) -> a.add(b.getAmtTotal()), BigDecimal::add);
+        hjCount.setAmtTotal(convertAmount(total));
+        exportList.add(hjCount);
+
+        int index = 1;
+        List<Integer> allSize = new ArrayList<>();
+        for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()) {
+            String key = entry.getKey();
+            List<SubInfoGxj> value = entry.getValue();
+            List<K> hyList = new ArrayList<>();
+            // 行业合计行
+            K hyCount = BeanUtils.instantiateClass(clazz);
+            hyCount.setIndex(String.format("%s、%s( %s个 )", toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
+            BigDecimal reduce = value.stream().reduce(BigDecimal.ZERO, (a, b) -> a.add(b.getAmtTotal()), BigDecimal::add);
+            hyCount.setAmtTotal(convertAmount(reduce));
+            // 每条数据行
+            hyList.add(hyCount);
+            for (int i = 0; i < value.size(); i++) {
+                SubInfoGxj subInfoGxj = value.get(i);
+                K vo = BeanUtils.instantiateClass(clazz);
+                BeanUtils.copyProperties(subInfoGxj, vo);
+                vo.setAmtTotal(convertAmount(subInfoGxj.getAmtTotal()));
+                vo.setIndex(i + 1 + "");
+                hyList.add(vo);
+            }
+            // 添加前计算合并行
+            allSize.add(exportList.size() + 2);
+            exportList.addAll(hyList);
+            index++;
+        }
+        list.clear();
+        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, exportList);
+        extracted(response, list, workbook, allSize);
+    }
+
+    // 转换金额
+    private BigDecimal convertAmount(BigDecimal amount) {
+        return amount == null ? BigDecimal.ZERO : amount.divide(BigDecimal.valueOf(10000), 2, RoundingMode.HALF_UP);
+    }
+
     private void extracted(HttpServletResponse response, List<SubInfoGxj> list, Workbook workbook, List<Integer> allSize) {
         response.setContentType("application/xlsx;charset=utf-8");
         response.setHeader("Content-Disposition", "attachment; filename=" + URLEncodeUtil.encode("项目明细表") + System.currentTimeMillis() + ".xlsx");
@@ -1094,22 +1045,17 @@ public class SubInfoExportController extends BaseController {
             }
         }
         // 设置自适应行高,i为需要自适应行高的起始行号, 起始行号为3 但是因为下标从0开始3需要减一,因为表格是循环生成,需要一行一行设置自适应高度
-        for (int i = 2; i <= list.size() + 1; i++) {
+        for (int i = 2; i <= list.size() + 3; i++) {
             sheet.getRow(i).setHeight((short) -1);
         }
         try (OutputStream outputStream = response.getOutputStream()) {
             workbook.write(outputStream);
+            workbook.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 
-    private ExportParams getExportParams() {
-        ExportParams exportParams = new ExportParams();
-        exportParams.setType(ExcelType.XSSF);
-        return exportParams;
-    }
-
     /**
      * 创建非居中且加粗的单元格样式
      */
@@ -1128,20 +1074,6 @@ public class SubInfoExportController extends BaseController {
         return cellStyle;
     }
 
-    private <T> Workbook exportExcel(List<SubInfoGxj> list, Class<T> clazz, String title, String sheetName) {
-        ExportParams exportParams = getExportParams();
-        exportParams.setTitle(title);
-        exportParams.setSheetName(sheetName);
-        exportParams.setType(ExcelType.XSSF);
-        List<T> voList = list.stream()
-                .map(e -> {
-                    T vo = BeanUtils.instantiateClass(clazz);
-                    BeanUtils.copyProperties(e, vo);
-                    return vo;
-                })
-                .collect(Collectors.toList());
-        return ExcelExportUtil.exportExcel(exportParams, clazz, voList);
-    }
     private ExcelExportEntity getExcelExportEntity(String name, Object key, int width) {
         ExcelExportEntity excelExportEntity = new ExcelExportEntity(name, key, width);
         excelExportEntity.setWidth(width);
@@ -1202,19 +1134,21 @@ public class SubInfoExportController extends BaseController {
 
 
             // 3.导出
-            ExportParams exportParams = getExportParams();
-            exportParams.setTitle("哈密市“四个一批”工业项目库总体情况");
-            exportParams.setSheetName("项目库总体情况");
-
+            ExportParams exportParams = new ExportParams("哈密市“四个一批”工业项目库总体情况", "项目库总体情况", ExcelType.XSSF);
             Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, dataList);
             response.setContentType("application/xlsx;charset=utf-8");
             response.setHeader("Content-Disposition", "attachment; filename=" + URLEncodeUtil.encode("项目库总体情况") + System.currentTimeMillis() + ".xlsx");
 
             try (OutputStream outputStream = response.getOutputStream()) {
                 workbook.write(outputStream);
-                workbook.close();
             } catch (IOException e) {
                 e.printStackTrace();
+            }finally {
+                try {
+                    workbook.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
             }
         }else {
             // 处理数据
@@ -1289,9 +1223,7 @@ public class SubInfoExportController extends BaseController {
                 BigDecimal reduce = list.stream().map(SubInfoTotalExcel::getAmtTotal).reduce(BigDecimal.ZERO, BigDecimal::add);
                 exportData.add(new SubInfoTotalInfoVO("合计", "合计", list.size(), reduce.divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)));
                 // 4.导出
-                ExportParams exportParams = getExportParams();
-                exportParams.setTitle("项目库基本情况");
-                exportParams.setSheetName("项目库基本情况");
+                ExportParams exportParams = new ExportParams("项目库基本情况","项目库基本情况", ExcelType.XSSF);
                 int mergeTotalStartRow = exportData.size() + 1;
                 Workbook workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoTotalInfoVO.class, exportData);
                 response.setContentType("application/xlsx;charset=utf-8");

+ 241 - 432
projects/src/main/webapp/vmodules/subject/subInfo/editSubInfo.jsp

@@ -106,17 +106,17 @@
             <%--				<button class="btn btn1" :class="{active: tabActive === 1}" @click="onChangeActive(1)">项目信息</button>--%>
             <%--				<button class="btn btn2" :class="{active: tabActive === 2}" @click="onChangeActive(2)">监管单位</button>--%>
             <%--			</div>--%>
-            <div class="layui-collapse">
-                <div class="layui-colla-item">
-                    <h2 class="layui-colla-title return">
-                        <button class="btn" @click="addManage" v-if="tabActive === 2"
-                                style="margin: 0 10px 0 0; padding: 3px 8px 5px; background: #3362c9"><i
-                                class="layui-icon layui-icon-addition"></i>新增监管单位
-                        </button>
-                        <button class="btn" @click="closeWin">返回</button>
-                    </h2>
-                </div>
-            </div>
+<%--            <div class="layui-collapse">--%>
+<%--                <div class="layui-colla-item">--%>
+<%--                    <h2 class="layui-colla-title return">--%>
+<%--                        <button class="btn" @click="addManage" v-if="tabActive === 2"--%>
+<%--                                style="margin: 0 10px 0 0; padding: 3px 8px 5px; background: #3362c9"><i--%>
+<%--                                class="layui-icon layui-icon-addition"></i>新增监管单位--%>
+<%--                        </button>--%>
+<%--                        <button class="btn" @click="closeWin">返回</button>--%>
+<%--                    </h2>--%>
+<%--                </div>--%>
+<%--            </div>--%>
         </div>
         <form class="layui-form" lay-filter="formData" style="padding: 0 20px">
             <div class="layui-colla-content layui-show" style="height: auto;">
@@ -536,187 +536,28 @@
                 </div>
             </div>
         </form>
-
-<%--        <div id="amtSourceEdit" style="display: none; padding: 10px 0 0;">--%>
-<%--            <div class="layuimini-main">--%>
-
-<%--                <div class="layui-form" lay-filter="amtSourceEdit" action=""--%>
-<%--                     onkeydown="if(event.keyCode==13){return false;}">--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class="layui-col-xs11 layui-col-sm11">--%>
-<%--                            <div class='layui-form-item'>--%>
-<%--                                <label class="layui-form-label required" style="width: 90px">资金来源</label>--%>
-<%--                                <div class="layui-input-block">--%>
-<%--                                    <select id="testAmt" name="testAmt" lay-filter="testAmt">--%>
-<%--                                        <option value="">请选择</option>--%>
-<%--                                        <c:forEach items="${ZJLY }" var="zj">--%>
-<%--                                            <option value="${zj.id }">${zj.title }</option>--%>
-<%--                                        </c:forEach>--%>
-<%--                                    </select>--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class="layui-col-xs11 layui-col-sm11">--%>
-<%--                            <div class='layui-form-item'>--%>
-<%--                                <label class="layui-form-label required" style="width: 90px">金额(万元)</label>--%>
-<%--                                <div class="layui-input-block">--%>
-<%--                                    <input id="zjAmt" min="0" class="layui-input" type="number"/>--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class="layui-col-xs11 layui-col-sm11">--%>
-<%--                            <div class='layui-form-item'>--%>
-<%--                                <label class="layui-form-label required" style="width: 90px">到位金额(万元)</label>--%>
-<%--                                <div class="layui-input-block">--%>
-<%--                                    <input id="zjAmtSj" min="0" class="layui-input" type="number"/>--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class="layui-form-item">--%>
-<%--                            <label class="layui-form-label" style="width: 90px"></label>--%>
-<%--                            <div class="layui-input-block">--%>
-<%--                                <button class="layui-btn-submit" @click="closePane">取消</button>--%>
-<%--                                <button class="layui-btn-submit" style="margin-left: 10px" lay-submit--%>
-<%--                                        lay-filter="amtConfirm">确定--%>
-<%--                                </button>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                </div>--%>
-
-<%--            </div>--%>
-<%--        </div>--%>
-<%--        <div id="planEdit" style="display: none; padding: 10px 0 0;">--%>
-<%--            <form class="layui-form" lay-filter="planEdit">--%>
-<%--                <div class="table_box">--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class='layui-form-item'>--%>
-<%--                            <label class="layui-form-label required">结束时间</label>--%>
-<%--                            <div class="layui-input-block" style="padding: 0 10px 0 0;">--%>
-<%--                                <input type="text" id="planEndDate" readonly="readonly" required lay-verify="required"--%>
-<%--                                       class="layui-input" v-model="planEditInfo.endDate">--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class='layui-form-item'>--%>
-<%--                            <label class="layui-form-label required">工作内容</label>--%>
-<%--                            <div class="layui-input-block" style="padding: 0 10px 0 0;">--%>
-<%--                                <textarea v-model="planEditInfo.content" class="layui-textarea" required--%>
-<%--                                          lay-verify="required"></textarea>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class='layui-form-item'>--%>
-<%--                            <label class="layui-form-label required">进度权重</label>--%>
-<%--                            <div class="layui-input-block" style="padding: 0 10px 0 0;">--%>
-<%--                                <input type="number" min="1" max="10" required lay-verify="required" class="layui-input"--%>
-<%--                                       v-model="planEditInfo.numRate">--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                    <div class="layui-row">--%>
-<%--                        <div class="layui-form-item" style="text-align: right; padding: 0 67px 10px;">--%>
-<%--                            <input type="button" value="取消" class="layui-btn btn btn1" @click="closePane"/>--%>
-<%--                            <input type="button" value="保存" class="layui-btn btn btn1" lay-submit--%>
-<%--                                   lay-filter="planConfirm"/>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                </div>--%>
-<%--            </form>--%>
-<%--        </div>--%>
-<%--        <div id="manageEdit" style="display: none">--%>
-<%--            <div class="layuimini-main">--%>
-<%--                <form class="layui-form" lay-filter="manageEdit">--%>
-<%--                    <div class="table_box">--%>
-<%--                        <div class="layui-row">--%>
-<%--                            <div class="layui-form-item">--%>
-<%--                                <label class="layui-form-label required">监管单位</label>--%>
-<%--                                <div class="layui-input-block" id="gzsm">--%>
-<%--                                    <select name="manageId" required lay-verify="required" lay-filter="manageId"--%>
-<%--                                            v-model="currObjData.manageId" lay-search>--%>
-<%--                                        <option value="">--请选择--</option>--%>
-<%--                                        <c:forEach items="${unit }" var="un">--%>
-<%--                                            <option value="${un.id }" nameLead="${un.nameLead}"--%>
-<%--                                                    tel="${un.tel}">${un.title }</option>--%>
-<%--                                        </c:forEach>--%>
-<%--                                    </select>--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                        <div class="layui-row">--%>
-<%--                            <div class="layui-form-item">--%>
-<%--                                <label class="layui-form-label">责任科室</label>--%>
-<%--                                <div class="layui-input-block">--%>
-<%--                                    <select name="departId" lay-filter="departId" v-model="currObjData.departId">--%>
-<%--                                        <option value="">--请选择--</option>--%>
-<%--                                    </select>--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                        <div class="layui-row">--%>
-<%--                            <div class="layui-form-item">--%>
-<%--                                <label class="layui-form-label required">责任领导</label>--%>
-<%--                                <div class="layui-input-block">--%>
-<%--                                    <input type="text" name="nameLead" required lay-verify="required" placeholder="请输入"--%>
-<%--                                           autocomplete="off" class="layui-input" v-model="currObjData.nameLead">--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                        <div class="layui-row">--%>
-<%--                            <div class="layui-form-item">--%>
-<%--                                <label class="layui-form-label required">责任电话</label>--%>
-<%--                                <div class="layui-input-block">--%>
-<%--                                    <input type="text" name="tel" required lay-verify="required" placeholder="请输入"--%>
-<%--                                           autocomplete="off" class="layui-input" v-model="currObjData.tel">--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                        <div class="layui-row">--%>
-<%--                            <div class="layui-form-item">--%>
-<%--                                <label class="layui-form-label"></label>--%>
-<%--                                <div class="layui-input-block">--%>
-<%--                                    <button type="button" class="layui-btn-submit" @click="closePane">取消</button>--%>
-<%--                                    <button type="button" class="layui-btn-submit" style="margin-left: 10px" lay-submit--%>
-<%--                                            lay-filter="manageConfirm">保存--%>
-<%--                                    </button>--%>
-<%--                                </div>--%>
-<%--                            </div>--%>
-<%--                        </div>--%>
-<%--                    </div>--%>
-<%--                </form>--%>
-<%--            </div>--%>
-
-<%--        </div>--%>
     </div>
 </template>
-<script type="text/text" id="amtToolBar">
-	<div class="toolBar">
-		<span javascript:void(0); lay-event="delAmt">删除</span>
-	</div>
+<%--<script type="text/text" id="amtToolBar">--%>
+<%--	<div class="toolBar">--%>
+<%--		<span javascript:void(0); lay-event="delAmt">删除</span>--%>
+<%--	</div>--%>
 
 
 
 
-</script>
-<script type="text/html" id="planToolBar">
-    <div class="toolBar">
-        <span title="编辑" lay-event="planEdit">编辑</span>
-        {{#if(d.id == null || d.statusSp == '0') { }}
-        <span title="删除" lay-event="delPlan">删除</span>
-        {{#}}}
-    </div>
-</script>
-<script type="text/html" id="manageToolBar">
-    <div class="toolBar"><span title="删除" lay-event="delManage">删除</span></div>
-</script>
+<%--</script>--%>
+<%--<script type="text/html" id="planToolBar">--%>
+<%--    <div class="toolBar">--%>
+<%--        <span title="编辑" lay-event="planEdit">编辑</span>--%>
+<%--        {{#if(d.id == null || d.statusSp == '0') { }}--%>
+<%--        <span title="删除" lay-event="delPlan">删除</span>--%>
+<%--        {{#}}}--%>
+<%--    </div>--%>
+<%--</script>--%>
+<%--<script type="text/html" id="manageToolBar">--%>
+<%--    <div class="toolBar"><span title="删除" lay-event="delManage">删除</span></div>--%>
+<%--</script>--%>
 <script type="text/javascript">
     new Vue({
         el: "#app",
@@ -804,42 +645,15 @@
                         }
                     }
                 });
-                layui.laydate.render({
-                    elem: "#planEndDate",
-                    type: "date",
-                    theme: layDateTheme,
-                    done: function (value) {
-                        self.planEditInfo.endDate = value;
-                    }
-                });
-                // layui.form.on("submit(amtConfirm)", function (obj) {
-                //     var amt = $("#zjAmt").val();
-                //     if (!isNumber(amt) || Number(amt) < 0) {
-                //         App.msg.warn("请填写正数的金额");
-                //         return;
-                //     }
-                //     var amtSj = $("#zjAmtSj").val();
-                //     if (!isNumber(amtSj) || Number(amtSj) < 0) {
-                //         App.msg.warn("请填写正数的到位金额");
-                //         return;
-                //     }
-                //     //获取选择的值。
-                //     if (self.amtSource.filter((item, index) => {
-                //         return item.sourceId == self.testAmt;
-                //     }).length > 0) {
-                //         //存在,阻断
-                //         App.msg.warn("该类型已被选择");
-                //     } else {
-                //         self.amtSource.push({
-                //             sourceId: self.testAmt,
-                //             sourceName: self.testAmtName,
-                //             amt: amt,
-                //             amtSj: amtSj
-                //         });
-                //         self.initAmtSource();
-                //         self.closePane();
+                // layui.laydate.render({
+                //     elem: "#planEndDate",
+                //     type: "date",
+                //     theme: layDateTheme,
+                //     done: function (value) {
+                //         self.planEditInfo.endDate = value;
                 //     }
                 // });
+
                 layui.form.on("select(subjectId)", function (data) {
                     var ztdw = $("#subjectId option:checked").attr("ztdw");
                     self.subInfo.subjectId = data.value;
@@ -858,11 +672,6 @@
                 <c:forEach items="${XMLX}" var="xm">
                 kind.push({value: "${xm.code}", name: "${xm.title}"});
                 </c:forEach>
-                /*				this.kindSelect = layui.xmSelect.render({
-                                    el:'#kind',
-                                    language:'zn',
-                                    data: kind
-                                });*/
                 layui.form.on("select(indusKind)", function (data) {
                     self.subInfo.indusKind = data.value;
                 });
@@ -912,32 +721,32 @@
                 layui.form.on("submit(saveSubInfo)", function (obj) {
                     self.saveSubInfo();
                 });
-                layui.form.on("submit(savePlan)", function (obj) {
-                    self.savePlan();
-                });
-                layui.form.on("submit(saveManage)", function (obj) {
-                    self.saveManage();
-                });
-                layui.form.on("submit(manageConfirm)", function (obj) {
-                    if (self.manageList.filter(item => {
-                        return item.manageId === self.currObjData.manageId;
-                    }).length > 0) {
-                        App.msg.warn("该监管单位已存在");
-                        return;
-                    }
-                    self.addManageData();
-                });
+                // layui.form.on("submit(savePlan)", function (obj) {
+                //     self.savePlan();
+                // });
+                // layui.form.on("submit(saveManage)", function (obj) {
+                //     self.saveManage();
+                // });
+                // layui.form.on("submit(manageConfirm)", function (obj) {
+                //     if (self.manageList.filter(item => {
+                //         return item.manageId === self.currObjData.manageId;
+                //     }).length > 0) {
+                //         App.msg.warn("该监管单位已存在");
+                //         return;
+                //     }
+                //     self.addManageData();
+                // });
 
-                layui.form.on("select(manageId)", function (data) {
-                    self.currObjData.manageId = data.value;
-                    self.currObjData.manageName = this.innerText;
-                    self.currObjData.nameLead = $("select[name='manageId']").find("option:selected").eq(0).attr("nameLead");
-                    self.currObjData.tel = $("select[name='manageId']").find("option:selected").eq(0).attr("tel");
-                    self.currObjData.departId = "";
-                    $("input[name='nameLead']").val(self.currObjData.nameLead);
-                    $("input[name='tel']").val(self.currObjData.tel);
-                    self.setJgDept(data.value);
-                });
+                // layui.form.on("select(manageId)", function (data) {
+                //     self.currObjData.manageId = data.value;
+                //     self.currObjData.manageName = this.innerText;
+                //     self.currObjData.nameLead = $("select[name='manageId']").find("option:selected").eq(0).attr("nameLead");
+                //     self.currObjData.tel = $("select[name='manageId']").find("option:selected").eq(0).attr("tel");
+                //     self.currObjData.departId = "";
+                //     $("input[name='nameLead']").val(self.currObjData.nameLead);
+                //     $("input[name='tel']").val(self.currObjData.tel);
+                //     self.setJgDept(data.value);
+                // });
                 layui.form.on("select(departId)", function (data) {
                     self.currObjData.departId = data.value;
                     self.currObjData.departName = this.innerText;
@@ -958,45 +767,45 @@
                 });
                 this.getForm();
             },
-            initAmtSource: function () {
-                var self = this;
-                layui.table.render({
-                    elem: '#amtSource', // 指定原始表格元素选择器(推荐id选择器)
-                    even: true,
-                    cols: [[ // 设置表头
-                        {type: 'numbers', title: '序号'},
-                        {field: 'sourceName', title: '资金来源'},
-                        {field: 'amt', title: '资金(万元)', edit: 'text'},
-                        {field: 'amtSj', title: '到位资金(万元)', edit: 'text'},
-                        {title: '操作', align: 'center', toolbar: '#amtToolBar'}
-                    ]],
-                    limit: self.amtSource.length,
-                    data: self.amtSource
-                });
-                layui.table.on("tool(amtSource)", function (obj) {
-                    self[obj.event].call(this, obj);
-                });
-            },
-            delAllAmt: function () {
-                for (var i = 0; i < this.amtSource.length; i++) {
-                    if (this.amtSource[i].id) {
-                        this.amtSource[i].logicDeleteFlag = 1;
-                        this.delAmtSource.push(this.amtSource[i]);
-                    }
-                }
-                this.amtSource = [];
-            },
-            delAmt: function (obj) {
-                if (obj.data.id) {
-                    obj.data.logicDeleteFlag = 1;
-                    this.delAmtSource.push(obj.data);
-                    obj.del();
-                } else {
-                    obj.del();
-                }
-                this.amtSource = layui.table.getData("amtSource");
-                this.initAmtSource();
-            },
+            // initAmtSource: function () {
+            //     var self = this;
+            //     layui.table.render({
+            //         elem: '#amtSource', // 指定原始表格元素选择器(推荐id选择器)
+            //         even: true,
+            //         cols: [[ // 设置表头
+            //             {type: 'numbers', title: '序号'},
+            //             {field: 'sourceName', title: '资金来源'},
+            //             {field: 'amt', title: '资金(万元)', edit: 'text'},
+            //             {field: 'amtSj', title: '到位资金(万元)', edit: 'text'},
+            //             {title: '操作', align: 'center', toolbar: '#amtToolBar'}
+            //         ]],
+            //         limit: self.amtSource.length,
+            //         data: self.amtSource
+            //     });
+            //     layui.table.on("tool(amtSource)", function (obj) {
+            //         self[obj.event].call(this, obj);
+            //     });
+            // },
+            // delAllAmt: function () {
+            //     for (var i = 0; i < this.amtSource.length; i++) {
+            //         if (this.amtSource[i].id) {
+            //             this.amtSource[i].logicDeleteFlag = 1;
+            //             this.delAmtSource.push(this.amtSource[i]);
+            //         }
+            //     }
+            //     this.amtSource = [];
+            // },
+            // delAmt: function (obj) {
+            //     if (obj.data.id) {
+            //         obj.data.logicDeleteFlag = 1;
+            //         this.delAmtSource.push(obj.data);
+            //         obj.del();
+            //     } else {
+            //         obj.del();
+            //     }
+            //     this.amtSource = layui.table.getData("amtSource");
+            //     // this.initAmtSource();
+            // },
             getForm: function () {
                 var id = $("#id").val();
                 var self = this;
@@ -1011,10 +820,10 @@
                             /*		self.kindSelect.setValue(self.subInfo.kind.split(","));*/
                             self.amtSource = res.data.subSource || [];
                             //	alert(JSON.stringify(self.amtSource))
-                            self.initAmtSource();
-                            var total = self.subInfo.amtTotal;
+                            // self.initAmtSource();
+                            // var total = self.subInfo.amtTotal;
 
-                            self.chooseTotal(total, ${queryType});
+                            <%--self.chooseTotal(total, ${queryType});--%>
                             setTimeout(function () {
                                 layui.form.render();
                             }, 200);
@@ -1026,27 +835,27 @@
                             self.loadPlanTable();
                         }
                     }); */
-                    App.postJson("/api/subject/subInfo/getManageList", {subId: id}, function (res) {
-                        if (res.success) {
-                            self.manageList = res.data;
-                            self.loadManageTable();
-                        }
-                    });
-                }
-            },
-            chooseTotal(totalInvestment, queryType) {
-                if (totalInvestment >= 500 && queryType == '1') {
-                    var select = document.getElementById('isFix'); // 获取下拉框的DOM元素
-                    // 根据值的大小显示或隐藏下拉框
-                    if (totalInvestment >= 500) {
-                        select.style.display = 'block'; // 显示下拉框
-                        layui.form.render('select'); // 更新下拉框的渲染
-                    } else {
-                        select.style.display = 'none'; // 隐藏下拉框
-                        layui.form.render('select'); // 更新下拉框的渲染
-                    }
+                    // App.postJson("/api/subject/subInfo/getManageList", {subId: id}, function (res) {
+                    //     if (res.success) {
+                    //         self.manageList = res.data;
+                    //         self.loadManageTable();
+                    //     }
+                    // });
                 }
             },
+            // chooseTotal(totalInvestment, queryType) {
+            //     if (totalInvestment >= 500 && queryType == '1') {
+            //         var select = document.getElementById('isFix'); // 获取下拉框的DOM元素
+            //         // 根据值的大小显示或隐藏下拉框
+            //         if (totalInvestment >= 500) {
+            //             select.style.display = 'block'; // 显示下拉框
+            //             layui.form.render('select'); // 更新下拉框的渲染
+            //         } else {
+            //             select.style.display = 'none'; // 隐藏下拉框
+            //             layui.form.render('select'); // 更新下拉框的渲染
+            //         }
+            //     }
+            // },
             addAmt: function () {
                 var self = this;
                 $("#zjAmt").val("");
@@ -1075,8 +884,8 @@
                     return;
                 }
                 var saveUrl = "/api/subject/subInfo/saveEditSubInfo";
-                var saveAmtSource = this.amtSource.concat(this.delAmtSource);
-                this.subInfo.subSource = saveAmtSource;
+                // var saveAmtSource = this.amtSource.concat(this.delAmtSource);
+                // this.subInfo.subSource = saveAmtSource;
 
                 App.msg.confirm("确认提交项目信息吗?", function () {
                     console.log(self.subInfo)
@@ -1089,7 +898,7 @@
                                     self.subInfo = resc.data;
                                     /*	self.kindSelect.setValue(self.subInfo.kind.split(","));*/
                                     self.amtSource = resc.data.subSource || [];
-                                    self.initAmtSource();
+                                    // self.initAmtSource();
                                     self.delAmtSource = [];
                                     setTimeout(function () {
                                         layui.form.render();
@@ -1101,124 +910,124 @@
                     });
                 })
             },
-            sort: function () {
-                var beginDate = $("#beginDate").val();
-                this.planList.sort(function (a, b) {
-                    var date1 = new Date(a.endDate);
-                    var date2 = new Date(b.endDate);
-                    return date1.getTime() > date2.getTime() ? 1 : -1;
-                });
-                for (var i = 0; i < this.planList.length; i++) {
-                    if (i == 0) {
-                        this.planList[i].beginDate = beginDate;
-                    } else {
-                        var endDate = new Date(this.planList[i - 1].endDate);
-                        endDate = endDate.addDays(1);
-                        this.planList[i].beginDate = layui.util.toDateString(endDate, "yyyy-MM-dd");
-                    }
-                }
-                this.loadPlanTable();
-            },
-            addManage: function () {
-                var self = this;
-                this.currObjData = {
-                    manageId: "",
-                    departId: "",
-                    nameLead: "",
-                    tel: ""
-                };
-                $("select[name='manageId']").next().find("input").eq(0).val("")
-                this.setJgDept("");
-                layui.form.render();
-                layui.use('form', function () {
-                    layui.form.render('select');
-                })
-
-                this.planEditPanl = layer.open({
-                    title: "新增监管单位",
-                    type: 1,
-                    content: $("#manageEdit"),
-                    area: ['500px', 'auto']
-                })
-            },
-            loadManageTable: function () {
-                var self = this;
-                layui.table.render({
-                    elem: '#manageList', // 指定原始表格元素选择器(推荐id选择器)
-                    even: true,
-                    cols: [[ // 设置表头
-                        {type: 'numbers', title: '序号', align: 'center'},
-                        {field: 'manageName', title: '监管单位'},
-                        {field: 'departName', title: '责任科室'},
-                        {field: 'nameLead', title: '责任领导',},
-                        {field: 'tel', title: '联系电话'},
-                        {title: '操作', align: 'center', toolbar: '#manageToolBar'}
-                    ]],
-                    data: self.manageList
-                });
-                layui.table.on("tool(manageList)", function (obj) {
-                    self[obj.event].call(this, obj);
-                })
-            },
-            setJgDept: function (unitId) {
-                $("select[name='departId']").html("<option value=''>--请选择--</option>");
-                layui.form.render();
-                if (unitId != '') {
-                    App.postJson("/api/jdepart/listByUnit", {unitId: unitId}, function (res) {
-                        for (var i = 0; i < res.data.length; i++) {
-                            let cuData = res.data[i];
-                            $("select[name='departId']")
-                                .append("<option value='" + cuData.id + "' tel='" + cuData.tel + "' nameLead='" + cuData.nameLead + "'>" + cuData.title + "</option>");
-                        }
-                        layui.form.render();
-                    });
-                }
-            },
-            addManageData: function () {
-                this.manageList.push(this.currObjData);
-                this.loadManageTable();
-                this.closePane();
-            },
-            delManage: function (obj) {
-                var self = this;
-                App.msg.confirm("确认删除该监管单位吗?", function () {
-                    if (obj.data.id) {
-                        obj.data.logicDeleteFlag = 1;
-                        self.delManageList.push(obj.data);
-                        obj.del();
-                        self.manageList = layui.table.getData("manageList");
-                    } else {
-                        obj.del();
-                        self.manageList = layui.table.getData("manageList");
-                    }
-                })
-            },
-            saveManage: function () {
-                var manages = this.manageList;
-                var subId = this.subInfo.id;
-                for (var i = 0; i < this.delManageList.length; i++) {
-                    manages.push(this.delManageList[i]);
-                }
-                var data = {
-                    subId: subId,
-                    manage: manages
-                };
-                var self = this;
-                App.msg.confirm("确认提交监管单位信息吗?", function () {
-                    App.postJson("/api/subject/subInfo/saveEditSubInfo", {manage: data}, function (res) {
-                        if (res.success) {
-                            App.msg.warn("提交成功");
-                            App.postJson("/api/subject/subInfo/getManageList", {subId: subId}, function (resc) {
-                                if (resc.success) {
-                                    self.manageList = resc.data;
-                                    self.delManageList = [];
-                                    self.loadManageTable();
-                                }
-                            });
-                        }
-                    });
-                });
-            },
+            // sort: function () {
+            //     var beginDate = $("#beginDate").val();
+            //     this.planList.sort(function (a, b) {
+            //         var date1 = new Date(a.endDate);
+            //         var date2 = new Date(b.endDate);
+            //         return date1.getTime() > date2.getTime() ? 1 : -1;
+            //     });
+            //     for (var i = 0; i < this.planList.length; i++) {
+            //         if (i == 0) {
+            //             this.planList[i].beginDate = beginDate;
+            //         } else {
+            //             var endDate = new Date(this.planList[i - 1].endDate);
+            //             endDate = endDate.addDays(1);
+            //             this.planList[i].beginDate = layui.util.toDateString(endDate, "yyyy-MM-dd");
+            //         }
+            //     }
+            //     this.loadPlanTable();
+            // },
+            // addManage: function () {
+            //     var self = this;
+            //     this.currObjData = {
+            //         manageId: "",
+            //         departId: "",
+            //         nameLead: "",
+            //         tel: ""
+            //     };
+            //     $("select[name='manageId']").next().find("input").eq(0).val("")
+            //     this.setJgDept("");
+            //     layui.form.render();
+            //     layui.use('form', function () {
+            //         layui.form.render('select');
+            //     })
+            //
+            //     this.planEditPanl = layer.open({
+            //         title: "新增监管单位",
+            //         type: 1,
+            //         content: $("#manageEdit"),
+            //         area: ['500px', 'auto']
+            //     })
+            // },
+            // loadManageTable: function () {
+            //     var self = this;
+            //     layui.table.render({
+            //         elem: '#manageList', // 指定原始表格元素选择器(推荐id选择器)
+            //         even: true,
+            //         cols: [[ // 设置表头
+            //             {type: 'numbers', title: '序号', align: 'center'},
+            //             {field: 'manageName', title: '监管单位'},
+            //             {field: 'departName', title: '责任科室'},
+            //             {field: 'nameLead', title: '责任领导',},
+            //             {field: 'tel', title: '联系电话'},
+            //             {title: '操作', align: 'center', toolbar: '#manageToolBar'}
+            //         ]],
+            //         data: self.manageList
+            //     });
+            //     layui.table.on("tool(manageList)", function (obj) {
+            //         self[obj.event].call(this, obj);
+            //     })
+            // },
+            // setJgDept: function (unitId) {
+            //     $("select[name='departId']").html("<option value=''>--请选择--</option>");
+            //     layui.form.render();
+            //     if (unitId != '') {
+            //         App.postJson("/api/jdepart/listByUnit", {unitId: unitId}, function (res) {
+            //             for (var i = 0; i < res.data.length; i++) {
+            //                 let cuData = res.data[i];
+            //                 $("select[name='departId']")
+            //                     .append("<option value='" + cuData.id + "' tel='" + cuData.tel + "' nameLead='" + cuData.nameLead + "'>" + cuData.title + "</option>");
+            //             }
+            //             layui.form.render();
+            //         });
+            //     }
+            // },
+            // addManageData: function () {
+            //     this.manageList.push(this.currObjData);
+            //     this.loadManageTable();
+            //     this.closePane();
+            // },
+            // delManage: function (obj) {
+            //     var self = this;
+            //     App.msg.confirm("确认删除该监管单位吗?", function () {
+            //         if (obj.data.id) {
+            //             obj.data.logicDeleteFlag = 1;
+            //             self.delManageList.push(obj.data);
+            //             obj.del();
+            //             self.manageList = layui.table.getData("manageList");
+            //         } else {
+            //             obj.del();
+            //             self.manageList = layui.table.getData("manageList");
+            //         }
+            //     })
+            // },
+            // saveManage: function () {
+            //     var manages = this.manageList;
+            //     var subId = this.subInfo.id;
+            //     for (var i = 0; i < this.delManageList.length; i++) {
+            //         manages.push(this.delManageList[i]);
+            //     }
+            //     var data = {
+            //         subId: subId,
+            //         manage: manages
+            //     };
+            //     var self = this;
+            //     // App.msg.confirm("确认提交监管单位信息吗?", function () {
+            //     //     App.postJson("/api/subject/subInfo/saveEditSubInfo", {manage: data}, function (res) {
+            //     //         if (res.success) {
+            //     //             App.msg.warn("提交成功");
+            //     //             App.postJson("/api/subject/subInfo/getManageList", {subId: subId}, function (resc) {
+            //     //                 if (resc.success) {
+            //     //                     self.manageList = resc.data;
+            //     //                     self.delManageList = [];
+            //     //                     self.loadManageTable();
+            //     //                 }
+            //     //             });
+            //     //         }
+            //     //     });
+            //     // });
+            // },
             closeWin: function () {
                 var self = this;
                 if (!this.closeMark) {

+ 2 - 1
projects/src/main/webapp/vmodules/subject/subInfo/tz/cb.jsp

@@ -221,7 +221,8 @@
                         <span class="info-icon" title="C类项目:意向类项目,还处于谋划论证阶段项目">?</span>
                         <span class="lanse-first">{{beginRate.cnum}}</span>
                     </label>
-                    <label class="juli" onclick="levelList('abcs','D类','.')">
+                    <label class="juli" onclick="levelList('abcs','D类','UNKNOWN_CATEGORY')">
+                        未知分类
                         <span class="info-icon" title="ABC类未设置">?</span>
                         <span class="lanse-first">{{beginRate.nnum}}</span>
                     </label>

+ 6 - 6
projects/src/main/webapp/vmodules/subject/subInfo/tz/cb_sum.jsp

@@ -413,14 +413,14 @@
                             </div>
                         </div>
                     </label>
+                    <label class="juli" onclick="levelList('abcs','D类','UNKNOWN_CATEGORY')">
+                        未知分类
+                        <span class="info-icon" title="ABC类未设置">?</span>
+                        <span class="lanse-first">{{beginRate.nnum}}</span>
+                    </label>
                 </div>
                 <div style="display: flex;margin-bottom: 3px">
-
-                    <label @click="levelList('kindNatures',item.split(',')[1],item.split(',')[0])" class="juli"
-                           v-for="(item, index) in beginRate.tzlxList" :key="index">
-                        {{item.name}}<span class="lanse-first">{{item.num}}</span>
-                    </label>
-                    <label class="juli" @click="levelList('subjects',item.split(',')[1],item.split(',')[0])"
+                    <label class="juli" @click="levelList('subjects',item.name,item.code)"
                            v-for="(item, index) in beginRate.jsddList" :key="index">
                         {{item.name}}<span class="lanse-first">{{item.num}}</span>
                     </label>

+ 2 - 2
projects/src/main/webapp/vmodules/subject/subInfo/tz/xmzk.jsp

@@ -103,8 +103,8 @@
                 项目总库
             </div>
             <div class="layui-btn-container" style="margin-top: 20px;margin-left: 20px">
-                <button type="button" class="layui-btn" @click="exportDetailExcel">导出明细</button>
-                <button type="button" class="layui-btn" @click="exportTotalExcel">导出总表</button>
+<%--                <button type="button" class="layui-btn" @click="exportDetailExcel">导出明细</button>--%>
+                <button type="button" class="layui-btn" @click="exportTotalExcel">导出</button>
                 <button type="button" class="layui-btn" @click="exportMoreExcel">自定义导出</button>
             </div>
             <div class="layui-collapse">