Browse Source

ddddddddd

zhoulisky 10 months ago
parent
commit
ec903489e4

+ 11 - 0
kd-common/src/main/java/org/sky/common/constant/LauncherConstant.java

@@ -31,12 +31,15 @@ public interface LauncherConstant {
 	 * nacos prod 地址
 	 * nacos prod 地址
 	 */
 	 */
 	String NACOS_PROD_ADDR = "172.30.0.48:8848";
 	String NACOS_PROD_ADDR = "172.30.0.48:8848";
+	String NACOS_PROD_NAMESPACE = "6a3a2b86-c938-4188-b1ff-cd5f909c6b6c";
 
 
 	/**
 	/**
 	 * nacos test 地址
 	 * nacos test 地址
 	 */
 	 */
 	String NACOS_TEST_ADDR = "172.30.0.48:8848";
 	String NACOS_TEST_ADDR = "172.30.0.48:8848";
 
 
+	String NACOS_TEST_NAMESPACE = "6a3a2b86-c938-4188-b1ff-cd5f909c6b6c";
+
 	/**
 	/**
 	 * sentinel dev 地址
 	 * sentinel dev 地址
 	 */
 	 */
@@ -141,6 +144,14 @@ public interface LauncherConstant {
 		};
 		};
 	}
 	}
 
 
