Browse Source

333312121

zhoulisky 4 months ago
parent
commit
e8516c884b

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

@@ -76,7 +76,7 @@ public class XmEntity extends TenantEntity {
 	@Schema(description = "项目来源")
 	@Schema(description = "项目来源")
 	private String xmly;
 	private String xmly;
 
 
-	@NotNull(message = "请选择项目开展形式")
+	@NotBlank(message = "请选择项目开展形式")
 	@Schema(description = "项目开展形式")
 	@Schema(description = "项目开展形式")
 	private String xmkzxs;
 	private String xmkzxs;
 
 
@@ -92,7 +92,7 @@ public class XmEntity extends TenantEntity {
  	private BigDecimal xmysze;
  	private BigDecimal xmysze;
 
 
 	@Schema(description = "项目预算明细")
 	@Schema(description = "项目预算明细")
-	@NotNull(message = "请填写项目预算")
+	@NotBlank(message = "请填写项目预算")
 	private String xmyszemx;
 	private String xmyszemx;
 
 
  	@Schema(description = "立项批文")
  	@Schema(description = "立项批文")

+ 4 - 1
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/YsSjfyEntity.java

@@ -1,6 +1,8 @@
 
 
 package org.sky.scientific.pojo.entity;
 package org.sky.scientific.pojo.entity;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.Data;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -26,10 +28,11 @@ public class YsSjfyEntity extends TenantEntity {
 
 
 	@Schema(description = "科研项目id,kd_xm的主键")
 	@Schema(description = "科研项目id,kd_xm的主键")
 	@NotNull(message = "请选择研发项目")
 	@NotNull(message = "请选择研发项目")
+	@JsonFormat
 	private Long xmId;
 	private Long xmId;
 
 
 	@Schema(description = "设计内容或详情")
 	@Schema(description = "设计内容或详情")
-	@NotNull(message = "请填写设计内容或详情")
+	@NotBlank(message = "请填写设计内容或详情")
 	private String sjnr;
 	private String sjnr;
 
 
 	@NotNull(message = "请填写预算金额")
 	@NotNull(message = "请填写预算金额")

+ 2 - 7
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/XmCostDetailsExcel.java

@@ -3,10 +3,7 @@ package org.sky.scientific.excel;
 
 
 
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.format.DateTimeFormat;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.Data;
-import org.sky.core.tool.utils.DateUtil;
 
 
 import java.io.Serial;
 import java.io.Serial;
 import java.io.Serializable;
 import java.io.Serializable;
@@ -30,8 +27,6 @@ public class XmCostDetailsExcel implements Serializable {
 	private String serialNumber;
 	private String serialNumber;
 
 
 	@ExcelProperty(index = 1, value = "日期")
 	@ExcelProperty(index = 1, value = "日期")
-	@DateTimeFormat(DateUtil.PATTERN_DATE)
-	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date recordDate;
 	private Date recordDate;
 
 
 	@ExcelProperty(index = 2,value = "研发项目编号")
 	@ExcelProperty(index = 2,value = "研发项目编号")
@@ -49,10 +44,10 @@ public class XmCostDetailsExcel implements Serializable {
 	@ExcelProperty(index = 6,value ="摘要")
 	@ExcelProperty(index = 6,value ="摘要")
 	private String digest;
 	private String digest;
 
 
-  	@ExcelProperty(index = 7,value ="企业科目代码")
+  	@ExcelProperty(index = 7,value ="科目代码")
 	private String eSubjectCode;
 	private String eSubjectCode;
 
 
-	@ExcelProperty(index = 8,value ="企业科目名称(到最末级科目)")
+	@ExcelProperty(index = 8,value ="科目名称(到最末级科目)")
 	private String eSubjectName;
 	private String eSubjectName;
 
 
 	@ExcelProperty(index = 9,value ="金额")
 	@ExcelProperty(index = 9,value ="金额")

+ 77 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/XmCostDetailImportListener.java

@@ -0,0 +1,77 @@
+package org.sky.scientific.excel.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.sky.core.tool.utils.DateUtil;
+import org.sky.core.tool.utils.Func;
+import org.sky.scientific.excel.XmCostDetailsExcel;
+import org.sky.scientific.utils.ImportResult;
+import org.sky.scientific.utils.ValidationUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class XmCostDetailImportListener extends BaseReadListener {
+
+	@Override
+	public void invoke(Map<Integer, String> map, AnalysisContext context) {
+		int rowIndex = context.readRowHolder().getRowIndex() + 1;
+
+		ImportResult<Object> result = convertAndValidate(map, rowIndex);
+		resultList.add(result);
+		if (result.isSuccess()) {
+			dataList.add(result.getData());
+			incrementSuccessCount();
+		} else {
+			incrementErrorCount();
+		}
+	}
+
+	private ImportResult<Object> convertAndValidate(Map<Integer, String> data, int rowIndex) {
+
+		List<String> errors = new ArrayList<>();
+
+		XmCostDetailsExcel excel = new XmCostDetailsExcel();
+		excel.setSerialNumber(data.get(0));
+		Date recordDate = ValidationUtils.safeParseDate(data.get(1), DateUtil.PATTERN_DATE);
+		if(recordDate==null){
+			errors.add("日期为空或格式错误,yyyy-MM-dd");
+		}
+		excel.setXmbh(data.get(2));
+		if(Func.isBlank(excel.getXmbh())){
+			errors.add("研发项目编号为空");
+		}
+		excel.setVoucherNumber(data.get(5));
+		if(Func.isBlank(excel.getVoucherNumber())){
+			errors.add("凭证字号为空");
+		}
+		excel.setDigest(data.get(6));
+		if(Func.isBlank(excel.getDigest())){
+			errors.add("摘要为空");
+		}
+		excel.setESubjectCode(data.get(7));
+		if(Func.isBlank(excel.getESubjectCode())){
+			errors.add("科目代码为空");
+		}
+		excel.setESubjectName(data.get(8));
+		if(Func.isBlank(excel.getESubjectName())){
+			errors.add("科目名称为空");
+		}
+
+		excel.setAmount(ValidationUtils.safeParseBigDecimal(data.get(9)));
+		if(Func.isNull(excel.getAmount())){
+			errors.add("金额为空或格式错误");
+		}
+
+		errors.addAll(ValidationUtils.validate(excel));
+		if (!errors.isEmpty()) {
+			return ImportResult.error(rowIndex, errors, data.toString());
+		}
+		return ImportResult.success(rowIndex, excel);
+	}
+}

+ 2 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/A107_1Mapper.xml

@@ -5,7 +5,7 @@
     <select id="qyyjkfxmqk" resultType="org.sky.scientific.pojo.vo.A107_1VO">
     <select id="qyyjkfxmqk" resultType="org.sky.scientific.pojo.vo.A107_1VO">
         SELECT
         SELECT
         xm.*, tmp.xm_stage,
         xm.*, tmp.xm_stage,
-        ifnull(tmp.gov_bonus,0.00),
+        ifnull(tmp.gov_bonus,0.00) as govBonus,
         IFNULL((SELECT COUNT(DISTINCT unicode) FROM kd_xm_technician xt where xt.xm_id = xm.xm_id GROUP BY xt.year_and_month ORDER BY xt.year_and_month desc  limit 1),0) as technicianCount
         IFNULL((SELECT COUNT(DISTINCT unicode) FROM kd_xm_technician xt where xt.xm_id = xm.xm_id GROUP BY xt.year_and_month ORDER BY xt.year_and_month desc  limit 1),0) as technicianCount
         FROM
         FROM
         (
         (
@@ -20,6 +20,7 @@
         ) xm
         ) xm
         LEFT JOIN kd_107_1 tmp on tmp.xm_id = xm.xm_id and tmp.year_and_month = #{year} and tmp.tenant_id = #{tenantId}
         LEFT JOIN kd_107_1 tmp on tmp.xm_id = xm.xm_id and tmp.year_and_month = #{year} and tmp.tenant_id = #{tenantId}
         WHERE xm.tenant_id = #{tenantId} and left(xm.jssj,4) >= #{year}
         WHERE xm.tenant_id = #{tenantId} and left(xm.jssj,4) >= #{year}
+        order by xm.xm_id
     </select>
     </select>
 
 
 </mapper>
 </mapper>

+ 30 - 10
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java

@@ -47,7 +47,6 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -166,7 +165,12 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		}
 		}
 
 
 		List<A107_1VO> list = a107_1Mapper.qyyjkfxmqk(year, SecureUtil.getTenantId());
 		List<A107_1VO> list = a107_1Mapper.qyyjkfxmqk(year, SecureUtil.getTenantId());
+		Integer xh = 1;
 		for (A107_1VO vo : list) {
 		for (A107_1VO vo : list) {
+			vo.setXh("" + xh++);
+
+			vo.setKssjStr(DateUtil.format(vo.getKssj(), DateUtil.PATTERN_YYYYMM));
+			vo.setJssjStr(DateUtil.format(vo.getJssj(), DateUtil.PATTERN_YYYYMM));
 
 
 //			项目人员实际工作时间(人月)
 //			项目人员实际工作时间(人月)
 			double workTime = 0d;
 			double workTime = 0d;
@@ -195,7 +199,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 			dto.setYearAndMonth(year + "12");
 			dto.setYearAndMonth(year + "12");
 			List<FinanceCostSummary> summaryList = xmCostDetailsService.financeCostSummary(Condition.getPage(new Query().setCurrent(1).setSize(1)), dto).getRecords();
 			List<FinanceCostSummary> summaryList = xmCostDetailsService.financeCostSummary(Condition.getPage(new Query().setCurrent(1).setSize(1)), dto).getRecords();
 			FinanceCostSummary summary = null;
 			FinanceCostSummary summary = null;
-			if (Func.isEmpty(summaryList) || ((summary=summaryList.get(0)).getTotal()) == null) {
+			if (Func.isEmpty(summaryList) || ((summary = summaryList.get(0)).getTotal()) == null) {
 				vo.setCost(new BigDecimal("0.00"));
 				vo.setCost(new BigDecimal("0.00"));
 				vo.setCost1(new BigDecimal("0.00"));
 				vo.setCost1(new BigDecimal("0.00"));
 			} else {
 			} else {
@@ -205,6 +209,28 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 			//其中:企业自主开展=用于科学原理的探索发现的经费总额-委托外单位开展
 			//其中:企业自主开展=用于科学原理的探索发现的经费总额-委托外单位开展
 			vo.setCost2(vo.getCost1().subtract(vo.getWwfy()));
 			vo.setCost2(vo.getCost1().subtract(vo.getWwfy()));
 		}
 		}
+
+		//在列表的第一列插入合计行
+		A107_1VO vo = new A107_1VO();
+		vo.setXh("合计");
+		vo.setXmmc("-");
+		vo.setXmly("-");
+		vo.setKzxs("-");
+		vo.setCgxs("-");
+		vo.setJsjjmb("-");
+		vo.setKssjStr("-");
+		vo.setJssjStr("-");
+		vo.setXmStage("-");
+		vo.setTechnicianCount(list.stream().mapToLong(A107_1VO::getTechnicianCount).sum());
+		vo.setWorkTime(list.stream().mapToDouble(A107_1VO::getWorkTime).sum());
+		vo.setCost(list.stream().map(A107_1VO::getCost).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		vo.setGovBonus(list.stream().map(A107_1VO::getGovBonus).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		vo.setCost1(list.stream().map(A107_1VO::getCost1).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		vo.setCost2(list.stream().map(A107_1VO::getCost2).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		vo.setWwfy(list.stream().map(A107_1VO::getWwfy).reduce(BigDecimal.valueOf(0.00), BigDecimal::add));
+		vo.setYjlx("");
+		list.add(0, vo);
+
 		return list;
 		return list;
 	}
 	}
 
 
@@ -237,12 +263,6 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		Map<String, Object> map = new HashMap<>();
 		Map<String, Object> map = new HashMap<>();
 
 
 		List<A107_1VO> list = this.qyyjkfxmqk107_1(year);
 		List<A107_1VO> list = this.qyyjkfxmqk107_1(year);
-		AtomicInteger index = new AtomicInteger(1);
-		list.forEach(item -> {
-			item.setXh(index.getAndIncrement() + "");
-			item.setKssjStr(DateUtil.format(item.getKssj(), DateUtil.PATTERN_YYYYMM));
-			item.setJssjStr(DateUtil.format(item.getJssj(), DateUtil.PATTERN_YYYYMM));
-		});
 
 
 		WriteSheet writeSheet = EasyExcel.writerSheet().build();
 		WriteSheet writeSheet = EasyExcel.writerSheet().build();
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
@@ -450,11 +470,11 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 			d1 = technicianVOList.size();
 			d1 = technicianVOList.size();
 			d3 = (int) technicianVOList.stream().filter(item -> item.getGender() == 2).count();
 			d3 = (int) technicianVOList.stream().filter(item -> item.getGender() == 2).count();
 			String workdayNumber = DictCache.getValue("workday_number", year);
 			String workdayNumber = DictCache.getValue("workday_number", year);
-			if(Func.isBlank(workdayNumber)){
+			if (Func.isBlank(workdayNumber)) {
 				workdayNumber = "248";
 				workdayNumber = "248";
 			}
 			}
 			String finalWorkdayNumber = workdayNumber;
 			String finalWorkdayNumber = workdayNumber;
-			d4 = (int) technicianVOList.stream().filter(item -> item.getWorkDaysByYear()/Double.parseDouble(finalWorkdayNumber)>1.027).count();
+			d4 = (int) technicianVOList.stream().filter(item -> item.getWorkDaysByYear() / Double.parseDouble(finalWorkdayNumber) > 1.027).count();
 			d5 = (int) technicianVOList.stream().filter(item -> List.of("本科", "硕士研究生", "博士研究生").contains(item.getEducation())).count();
 			d5 = (int) technicianVOList.stream().filter(item -> List.of("本科", "硕士研究生", "博士研究生").contains(item.getEducation())).count();
 		}
 		}
 		vo.setD1(d1);
 		vo.setD1(d1);

+ 15 - 4
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java

@@ -15,7 +15,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.SneakyThrows;
-import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.mp.base.BaseServiceImpl;
 import org.sky.core.mp.base.BaseServiceImpl;
 import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Condition;
@@ -24,6 +23,7 @@ import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.utils.*;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.excel.XmCostDetailsExcel;
 import org.sky.scientific.excel.XmCostDetailsExcel;
+import org.sky.scientific.excel.listener.XmCostDetailImportListener;
 import org.sky.scientific.mapper.DeductionCostQtMapper;
 import org.sky.scientific.mapper.DeductionCostQtMapper;
 import org.sky.scientific.mapper.SubjectEnterpriseMapper;
 import org.sky.scientific.mapper.SubjectEnterpriseMapper;
 import org.sky.scientific.mapper.XmCostDetailsMapper;
 import org.sky.scientific.mapper.XmCostDetailsMapper;
@@ -41,6 +41,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
+import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -116,21 +117,31 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		return baseMapper.physicalDeleteByIds(ids) > 0;
 		return baseMapper.physicalDeleteByIds(ids) > 0;
 	}
 	}
 
 
+	@SneakyThrows
 	@Override
 	@Override
+	@Transactional
 	public boolean importXmCostDetails(MultipartFile file, String yearAndMonth) {
 	public boolean importXmCostDetails(MultipartFile file, String yearAndMonth) {
 		if (StringUtil.isBlank(yearAndMonth)) {
 		if (StringUtil.isBlank(yearAndMonth)) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		}
-		List<XmCostDetailsExcel> data = ExcelUtil.read(file, 0, 5, XmCostDetailsExcel.class);
+		XmCostDetailImportListener listener = new XmCostDetailImportListener();
+		EasyExcel.read(new BufferedInputStream(file.getInputStream()))
+			.registerReadListener(listener)
+			.sheet(0)
+			.headRowNumber(5) // 重要:设置表头行数(0-based)
+			.doRead();
+		List<Object> data = listener.getDataList();
+
 		if (CollectionUtil.isEmpty(data)) {
 		if (CollectionUtil.isEmpty(data)) {
 			throw new ServiceException("未能从模板中读取数据,请检查模板格式是否正确");
 			throw new ServiceException("未能从模板中读取数据,请检查模板格式是否正确");
 		}
 		}
 		List<XmCostDetailsEntity> insertList = new ArrayList<>();
 		List<XmCostDetailsEntity> insertList = new ArrayList<>();
 
 
-		for (XmCostDetailsExcel excel : data) {
+		for (Object obj : data) {
+			XmCostDetailsExcel excel = (XmCostDetailsExcel)obj;
 			XmCostDetailsEntity entity = Objects.requireNonNull(BeanUtil.copyProperties(excel, XmCostDetailsEntity.class));
 			XmCostDetailsEntity entity = Objects.requireNonNull(BeanUtil.copyProperties(excel, XmCostDetailsEntity.class));
+  			//日期,必须时当月日期
 
 
-			//日期,必须时当月日期
 			String judged = DateUtil.judgeDate(excel.getRecordDate(), yearAndMonth);
 			String judged = DateUtil.judgeDate(excel.getRecordDate(), yearAndMonth);
 			if (judged != null) {
 			if (judged != null) {
 				throw new ServiceException(judged);
 				throw new ServiceException(judged);

+ 2 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCqdtfyServiceImpl.java

@@ -32,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.BufferedInputStream;
 import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStream;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
@@ -169,7 +170,7 @@ public class XmCqdtfyServiceImpl extends BaseServiceImpl<XmCqdtfyMapper, XmCqdtf
 		list.forEach(temp -> {
 		list.forEach(temp -> {
 			temp.setXh(index.getAndIncrement() + "");
 			temp.setXh(index.getAndIncrement() + "");
 			temp.setYftxe(temp.getYtxe().multiply(temp.getSyzb()));
 			temp.setYftxe(temp.getYtxe().multiply(temp.getSyzb()));
-//			temp.setSyzb(temp.getSyzb().multiply(new BigDecimal("100")));
+			temp.setSyzb(temp.getSyzb().multiply(new BigDecimal("100")));
 		});
 		});
 		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/研发费用管理/折旧费用与长期待摊费用/每月长期待摊费用分配表.xls");
 		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/研发费用管理/折旧费用与长期待摊费用/每月长期待摊费用分配表.xls");
 		ExcelWriter excelWriter = EasyExcel.write(os)
 		ExcelWriter excelWriter = EasyExcel.write(os)

+ 4 - 6
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmServiceImpl.java

@@ -458,13 +458,11 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
 	private void judgeXmmcAvailable(String xmmc) {
 	private void judgeXmmcAvailable(String xmmc) {
 		//技改、技术改造、推广、打样、翻新、产业化、生产线、改造、年产、示范
 		//技改、技术改造、推广、打样、翻新、产业化、生产线、改造、年产、示范
 		List<String> errorWords = Arrays.asList("技改", "技术改造", "推广", "打样", "翻新", "产业化", "生产线", "改造", "年产", "示范");
 		List<String> errorWords = Arrays.asList("技改", "技术改造", "推广", "打样", "翻新", "产业化", "生产线", "改造", "年产", "示范");
-		int index = -1;
+		//xmmc包含errorWords,则报错
 		for (String errorWord : errorWords) {
 		for (String errorWord : errorWords) {
-			index = xmmc.indexOf(errorWord);
-			break;
-		}
-		if (index != -1) {
-			throw new ServiceException("研发项目名称,不符合统计部门的命名要求!");
+			if(xmmc.contains(errorWord)){
+				throw new ServiceException("研发项目名称,不符合统计部门的命名要求!");
+			}
 		}
 		}
 	}
 	}
 
 

BIN
kd-service/kd-scientific/src/main/resources/export-template/对外报表管理/107-1.xlsx


BIN
kd-service/kd-scientific/src/main/resources/export-template/研发费用管理/折旧费用与长期待摊费用/每月长期待摊费用分配表.xls