zhoulisky 8 months ago
parent
commit
da1bf16eb5

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

@@ -53,6 +53,8 @@ public class HighTechYB extends TenantEntity {
 	private String d30;
 
 	@Schema(description = "上市时间")
+//	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
+//	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private String d31;
 
 	@Schema(description = "上市类型")

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

@@ -23,7 +23,6 @@ public class DeductionCostSummary {
 	@Schema(description = "金额合计-允许加计扣除金额合计")
 	private BigDecimal yxjjkcjehj_hjje = new BigDecimal("0.00");
 
-
 	@Schema(description = "资本化金额小计-人员人工费用")
 	private BigDecimal ryrgfy_zbh = new BigDecimal("0.00");
 

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

@@ -10,6 +10,27 @@ import org.sky.scientific.pojo.entity.HighTechYB;
 @Schema(description = "高企年报")
 public class HighTechYBVO extends HighTechYB {
 
+	@Schema(description = "企业名称")
+	private String enterpriseName;
+
+	@Schema(description = "统一社会信用代码")
+	private String uscc;
+
+	@Schema(description = "所属地区")
+	private String regionName;
+
+	@Schema(description = "高新技术企业认定证书编号")
+	private String highTechNumber;
+
+	@Schema(description = "高新技术企业认定时间")
+	private String highTechYear;
+
+	@Schema(description = "企业联系人")
+	private String linkman;
+
+	@Schema(description = "联系电话")
+	private String contactNumber;
+
 	@Schema(description = "一、本年度获得的知识产权数")
 	private Integer d1;
 

+ 12 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AttendanceServiceImpl.java

@@ -25,9 +25,11 @@ import org.sky.scientific.excel.handle.CustomCellStyleHandler;
 import org.sky.scientific.mapper.AttendanceMapper;
 import org.sky.scientific.mapper.SettingMapper;
 import org.sky.scientific.mapper.TechnicianMapper;
+import org.sky.scientific.mapper.XmTechnicianMapper;
 import org.sky.scientific.pojo.dto.AttendanceDto;
 import org.sky.scientific.pojo.entity.AttendanceEntity;
 import org.sky.scientific.pojo.entity.SettingEntity;
+import org.sky.scientific.pojo.entity.XmTechnicianEntity;
 import org.sky.scientific.pojo.vo.AttendanceVO;
 import org.sky.scientific.pojo.vo.DailyAttendance;
 import org.sky.scientific.service.IAttendanceService;
@@ -54,6 +56,7 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 
 	private final TechnicianMapper technicianMapper;
 	private final SettingMapper settingMapper;
+	private final XmTechnicianMapper xmTechnicianMapper;
 
 	@Override
 	public IPage<AttendanceVO> selectAttendancePage(AttendanceDto attendance, IPage<AttendanceVO> page) {
@@ -114,6 +117,12 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 			throw new ServiceException("未能从模板中读取数据,请检查模板格式是否正确");
 		}
 
+		List<XmTechnicianEntity> xmTechnicianEntityList = xmTechnicianMapper.selectList(Wrappers.<XmTechnicianEntity>lambdaQuery().eq(XmTechnicianEntity::getYearAndMonth, yearAndMonth));
+		if (CollectionUtil.isEmpty(xmTechnicianEntityList)) {
+			throw new ServiceException("未找到项目参研人员名单");
+		}
+		List<String> dbUnicodeList = xmTechnicianEntityList.stream().map(XmTechnicianEntity::getUnicode).toList();
+
 		//需要新增的,以便后续批量新增
 		List<AttendanceEntity> insertList = new ArrayList<>();
 		//需要更新的,以便后续批量修改
@@ -128,6 +137,9 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 			if (unicode == null) {
 				throw new ServiceException("序号为[" + record.getSerialNumber() + "]的工号和者身份证都不存在");
 			}
+			if (!dbUnicodeList.contains(unicode)) {
+				throw new ServiceException("序号为[" + record.getSerialNumber() + "]的研发人员不在参研人员名单");
+			}
 			List<AttendanceEntity> dataByTechnicianMonthly = dbList.stream().filter(e -> e.getUnicode().equals(unicode)).toList();
 			for (DailyAttendance dailyAttendance : record.getDailyAttendances()) {
 

+ 197 - 111
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/EnterpriseInfoServiceImpl.java

@@ -31,7 +31,9 @@ import org.sky.scientific.pojo.entity.*;
 import org.sky.scientific.pojo.vo.*;
 import org.sky.scientific.service.IEnterpriseInfoService;
 import org.sky.scientific.service.IXmCostDetailsService;
+import org.sky.system.cache.RegionCache;
 import org.sky.system.feign.ISysClient;
+import org.sky.system.pojo.entity.Region;
 import org.sky.system.pojo.entity.Tenant;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -77,6 +79,8 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 	private final ISysClient sysClient;
 	private final FreeMarkerConfigurer freeMarkerConfigurer;
 	private final XmFixedAssetMapper xmFixedAssetMapper;
+	private final SettingMapper settingMapper;
+
 
 	@Override
 	@Transactional
@@ -143,6 +147,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		for (A107_1VO vo : list) {
 
 //			TODO 项目人员实际工作时间(人月)
+//			vo.setWorkTime();
 
 			//当列15等于基础研究时,列14=P088中对应研发项目的受托方类型的前5项的委外金额合计。当列15不等于基础研究时,列14等于0
 			if (Func.equals(vo.getYjlx(), "基础研究")) {
@@ -240,27 +245,28 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		A107_2VO vo = new A107_2VO();
 		A107_2 db = a107_2Mapper.selectOne(Wrappers.<A107_2>lambdaQuery().eq(A107_2::getYearAndMonth, year).eq(A107_2::getTenantId, SecureUtil.getTenantId()));
 		if (Func.notNull(db)) {
-			vo.setD2(db.getD2());
-			vo.setD58(db.getD58());
-			vo.setD55(db.getD55());
-			vo.setD56(db.getD56());
-			vo.setD45(db.getD45());
-			vo.setD22(db.getD22());
-			vo.setD23(db.getD23());
-			vo.setD24(db.getD24());
-			vo.setD25(db.getD25());
-			vo.setD26(db.getD26());
-			vo.setD53(db.getD53());
-			vo.setD54(db.getD54());
-			vo.setD36(db.getD36());
-			vo.setD37(db.getD37());
-			vo.setD38(db.getD38());
-			vo.setD46(db.getD46());
-			vo.setD47(db.getD47());
-			vo.setD48(db.getD48());
-			vo.setD49(db.getD49());
-			vo.setD50(db.getD50());
-			vo.setAttachment(db.getAttachment());
+//			vo.setD2(db.getD2());
+//			vo.setD58(db.getD58());
+//			vo.setD55(db.getD55());
+//			vo.setD56(db.getD56());
+//			vo.setD45(db.getD45());
+//			vo.setD22(db.getD22());
+//			vo.setD23(db.getD23());
+//			vo.setD24(db.getD24());
+//			vo.setD25(db.getD25());
+//			vo.setD26(db.getD26());
+//			vo.setD53(db.getD53());
+//			vo.setD54(db.getD54());
+//			vo.setD36(db.getD36());
+//			vo.setD37(db.getD37());
+//			vo.setD38(db.getD38());
+//			vo.setD46(db.getD46());
+//			vo.setD47(db.getD47());
+//			vo.setD48(db.getD48());
+//			vo.setD49(db.getD49());
+//			vo.setD50(db.getD50());
+//			vo.setAttachment(db.getAttachment());
+			BeanUtil.copyProperties(db, vo);
 		}
 
 		//一、研究开发人员情况
@@ -285,60 +291,11 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		vo.setD6(d6);
 
 		//二、研究开发费用情况
-		CostSummaryDTO costSummaryDTO = new CostSummaryDTO();
-
-		costSummaryDTO.setStartYearMonth(year + "01");
-		costSummaryDTO.setMonthCount(12);
-		costSummaryDTO.setTenantId(SecureUtil.getTenantId());
-		List<CostSummaryVO> list = assetMapper.costSummary(costSummaryDTO);
-		for (CostSummaryVO costSummaryVO : list) {
-			costSummaryVO.setWwfyAdjust(costSummaryVO.getWwfy().multiply(new BigDecimal("0.8")).setScale(2, RoundingMode.HALF_UP));
-			costSummaryVO.setTotal(costSummaryVO.getRyrgfy().add(costSummaryVO.getZjtrfy()).add(costSummaryVO.getZjfyycqdtfy()).add(costSummaryVO.getSjfy()).add(costSummaryVO.getWxzctxfy()).add(costSummaryVO.getZbtsfyysyfy()).add(costSummaryVO.getQtfy()).add(costSummaryVO.getWwfyAdjust()).setScale(2, RoundingMode.HALF_UP));
-			vo.setD8(vo.getD8().add(costSummaryVO.getRyrgfy()));
-			vo.setD9(vo.getD9().add(costSummaryVO.getZjtrfy()));
-			vo.setD10(vo.getD10().add(costSummaryVO.getZjfyycqdtfy()));
-			vo.setD11(vo.getD11().add(costSummaryVO.getWxzctxfy()));
-			vo.setD12(vo.getD12().add(costSummaryVO.getSjfy()));
-			vo.setD13(vo.getD13().add(costSummaryVO.getZbtsfyysyfy()));
-			vo.setD14(vo.getD14().add(costSummaryVO.getWwfy()));
-			vo.setD19(vo.getD19().add(costSummaryVO.getQtfy()));
+		statisticsCost( vo, year);
+		if(Func.isNull(vo.getD26()) || vo.getD26().compareTo(BigDecimal.ZERO) <=0){
+			vo.setD26(vo.getD7());
 		}
 
-		//换算成千元
-		//1.人员人工费用
-		vo.setD8(vo.getD8().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//2.直接投入费用
-		vo.setD9(vo.getD9().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//3.折旧费用与长期待摊费用
-		vo.setD10(vo.getD10().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//4.无形资产摊销费用
-		vo.setD11(vo.getD11().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//5.设计费用
-		vo.setD12(vo.getD12().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//6.装备调试费用与试验费用
-		vo.setD13(vo.getD13().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//7.委托外部研究开发费用
-		vo.setD14(vo.getD14().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//8.其他费用
-		vo.setD19(vo.getD19().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-
-		XmWwxmCostQuery wwxmCostQuery = new XmWwxmCostQuery();
-		wwxmCostQuery.setYearAndMonth(year);
-		List<XmWwxmCostVO> wwxmCostVOList = wwxmCostMapper.selectPageByYear(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), wwxmCostQuery);
-
-		//①委托境内研究机构
-		BigDecimal d15 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内研究机构")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-		vo.setD15(d15.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//②委托境内高等学校
-		BigDecimal d16 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内高等学校")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-		vo.setD16(d16.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//③委托境内企业
-		BigDecimal d17 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内企业")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-		vo.setD17(d17.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-		//④委托境外机构
-		BigDecimal d18 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境外机构")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-		vo.setD18(d18.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
-
 		// 三、研究开发资产情况
 		// d20 当年形成用于研发开发的固定资产
 		XmAssetQueryParam p = new XmAssetQueryParam();
@@ -349,7 +306,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		BigDecimal yiqishebeiTotal = BigDecimal.ZERO;
 		for (XmFixedAsset yiqishebei : yiqishebeiList) {
 			AssetEntity asset = yiqishebei.getAsset();
-			if(Func.equals(DateUtil.format(asset.getKssj(), DateUtil.PATTERN_YYYY),  year)){
+			if (Func.equals(DateUtil.format(asset.getKssj(), DateUtil.PATTERN_YYYY), year)) {
 				yiqishebeiTotal = yiqishebeiTotal.add(asset.getZcyz());
 			}
 		}
@@ -357,7 +314,7 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		BigDecimal fangwujianzhuwuTotal = BigDecimal.ZERO;
 		for (XmFixedAsset fangwujianzhuwu : fangwujianzhuwuList) {
 			AssetEntity asset = fangwujianzhuwu.getAsset();
-			if(Func.equals(DateUtil.format(asset.getKssj(), DateUtil.PATTERN_YYYY),  year)){
+			if (Func.equals(DateUtil.format(asset.getKssj(), DateUtil.PATTERN_YYYY), year)) {
 				yiqishebeiTotal = fangwujianzhuwuTotal.add(asset.getZcyz());
 			}
 		}
@@ -374,11 +331,43 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		}
 		vo.setD43(vo.getD43().setScale(2, RoundingMode.HALF_UP));
 
-		//todo 五、相关政策落实情况
+//		todo 五、相关政策落实情况
+		XmCostDetailsDTO costDetailsDTO = new XmCostDetailsDTO();
+		costDetailsDTO.setYearAndMonth(year + "12");
+		DeductionCostSummary summary = xmCostDetailsService.deductionCostSummary(costDetailsDTO);
 		//申报加计扣除减免税的研究开发支出
-//		vo.setD52();
+		vo.setD52(Func.isNull(summary) ? BigDecimal.ZERO : summary.getYxjjkcjehj_hjje().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
 		//加计扣除减免税金额
-//		vo.setD44();
+
+		A107012 a107012 = a107012Mapper.selectOne(Wrappers.<A107012>lambdaQuery().eq(A107012::getYearAndMonth, year));
+		BigDecimal a107012_d41 = Func.isNull(summary) ? BigDecimal.ZERO : summary.getTotal_fyh();
+		BigDecimal a107012_d43 = BigDecimal.ZERO;
+		BigDecimal a107012_d44 = BigDecimal.ZERO;
+		BigDecimal a107012_d46 = BigDecimal.ZERO;
+		BigDecimal a107012_d48 = BigDecimal.ZERO;
+		BigDecimal a107012_d49 = BigDecimal.ZERO;
+		if (Func.notNull(a107012)) {
+			a107012_d43 = a107012.getD43();
+			a107012_d44 = a107012.getD44();
+			a107012_d46 = a107012.getD46();
+			a107012_d48 = a107012.getD48();
+			a107012_d49 = a107012.getD49();
+
+		}
+		//六、允许扣除的研发费用合计(41+43+44)
+		BigDecimal a107012_d45 = a107012_d41.add(a107012_d43).add(a107012_d44);
+
+		//七、允许扣除的研发费用抵减特殊收入后的金额(45-46)
+		BigDecimal a107012_d47 = a107012_d45.subtract(a107012_d46);
+
+		//九、本年研发费用加计扣除总额(47-48-49)×50,50为固定的100%
+		//如果当年是高企,就税率为15%,如非高企,税率为25%
+		vo.setD44(a107012_d47.subtract(a107012_d48).subtract(a107012_d49));
+		if(enterpriseInfoMapper.selectCount(Wrappers.<EnterpriseInfoEntity>lambdaQuery().eq(EnterpriseInfoEntity::getHighTechYear, year)) > 0){
+			vo.setD44(vo.getD44().multiply(new BigDecimal("0.15")).multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		}else {
+			vo.setD44(vo.getD44().multiply(new BigDecimal("0.25")).multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		}
 
 		//六、企业办研究开发机构 (境内)情况
 		// d27 :期末仪器和设备原价
@@ -428,7 +417,6 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		//八、其他相关情况
 		//当年企业研发准备金合计
 		List<XmEntity> xmList = xmMapper.selectList(Wrappers.emptyWrapper());
-		BigDecimal d59 = BigDecimal.ZERO;
 		for (XmEntity xm : xmList) {
 			String xmyszemx = xm.getXmyszemx();
 			if (Func.notNull(xmyszemx)) {
@@ -445,6 +433,63 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		return vo;
 	}
 
+	private void statisticsCost(A107_2VO vo, String year){
+		CostSummaryDTO costSummaryDTO = new CostSummaryDTO();
+		costSummaryDTO.setStartYearMonth(year + "01");
+		costSummaryDTO.setMonthCount(12);
+		costSummaryDTO.setTenantId(SecureUtil.getTenantId());
+		List<CostSummaryVO> list = assetMapper.costSummary(costSummaryDTO);
+		for (CostSummaryVO costSummaryVO : list) {
+			costSummaryVO.setWwfyAdjust(costSummaryVO.getWwfy().multiply(new BigDecimal("0.8")).setScale(2, RoundingMode.HALF_UP));
+			costSummaryVO.setTotal(costSummaryVO.getRyrgfy().add(costSummaryVO.getZjtrfy()).add(costSummaryVO.getZjfyycqdtfy()).add(costSummaryVO.getSjfy()).add(costSummaryVO.getWxzctxfy()).add(costSummaryVO.getZbtsfyysyfy()).add(costSummaryVO.getQtfy()).add(costSummaryVO.getWwfyAdjust()).setScale(2, RoundingMode.HALF_UP));
+			vo.setD8(vo.getD8().add(costSummaryVO.getRyrgfy()));
+			vo.setD9(vo.getD9().add(costSummaryVO.getZjtrfy()));
+			vo.setD10(vo.getD10().add(costSummaryVO.getZjfyycqdtfy()));
+			vo.setD11(vo.getD11().add(costSummaryVO.getWxzctxfy()));
+			vo.setD12(vo.getD12().add(costSummaryVO.getSjfy()));
+			vo.setD13(vo.getD13().add(costSummaryVO.getZbtsfyysyfy()));
+			vo.setD14(vo.getD14().add(costSummaryVO.getWwfy()));
+			vo.setD19(vo.getD19().add(costSummaryVO.getQtfy()));
+		}
+
+		//换算成千元
+		//1.人员人工费用
+		vo.setD8(vo.getD8().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//2.直接投入费用
+		vo.setD9(vo.getD9().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//3.折旧费用与长期待摊费用
+		vo.setD10(vo.getD10().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//4.无形资产摊销费用
+		vo.setD11(vo.getD11().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//5.设计费用
+		vo.setD12(vo.getD12().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//6.装备调试费用与试验费用
+		vo.setD13(vo.getD13().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//7.委托外部研究开发费用
+		vo.setD14(vo.getD14().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//8.其他费用
+		vo.setD19(vo.getD19().multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+
+		XmWwxmCostQuery wwxmCostQuery = new XmWwxmCostQuery();
+		wwxmCostQuery.setYearAndMonth(year);
+		List<XmWwxmCostVO> wwxmCostVOList = wwxmCostMapper.selectPageByYear(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), wwxmCostQuery);
+
+		//①委托境内研究机构
+		BigDecimal d15 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内研究机构")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		vo.setD15(d15.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//②委托境内高等学校
+		BigDecimal d16 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内高等学校")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		vo.setD16(d16.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//③委托境内企业
+		BigDecimal d17 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境内企业")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		vo.setD17(d17.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+		//④委托境外机构
+		BigDecimal d18 = wwxmCostVOList.stream().filter(item -> Func.equals(item.getStflx(), "境外机构")).map(XmWwxmCostVO::getPayAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+		vo.setD18(d18.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP));
+
+		vo.setD7(vo.getD8().add(vo.getD9()).add(vo.getD10()).add(vo.getD11()).add(vo.getD12()).add(vo.getD13()).add(vo.getD14()).add(vo.getD19()));
+
+	}
 	@Override
 	public boolean updateQyyjkfhdjxgfy107_2(A107_2 a1072) {
 		LambdaQueryWrapper<A107_2> eq = Wrappers.<A107_2>lambdaQuery().eq(A107_2::getYearAndMonth, a1072.getYearAndMonth());
@@ -863,20 +908,30 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		}
 		HighTechYBVO vo = new HighTechYBVO();
 		vo.setYearAndMonth(year);
+
+		R<Tenant> r = sysClient.getTenant(SecureUtil.getTenantId());
+		if (r.isSuccess()) {
+			Tenant tenant = r.getData();
+			vo.setEnterpriseName(tenant.getTenantName());
+			vo.setUscc(tenant.getUscc());
+			vo.setLinkman(tenant.getLinkman());
+			vo.setContactNumber(tenant.getContactNumber());
+			if (Func.isNotEmpty(tenant.getDistrictCode())) {
+				Region region = RegionCache.getByCode(tenant.getDistrictCode());
+				if (region != null) {
+					vo.setRegionName(region.getProvinceName() + "-" + region.getCityName() + "-" + region.getDistrictName());
+				}
+			}
+		}
+
+		EnterpriseInfoEntity enterpriseInfo = enterpriseInfoMapper.selectOne(Wrappers.<EnterpriseInfoEntity>lambdaQuery().eq(EnterpriseInfoEntity::getYearAndMonth, year));
+		if (Func.notNull(enterpriseInfo)) {
+			vo.setHighTechNumber(enterpriseInfo.getHighTechNumber());
+			vo.setHighTechYear(enterpriseInfo.getHighTechYear());
+		}
+
 		HighTechYB db = highTechYbMapper.selectOne(Wrappers.<HighTechYB>lambdaQuery().eq(HighTechYB::getYearAndMonth, year));
 		if (Func.notNull(db)) {
-//			vo.setD13(db.getD13());
-//			vo.setD15(db.getD15());
-//			vo.setD16(db.getD16());
-//			vo.setD18(db.getD18());
-//			vo.setD20(db.getD20());
-//			vo.setD21(db.getD21());
-//			vo.setD22(db.getD22());
-//			vo.setD23(db.getD23());
-//			vo.setD24(db.getD24());
-//			vo.setD25(db.getD25());
-//			vo.setD30(db.getD30());
-//			vo.setd
 			BeanUtil.copyProperties(db, vo);
 		}
 		Date dateMin = DateUtil.parse(year + "-01-01", DateUtil.PATTERN_DATE);
@@ -932,16 +987,47 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 		vo.setD14(d14);
 
 		//销售收入
- 		EnterpriseInfoEntity enterpriseInfo = enterpriseInfoMapper.selectOne(Wrappers.<EnterpriseInfoEntity>lambdaQuery().eq(EnterpriseInfoEntity::getYearAndMonth, year));
-		if(Func.notNull(enterpriseInfo)){
+		if (Func.notNull(enterpriseInfo)) {
 			vo.setD19(enterpriseInfo.getCurrentYearIncome().toPlainString());
-		}else {
+		} else {
 			vo.setD19("0.00");
 		}
-		//研究开发费用额
-//		vo.setD26();
-//		vo.setD28();
-//		vo.setD29();
+		//todo 研究开发费用额
+		//取数:对外报表-107-2表-二、研究开发费用情况-研究开发费用合计
+		A107_2VO a107_2VO = new A107_2VO();
+		statisticsCost(a107_2VO, year);
+		vo.setD26(a107_2VO.getD7().toPlainString());
+
+		//取数:对外报表:107.2表,六、企业办研究开发机构(境内)情况,机构研究开发费用
+		A107_2 a1072 = a107_2Mapper.selectOne(Wrappers.<A107_2>lambdaQuery().eq(A107_2::getYearAndMonth, year));
+		if(Func.isNull(a1072)){
+			vo.setD28(a107_2VO.getD7().toPlainString());
+		}else {
+			vo.setD28(a1072.getD26().toPlainString());
+		}
+
+		//取数:对外报表-107-2表,三、研究开发资本情况-当年形成用于研发开发的固定资本
+		XmAssetQueryParam p = new XmAssetQueryParam();
+		p.setYearAndMonth(year);
+		List<XmFixedAsset> yiqishebeiList = xmFixedAssetMapper.selectXmFixedAssetPageByYear(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), p, "仪器设备");
+		List<XmFixedAsset> fangwujianzhuwuList = xmFixedAssetMapper.selectXmFixedAssetPageByYear(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), p, "房屋建筑物");
+
+		BigDecimal yiqishebeiTotal = BigDecimal.ZERO;
+		for (XmFixedAsset yiqishebei : yiqishebeiList) {
+			AssetEntity asset = yiqishebei.getAsset();
+			if (Func.equals(DateUtil.format(asset.getKssj(), DateUtil.PATTERN_YYYY), year)) {
+				yiqishebeiTotal = yiqishebeiTotal.add(asset.getZcyz());
+			}
+		}
+
+		BigDecimal fangwujianzhuwuTotal = BigDecimal.ZERO;
+		for (XmFixedAsset fangwujianzhuwu : fangwujianzhuwuList) {
+			AssetEntity asset = fangwujianzhuwu.getAsset();
+			if (Func.equals(DateUtil.format(asset.getKssj(), DateUtil.PATTERN_YYYY), year)) {
+				yiqishebeiTotal = fangwujianzhuwuTotal.add(asset.getZcyz());
+			}
+		}
+		vo.setD29(fangwujianzhuwuTotal.add(yiqishebeiTotal).multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.HALF_UP).toPlainString());
 		return vo;
 	}
 
@@ -963,22 +1049,22 @@ public class EnterpriseInfoServiceImpl extends BaseServiceImpl<EnterpriseInfoMap
 	public void exportGqnb(HttpServletResponse response, String year) {
 		HighTechYBVO techYBVO = gqnb(year);
 
-		Map<String, Object> map = new HashMap<>();
-		BeanUtil.copyProperties(techYBVO, map);
-		R<Tenant> tenant = sysClient.getTenant(SecureUtil.getTenantId());
-		if(tenant.isSuccess()){
-			Tenant data = tenant.getData();
-			map.put("enterpriseName", Func.toStr(data.getTenantName(), ""));
-			map.put("uscc", Func.toStr(data.getUscc(), ""));
-			map.put("address", Func.toStr(data.getAddress(), ""));
-			map.put("linkman", Func.toStr(data.getLinkman(), ""));
-			map.put("contact_number", Func.toStr(data.getContactNumber(), ""));
-		}
+//		Map<String, Object> map = new HashMap<>();
+//		BeanUtil.copyProperties(techYBVO, map);
+//		R<Tenant> tenant = sysClient.getTenant(SecureUtil.getTenantId());
+//		if (tenant.isSuccess()) {
+//			Tenant data = tenant.getData();
+//			map.put("enterpriseName", Func.toStr(data.getTenantName(), ""));
+//			map.put("uscc", Func.toStr(data.getUscc(), ""));
+//			map.put("regionName", Func.toStr(data.getAddress(), ""));
+//			map.put("linkman", Func.toStr(data.getLinkman(), ""));
+//			map.put("contactNumber", Func.toStr(data.getContactNumber(), ""));
+//		}
 		Template template = freeMarkerConfigurer.getConfiguration().getTemplate("年度高新技术企业发展情况报表.ftl");
- 		response.setHeader("Content-disposition",
+		response.setHeader("Content-disposition",
 			"attachment;filename=" + URLEncoder.encode("年度高新技术企业发展情况报表.doc", StandardCharsets.UTF_8));
 		response.setContentType("application/msword");// 定义输出类型
-		template.process(map, new OutputStreamWriter(response.getOutputStream()));
+		template.process(techYBVO, new OutputStreamWriter(response.getOutputStream()));
 	}
 
 	@Override

+ 34 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/SalaryServiceImpl.java

@@ -73,7 +73,41 @@ public class SalaryServiceImpl extends BaseServiceImpl<SalaryMapper, SalaryEntit
 		AtomicInteger i = new AtomicInteger(1);
 		list.forEach(temp -> {
 			temp.setXh(i.getAndIncrement() + "");
+			if(Func.isNull(temp.getAverageMonthlySalary())){
+				temp.setAverageMonthlySalary(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getPensionInsurance())){
+				temp.setPensionInsurance(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getMedicalInsurance())){
+				temp.setMedicalInsurance(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getUnemploymentInsurance())){
+				temp.setUnemploymentInsurance(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getInjuryInsurance())){
+				temp.setInjuryInsurance(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getMaternityInsurance())){
+				temp.setMaternityInsurance(BigDecimal.ZERO);
+			}
 			temp.setTotal(temp.getPensionInsurance().add(temp.getMedicalInsurance()).add(temp.getUnemploymentInsurance()).add(temp.getInjuryInsurance()).add(temp.getMaternityInsurance()));
+
+			if(Func.isNull(temp.getProvidentFund())){
+				temp.setProvidentFund(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getBonus())){
+				temp.setBonus(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getBenefit())){
+				temp.setBenefit(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getPensionInsuranceBc())){
+				temp.setPensionInsuranceBc(BigDecimal.ZERO);
+			}
+			if(Func.isNull(temp.getMedicalInsuranceBc())){
+				temp.setMedicalInsuranceBc(BigDecimal.ZERO);
+			}
 		});
 
 		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/每月工资信息.xls");

+ 78 - 72
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java

@@ -135,7 +135,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 
-		List<XmFixedAssetExcel> data = ExcelUtil.read(file, XmFixedAssetExcel.class);
+		List<XmFixedAssetExcel> data = ExcelUtil.read(file, 0, 2, XmFixedAssetExcel.class);
 		if (CollectionUtil.isEmpty(data)) {
 			throw new ServiceException("导入数据为空");
 		}
@@ -222,29 +222,32 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		return page.setRecords(list);
 	}
 
-    @SneakyThrows
+	@SneakyThrows
 	@Override
-    public void exportKeyanyiqishebeizhejiufeiyongfenpeibiao(HttpServletResponse response, XmAssetQueryParam dto) {
+	public void exportKeyanyiqishebeizhejiufeiyongfenpeibiao(HttpServletResponse response, XmAssetQueryParam dto) {
 		List<XmFixedAssetCostVo> list = this.keyanyiqishebeizhejiufeiyongfenpeibiao(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto).getRecords();
 		AtomicInteger index = new AtomicInteger(1);
 
 		List<JSONObject> results = new ArrayList<>();
 		list.forEach(temp -> {
 			JSONObject data = new JSONObject();
-			data.put("xh",index.getAndIncrement()+"");
-			data.put("yearAndMonth",dto.getYearAndMonth());
-			data.put("xmbh",temp.getXmbh());
-			data.put("xmmc",temp.getXmmc());
-			data.put("zcbm",temp.getAsset().getZcbm());
-			data.put("zcmc",temp.getAsset().getZcmc());
-			data.put("zclb",temp.getAsset().getZclb());
-			data.put("yt",temp.getAsset().getYt());
-			data.put("zcyz",temp.getAsset().getZcyz());
-			data.put("jcz",temp.getAsset().getJcz());
-			data.put("yzje",temp.getAsset().getYzje());
-			data.put("zgs",temp.getAsset().getZgs());
-			data.put("workHours",temp.getWorkHours());
-			data.put("yanfaFenTanLv",temp.getYanfaFenTanLv());
+			data.put("xh", index.getAndIncrement() + "");
+			data.put("yearAndMonth", dto.getYearAndMonth());
+			data.put("xmbh", temp.getXmbh());
+			data.put("xmmc", temp.getXmmc());
+			data.put("zcbm", temp.getAsset().getZcbm());
+			data.put("zcmc", temp.getAsset().getZcmc());
+			data.put("zclb", temp.getAsset().getZclb());
+			data.put("yt", temp.getAsset().getYt());
+			data.put("zcyz", temp.getAsset().getZcyz());
+			data.put("jcz", temp.getAsset().getJcz());
+			data.put("yzje", temp.getAsset().getYzje());
+			data.put("zgs", temp.getAsset().getZgs());
+			data.put("workHours", temp.getWorkHours());
+			data.put("yanfaFenTanLv", temp.getYanfaFenTanLv());
+			if(Func.isNull(temp.getYanfaFenTanLv())){
+				temp.setYanfaFenTanLv(0.00);
+			}
 			data.put("yanfazhejiu", BigDecimal.valueOf(temp.getYanfaFenTanLv()).multiply(temp.getAsset().getYzje()));
 			results.add(data);
 
@@ -263,16 +266,16 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		//设置list集合数据
 
 		excelWriter.fill(results, fillConfig, writeSheet);
-		Map<String,Object> map = new HashMap<>();
+		Map<String, Object> map = new HashMap<>();
 		map.put("yearAndMonth", dto.getYearAndMonth());
- 		excelWriter.fill(map, writeSheet);
+		excelWriter.fill(map, writeSheet);
 		excelWriter.finish();
 		if (templateFileName != null) {
 			templateFileName.close();
 		}
 	}
 
-    @Override
+	@Override
 	public IPage<XmFixedAssetCostVo> keyanfangwujianzhuwuzhejiufeiyongfenpeibiao(IPage<XmFixedAssetCostVo> page, XmAssetQueryParam dto) {
 		if (StringUtil.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
@@ -291,20 +294,23 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		List<JSONObject> results = new ArrayList<>();
 		list.forEach(temp -> {
 			JSONObject data = new JSONObject();
-			data.put("xh",index.getAndIncrement()+"");
-			data.put("yearAndMonth",dto.getYearAndMonth());
-			data.put("xmbh",temp.getXmbh());
-			data.put("xmmc",temp.getXmmc());
-			data.put("zcbm",temp.getAsset().getZcbm());
-			data.put("zcmc",temp.getAsset().getZcmc());
-			data.put("zclb",temp.getAsset().getZclb());
-			data.put("yt",temp.getAsset().getYt());
-			data.put("zcyz",temp.getAsset().getZcyz());
-			data.put("jcz",temp.getAsset().getJcz());
-			data.put("yzje",temp.getAsset().getYzje());
-			data.put("zgs",temp.getAsset().getZgs());
-			data.put("workHours",temp.getWorkHours());
-			data.put("yanfaFenTanLv",temp.getYanfaFenTanLv());
+			data.put("xh", index.getAndIncrement() + "");
+			data.put("yearAndMonth", dto.getYearAndMonth());
+			data.put("xmbh", temp.getXmbh());
+			data.put("xmmc", temp.getXmmc());
+			data.put("zcbm", temp.getAsset().getZcbm());
+			data.put("zcmc", temp.getAsset().getZcmc());
+			data.put("zclb", temp.getAsset().getZclb());
+			data.put("yt", temp.getAsset().getYt());
+			data.put("zcyz", temp.getAsset().getZcyz());
+			data.put("jcz", temp.getAsset().getJcz());
+			data.put("yzje", temp.getAsset().getYzje());
+			data.put("zgs", temp.getAsset().getZgs());
+			data.put("workHours", temp.getWorkHours());
+			data.put("yanfaFenTanLv", temp.getYanfaFenTanLv());
+			if(Func.isNull(temp.getYanfaFenTanLv())){
+				temp.setYanfaFenTanLv(0.00);
+			}
 			data.put("yanfazhejiu", BigDecimal.valueOf(temp.getYanfaFenTanLv()).multiply(temp.getAsset().getYzje()));
 			data.put("fenTanLvQueDingYiJu", temp.getFenTanLvQueDingYiJu());
 			results.add(data);
@@ -324,7 +330,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 		//设置list集合数据
 		excelWriter.fill(results, fillConfig, writeSheet);
-		Map<String,Object> map = new HashMap<>();
+		Map<String, Object> map = new HashMap<>();
 		map.put("yearAndMonth", dto.getYearAndMonth());
 		excelWriter.fill(map, writeSheet);
 		excelWriter.finish();
@@ -336,26 +342,26 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 	@SneakyThrows
 	@Override
 	public void exportKeyanyiqishebeimingxibiao(HttpServletResponse response, XmAssetQueryParam dto) {
- 		List<XmFixedAsset> list = this.selectXmFixAssetPage(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto, "仪器设备").getRecords();
+		List<XmFixedAsset> list = this.selectXmFixAssetPage(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto, "仪器设备").getRecords();
 		AtomicInteger index = new AtomicInteger(1);
 		List<JSONObject> results = new ArrayList<>();
 		list.forEach(temp -> {
 			JSONObject data = new JSONObject();
-			data.put("xh",index.getAndIncrement()+"");
-			data.put("yearAndMonth",dto.getYearAndMonth());
-			data.put("xmbh",temp.getXmbh());
-			data.put("xmmc",temp.getXmmc());
-			data.put("zcbm",temp.getAsset().getZcbm());
-			data.put("zcmc",temp.getAsset().getZcmc());
-			data.put("zclb",temp.getAsset().getZclb());
-			data.put("gl",temp.getAsset().getGl());
-			data.put("yt",temp.getAsset().getYt());
-			data.put("kssjStr",Func.notNull(temp.getAsset().getKssj())?DateUtil.format(temp.getAsset().getKssj(), DateUtil.PATTERN_DATE):"");
-			data.put("sysm",temp.getAsset().getSysm());
-			data.put("ysysm",temp.getAsset().getYsysm());
-			data.put("zcyz",temp.getAsset().getZcyz());
-			data.put("jcz",temp.getAsset().getJcz());
-			data.put("yzje",temp.getAsset().getYzje());
+			data.put("xh", index.getAndIncrement() + "");
+			data.put("yearAndMonth", dto.getYearAndMonth());
+			data.put("xmbh", temp.getXmbh());
+			data.put("xmmc", temp.getXmmc());
+			data.put("zcbm", temp.getAsset().getZcbm());
+			data.put("zcmc", temp.getAsset().getZcmc());
+			data.put("zclb", temp.getAsset().getZclb());
+			data.put("gl", temp.getAsset().getGl());
+			data.put("yt", temp.getAsset().getYt());
+			data.put("kssjStr", Func.notNull(temp.getAsset().getKssj()) ? DateUtil.format(temp.getAsset().getKssj(), DateUtil.PATTERN_DATE) : "");
+			data.put("sysm", temp.getAsset().getSysm());
+			data.put("ysysm", temp.getAsset().getYsysm());
+			data.put("zcyz", temp.getAsset().getZcyz());
+			data.put("jcz", temp.getAsset().getJcz());
+			data.put("yzje", temp.getAsset().getYzje());
 			AssetStatusEnum assetStatusEnum = Arrays.stream(AssetStatusEnum.values()).filter(o -> o.getCode() == temp.getAsset().getStatus()).findFirst().orElse(AssetStatusEnum.正常);
 			data.put("statusStr", assetStatusEnum.getName());
 			results.add(data);
@@ -374,9 +380,9 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 		//设置list集合数据
 		excelWriter.fill(results, fillConfig, writeSheet);
-		Map<String,Object> map = new HashMap<>();
+		Map<String, Object> map = new HashMap<>();
 		String yearAndMonth = dto.getYearAndMonth();
-		map.put("yearAndMonth", yearAndMonth.length()==6?yearAndMonth.substring(0,4)+"年"+yearAndMonth.substring(5)+"月":dto.getYearAndMonth()+"年");
+		map.put("yearAndMonth", yearAndMonth.length() == 6 ? yearAndMonth.substring(0, 4) + "年" + yearAndMonth.substring(5) + "月" : dto.getYearAndMonth() + "年");
 		excelWriter.fill(map, writeSheet);
 		excelWriter.finish();
 		if (templateFileName != null) {
@@ -392,23 +398,23 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		List<JSONObject> results = new ArrayList<>();
 		list.forEach(temp -> {
 			JSONObject data = new JSONObject();
-			data.put("xh",index.getAndIncrement()+"");
-			data.put("yearAndMonth",dto.getYearAndMonth());
-			data.put("xmbh",temp.getXmbh());
-			data.put("xmmc",temp.getXmmc());
-			data.put("zcbm",temp.getAsset().getZcbm());
-			data.put("zcmc",temp.getAsset().getZcmc());
-			data.put("zclb",temp.getAsset().getZclb());
-			data.put("gl",temp.getAsset().getGl());
-			data.put("yt",temp.getAsset().getYt());
-			data.put("kssjStr",Func.notNull(temp.getAsset().getKssj())?DateUtil.format(temp.getAsset().getKssj(), DateUtil.PATTERN_DATE):"");
-			data.put("sysm",temp.getAsset().getSysm());
-			data.put("ysysm",temp.getAsset().getYsysm());
-			data.put("zcyz",temp.getAsset().getZcyz());
-			data.put("jcz",temp.getAsset().getJcz());
-			data.put("yzje",temp.getAsset().getYzje());
+			data.put("xh", index.getAndIncrement() + "");
+			data.put("yearAndMonth", dto.getYearAndMonth());
+			data.put("xmbh", temp.getXmbh());
+			data.put("xmmc", temp.getXmmc());
+			data.put("zcbm", temp.getAsset().getZcbm());
+			data.put("zcmc", temp.getAsset().getZcmc());
+			data.put("zclb", temp.getAsset().getZclb());
+			data.put("gl", temp.getAsset().getGl());
+			data.put("yt", temp.getAsset().getYt());
+			data.put("kssjStr", Func.notNull(temp.getAsset().getKssj()) ? DateUtil.format(temp.getAsset().getKssj(), DateUtil.PATTERN_DATE) : "");
+			data.put("sysm", temp.getAsset().getSysm());
+			data.put("ysysm", temp.getAsset().getYsysm());
+			data.put("zcyz", temp.getAsset().getZcyz());
+			data.put("jcz", temp.getAsset().getJcz());
+			data.put("yzje", temp.getAsset().getYzje());
 			Optional<AssetStatusEnum> optional = Arrays.stream(AssetStatusEnum.values()).filter(o -> o.getCode() == temp.getAsset().getStatus()).findFirst();
-			data.put("statusStr", optional.isPresent()?optional.get().getName():"");
+			data.put("statusStr", optional.isPresent() ? optional.get().getName() : "");
 			results.add(data);
 		});
 
@@ -425,9 +431,9 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 		//设置list集合数据
 		excelWriter.fill(results, fillConfig, writeSheet);
-		Map<String,Object> map = new HashMap<>();
+		Map<String, Object> map = new HashMap<>();
 		String yearAndMonth = dto.getYearAndMonth();
-		map.put("yearAndMonth", yearAndMonth.length()==6?yearAndMonth.substring(0,4)+"年"+yearAndMonth.substring(5)+"月":dto.getYearAndMonth()+"年");
+		map.put("yearAndMonth", yearAndMonth.length() == 6 ? yearAndMonth.substring(0, 4) + "年" + yearAndMonth.substring(5) + "月" : dto.getYearAndMonth() + "年");
 		excelWriter.fill(map, writeSheet);
 		excelWriter.finish();
 		if (templateFileName != null) {
@@ -440,7 +446,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		if (Func.isNull(dto.getId())) {
 			throw new ServiceException("id不能为空");
 		}
-		if(Func.notNull(dto.getYanfaFenTanLv()) && (dto.getYanfaFenTanLv() <0||dto.getYanfaFenTanLv()>1.0)){
+		if (Func.notNull(dto.getYanfaFenTanLv()) && (dto.getYanfaFenTanLv() < 0 || dto.getYanfaFenTanLv() > 1.0)) {
 			throw new ServiceException("研发分摊率只能是[0,1]之间");
 		}
 		XmFixedAsset fixedAsset = new XmFixedAsset();

+ 60 - 60
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmIntangibleAssetServiceImpl.java

@@ -97,21 +97,21 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 			for (XmIntangibleAsset dbAsset : lastMonthList) {
 				//本月为包含dbAsset,新增
 //				if (!Func.contains(new List[]{zcbmList}, dbAsset.getZcbm())) {
-				if(Func.isNotEmpty(c1.get(dbAsset.getXmId())) && c1.get(dbAsset.getXmId()).stream().anyMatch(item -> Func.equals(item.getZcbm(), dbAsset.getZcbm()))){
+				if (Func.isNotEmpty(c1.get(dbAsset.getXmId())) && c1.get(dbAsset.getXmId()).stream().anyMatch(item -> Func.equals(item.getZcbm(), dbAsset.getZcbm()))) {
 					continue;
 				}
 //				if (!Func.contains(new List[]{zcbmList}, dbAsset.getZcbm())) {
-					XmIntangibleAsset asset = new XmIntangibleAsset();
-					asset.setYearAndMonth(yearAndMonth);
-					asset.setXmId(dbAsset.getXmId());
-					asset.setAssetId(dbAsset.getAssetId());
-					asset.setZcbm(dbAsset.getZcbm());
-					insertList.add(asset);
+				XmIntangibleAsset asset = new XmIntangibleAsset();
+				asset.setYearAndMonth(yearAndMonth);
+				asset.setXmId(dbAsset.getXmId());
+				asset.setAssetId(dbAsset.getAssetId());
+				asset.setZcbm(dbAsset.getZcbm());
+				insertList.add(asset);
 //				}
 			}
 			if (CollectionUtil.isNotEmpty(insertList)) {
 				return this.saveBatch(insertList);
-			}else {
+			} else {
 				throw new ServiceException("无数据可引入");
 			}
 		} else {
@@ -125,7 +125,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 //				if (CollectionUtil.isNotEmpty(zcbmList) && zcbmList.contains(ys.getZcbm())) {
 //					continue;
 //				}
-				if(Func.isNotEmpty(c1.get(ys.getXmId())) && c1.get(ys.getXmId()).stream().anyMatch(item -> Func.equals(item.getZcbm(), ys.getZcbm()))){
+				if (Func.isNotEmpty(c1.get(ys.getXmId())) && c1.get(ys.getXmId()).stream().anyMatch(item -> Func.equals(item.getZcbm(), ys.getZcbm()))) {
 					continue;
 				}
 				XmIntangibleAsset asset = new XmIntangibleAsset();
@@ -133,11 +133,11 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 				asset.setXmId(ys.getXmId());
 				asset.setZcbm(ys.getZcbm());
 				asset.setAssetId(ys.getZcEntity().getId());
- 				insertList.add(asset);
+				insertList.add(asset);
 			}
 			if (CollectionUtil.isNotEmpty(insertList)) {
 				return this.saveBatch(insertList);
-			}else {
+			} else {
 				throw new ServiceException("无数据可引入");
 			}
 		}
@@ -149,7 +149,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 
-		List<XmFixedAssetExcel> data = ExcelUtil.read(file, XmFixedAssetExcel.class);
+		List<XmFixedAssetExcel> data = ExcelUtil.read(file, 0, 2, XmFixedAssetExcel.class);
 		if (CollectionUtil.isEmpty(data)) {
 			throw new ServiceException("导入数据为空");
 		}
@@ -170,7 +170,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 			}
 			String xmkey = "xm:" + excel.getXmbh() + ":" + excel.getXmmc();
 			Long xmId = xmIdMap.get(xmkey);
-			if(xmId == null){
+			if (xmId == null) {
 				xmId = xmMapper.getXmIdByXmmcOrXmbh(yearAndMonth, excel.getXmmc(), excel.getXmbh());
 				if (xmId == null) {
 					throw new ServiceException("序号为[" + excel.getXh() + "]的项目不存在");
@@ -184,7 +184,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 
 			String assetkey = "asset:" + excel.getZcbm() + ":" + excel.getZcmc();
 			AssetEntity dbAsset = assetIdMap.get(assetkey);
-			if(dbAsset == null){
+			if (dbAsset == null) {
 				dbAsset = assetMapper.selectByYearAndMonthAndBmOrMc(yearAndMonth, excel.getZcbm(), excel.getZcmc());
 				if (dbAsset == null) {
 					throw new ServiceException("序号为[" + excel.getXh() + "]的资产不存在");
@@ -228,38 +228,38 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 
 	@Override
 	public boolean updateXmIntangibleAsset(XmIntangibleAsset xmAsset) {
-		if(null == xmAsset.getId()){
+		if (null == xmAsset.getId()) {
 			throw new ServiceException("参数id不能为空");
 		}
 		return this.updateById(xmAsset);
 	}
 
-    @SneakyThrows
+	@SneakyThrows
 	@Override
-    public void exportKeyanwuxingzichanmingxibiao(HttpServletResponse response, XmAssetQueryParam dto) {
+	public void exportKeyanwuxingzichanmingxibiao(HttpServletResponse response, XmAssetQueryParam dto) {
 		List<XmIntangibleAsset> list = this.selectPage(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto).getRecords();
 		AtomicInteger index = new AtomicInteger(1);
 		List<JSONObject> results = new ArrayList<>();
 		list.forEach(temp -> {
 			JSONObject data = new JSONObject();
-			data.put("xh",index.getAndIncrement()+"");
-			data.put("yearAndMonth",dto.getYearAndMonth());
-			data.put("xmbh",temp.getXmbh());
-			data.put("xmmc",temp.getXmmc());
-			data.put("zcbm",temp.getAsset().getZcbm());
-			data.put("zcmc",temp.getAsset().getZcmc());
-			data.put("zclb",temp.getAsset().getZclb());
-			data.put("gl",temp.getAsset().getGl());
-			data.put("yt",temp.getAsset().getYt());
-			data.put("kssjStr",Func.notNull(temp.getAsset().getKssj())?DateUtil.format(temp.getAsset().getKssj(), DateUtil.PATTERN_DATE):"");
-			data.put("sysm",temp.getAsset().getSysm());
-			data.put("ysysm",temp.getAsset().getYsysm());
-			data.put("zcyz",temp.getAsset().getZcyz());
-			data.put("jcz",temp.getAsset().getJcz());
-			data.put("yzje",temp.getAsset().getYzje());
-			data.put("userName",temp.getUserName());
+			data.put("xh", index.getAndIncrement() + "");
+			data.put("yearAndMonth", dto.getYearAndMonth());
+			data.put("xmbh", temp.getXmbh());
+			data.put("xmmc", temp.getXmmc());
+			data.put("zcbm", temp.getAsset().getZcbm());
+			data.put("zcmc", temp.getAsset().getZcmc());
+			data.put("zclb", temp.getAsset().getZclb());
+			data.put("gl", temp.getAsset().getGl());
+			data.put("yt", temp.getAsset().getYt());
+			data.put("kssjStr", Func.notNull(temp.getAsset().getKssj()) ? DateUtil.format(temp.getAsset().getKssj(), DateUtil.PATTERN_DATE) : "");
+			data.put("sysm", temp.getAsset().getSysm());
+			data.put("ysysm", temp.getAsset().getYsysm());
+			data.put("zcyz", temp.getAsset().getZcyz());
+			data.put("jcz", temp.getAsset().getJcz());
+			data.put("yzje", temp.getAsset().getYzje());
+			data.put("userName", temp.getUserName());
 			Optional<AssetStatusEnum> optional = Arrays.stream(AssetStatusEnum.values()).filter(o -> o.getCode() == temp.getAsset().getStatus()).findFirst();
-			data.put("statusStr", optional.isPresent()?optional.get().getName():"");
+			data.put("statusStr", optional.isPresent() ? optional.get().getName() : "");
 			results.add(data);
 		});
 
@@ -276,36 +276,36 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 		//设置list集合数据
 		excelWriter.fill(results, fillConfig, writeSheet);
-		Map<String,Object> map = new HashMap<>();
+		Map<String, Object> map = new HashMap<>();
 		String yearAndMonth = dto.getYearAndMonth();
-		map.put("yearAndMonth", yearAndMonth.length()==6?yearAndMonth.substring(0,4)+"年"+yearAndMonth.substring(5)+"月":dto.getYearAndMonth()+"年");
+		map.put("yearAndMonth", yearAndMonth.length() == 6 ? yearAndMonth.substring(0, 4) + "年" + yearAndMonth.substring(5) + "月" : dto.getYearAndMonth() + "年");
 		excelWriter.fill(map, writeSheet);
 		excelWriter.finish();
 		if (templateFileName != null) {
 			templateFileName.close();
 		}
-    }
+	}
 
-    @Override
-    public IPage<XmIntangibleAssetCostVo> keyanwuxingzichantanxiaofeiyongfenpeibiao(IPage<XmIntangibleAssetCostVo> page, XmAssetQueryParam dto) {
+	@Override
+	public IPage<XmIntangibleAssetCostVo> keyanwuxingzichantanxiaofeiyongfenpeibiao(IPage<XmIntangibleAssetCostVo> page, XmAssetQueryParam dto) {
 
 		if (StringUtil.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		dto.setTenantId(SecureUtil.getTenantId());
-		List<XmIntangibleAssetCostVo> list = baseMapper.keyanwuxingzichantanxiaofeiyongfenpeibiao(page,dto);
+		List<XmIntangibleAssetCostVo> list = baseMapper.keyanwuxingzichantanxiaofeiyongfenpeibiao(page, dto);
 		for (XmIntangibleAssetCostVo vo : list) {
 			//研发分摊率=月研发工时/月总工时
-			if(vo.getAttendanceHours()==0 || vo.getWorkHours()==0){
+			if (vo.getAttendanceHours() == 0 || vo.getWorkHours() == 0) {
 				vo.setYanfaFenTanLv(0);
-			}else {
+			} else {
 				vo.setYanfaFenTanLv(vo.getWorkHours() / vo.getAttendanceHours());
 			}
 			//研发摊销=(月折旧额/月摊销额(元)) * 研发分摊率
 			vo.setYanfaTanXiao(vo.getAsset().getYzje().doubleValue() * vo.getYanfaFenTanLv());
 		}
-        return page.setRecords(list);
-    }
+		return page.setRecords(list);
+	}
 
 	@SneakyThrows
 	@Override
@@ -315,21 +315,21 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		List<JSONObject> results = new ArrayList<>();
 		list.forEach(temp -> {
 			JSONObject data = new JSONObject();
-			data.put("xh",index.getAndIncrement()+"");
-			data.put("yearAndMonth",dto.getYearAndMonth());
-			data.put("xmbh",temp.getXmbh());
-			data.put("xmmc",temp.getXmmc());
-			data.put("zcbm",temp.getAsset().getZcbm());
-			data.put("zcmc",temp.getAsset().getZcmc());
-			data.put("zclb",temp.getAsset().getZclb());
-			data.put("yt",temp.getAsset().getYt());
-			data.put("zcyz",temp.getAsset().getZcyz());
-			data.put("jcz",temp.getAsset().getJcz());
-			data.put("yzje",temp.getAsset().getYzje());
-			data.put("attendanceHours",temp.getAttendanceHours());
-			data.put("workHours",temp.getWorkHours());
-			data.put("yanfaFenTanLv",temp.getYanfaFenTanLv());
- 			data.put("yanfaTanXiao", temp.getYanfaTanXiao());
+			data.put("xh", index.getAndIncrement() + "");
+			data.put("yearAndMonth", dto.getYearAndMonth());
+			data.put("xmbh", temp.getXmbh());
+			data.put("xmmc", temp.getXmmc());
+			data.put("zcbm", temp.getAsset().getZcbm());
+			data.put("zcmc", temp.getAsset().getZcmc());
+			data.put("zclb", temp.getAsset().getZclb());
+			data.put("yt", temp.getAsset().getYt());
+			data.put("zcyz", temp.getAsset().getZcyz());
+			data.put("jcz", temp.getAsset().getJcz());
+			data.put("yzje", temp.getAsset().getYzje());
+			data.put("attendanceHours", temp.getAttendanceHours());
+			data.put("workHours", temp.getWorkHours());
+			data.put("yanfaFenTanLv", temp.getYanfaFenTanLv());
+			data.put("yanfaTanXiao", temp.getYanfaTanXiao());
 			results.add(data);
 
 		});
@@ -347,7 +347,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 		//设置list集合数据
 		excelWriter.fill(results, fillConfig, writeSheet);
-		Map<String,Object> map = new HashMap<>();
+		Map<String, Object> map = new HashMap<>();
 		map.put("yearAndMonth", dto.getYearAndMonth());
 		excelWriter.fill(map, writeSheet);
 		excelWriter.finish();

BIN
kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.docx


File diff suppressed because it is too large
+ 1 - 1
kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.ftl


File diff suppressed because it is too large
+ 1 - 1
kd-service/kd-scientific/src/main/resources/templates/年度高新技术企业发展情况报表.xml