+	static String nacosNamespace(String profile) {
+		return switch (profile) {
+			case (AppConstant.PROD_CODE) -> NACOS_PROD_NAMESPACE;
+			case (AppConstant.TEST_CODE) -> NACOS_TEST_NAMESPACE;
+			default -> NACOS_DEV_NAMESPACE;
+		};
+	}
+
 	/**
 	/**
 	 * 动态获取sentinel地址
 	 * 动态获取sentinel地址
 	 *
 	 *

+ 2 - 2
kd-common/src/main/java/org/sky/common/launch/LauncherServiceImpl.java

@@ -24,12 +24,12 @@ public class LauncherServiceImpl implements LauncherService {
 		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.username", LauncherConstant.NACOS_USERNAME);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.username", LauncherConstant.NACOS_USERNAME);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.password", LauncherConstant.NACOS_PASSWORD);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.password", LauncherConstant.NACOS_PASSWORD);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
 		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.server-addr", LauncherConstant.nacosAddr(profile));
-		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", LauncherConstant.NACOS_DEV_NAMESPACE);
+		PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", LauncherConstant.nacosNamespace(profile));
 		// nacos配置中心配置
 		// nacos配置中心配置
 		PropsUtil.setProperty(props, "spring.cloud.nacos.config.username", LauncherConstant.NACOS_USERNAME);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.config.username", LauncherConstant.NACOS_USERNAME);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.config.password", LauncherConstant.NACOS_PASSWORD);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.config.password", LauncherConstant.NACOS_PASSWORD);
 		PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
 		PropsUtil.setProperty(props, "spring.cloud.nacos.config.server-addr", LauncherConstant.nacosAddr(profile));
-		PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", LauncherConstant.NACOS_DEV_NAMESPACE);
+		PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", LauncherConstant.nacosNamespace(profile));
 		// sentinel配置
 		// sentinel配置
 		PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
 		PropsUtil.setProperty(props, "spring.cloud.sentinel.transport.dashboard", LauncherConstant.sentinelAddr(profile));
 		// 多数据源配置
 		// 多数据源配置

+ 2 - 1
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/dto/XmDTO.java

@@ -26,5 +26,6 @@ public class XmDTO extends XmEntity {
 	@Schema(description = "项目预算总额-每年的预算,用于接收前端的数组")
 	@Schema(description = "项目预算总额-每年的预算,用于接收前端的数组")
 	private List<HashMap<String, Float>> yearAmountList;
 	private List<HashMap<String, Float>> yearAmountList;
 
 
-
+	@Schema(description = "年月,如:202507")
+	private String yearAndMonth;
 }
 }

+ 3 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/XmWwxmEntity.java

@@ -27,6 +27,9 @@ public class XmWwxmEntity extends TenantEntity {
 	@Schema(description = "科研项目id,kd_xm的主键")
 	@Schema(description = "科研项目id,kd_xm的主键")
 	private Long xmId;
 	private Long xmId;
 
 
+	@Schema(description = "所属年份,如:2025")
+	private String yearAndMonth;
+
 	@Schema(description = "受托方全称")
 	@Schema(description = "受托方全称")
 	private String stfqc;
 	private String stfqc;
 
 

+ 74 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmSummary.java

@@ -0,0 +1,74 @@
+
+package org.sky.scientific.pojo.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.sky.core.tool.utils.DateUtil;
+import org.sky.scientific.pojo.entity.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class XmSummary {
+
+	@Schema(description = "项目id,主键")
+	private Long id;
+
+	@Schema(description = "研发项目编号")
+	private String xmbh;
+
+	@Schema(description = "研发项目名称")
+	private String xmmc;
+
+	@Schema(description = "研发开始时间")
+	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
+	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
+	private Date xmkssj;
+
+	@Schema(description = "研发结束时间")
+	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
+	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
+	private Date xmjssj;
+
+	@Schema(description = "项目负责人id")
+	private Long xmfzr;
+
+	@Schema(description = "项目负责人姓名")
+	private String xmfzrxm;
+
+	@Schema(description = "项目申请单位")
+	private String xmsqdw;
+
+	@Schema(description = "项目状态")
+	private Integer status;
+
+	@Schema(description = "立项报告")
+	private List<String> lxbgList;
+
+	@Schema(description = "阶段性报告")
+	private List<XmJdxbgEntity> jdxbgList;
+
+	@Schema(description = "验收报告")
+	private List<XmJtbEntity> ysbgList;
+
+	@Schema(description = "发明专利")
+	private List<CgZlEntity> fmzlList;
+
+	@Schema(description = "实用新型专利")
+	private List<CgZlEntity> syxxzlList;
+
+	@Schema(description = "软著")
+	private List<CgRjzzqEntity> rzList;
+
+	@Schema(description = "标准")
+	private List<CgJsbzEntity> bzList;
+
+	@Schema(description = "论文")
+	private List<CgKylwEntity> lwList;
+
+	@Schema(description = "其他")
+	private List<CgQtEntity> qtList;
+}

+ 30 - 1
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmVO.java

@@ -2,10 +2,12 @@
 package org.sky.scientific.pojo.vo;
 package org.sky.scientific.pojo.vo;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
-import org.sky.scientific.pojo.entity.XmEntity;
+import org.sky.scientific.pojo.entity.*;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
+
 import java.io.Serial;
 import java.io.Serial;
+import java.util.List;
 
 
 /**
 /**
  * 科研项目 视图实体类
  * 科研项目 视图实体类
@@ -21,4 +23,31 @@ public class XmVO extends XmEntity {
 
 
 	@Schema(description = "项目负责人姓名")
 	@Schema(description = "项目负责人姓名")
 	private String xmfzrxm;
 	private String xmfzrxm;
+
+	@Schema(description = "立项报告")
+	private List<String> xmlxbgEntityList;
+
+	@Schema(description = "阶段性报告")
+	private List<XmJdxbgEntity> xmJdxbgEntityList;
+
+	@Schema(description = "验收报告")
+	private List<XmJtbEntity> xmYsbgList;
+
+	@Schema(description = "发明专利")
+	private List<CgZlEntity> fmzlEntityList;
+
+	@Schema(description = "实用新型专利")
+	private List<CgZlEntity> syxxzlEntityList;
+
+	@Schema(description = "软著")
+	private List<CgRjzzqEntity> rjzzqEntityList;
+
+	@Schema(description = "标准")
+	private List<CgJsbzEntity> jsbzEntityList;
+
+	@Schema(description = "论文")
+	private List<CgKylwEntity> kylwEntityList;
+
+	@Schema(description = "其他")
+	private List<CgQtEntity> qtEntityList;
 }
 }

+ 19 - 19
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmController.java

@@ -1,13 +1,16 @@
 
 
 package org.sky.scientific.controller;
 package org.sky.scientific.controller;
 
 
-import io.swagger.v3.oas.annotations.tags.Tag;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import lombok.AllArgsConstructor;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import jakarta.validation.Valid;
-
+import lombok.AllArgsConstructor;
+import org.sky.core.boot.ctrl.KdController;
 import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.mp.support.Query;
@@ -15,20 +18,17 @@ import org.sky.core.secure.KdUser;
 import org.sky.core.secure.annotation.IsAdmin;
 import org.sky.core.secure.annotation.IsAdmin;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.DateUtil;
-import org.sky.core.tool.utils.Func;
+import org.sky.scientific.excel.XmExcel;
 import org.sky.scientific.pojo.dto.XmDTO;
 import org.sky.scientific.pojo.dto.XmDTO;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.sky.scientific.pojo.entity.XmEntity;
 import org.sky.scientific.pojo.entity.XmEntity;
+import org.sky.scientific.pojo.vo.XmSummary;
 import org.sky.scientific.pojo.vo.XmVO;
 import org.sky.scientific.pojo.vo.XmVO;
-import org.sky.scientific.excel.XmExcel;
-import org.sky.scientific.wrapper.XmWrapper;
 import org.sky.scientific.service.IXmService;
 import org.sky.scientific.service.IXmService;
-import org.sky.core.boot.ctrl.KdController;
-import java.util.Map;
+import org.sky.scientific.wrapper.XmWrapper;
+import org.springframework.web.bind.annotation.*;
+
 import java.util.List;
 import java.util.List;
-import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
 
 
 /**
 /**
  * 科研项目 控制器
  * 科研项目 控制器
@@ -52,12 +52,12 @@ public class XmController extends KdController {
 		return R.data(XmWrapper.build().entityVO(detail));
 		return R.data(XmWrapper.build().entityVO(detail));
 	}
 	}
 
 
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@Operation(summary = "科研项目-分页", description  = "传入xm")
-	public R<IPage<XmVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> xm, Query query) {
-		IPage<XmEntity> pages = xmService.page(Condition.getPage(query), Condition.getQueryWrapper(xm, XmEntity.class));
-		return R.data(XmWrapper.build().pageVO(pages));
+	@GetMapping("/summary")
+	@ApiOperationSupport(order = 3)
+	@Operation(summary = "科研项目-汇总表", description  = "传入xm")
+	public R<IPage<XmSummary>> summary(XmDTO xm, Query query) {
+		IPage<XmSummary> pages = xmService.summaryPage(Condition.getPage(query),xm);
+		return R.data(pages);
 	}
 	}
 
 
 	@PostMapping("/save")
 	@PostMapping("/save")

+ 13 - 41
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmWwxmController.java

@@ -1,13 +1,16 @@
 
 
 package org.sky.scientific.controller;
 package org.sky.scientific.controller;
 
 
-import io.swagger.v3.oas.annotations.tags.Tag;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import lombok.AllArgsConstructor;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import jakarta.validation.Valid;
-
+import lombok.AllArgsConstructor;
+import org.sky.core.boot.ctrl.KdController;
 import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.mp.support.Query;
@@ -16,18 +19,15 @@ import org.sky.core.secure.annotation.IsAdmin;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.Func;
 import org.sky.core.tool.utils.Func;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.sky.scientific.excel.XmWwxmExcel;
 import org.sky.scientific.pojo.entity.XmWwxmEntity;
 import org.sky.scientific.pojo.entity.XmWwxmEntity;
 import org.sky.scientific.pojo.vo.XmWwxmVO;
 import org.sky.scientific.pojo.vo.XmWwxmVO;
-import org.sky.scientific.excel.XmWwxmExcel;
-import org.sky.scientific.wrapper.XmWwxmWrapper;
 import org.sky.scientific.service.IXmWwxmService;
 import org.sky.scientific.service.IXmWwxmService;
-import org.sky.core.boot.ctrl.KdController;
-import java.util.Map;
+import org.sky.scientific.wrapper.XmWwxmWrapper;
+import org.springframework.web.bind.annotation.*;
+
 import java.util.List;
 import java.util.List;
-import jakarta.servlet.http.HttpServletResponse;
+import java.util.Map;
 
 
 /**
 /**
  * 项目-委外项目 控制器
  * 项目-委外项目 控制器
@@ -43,9 +43,6 @@ public class XmWwxmController extends KdController {
 
 
 	private final IXmWwxmService xmWwxmService;
 	private final IXmWwxmService xmWwxmService;
 
 
-	/**
-	 * 项目-委外项目 详情
-	 */
 	@GetMapping("/detail")
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperationSupport(order = 1)
 	@Operation(summary = "详情", description  = "传入xmWwxm")
 	@Operation(summary = "详情", description  = "传入xmWwxm")
