zhoulisky 8 months ago
parent
commit
e579c27505
28 changed files with 298 additions and 158 deletions
  1. BIN
      doc/xls导入模板/每月工资信息-导入模板.xls
  2. BIN
      doc/xls导入模板/科研资产清单-导入模板.xls
  3. 0 2
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/TechnicianEntity.java
  4. 3 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/XmTechnicianEntity.java
  5. 7 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/SalaryVO.java
  6. 3 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmTechnicianSummary.java
  7. 21 11
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmTechnicianVO.java
  8. 3 0
      kd-service-api/kd-system-api/src/main/java/org/sky/system/pojo/entity/Tenant.java
  9. 2 4
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/AssetController.java
  10. 3 16
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/SalaryController.java
  11. 35 17
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/TechnicianController.java
  12. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/SalaryExcel.java
  13. 1 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/SalaryMapper.xml
  14. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianMapper.java
  15. 7 14
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/ISalaryService.java
  16. 8 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/ITechnicianService.java
  17. 3 14
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AssetServiceImpl.java
  18. 48 65
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/SalaryServiceImpl.java
  19. 135 6
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java
  20. BIN
      kd-service/kd-scientific/src/main/resources/export-template/参研人员花名册.xls
  21. BIN
      kd-service/kd-scientific/src/main/resources/export-template/年度高新科技人员汇总表.xls
  22. BIN
      kd-service/kd-scientific/src/main/resources/export-template/每月实际参研人员名单.xls
  23. BIN
      kd-service/kd-scientific/src/main/resources/export-template/每月工资信息.xls
  24. BIN
      kd-service/kd-scientific/src/main/resources/export-template/科研资产台账.xls
  25. BIN
      kd-service/kd-scientific/src/main/resources/export-template/项目参研人员汇总表.xls
  26. 9 1
      kd-service/kd-system/src/main/java/org/sky/system/controller/UserController.java
  27. 2 2
      kd-service/kd-system/src/main/java/org/sky/system/service/impl/TenantServiceImpl.java
  28. 6 1
      kd-service/kd-system/src/main/java/org/sky/system/wrapper/UserWrapper.java

BIN
doc/xls导入模板/每月工资信息-导入模板.xls


BIN
doc/xls导入模板/科研资产清单-导入模板.xls


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