@@ -53,9 +50,7 @@ public class XmWwxmController extends KdController {
 		XmWwxmEntity detail = xmWwxmService.getOne(Condition.getQueryWrapper(xmWwxm));
 		XmWwxmEntity detail = xmWwxmService.getOne(Condition.getQueryWrapper(xmWwxm));
 		return R.data(XmWwxmWrapper.build().entityVO(detail));
 		return R.data(XmWwxmWrapper.build().entityVO(detail));
 	}
 	}
-	/**
-	 * 项目-委外项目 分页
-	 */
+
 	@GetMapping("/list")
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperationSupport(order = 2)
 	@Operation(summary = "分页", description  = "传入xmWwxm")
 	@Operation(summary = "分页", description  = "传入xmWwxm")
@@ -64,9 +59,6 @@ public class XmWwxmController extends KdController {
 		return R.data(XmWwxmWrapper.build().pageVO(pages));
 		return R.data(XmWwxmWrapper.build().pageVO(pages));
 	}
 	}
 
 
-	/**
-	 * 项目-委外项目 自定义分页
-	 */
 	@GetMapping("/page")
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
 	@ApiOperationSupport(order = 3)
 	@Operation(summary = "分页", description  = "传入xmWwxm")
 	@Operation(summary = "分页", description  = "传入xmWwxm")
@@ -75,9 +67,6 @@ public class XmWwxmController extends KdController {
 		return R.data(pages);
 		return R.data(pages);
 	}
 	}
 
 
-	/**
-	 * 项目-委外项目 新增
-	 */
 	@PostMapping("/save")
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperationSupport(order = 4)
 	@Operation(summary = "新增", description  = "传入xmWwxm")
 	@Operation(summary = "新增", description  = "传入xmWwxm")
@@ -85,9 +74,6 @@ public class XmWwxmController extends KdController {
 		return R.status(xmWwxmService.save(xmWwxm));
 		return R.status(xmWwxmService.save(xmWwxm));
 	}
 	}
 
 
-	/**
-	 * 项目-委外项目 修改
-	 */
 	@PostMapping("/update")
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
 	@ApiOperationSupport(order = 5)
 	@Operation(summary = "修改", description  = "传入xmWwxm")
 	@Operation(summary = "修改", description  = "传入xmWwxm")
@@ -95,9 +81,6 @@ public class XmWwxmController extends KdController {
 		return R.status(xmWwxmService.updateById(xmWwxm));
 		return R.status(xmWwxmService.updateById(xmWwxm));
 	}
 	}
 
 
-	/**
-	 * 项目-委外项目 新增或修改
-	 */
 	@PostMapping("/submit")
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperationSupport(order = 6)
 	@Operation(summary = "新增或修改", description  = "传入xmWwxm")
 	@Operation(summary = "新增或修改", description  = "传入xmWwxm")
@@ -105,9 +88,6 @@ public class XmWwxmController extends KdController {
 		return R.status(xmWwxmService.saveOrUpdate(xmWwxm));
 		return R.status(xmWwxmService.saveOrUpdate(xmWwxm));
 	}
 	}
 
 
-	/**
-	 * 项目-委外项目 删除
-	 */
 	@PostMapping("/remove")
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 7)
 	@ApiOperationSupport(order = 7)
 	@Operation(summary = "逻辑删除", description  = "传入ids")
 	@Operation(summary = "逻辑删除", description  = "传入ids")
@@ -115,20 +95,12 @@ public class XmWwxmController extends KdController {
 		return R.status(xmWwxmService.deleteLogic(Func.toLongList(ids)));
 		return R.status(xmWwxmService.deleteLogic(Func.toLongList(ids)));
 	}
 	}
 
 
-
-	/**
-	 * 导出数据
-	 */
 	@IsAdmin
 	@IsAdmin
 	@GetMapping("/export-xmWwxm")
 	@GetMapping("/export-xmWwxm")
 	@ApiOperationSupport(order = 9)
 	@ApiOperationSupport(order = 9)
 	@Operation(summary = "导出数据", description  = "传入xmWwxm")
 	@Operation(summary = "导出数据", description  = "传入xmWwxm")
 	public void exportXmWwxm(@Parameter(hidden = true) @RequestParam Map<String, Object> xmWwxm, KdUser kdUser, HttpServletResponse response) {
 	public void exportXmWwxm(@Parameter(hidden = true) @RequestParam Map<String, Object> xmWwxm, KdUser kdUser, HttpServletResponse response) {
 		QueryWrapper<XmWwxmEntity> queryWrapper = Condition.getQueryWrapper(xmWwxm, XmWwxmEntity.class);
 		QueryWrapper<XmWwxmEntity> queryWrapper = Condition.getQueryWrapper(xmWwxm, XmWwxmEntity.class);
-		//if (!AuthUtil.isAdministrator()) {
-		//	queryWrapper.lambda().eq(XmWwxm::getTenantId, kdUser.getTenantId());
-		//}
-		//queryWrapper.lambda().eq(XmWwxmEntity::getIsDeleted, KdConstant.DB_NOT_DELETED);
 		List<XmWwxmExcel> list = xmWwxmService.exportXmWwxm(queryWrapper);
 		List<XmWwxmExcel> list = xmWwxmService.exportXmWwxm(queryWrapper);
 		ExcelUtil.export(response, "项目-委外项目数据" + DateUtil.time(), "项目-委外项目数据表", list, XmWwxmExcel.class);
 		ExcelUtil.export(response, "项目-委外项目数据" + DateUtil.time(), "项目-委外项目数据表", list, XmWwxmExcel.class);
 	}
 	}