@@ -59,8 +59,6 @@ public class TechnicianEntity extends TenantEntity {
 	private Integer gender;
 
 	@Schema(description = "出生日期")
-//	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
-//	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private String birthday;
 
 	@Schema(description = "民族")

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

@@ -28,6 +28,9 @@ public class XmTechnicianEntity extends TenantEntity {
 	@Serial
 	private static final long serialVersionUID = 1L;
 
+	@Schema(hidden = true)
+	private String xh;
+
 	@Schema(description = "所属年月,如:202505")
 	@NotBlank(message = "请选择所属年月")
 	@Size(min = 6, max = 6)

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

@@ -1,11 +1,13 @@
 
 package org.sky.scientific.pojo.vo;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.sky.scientific.pojo.dto.SalaryDTO;
 
 import java.io.Serial;
+import java.math.BigDecimal;
 
 /**
  * 每月工资信息视图实体类
@@ -19,4 +21,9 @@ public class SalaryVO extends SalaryDTO {
 	@Serial
 	private static final long serialVersionUID = 1L;
 
+	@Schema(hidden = true)
+	private String xh;
+
+	@Schema(description = "社保单位部分(元)")
+	private BigDecimal total= BigDecimal.ZERO;
 }

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

@@ -15,4 +15,7 @@ public class XmTechnicianSummary {
 
 	@Schema(description = "研发人员列表")
 	private List<XmTechnicianEntity> technicianList;
+
+	@Schema(hidden = true)
+	private String xh;
 }

+ 21 - 11
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/XmTechnicianVO.java

@@ -1,6 +1,7 @@
 
 package org.sky.scientific.pojo.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.sky.scientific.pojo.entity.XmEntity;
@@ -14,43 +15,52 @@ import java.util.List;
  * @author Kd
  * @since 2025-06-29
  */
- @Data
+@Data
 public class XmTechnicianVO implements Serializable {
 
+	@Schema(hidden = true)
+	@JsonIgnore
+	private String xh;
+
 	@Schema(description = "人员唯一标识")
- 	private String unicode;
+	private String unicode;
 
 	@Schema(description = "姓名")
 	private String name;
 	@Schema(description = "人员编号")
- 	private String number;
+	private String number;
 	@Schema(description = "身份证号")
- 	private String idCard;
+	private String idCard;
 
 	@Schema(description = "所属二级单位id")
- 	private Long departmentId;
+	private Long departmentId;
 
 	@Schema(description = "所属二级单位/部门/科室/项目部")
- 	private String department;
+	private String department;
 
 	@Schema(description = "岗位职务")
- 	private String post;
+	private String post;
 
 	@Schema(description = "岗位所在地")
- 	private String postLocation;
+	private String postLocation;
 
 	@Schema(description = "用工性质")
- 	private String nature;
+	private String nature;
 
 	@Schema(description = "参研情况")
- 	private String situation;
+	private String situation;
 
 	@Schema(description = "人员类型")
- 	private String personnelType;
+	private String personnelType;
 
 	@Schema(description = "本年度参研项目")
 	private List<XmEntity> xmList;
 
+	@Schema(description = "参与的研发项目,用;隔开")
+	private String xmmcJoin;
+	@Schema(description = "参研个数")
+	private Integer xmCount;
+
 	@Schema(description = "研发时长")
 	private List<DailyAttendance> hoursList;
 }

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

@@ -42,6 +42,9 @@ public class Tenant extends BaseEntity {
 	@Schema(description = "统一社会信用代码")
 	private String uscc;
 
+	@Schema(description = "logo地址")
+	private String logoUrl;
+
  	@Schema(description = "省级区划编号")
 	private String provinceCode;
 	@Schema(description = "市级区划编号")

+ 2 - 4
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/AssetController.java

@@ -128,10 +128,8 @@ public class AssetController extends KdController {
 	@ApiOperationSupport(order = 19)
 	@Operation(summary = "导出数据", description = "传入zc")
 	public void exportZc(HttpServletResponse response, @RequestBody AssetDTO dto) {
-//		QueryWrapper<AssetEntity> queryWrapper = Condition.getQueryWrapper(asset, AssetEntity.class);
-		service.exportAsset(response, dto);
-//		ExcelUtil.export(response, "资产表数据" + DateUtil.time(), "资产表数据表", list, AssetExcel.class);
-	}
+ 		service.exportAsset(response, dto);
+ 	}
 
 	@GetMapping("/keyanyiqishebeimingxibiao/page")
 	@ApiOperationSupport(order = 20)

+ 3 - 16
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/SalaryController.java

@@ -1,23 +1,17 @@
 
 package org.sky.scientific.controller;
 
-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.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 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.mp.support.Condition;
 import org.sky.core.mp.support.Query;
-import org.sky.core.secure.KdUser;
 import org.sky.core.tool.api.R;
-import org.sky.core.tool.utils.DateUtil;
-import org.sky.scientific.excel.SalaryExcel;
 import org.sky.scientific.pojo.dto.SalaryDTO;
 import org.sky.scientific.pojo.entity.SalaryEntity;
 import org.sky.scientific.pojo.vo.SalaryVO;
@@ -26,7 +20,6 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 技术人员工资表 控制器
@@ -79,17 +72,11 @@ public class SalaryController extends KdController {
 		return R.status(service.clearSalary(salaryList));
 	}
 
- 	@GetMapping("/export")
+ 	@PostMapping("/export-salary")
 	@ApiOperationSupport(order = 9)
 	@Operation(summary = "每月工资信息-导出", description  = "传入salary")
-	public void exportSalary(@Parameter(hidden = true) @RequestParam Map<String, Object> salary, KdUser kdUser, HttpServletResponse response) {
-		QueryWrapper<SalaryEntity> queryWrapper = Condition.getQueryWrapper(salary, SalaryEntity.class);
-		//if (!AuthUtil.isAdministrator()) {
-		//	queryWrapper.lambda().eq(Salary::getTenantId, kdUser.getTenantId());
-		//}
-		//queryWrapper.lambda().eq(SalaryEntity::getIsDeleted, KdConstant.DB_NOT_DELETED);
-		List<SalaryExcel> list = service.exportSalary(queryWrapper);
-		ExcelUtil.export(response, "技术人员工资表数据" + DateUtil.time(), "技术人员工资表数据表", list, SalaryExcel.class);
+	public void exportSalary(HttpServletResponse response, @RequestBody SalaryDTO dto) {
+		service.exportSalary(response, dto);
 	}
 
 }

+ 35 - 17
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/TechnicianController.java

@@ -56,8 +56,8 @@ public class TechnicianController extends KdController {
 	@GetMapping("/page/date-interval")
 	@ApiOperationSupport(order = 2)
 	@Operation(summary = "分页-主要用于查询项目周期内的技术人员数据,传入项目的开始和结束月份,startDate, endDate, 格式:202505")
-	public R<IPage<TechnicianEntity>> pageByDateInterval(@RequestParam HashMap<String,String> param, Query query) {
-		IPage<TechnicianEntity> pages = technicianService.selectTechnicianPageByDateInterval(Condition.getPage(query),param);
+	public R<IPage<TechnicianEntity>> pageByDateInterval(@RequestParam HashMap<String, String> param, Query query) {
+		IPage<TechnicianEntity> pages = technicianService.selectTechnicianPageByDateInterval(Condition.getPage(query), param);
 		return R.data(pages);
 	}
 
@@ -95,7 +95,7 @@ public class TechnicianController extends KdController {
 	@ApiOperationSupport(order = 9)
 	@Operation(summary = "导出数据", description = "传入technician")
 	public void exportTechnician(HttpServletResponse response, @RequestBody TechnicianDTO technician) {
-		technicianService.exportTechnician(response,technician);
+		technicianService.exportTechnician(response, technician);
 	}
 
 
@@ -117,14 +117,14 @@ public class TechnicianController extends KdController {
 	@GetMapping("xm/monthly/page")
 	@ApiOperationSupport(order = 20)
 	@Operation(summary = "每月实际参研人员名单-分页")
-	public R<IPage<XmTechnicianEntity>> meiyueshijicanyuanrenyuanmingdan(XmTechnicianDto entity, Query query){
-		return R.data(technicianService.meiyueshijicanyuanrenyuanmingdan(entity, Condition.getPage(query)));
+	public R<IPage<XmTechnicianEntity>> meiyueshijicanyuanrenyuanmingdan(XmTechnicianDto entity, Query query) {
+		return R.data(technicianService.meiyueshijicanyuanrenyuanmingdan(Condition.getPage(query), entity));
 	}
 
 	@GetMapping("xm/monthly/yyysbmd")
 	@ApiOperationSupport(order = 21)
 	@Operation(summary = "每月实际参研人员名单-直接引用预算表名单", description = "传入xmId、yearAndMonth")
-	public R<Boolean> zhijieyinyongyusuanbiaomingdan(String yearAndMonth){
+	public R<Boolean> zhijieyinyongyusuanbiaomingdan(String yearAndMonth) {
 		technicianService.zhijieyinyongyusuanbiaomingdan(yearAndMonth);
 		return R.success();
 	}
@@ -132,56 +132,74 @@ public class TechnicianController extends KdController {
 	@PostMapping("xm/monthly/submit")
 	@ApiOperationSupport(order = 22)
 	@Operation(summary = "每月实际参研人员名单-新增")
-	public R<Boolean> submitXmTechnicianMonthly(@Valid @RequestBody XmTechnicianEntity entity){
+	public R<Boolean> submitXmTechnicianMonthly(@Valid @RequestBody XmTechnicianEntity entity) {
 		return R.status(technicianService.submitXmTechnicianMonthly(entity));
 	}
 
 	@DeleteMapping("xm/monthly/remove")
 	@ApiOperationSupport(order = 23)
 	@Operation(summary = "每月实际参研人员名单-删除")
-	public R<Boolean> removeXmTechnicianMonthly(@Parameter(description = "主键集合", required = true) @RequestParam String ids){
+	public R<Boolean> removeXmTechnicianMonthly(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(technicianService.physicalDeleteXmTechnicianMonthlyByIds(Func.toLongList(ids)));
 	}
 
 	@PostMapping("xm/monthly/export")
 	@ApiOperationSupport(order = 24)
 	@Operation(summary = "每月实际参研人员名单-导出")
-	public void exportXmTechnicianMonthly(@RequestBody XmTechnicianEntity entity, HttpServletResponse response){
-		technicianService.exportXmTechnicianMonthly(entity);
+	public void exportXmTechnicianMonthly(@RequestBody XmTechnicianDto dto, HttpServletResponse response) {
+		technicianService.exportXmTechnicianMonthly(response, dto);
 	}
 
 	@GetMapping("cyryhmc")
 	@ApiOperationSupport(order = 25)
 	@Operation(summary = "参研人员花名册")
-	public R<IPage<XmTechnicianVO>> canyanrenyuanhuamingce(XmTechnicianDto entity, Query query){
+	public R<IPage<XmTechnicianVO>> canyanrenyuanhuamingce(XmTechnicianDto entity, Query query) {
 		return R.data(technicianService.canyanrenyuanhuamingce(Condition.getPage(query), entity));
 	}
+	@PostMapping("cyryhmc-export")
+	@ApiOperationSupport(order = 24)
+	@Operation(summary = "参研人员花名册-导出")
+	public void exportCyryhmc(@RequestBody XmTechnicianDto dto, HttpServletResponse response) {
+		technicianService.exportCyryhmc(response, dto);
+	}
 
 	@GetMapping("xmcyryhzb")
 	@ApiOperationSupport(order = 26)
 	@Operation(summary = "项目参研人员汇总表")
-	public R<IPage<XmTechnicianSummary>> xiangmucanyanrenyuanhuizongbiao(XmTechnicianEntity entity, Query query){
+	public R<IPage<XmTechnicianSummary>> xiangmucanyanrenyuanhuizongbiao(XmTechnicianEntity entity, Query query) {
 		return R.data(technicianService.xiangmucanyanrenyuanhuizongbiao(Condition.getPage(query), entity));
 	}
+	@PostMapping("xmcyryhzb-export")
+	@ApiOperationSupport(order = 27)
+	@Operation(summary = "项目参研人员汇总表-导出")
+	public void exportXmcyryhzb(@RequestBody XmTechnicianEntity dto, HttpServletResponse response) {
+		technicianService.exportXmcyryhzb(response, dto);
+	}
 
 	@GetMapping("ndgkjryhzb")
-	@ApiOperationSupport(order = 26)
-	@Operation(summary = "年度高新科技人员汇总表")
-	public R<IPage<TechnicianVO>> niandugaokejirenyuanhuizongbiao(TechnicianDTO dto, Query query){
+	@ApiOperationSupport(order = 28)
+	@Operation(summary = "年度科技人员汇总表")
+	public R<IPage<TechnicianVO>> niandugaokejirenyuanhuizongbiao(TechnicianDTO dto, Query query) {
 		return R.data(technicianService.niandugaokejirenyuanhuizongbiao(Condition.getPage(query), dto));
 	}
+	@PostMapping("ndgkjryhzb-export")
+	@ApiOperationSupport(order = 29)
+	@Operation(summary = "年度科技人员汇总表-导出")
+	public void exportNdgkjryhzb(@RequestBody TechnicianDTO dto, HttpServletResponse response) {
+		technicianService.exportNdgkjryhzb(response, dto);
+	}
 
 	@GetMapping("myyfryrgfyfpb")
 	@ApiOperationSupport(order = 30)
 	@Operation(summary = "每月研发人员人工费用分配表")
-	public R<IPage<XmTechnicianSalaryVO>> meiyueyanfarengongfeiyongfeifenpeibiao(XmTechnicianDto dto, Query query){
+	public R<IPage<XmTechnicianSalaryVO>> meiyueyanfarengongfeiyongfeifenpeibiao(XmTechnicianDto dto, Query query) {
 		return R.data(technicianService.meiyueyanfarengongfeiyongfeifenpeibiao(Condition.getPage(query), dto));
 	}
 
 	@GetMapping("myyfxmrgfyhzb")
 	@ApiOperationSupport(order = 31)
 	@Operation(summary = "每月研发项目人工分配汇总表")
-	public R<IPage<XmSalaryVO>> meiyueyanfaxiangmurengongfenpeihuizongbiao(XmSalaryDto dto, Query query){
+	public R<IPage<XmSalaryVO>> meiyueyanfaxiangmurengongfenpeihuizongbiao(XmSalaryDto dto, Query query) {
 		return R.data(technicianService.meiyueyanfaxiangmurengongfenpeihuizongbiao(Condition.getPage(query), dto));
 	}
 }

+ 1 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/SalaryExcel.java

@@ -30,7 +30,7 @@ public class SalaryExcel implements Serializable {
 
 	@ColumnWidth(20)
 	@ExcelProperty("序号")
-	private String serialNumber;
+	private String xh;
 
 	@ColumnWidth(40)
 	@ExcelProperty("工号")

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

@@ -96,6 +96,7 @@
 
     <select id="selectSalaryPage" resultMap="ResultVoMap">
         SELECT
+        s.year_and_month,
         s.unicode,
         t.name,
         t.number,

+ 1 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianMapper.java

@@ -31,7 +31,7 @@ public interface XmTechnicianMapper extends BaseMapper<XmTechnicianEntity> {
 	 * @param entity
 	 * @return
 	 */
-	IPage<XmTechnicianEntity> meiyueshijicanyuanrenyuanmingdan(IPage<Object> page, @Param("ew") XmTechnicianDto entity);
+	IPage<XmTechnicianEntity> meiyueshijicanyuanrenyuanmingdan(IPage<XmTechnicianEntity> page, @Param("ew") XmTechnicianDto entity);
 
 	/**
 	 * 批量物理删除

+ 7 - 14
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/ISalaryService.java

@@ -1,10 +1,9 @@
 
 package org.sky.scientific.service;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import jakarta.servlet.http.HttpServletResponse;
 import org.sky.core.mp.base.BaseService;
-import org.sky.scientific.excel.SalaryExcel;
 import org.sky.scientific.pojo.dto.SalaryDTO;
 import org.sky.scientific.pojo.entity.SalaryEntity;
 import org.sky.scientific.pojo.vo.SalaryVO;
@@ -30,19 +29,11 @@ public interface ISalaryService extends BaseService<SalaryEntity> {
 
 
 	/**
-	 * 导出数据
-	 *
-	 * @param queryWrapper 查询条件
-	 * @return List<SalaryExcel>
-	 */
-	List<SalaryExcel> exportSalary(Wrapper<SalaryEntity> queryWrapper);
-
-	/**
-	 * 保存
-	 * @param salary
-	 * @return
+	 * 导出
+	 * @param response
+	 * @param dto
 	 */
-	boolean saveSalary(SalaryEntity salary);
+	void exportSalary(HttpServletResponse response, SalaryDTO dto);
 
 	/**
 	 *
@@ -66,4 +57,6 @@ public interface ISalaryService extends BaseService<SalaryEntity> {
 	 * @return
 	 */
 	boolean fetchTechnicianByYearAndMonth(String yearAndMonth);
+
+
 }

+ 8 - 3
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/ITechnicianService.java

@@ -80,7 +80,7 @@ public interface ITechnicianService extends BaseService<TechnicianEntity> {
 	 * @param page
 	 * @return
 	 */
-	IPage<XmTechnicianEntity> meiyueshijicanyuanrenyuanmingdan(XmTechnicianDto entity, IPage<Object> page);
+	IPage<XmTechnicianEntity> meiyueshijicanyuanrenyuanmingdan(IPage<XmTechnicianEntity> page,XmTechnicianDto entity);
 
 	/**
 	 * 每月实际参研人员名单-新增或修改
@@ -98,9 +98,8 @@ public interface ITechnicianService extends BaseService<TechnicianEntity> {
 
 	/**
 	 * 每月实际参研人员名单-导出
-	 * @param entity
 	 */
-	void exportXmTechnicianMonthly(XmTechnicianEntity entity);
+	void exportXmTechnicianMonthly(HttpServletResponse response,XmTechnicianDto dto);
 
 	/**
 	 * 分页-主要用于查询项目周期内的技术人员数据,传入项目的开始和结束日期,startDate, endDate, 格式:20250509
@@ -147,4 +146,10 @@ public interface ITechnicianService extends BaseService<TechnicianEntity> {
 	 * @return
 	 */
 	IPage<XmSalaryVO> meiyueyanfaxiangmurengongfenpeihuizongbiao(IPage<XmSalaryVO> page, XmSalaryDto dto);
+
+	void exportCyryhmc(HttpServletResponse response, XmTechnicianDto dto);
+
+	void exportXmcyryhzb(HttpServletResponse response, XmTechnicianEntity dto);
+
+	void exportNdgkjryhzb(HttpServletResponse response, TechnicianDTO dto);
 }

+ 3 - 14
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AssetServiceImpl.java

@@ -39,7 +39,6 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -90,17 +89,10 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 		return this.save(asset);
 	}
 
-//	public static void main(String[] args) {
-//
-//		long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(DateUtil.parse("202501", DateUtil.PATTERN_YYYYMM), DateUtil.parse("2024-05-01", DateUtil.PATTERN_DATE), false);
-////		long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(new Date(), new Date(), true);
-//		System.out.println(ysysm);
-//	}
-
 	@Override
 	public void importAsset(MultipartFile file, String yearAndMonth) {
 
-		List<AssetExcel> data = ExcelUtil.read(file, AssetExcel.class);
+		List<AssetExcel> data = ExcelUtil.read(file, 0, 2, AssetExcel.class);
 
 		for (AssetExcel excel : data) {
 			AssetEntity zc = Objects.requireNonNull(BeanUtil.copyProperties(excel, AssetDTO.class));
@@ -178,13 +170,10 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 
 		Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
 		List<AssetVO> assetVOList = this.selectAssetPage(Condition.getPage(query), dto).getRecords();
-		if (CollectionUtil.isEmpty(assetVOList)) {
-			throw new ServiceException("企业科研资产无数据!");
-		}
+
 		AtomicInteger i = new AtomicInteger(1);
 		assetVOList.forEach(temp -> {
-//			temp.setGenderName(DictCache.getValue(DictEnum.SEX, temp.getGender()));
-			temp.setXh(i.getAndIncrement());
+ 			temp.setXh(i.getAndIncrement());
 		});
 
 		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/科研资产台账.xls");

+ 48 - 65
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/SalaryServiceImpl.java

@@ -1,14 +1,21 @@
 
 package org.sky.scientific.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.SneakyThrows;
 import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.mp.base.BaseServiceImpl;
+import org.sky.core.mp.support.Condition;
+import org.sky.core.mp.support.Query;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.excel.SalaryExcel;
 import org.sky.scientific.mapper.SalaryMapper;
@@ -24,9 +31,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 每月工资信息 服务实现类
@@ -48,70 +56,45 @@ public class SalaryServiceImpl extends BaseServiceImpl<SalaryMapper, SalaryEntit
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		List<SalaryVO> voList = baseMapper.selectSalaryPage(page, salary);
-		//如果数据空,则查询该年度整体是否有数据
-//		if (voList.isEmpty()) {
-//			LambdaQueryWrapper<SalaryEntity> wrapper = Wrappers.<SalaryEntity>query ().lambda()
-//				.eq(SalaryEntity::getYearAndMonth, salary.getYearAndMonth())
-//				.eq(SalaryEntity::getTenantId, AuthUtil.getTenantId())
-//				.eq(SalaryEntity::getIsDeleted, 0);
-//			if (baseMapper.selectCount(wrapper) == 0) {
-//				 //将本年度技术人员基础数据插入工资表,工资数据为空
-//
-//			}
-//		}
+
 		return page.setRecords(voList);
 	}
 
 
+	@SneakyThrows
 	@Override
-	public List<SalaryExcel> exportSalary(Wrapper<SalaryEntity> queryWrapper) {
-		List<SalaryExcel> salaryList = baseMapper.exportSalary(queryWrapper);
-		//salaryList.forEach(salary -> {
-		//	salary.setTypeName(DictCache.getValue(DictEnum.YES_NO, Salary.getType()));
-		//});
-		return salaryList;
-	}
-
-	@Override
-	public boolean saveSalary(SalaryEntity salary) {
-
-		Integer affectNum = 0;
-		if (StringUtil.isBlank(salary.getYearAndMonth())) {
-			salary.setYearAndMonth(DateUtil.format(DateUtil.now(), DateUtil.PATTERN_YYYY));
+	public void exportSalary(HttpServletResponse response, SalaryDTO dto){
+
+		Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
+		List<SalaryVO> assetVOList = this.selectSalaryPage(Condition.getPage(query), dto).getRecords();
+
+		AtomicInteger i = new AtomicInteger(1);
+ 		assetVOList.forEach(temp -> {
+			temp.setXh(i.getAndIncrement()+"");
+			temp.setTotal(temp.getPensionInsurance().add(temp.getMedicalInsurance()).add(temp.getUnemploymentInsurance()).add(temp.getInjuryInsurance()).add(temp.getMaternityInsurance()));
+		});
+
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/每月工资信息.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("每月工资信息.xls", Charsets.UTF_8));
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(assetVOList, writeSheet);
+		Map<String,Object> map = new HashMap<>();
+		map.put("year", dto.getYearAndMonth().substring(0,4));
+		map.put("month", dto.getYearAndMonth().substring(4));
+		excelWriter.fill(map, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
 		}
-//		//从技术人员花名册中根据年份和人员信息,查询人员是否存在
-//		TechnicianEntity technician = new TechnicianEntity();
-//		technician.setYearAndMonth(salary.getYearAndMonth());
-//		technician.setNumber(salary.getNumber());
-//		technician.setIdentityCard(salary.getIdentityCard());
-//		technician.setTenantId(AuthUtil.getTenantId());
-//		Integer countWithTechnician = technicianMapper.selectPrimaryByDateAndNumberOrIdentityCard(technician);
-//		//不存在则抛出异常
-//		if(countWithTechnician == 0){
-//			throw new ServiceException("[" + salary.getYearAndMonth() + "]年度内无人员[" + salary.getName() + "、" + salary.getNumber() + "、" + salary.getIdentityCard() + "]");
-//		}else {
-//			//存在则根据年份和人员信息查询工资是否存在
-//			LambdaQueryWrapper<SalaryEntity> wrapper = Wrappers.<SalaryEntity>query().lambda()
-//				.eq(SalaryEntity::getYearAndMonth, salary.getYearAndMonth())
-//				.eq(SalaryEntity::getNumber, salary.getNumber())
-//				.eq(SalaryEntity::getIdentityCard, salary.getIdentityCard())
-//				.eq(SalaryEntity::getTenantId, AuthUtil.getTenantId())
-//				.eq(SalaryEntity::getIsDeleted, 0);
-//			//存在则覆盖
-//			if (baseMapper.selectCount(wrapper) > 0) {
-//				LambdaUpdateWrapper<SalaryEntity> updateWrapper = Wrappers.<SalaryEntity>update().lambda()
-//					.eq(SalaryEntity::getYearAndMonth, salary.getYearAndMonth())
-//					.eq(SalaryEntity::getNumber, salary.getNumber())
-//					.eq(SalaryEntity::getIdentityCard, salary.getIdentityCard())
-//					.eq(SalaryEntity::getTenantId, AuthUtil.getTenantId())
-//					.eq(SalaryEntity::getIsDeleted, 0);
-//				affectNum = baseMapper.update(salary, updateWrapper);
-//			}else {
-//				//不存在则新增
-//				affectNum = baseMapper.insert(salary);
-//			}
-//		}
-		return affectNum > 0;
+
 	}
 
 	@Override
@@ -228,7 +211,7 @@ public class SalaryServiceImpl extends BaseServiceImpl<SalaryMapper, SalaryEntit
 
 		for (SalaryExcel excel : data) {
 			if(StringUtil.isAllBlank(excel.getNumber(), excel.getIdCard())){
-				throw new ServiceException("序号为["+excel.getSerialNumber()+"]的工号和身份证不能都为空");
+				throw new ServiceException("序号为["+excel.getXh()+"]的工号和身份证不能都为空");
 			}
 			//根据工号或者身份证查询technicianId
 			LambdaQueryWrapper<TechnicianEntity> wrapper = Wrappers.<TechnicianEntity>lambdaQuery()
@@ -236,7 +219,7 @@ public class SalaryServiceImpl extends BaseServiceImpl<SalaryMapper, SalaryEntit
 				.and(t -> t.eq(TechnicianEntity::getNumber, excel.getNumber()).or().eq(TechnicianEntity::getIdCard, excel.getIdCard()));
 			TechnicianEntity dbTechnician = technicianMapper.selectOne(wrapper);
 			if(dbTechnician == null){
-				throw new ServiceException("序号为["+excel.getSerialNumber()+"]的工号和者身份证都不存在");
+				throw new ServiceException("序号为["+excel.getXh()+"]的工号和者身份证都不存在");
 			}
 
 			//非本月实际参研人员,提示“某某非本月实际参研人员,请核对数据”
@@ -249,7 +232,7 @@ public class SalaryServiceImpl extends BaseServiceImpl<SalaryMapper, SalaryEntit
 				.eq(SalaryEntity::getYearAndMonth, yearAndMonth)
 				.eq(SalaryEntity::getUnicode, dbTechnician.getUnicode());
 			if(baseMapper.selectCount(queryWrapper) > 0){
-				throw new ServiceException("序号为["+excel.getSerialNumber()+"]的工资数据已存在, 导入失败");
+				throw new ServiceException("序号为["+excel.getXh()+"]的工资数据已存在, 导入失败");
 			}
 
 			SalaryEntity entity = Objects.requireNonNull(BeanUtil.copyProperties(excel, SalaryDTO.class));

+ 135 - 6
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java

@@ -39,6 +39,7 @@ import java.io.InputStream;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 
 /**
  * 技术人员花名册 服务实现类
@@ -293,10 +294,43 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 	}
 
 	@Override
-	public IPage<XmTechnicianEntity> meiyueshijicanyuanrenyuanmingdan(XmTechnicianDto entity, IPage<Object> page) {
+	public IPage<XmTechnicianEntity> meiyueshijicanyuanrenyuanmingdan( IPage<XmTechnicianEntity> page,XmTechnicianDto entity) {
 		return xmTechnicianMapper.meiyueshijicanyuanrenyuanmingdan(page, entity);
 	}
 
+	@SneakyThrows
+	@Override
+	public void exportXmTechnicianMonthly(HttpServletResponse response,XmTechnicianDto dto) {
+		Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
+		List<XmTechnicianEntity> list = this.meiyueshijicanyuanrenyuanmingdan(Condition.getPage(query), dto).getRecords();
+
+		AtomicInteger i = new AtomicInteger(1);
+		list.forEach(temp -> {
+			temp.setXh(i.getAndIncrement()+"");
+ 		});
+
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/每月实际参研人员名单.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("每月实际参研人员名单.xls", Charsets.UTF_8));
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(list, writeSheet);
+		Map<String,Object> map = new HashMap<>();
+		map.put("year", dto.getYearAndMonth().substring(0,4));
+		map.put("month", dto.getYearAndMonth().substring(4));
+		excelWriter.fill(map, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
+		}
+	}
+
 	@Override
 	public boolean submitXmTechnicianMonthly(XmTechnicianEntity entity) {
 		int affectNum = 0;
@@ -326,11 +360,6 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 	}
 
 	@Override
-	public void exportXmTechnicianMonthly(XmTechnicianEntity entity) {
-
-	}
-
-	@Override
 	public IPage<TechnicianEntity> selectTechnicianPageByDateInterval(IPage<TechnicianEntity> page, HashMap<String, String> param) {
 		if (!param.containsKey("startDate") || !param.containsKey("endDate")) {
 			throw new ServiceException("startDate或者endDate为空");
@@ -427,4 +456,104 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		return page.setRecords(list);
 	}
 
+	@SneakyThrows
+	@Override
+	public void exportCyryhmc(HttpServletResponse response, XmTechnicianDto dto) {
+		Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
+		List<XmTechnicianVO> list = this.canyanrenyuanhuamingce(Condition.getPage(query), dto).getRecords();
+
+		AtomicInteger i = new AtomicInteger(1);
+		list.forEach(temp -> {
+			temp.setXh(i.getAndIncrement()+"");
+			temp.setXmmcJoin(temp.getXmList().stream().map(XmEntity::getXmmc).collect(Collectors.joining(";")));
+			temp.setXmCount(temp.getXmList().size());
+		});
+
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/参研人员花名册.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("参研人员花名册.xls", Charsets.UTF_8));
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(list, writeSheet);
+		Map<String,Object> map = new HashMap<>();
+		map.put("year", dto.getYearAndMonth().substring(0,4));
+		map.put("month", dto.getYearAndMonth().substring(4));
+		excelWriter.fill(map, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
+		}
+	}
+
+	@SneakyThrows
+	@Override
+	public void exportXmcyryhzb(HttpServletResponse response, XmTechnicianEntity dto) {
+		Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
+		List<XmTechnicianSummary> list = this.xiangmucanyanrenyuanhuizongbiao(Condition.getPage(query), dto).getRecords();
+
+		AtomicInteger i = new AtomicInteger(1);
+		list.forEach(temp -> {
+			temp.setXh(i.getAndIncrement()+"");
+		});
+
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/项目参研人员汇总表.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("项目参研人员汇总表.xls", Charsets.UTF_8));
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(list, writeSheet);
+		Map<String,Object> map = new HashMap<>();
+		map.put("year", dto.getYearAndMonth().substring(0,4));
+		map.put("month", dto.getYearAndMonth().substring(4));
+		excelWriter.fill(map, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
+		}
+	}
+
+	@SneakyThrows
+	@Override
+	public void exportNdgkjryhzb(HttpServletResponse response, TechnicianDTO dto) {
+		Query query = new Query().setCurrent(1).setSize(Integer.MAX_VALUE);
+		List<TechnicianVO> list = this.niandugaokejirenyuanhuizongbiao(Condition.getPage(query), dto).getRecords();
+
+		AtomicInteger i = new AtomicInteger(1);
+		list.forEach(temp -> {
+			temp.setXh(i.getAndIncrement());
+		});
+
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/年度高新科技人员汇总表.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("年度高新科技人员汇总表.xls", Charsets.UTF_8));
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(list, writeSheet);
+		Map<String,Object> map = new HashMap<>();
+		map.put("year", dto.getYearAndMonth().substring(0,4));
+		excelWriter.fill(map, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
+		}
+	}
+
 }

BIN
kd-service/kd-scientific/src/main/resources/export-template/参研人员花名册.xls


BIN
kd-service/kd-scientific/src/main/resources/export-template/年度高新科技人员汇总表.xls


BIN
kd-service/kd-scientific/src/main/resources/export-template/每月实际参研人员名单.xls


BIN
kd-service/kd-scientific/src/main/resources/export-template/每月工资信息.xls


BIN
kd-service/kd-scientific/src/main/resources/export-template/科研资产台账.xls


BIN
kd-service/kd-scientific/src/main/resources/export-template/项目参研人员汇总表.xls


+ 9 - 1
kd-service/kd-system/src/main/java/org/sky/system/controller/UserController.java

@@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -104,8 +105,15 @@ public class UserController {
 	@ApiOperationSupport(order = 3)
 	@Operation(summary = "列表", description = "传入account和realName")
 	public R<IPage<UserVO>> page(@Parameter(hidden = true) User user, Query query, Long deptId, KdUser kdUser) {
+		Date now = new Date();
+		System.out.println("开始:" + now);
 		IPage<User> pages = userService.selectUserPage(Condition.getPage(query), user, deptId, (kdUser.getTenantId().equals(KdConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : kdUser.getTenantId()));
-		return R.data(UserWrapper.build().pageVO(pages));
+		System.out.println("开始1:" + (new Date().getTime()-now.getTime()));
+		now = new Date();
+		IPage<UserVO> page = UserWrapper.build().pageVO(pages);
+		System.out.println("耗时:" + (new Date().getTime() - now.getTime()));
+
+		return R.data(page);
 	}
 
 	/**

+ 2 - 2
kd-service/kd-system/src/main/java/org/sky/system/service/impl/TenantServiceImpl.java

@@ -62,8 +62,8 @@ public class TenantServiceImpl extends BaseServiceImpl<TenantMapper, Tenant> imp
 	public IPage<Tenant> selectTenantPage(IPage<Tenant> page, Tenant tenant) {
 		List<Tenant> tenants = baseMapper.selectTenantPage(page, tenant);
 		for (Tenant t : tenants) {
-			if (Func.isNotEmpty(t.getCityCode())) {
-				Region region = RegionCache.getByCode(t.getCityCode());
+			if (Func.isNotEmpty(t.getDistrictCode())) {
+				Region region = RegionCache.getByCode(t.getDistrictCode());
 				if (region != null) {
 					t.setRegionName(region.getProvinceName() + "-" + region.getCityName() + "-" + region.getDistrictName());
 				}

+ 6 - 1
kd-service/kd-system/src/main/java/org/sky/system/wrapper/UserWrapper.java

@@ -12,9 +12,10 @@
  import org.sky.system.pojo.enums.DictEnum;
  import org.sky.system.pojo.vo.UserVO;
 
+ import java.util.Date;
  import java.util.List;
 
-/**
+ /**
  * 包装类,返回视图层所需的字段
  *
    */
@@ -26,11 +27,14 @@ public class UserWrapper extends BaseEntityWrapper<User, UserVO> {
 
 	@Override
 	public UserVO entityVO(User user) {
+		Date now = new Date();
 		UserVO userVO = BeanUtil.copyProperties(user, UserVO.class);
 		if (userVO == null) {
 			return null;
 		}
+
 		Tenant tenant = SysCache.getTenant(user.getTenantId());
+
 		if (tenant != null) {
 			userVO.setTenantName(tenant.getTenantName());
 		}
@@ -57,6 +61,7 @@ public class UserWrapper extends BaseEntityWrapper<User, UserVO> {
 		}
 		userVO.setSexName(DictCache.getValue(DictEnum.SEX, user.getSex()));
 		userVO.setUserTypeName(DictCache.getValue(DictEnum.USER_TYPE, user.getUserType()));
+		System.out.println("111111111:" + (new Date().getTime()-now.getTime()));
 		return userVO;
 	}