+ 15 - 4
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.java

@@ -1,13 +1,16 @@
 
 
 package org.sky.scientific.mapper;
 package org.sky.scientific.mapper;
 
 
-import org.sky.scientific.pojo.entity.XmEntity;
-import org.sky.scientific.pojo.vo.XmVO;
-import org.sky.scientific.excel.XmExcel;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
+import org.sky.scientific.excel.XmExcel;
+import org.sky.scientific.pojo.dto.XmDTO;
+import org.sky.scientific.pojo.entity.XmEntity;
+import org.sky.scientific.pojo.vo.XmSummary;
+import org.sky.scientific.pojo.vo.XmVO;
+
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -36,4 +39,12 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 	 */
 	 */
 	List<XmExcel> exportXm(@Param("ew") Wrapper<XmEntity> queryWrapper);
 	List<XmExcel> exportXm(@Param("ew") Wrapper<XmEntity> queryWrapper);
 
 
+	/**
+	 * 获取汇总表
+	 *
+	 * @param page 分页参数
+	 * @param xm 查询参数
+	 * @return List<XmVO>
+	 */
+	List<XmSummary> summaryPage(IPage<XmSummary> page, @Param("ew") XmDTO xm);
 }
 }

+ 19 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml

@@ -31,14 +31,28 @@
         <result column="is_deleted" property="isDeleted"/>
         <result column="is_deleted" property="isDeleted"/>
     </resultMap>
     </resultMap>
 
 
-
-    <select id="selectXmPage" resultMap="xmResultMap">
-        select * from kd_xm where is_deleted = 0
+    <select id="exportXm" resultType="org.sky.scientific.excel.XmExcel">
+        SELECT * FROM kd_xm ${ew.customSqlSegment}
     </select>
     </select>
 
 
 
 
-    <select id="exportXm" resultType="org.sky.scientific.excel.XmExcel">
-        SELECT * FROM kd_xm ${ew.customSqlSegment}
+    <select id="summaryPage" resultType="org.sky.scientific.pojo.vo.XmSummary">
+        SELECT xm.id, xm.XMBH,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'xmmc' AND DATE_FORMAT(bgrz.BZSXSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BZSXSSJ DESC LIMIT 1), xm.XMMC ) AS XMMC,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMFZR' AND DATE_FORMAT(bgrz.BZSXSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BZSXSSJ DESC LIMIT 1),xm.XMFZR) AS XMFZR,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMSQDW' AND DATE_FORMAT(bgrz.BZSXSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BZSXSSJ DESC LIMIT 1),xm.XMSQDW) AS XMSQDW,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMKSSJ' AND DATE_FORMAT(bgrz.BZSXSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BZSXSSJ DESC LIMIT 1),xm.XMKSSJ) AS XMKSSJ,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMJSSJ' AND DATE_FORMAT(bgrz.BZSXSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BZSXSSJ DESC LIMIT 1),xm.XMJSSJ) AS XMJSSJ,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMYSZE' AND DATE_FORMAT(bgrz.BZSXSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BZSXSSJ DESC LIMIT 1),xm.XMYSZE) AS XMYSZE,
+        COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'status' AND DATE_FORMAT(bgrz.BZSXSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth} ORDER BY bgrz.BZSXSSJ DESC LIMIT 1),xm.status) AS status
+        FROM kd_xm xm
+        WHERE xm.is_deleted = 0
+            and DATE_FORMAT(xm.XMKSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth}
+        <if test="ew.XMBH!=null and ew.XMBH!=''">and xm.XMBH like concat('%',#{ew.XMBH},'%')</if>
+        <if test="ew.XMMC!=null and ew.XMMC!=''">and xm.XMMC like concat('%',#{ew.XMMC},'%')</if>
+        <if test="ew.XMFZR!=null and ew.XMFZR!=''">and xm.XMFZR = #{ew.XMFZR}</if>
+        <if test="ew.XMSQDW!=null and ew.XMSQDW!=''">and xm.XMSQDW like concat('%',#{ew.XMSQDW},'%')</if>
+        <if test="ew.status!=null">and xm.status = #{ew.status}</if>
     </select>
     </select>
 
 
 </mapper>
 </mapper>

+ 1 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmWwxmMapper.xml

@@ -7,6 +7,7 @@
         <result column="id" property="id"/>
         <result column="id" property="id"/>
         <result column="tenant_id" property="tenantId"/>
         <result column="tenant_id" property="tenantId"/>
         <result column="XM_ID" property="xmId"/>
         <result column="XM_ID" property="xmId"/>
+        <result column="year_and_month" property="yearAndMonth"/>
         <result column="STFQC" property="stfqc"/>
         <result column="STFQC" property="stfqc"/>
         <result column="STFLX" property="stflx"/>
         <result column="STFLX" property="stflx"/>
         <result column="HTMC" property="htmc"/>
         <result column="HTMC" property="htmc"/>

+ 13 - 13
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/IXmService.java

@@ -2,12 +2,13 @@
 package org.sky.scientific.service;
 package org.sky.scientific.service;
 
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import org.sky.scientific.pojo.dto.XmDTO;
-import org.sky.scientific.pojo.entity.XmEntity;
-import org.sky.scientific.pojo.vo.XmVO;
-import org.sky.scientific.excel.XmExcel;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.sky.core.mp.base.BaseService;
 import org.sky.core.mp.base.BaseService;
+import org.sky.scientific.excel.XmExcel;
+import org.sky.scientific.pojo.dto.XmDTO;
+import org.sky.scientific.pojo.entity.XmEntity;
+import org.sky.scientific.pojo.vo.XmSummary;
+
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -17,15 +18,6 @@ import java.util.List;
  * @since 2025-06-29
  * @since 2025-06-29
  */
  */
 public interface IXmService extends BaseService<XmEntity> {
 public interface IXmService extends BaseService<XmEntity> {
-	/**
-	 * 自定义分页
-	 *
-	 * @param page 分页参数
-	 * @param xm 查询参数
-	 * @return IPage<XmVO>
-	 */
-	IPage<XmVO> selectXmPage(IPage<XmVO> page, XmVO xm);
-
 
 
 	/**
 	/**
 	 * 导出数据
 	 * 导出数据
@@ -49,4 +41,12 @@ public interface IXmService extends BaseService<XmEntity> {
 	 * @return
 	 * @return
 	 */
 	 */
 	boolean updateXm(XmEntity xm);
 	boolean updateXm(XmEntity xm);
+
+	/**
+	 * 项目汇总表
+	 * @param page
+	 * @param xm
+	 * @return
+	 */
+	IPage<XmSummary> summaryPage(IPage<XmSummary> page, XmDTO xm);
 }
 }

+ 62 - 23
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java

@@ -2,22 +2,21 @@
 package org.sky.scientific.service.impl;
 package org.sky.scientific.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import io.swagger.v3.core.util.Json;
+import jakarta.annotation.Resource;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.log.exception.ServiceException;
-import org.sky.scientific.pojo.dto.XmDTO;
-import org.sky.scientific.pojo.entity.XmEntity;
-import org.sky.scientific.pojo.vo.XmVO;
+import org.sky.core.mp.base.BaseServiceImpl;
 import org.sky.scientific.excel.XmExcel;
 import org.sky.scientific.excel.XmExcel;
-import org.sky.scientific.mapper.XmMapper;
+import org.sky.scientific.mapper.*;
+import org.sky.scientific.pojo.dto.XmDTO;
+import org.sky.scientific.pojo.entity.*;
+import org.sky.scientific.pojo.vo.XmSummary;
 import org.sky.scientific.service.IXmService;
 import org.sky.scientific.service.IXmService;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.sky.core.mp.base.BaseServiceImpl;
 
 
-import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
@@ -30,11 +29,23 @@ import java.util.List;
 @Service
 @Service
 public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implements IXmService {
 public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implements IXmService {
 
 
-	@Override
-	public IPage<XmVO> selectXmPage(IPage<XmVO> page, XmVO xm) {
-		return page.setRecords(baseMapper.selectXmPage(page, xm));
-	}
-
+	@Resource
+	private TechnicianMapper technicianMapper;
+
+	@Resource
+	private XmJtbMapper jtbMapper;
+	@Resource
+	private XmJdxbgMapper jdxbgMapper;
+	@Resource
+	private CgZlMapper cgZlMapper;
+	@Resource
+	private CgRjzzqMapper cgRjzzqMapper;
+	@Resource
+	private CgJsbzMapper cgJsbzMapper;
+	@Resource
+	private CgQtMapper cgQtMapper;
+	@Resource
+	private CgKylwMapper cgKylwMapper;
 
 
 	@Override
 	@Override
 	public List<XmExcel> exportXm(Wrapper<XmEntity> queryWrapper) {
 	public List<XmExcel> exportXm(Wrapper<XmEntity> queryWrapper) {
@@ -45,43 +56,71 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 		return xmList;
 		return xmList;
 	}
 	}
 
 
-    @Override
-    public boolean approval(XmDTO xm) {
+	@Override
+	public boolean approval(XmDTO xm) {
 
 
 		this.judgeXmmcAvailable(xm.getXmmc());
 		this.judgeXmmcAvailable(xm.getXmmc());
 
 
 		//检查项目名称是否重复(xm);
 		//检查项目名称是否重复(xm);
 		LambdaQueryWrapper<XmEntity> queryWrapper = Wrappers.<XmEntity>lambdaQuery().eq(XmEntity::getXmmc, xm.getXmmc());
 		LambdaQueryWrapper<XmEntity> queryWrapper = Wrappers.<XmEntity>lambdaQuery().eq(XmEntity::getXmmc, xm.getXmmc());
-		if (baseMapper.selectCount(queryWrapper) > 0){
+		if (baseMapper.selectCount(queryWrapper) > 0) {
 			throw new ServiceException("研发项目名称已存在");
 			throw new ServiceException("研发项目名称已存在");
 		}
 		}
 
 
 		queryWrapper = Wrappers.<XmEntity>lambdaQuery().eq(XmEntity::getXmbh, xm.getXmbh());
 		queryWrapper = Wrappers.<XmEntity>lambdaQuery().eq(XmEntity::getXmbh, xm.getXmbh());
-		if (baseMapper.selectCount(queryWrapper) > 0){
+		if (baseMapper.selectCount(queryWrapper) > 0) {
 			throw new ServiceException("研发项目编号已存在");
 			throw new ServiceException("研发项目编号已存在");
 		}
 		}
 
 
-		if(xm.getYearAmountList() != null && xm.getXmysze().floatValue() > 0){
+		if (xm.getYearAmountList() != null && xm.getXmysze().floatValue() > 0) {
 			double total = xm.getYearAmountList().stream().mapToDouble(t -> ((Float) t.get("amount"))).sum();
 			double total = xm.getYearAmountList().stream().mapToDouble(t -> ((Float) t.get("amount"))).sum();
-			if(total != xm.getXmysze().doubleValue()){
+			if (total != xm.getXmysze().doubleValue()) {
 				throw new ServiceException("项目预算总额明细不对");
 				throw new ServiceException("项目预算总额明细不对");
 			}
 			}
 			xm.setXmyszemx(JSON.toJSONString(xm.getYearAmountList()));
 			xm.setXmyszemx(JSON.toJSONString(xm.getYearAmountList()));
 		}
 		}
 
 
 		return this.save(xm);
 		return this.save(xm);
-    }
+	}
 
 
 	@Override
 	@Override
 	public boolean updateXm(XmEntity xm) {
 	public boolean updateXm(XmEntity xm) {
 		return false;
 		return false;
 	}
 	}
 
 
+	@Override
+	public IPage<XmSummary> summaryPage(IPage<XmSummary> page, XmDTO xm) {
+		List<XmSummary> xmList = baseMapper.summaryPage(page, xm);
+		for (XmSummary xmVO : xmList) {
+			xmVO.setXmfzrxm(technicianMapper.selectLastedOneByTechnicianId(xmVO.getXmfzr()).getName());
+			//立项报告
+			xmVO.setLxbgList(null);
+			//阶段性报告
+			xmVO.setJdxbgList(jdxbgMapper.selectList(Wrappers.<XmJdxbgEntity>lambdaQuery().eq(XmJdxbgEntity::getXmId, xmVO.getId())));
+			//验收报告
+			xmVO.setYsbgList(jtbMapper.selectList(Wrappers.<XmJtbEntity>lambdaQuery().eq(XmJtbEntity::getXmId, xmVO.getId()).isNotNull(XmJtbEntity::getYsbg)));
+			//发明专利
+			xmVO.setFmzlList(cgZlMapper.selectList(Wrappers.<CgZlEntity>lambdaQuery().eq(CgZlEntity::getXmbh, xmVO.getXmbh()).eq(CgZlEntity::getZllx, "发明专利")));
+			//实用新型专利
+			xmVO.setSyxxzlList(cgZlMapper.selectList(Wrappers.<CgZlEntity>lambdaQuery().eq(CgZlEntity::getXmbh, xmVO.getXmbh()).eq(CgZlEntity::getZllx, "实用新型专利")));
+			//软著
+			xmVO.setRzList(cgRjzzqMapper.selectList(Wrappers.<CgRjzzqEntity>lambdaQuery().eq(CgRjzzqEntity::getXmbh, xmVO.getXmbh())));
+			//标准
+			xmVO.setBzList(cgJsbzMapper.selectList(Wrappers.<CgJsbzEntity>lambdaQuery().eq(CgJsbzEntity::getXmbh, xmVO.getXmbh())));
+			//论文
+			xmVO.setLwList(cgKylwMapper.selectList(Wrappers.<CgKylwEntity>lambdaQuery().eq(CgKylwEntity::getXmbh, xmVO.getXmbh())));
+			//其他
+			xmVO.setQtList(cgQtMapper.selectList(Wrappers.<CgQtEntity>lambdaQuery().eq(CgQtEntity::getXmbh, xmVO.getXmbh())));
+		}
+		return page.setRecords(xmList);
+	}
+
 	/**
 	/**
 	 * 判断项目名称是否有效
 	 * 判断项目名称是否有效
+	 *
 	 * @param xmmc
 	 * @param xmmc
 	 */
 	 */
-	private void judgeXmmcAvailable(String xmmc){
+	private void judgeXmmcAvailable(String xmmc) {
 		//技改、技术改造、推广、打样、翻新、产业化、生产线、改造、年产、示范
 		//技改、技术改造、推广、打样、翻新、产业化、生产线、改造、年产、示范
 		List<String> errorWords = Arrays.asList("技改", "技术改造", "推广", "打样", "翻新", "产业化", "生产线", "改造", "年产", "示范");
 		List<String> errorWords = Arrays.asList("技改", "技术改造", "推广", "打样", "翻新", "产业化", "生产线", "改造", "年产", "示范");
 		int index = -1;
 		int index = -1;
@@ -89,7 +128,7 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 			index = xmmc.indexOf(errorWord);
 			index = xmmc.indexOf(errorWord);
 			break;
 			break;
 		}
 		}
-		if(index != -1){
+		if (index != -1) {
 			throw new ServiceException("研发项目名称,不符合统计部门的命名要求!");
 			throw new ServiceException("研发项目名称,不符合统计部门的命名要求!");
 		}
 		}
 	}
 	}

+ 4 - 4
script/fatjar/service.sh

@@ -1,11 +1,11 @@
 #!/bin/bash
 #!/bin/bash
 
 
 #设置jar文件名
 #设置jar文件名
-APP_NAME=app.jar
+APP_NAME=$1
 
 
 #使用说明,用来提示输入参数
 #使用说明,用来提示输入参数
 usage() {
 usage() {
-echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
+echo "Usage: sh 执行脚本.sh APP_NAME [start|stop|restart|status]"
 exit 1
 exit 1
 }
 }
 
 
@@ -26,7 +26,7 @@ is_exist
 if [ $? -eq "0" ]; then
 if [ $? -eq "0" ]; then
 echo "${APP_NAME} is already running. pid=${pid} ."
 echo "${APP_NAME} is already running. pid=${pid} ."
 else
 else
-nohup java -Xms1024m -Xmx1024m -jar $APP_NAME > /dev/null 2>&1 &
+nohup java -Xms512m -Xmx512m -jar $APP_NAME > /dev/null 2>&1 &
 fi
 fi
 }
 }
 
 
@@ -57,7 +57,7 @@ start
 }
 }
 
 
 #根据输入参数,选择执行对应方法,不输入则执行使用说明
 #根据输入参数,选择执行对应方法,不输入则执行使用说明
-case "$1" in
+case "$2" in
 "start")
 "start")
 start
 start
 ;;
 ;;