zhoulisky 9 months ago
parent
commit
50b31c2501

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

@@ -4,6 +4,8 @@ package org.sky.scientific.pojo.entity;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import org.sky.core.tenant.mp.TenantEntity;
 import org.sky.core.tenant.mp.TenantEntity;
@@ -62,7 +64,8 @@ public class AssetEntity extends TenantEntity {
 	private BigDecimal zcyz;
 	private BigDecimal zcyz;
 
 
 	@Schema(description = "净残值(%)")
 	@Schema(description = "净残值(%)")
-
+	@Min(value = 0)
+	@Max(value = 1)
 	private Double jcz;
 	private Double jcz;
 
 
 	@Schema(description = "月折旧额/月摊销额(元)")
 	@Schema(description = "月折旧额/月摊销额(元)")
@@ -71,7 +74,7 @@ public class AssetEntity extends TenantEntity {
 	@Schema(description = "总工时")
 	@Schema(description = "总工时")
 	private Double zgs;
 	private Double zgs;
 
 
-	@Schema(description = "状态,0:正常,1:停用,2:已足额折旧'")
+	@Schema(description = "状态,0:正常,1:停用,2:已足额折旧,3:改造,4:资产处置")
 	private Integer status;
 	private Integer status;
 
 
 }
 }

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

@@ -20,7 +20,7 @@ import java.math.BigDecimal;
  @EqualsAndHashCode(callSuper = true)
  @EqualsAndHashCode(callSuper = true)
 public class DeductionCostQt extends TenantEntity {
 public class DeductionCostQt extends TenantEntity {
 
 
-	@Schema(description = "所属年月,如:2025")
+	@Schema(description = "所属年月,yyyyMM")
 	private String yearAndMonth;
 	private String yearAndMonth;
 
 
 	@Schema(description = "人员人工费用")
 	@Schema(description = "人员人工费用")

+ 7 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/AssetController.java

@@ -88,6 +88,13 @@ public class AssetController extends KdController {
 		return R.status(service.updateAsset(asset));
 		return R.status(service.updateAsset(asset));
 	}
 	}
 
 
+	@PostMapping("/update-status")
+	@ApiOperationSupport(order = 6)
+	@Operation(summary = "修改状态", description = "传入zc")
+	public R updateStatus(@Valid @RequestBody AssetEntity asset) {
+		return R.status(service.updateStatus(asset));
+	}
+
 	@PostMapping("/remove")
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 7)
 	@ApiOperationSupport(order = 7)
 	@Operation(summary = "删除", description = "传入ids")
 	@Operation(summary = "删除", description = "传入ids")

+ 1 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmCostDetailsController.java

@@ -121,7 +121,7 @@ public class XmCostDetailsController extends KdController {
 	@PostMapping("/deduction-qt")
 	@PostMapping("/deduction-qt")
 	@ApiOperationSupport(order = 33)
 	@ApiOperationSupport(order = 33)
 	@Operation(summary = "加计扣除-研发支出辅助汇总表-其中:其他事项-提交")
 	@Operation(summary = "加计扣除-研发支出辅助汇总表-其中:其他事项-提交")
-	public R<Boolean> updateDeductionQt(DeductionCostQt dto) {
+	public R<Boolean> updateDeductionQt(@RequestBody DeductionCostQt dto) {
 		return R.status(service.updateDeductionQt(dto));
 		return R.status(service.updateDeductionQt(dto));
 	}
 	}
 }
 }

+ 22 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/e/AssetStatusEnum.java

@@ -0,0 +1,22 @@
+package org.sky.scientific.e;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum AssetStatusEnum {
+
+//	0:正常,1:停用,2:已足额折旧,3:改造,4:资产处置'
+
+
+	正常("正常", 0),
+	停用("停用", 2),
+	已足额折旧("已足额折旧", 1),
+	改造("改造", 3),
+	资产处置("处置", 4);
+
+	final String name;
+	final int code;
+
+}

+ 7 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/AssetExcel.java

@@ -2,18 +2,17 @@
 package org.sky.scientific.excel;
 package org.sky.scientific.excel;
 
 
 
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.DateUtil;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 
-import java.io.Serializable;
 import java.io.Serial;
 import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
 
 
@@ -73,7 +72,7 @@ public class AssetExcel implements Serializable {
 
 
 	@ColumnWidth(20)
 	@ColumnWidth(20)
 	@ExcelProperty("资产原值")
 	@ExcelProperty("资产原值")
-	private Integer zcyz;
+	private BigDecimal zcyz;
 
 
 	@ColumnWidth(20)
 	@ColumnWidth(20)
 	@ExcelProperty("净残值")
 	@ExcelProperty("净残值")
@@ -83,4 +82,7 @@ public class AssetExcel implements Serializable {
 	@ExcelProperty("月折旧额/月摊销额")
 	@ExcelProperty("月折旧额/月摊销额")
 	private BigDecimal yzje;
 	private BigDecimal yzje;
 
 
+	@ExcelProperty("状态")
+	private String statusName;
+
 }
 }

+ 6 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/AssetMapper.java

@@ -68,4 +68,10 @@ public interface AssetMapper extends BaseMapper<AssetEntity> {
 	 */
 	 */
 	@TenantIgnore
 	@TenantIgnore
 	List<CostSummaryVO> costSummary(CostSummaryDTO dto);
 	List<CostSummaryVO> costSummary(CostSummaryDTO dto);
+
+	/**
+	 * 修改资产状态
+	 * @param asset
+	 */
+	int updateStatus(@Param("assetId") Long assetId, @Param("status") Integer status);
 }
 }

+ 6 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/AssetMapper.xml

@@ -37,6 +37,12 @@
         asset.YSYSM as 'asset.YSYSM',asset.ZCYZ as 'asset.ZCYZ',asset.JCZ as 'asset.JCZ',asset.YZJE as 'asset.YZJE',asset.status AS 'asset.status'
         asset.YSYSM as 'asset.YSYSM',asset.ZCYZ as 'asset.ZCYZ',asset.JCZ as 'asset.JCZ',asset.YZJE as 'asset.YZJE',asset.status AS 'asset.status'
     </sql>
     </sql>
 
 
+    <update id="updateStatus">
+        update kd_asset
+        set status = #{status}
+        where id = #{assetId}
+    </update>
+
     <select id="selectAssetPage" resultMap="ResultVoMap">
     <select id="selectAssetPage" resultMap="ResultVoMap">
         SELECT t.*
         SELECT t.*
         FROM kd_asset t
         FROM kd_asset t

+ 7 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/IAssetService.java

@@ -88,4 +88,11 @@ public interface IAssetService extends BaseService<AssetEntity> {
 	 * @return
 	 * @return
 	 */
 	 */
 	boolean updateAsset(AssetEntity asset);
 	boolean updateAsset(AssetEntity asset);
+
+	/**
+	 * 修改资产状态
+	 * @param asset
+	 * @return
+	 */
+	boolean updateStatus(AssetEntity asset);
 }
 }

+ 86 - 22
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AssetServiceImpl.java

@@ -19,6 +19,7 @@ import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.mp.support.Query;
 import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.utils.*;
 import org.sky.core.tool.utils.*;
+import org.sky.scientific.e.AssetStatusEnum;
 import org.sky.scientific.excel.AssetExcel;
 import org.sky.scientific.excel.AssetExcel;
 import org.sky.scientific.mapper.AssetMapper;
 import org.sky.scientific.mapper.AssetMapper;
 import org.sky.scientific.pojo.dto.AssetDTO;
 import org.sky.scientific.pojo.dto.AssetDTO;
@@ -37,6 +38,7 @@ import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.net.URLEncoder;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -94,6 +96,7 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 
 
 		for (AssetExcel excel : data) {
 		for (AssetExcel excel : data) {
 			AssetEntity zc = Objects.requireNonNull(BeanUtil.copyProperties(excel, AssetDTO.class));
 			AssetEntity zc = Objects.requireNonNull(BeanUtil.copyProperties(excel, AssetDTO.class));
+
 			zc.setYearAndMonth(yearAndMonth);
 			zc.setYearAndMonth(yearAndMonth);
 			//yearAndMonth 是否存在该物资
 			//yearAndMonth 是否存在该物资
 			LambdaQueryWrapper<AssetEntity> queryWrapper = Wrappers.lambdaQuery();
 			LambdaQueryWrapper<AssetEntity> queryWrapper = Wrappers.lambdaQuery();
@@ -102,6 +105,9 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 			if (this.count(queryWrapper) > 0) {
 			if (this.count(queryWrapper) > 0) {
 				throw new ServiceException("资产编号【" + excel.getZcbm() + "】已存在");
 				throw new ServiceException("资产编号【" + excel.getZcbm() + "】已存在");
 			}
 			}
+
+			int status = AssetStatusEnum.valueOf(excel.getStatusName()).getCode();
+			zc.setStatus(status);
 			this.save(zc);
 			this.save(zc);
 		}
 		}
 	}
 	}
@@ -118,25 +124,22 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 			throw new ServiceException("上个月资产数据为空");
 			throw new ServiceException("上个月资产数据为空");
 		}
 		}
 		//与本月数据对比,去重后保存至数据库
 		//与本月数据对比,去重后保存至数据库
-//		Integer okCount = 0;
 		for (AssetEntity temp : lastMonthDataList) {
 		for (AssetEntity temp : lastMonthDataList) {
 			LambdaQueryWrapper<AssetEntity> qw = Wrappers.<AssetEntity>lambdaQuery().eq(AssetEntity::getZcbm, temp.getZcbm()).eq(AssetEntity::getYearAndMonth, zc.getYearAndMonth());
 			LambdaQueryWrapper<AssetEntity> qw = Wrappers.<AssetEntity>lambdaQuery().eq(AssetEntity::getZcbm, temp.getZcbm()).eq(AssetEntity::getYearAndMonth, zc.getYearAndMonth());
 			if (this.baseMapper.selectCount(qw) > 0) {
 			if (this.baseMapper.selectCount(qw) > 0) {
 				throw new ServiceException("资产【" + temp.getZcbm() + "】已存在");
 				throw new ServiceException("资产【" + temp.getZcbm() + "】已存在");
-//				log.info("资产【{}】已存在, 年月【{}】", temp.getZcbm(), zc.getYearAndMonth());
-//				continue;
-			} else {
-//				okCount++;
-				temp.setYearAndMonth(zc.getYearAndMonth());
-
+			}
+			temp.setYearAndMonth(zc.getYearAndMonth());
+			if (Func.equals(temp.getStatus(), AssetStatusEnum.正常.getCode())) {
 				temp.setYsysm(Func.toInt(temp.getYsysm(), 0) + 1);
 				temp.setYsysm(Func.toInt(temp.getYsysm(), 0) + 1);
 				//使用寿命-已使用月份数=0时,即已足额折旧
 				//使用寿命-已使用月份数=0时,即已足额折旧
-				temp.setStatus((temp.getSysm() - temp.getYsysm() <= 0) ? 2 : 0);
-				temp.setId(null);
-				this.save(temp);
+				if (temp.getSysm() - temp.getYsysm() <= 0) {
+					temp.setStatus(AssetStatusEnum.已足额折旧.getCode());
+				}
 			}
 			}
+			temp.setId(null);
+			this.save(temp);
 		}
 		}
-//		log.info("{}共{}个资产,成功导入【{}】条数据", lastDate, lastMonthDataList.size(), okCount);
 		return true;
 		return true;
 	}
 	}
 
 
@@ -227,30 +230,91 @@ public class AssetServiceImpl extends BaseServiceImpl<AssetMapper, AssetEntity>
 
 
 	@Override
 	@Override
 	public boolean updateAsset(AssetEntity asset) {
 	public boolean updateAsset(AssetEntity asset) {
-		if(Func.isNull(asset.getId())){
+		if (Func.isNull(asset.getId())) {
 			throw new ServiceException("参数id不能为空");
 			throw new ServiceException("参数id不能为空");
 		}
 		}
 		LambdaQueryWrapper<AssetEntity> qw = Wrappers.<AssetEntity>lambdaQuery().eq(AssetEntity::getZcbm, asset.getZcbm()).eq(AssetEntity::getYearAndMonth, asset.getYearAndMonth());
 		LambdaQueryWrapper<AssetEntity> qw = Wrappers.<AssetEntity>lambdaQuery().eq(AssetEntity::getZcbm, asset.getZcbm()).eq(AssetEntity::getYearAndMonth, asset.getYearAndMonth());
 		AssetEntity dbAsset = this.getOne(qw);
 		AssetEntity dbAsset = this.getOne(qw);
-		if (dbAsset != null && Func.equals(dbAsset.getZcbm(), asset.getZcbm()) && !Func.equals(dbAsset.getId(), asset.getId())) {
+		if (Func.isNull(dbAsset)) {
+			throw new ServiceException("资产不存在");
+		}
+		if (Func.equals(dbAsset.getZcbm(), asset.getZcbm()) && !Func.equals(dbAsset.getId(), asset.getId())) {
 			throw new ServiceException("资产【" + asset.getZcbm() + "】已存在");
 			throw new ServiceException("资产【" + asset.getZcbm() + "】已存在");
 		}
 		}
 
 
-		//使用寿命-已使用月份数=0时,即已足额折旧
+//		正常状态、停用状态,可修改资产数据。其他情况不能修改。假设在修改资产时,正好出现使用寿命-已使用月份数=0时,即已足额折旧状态时,就显示为已足额折旧状态了,不可以再次修改了。
+//		修改资产时,系统需要二次确认。
+
+
+		if (Func.equals(dbAsset.getStatus(), AssetStatusEnum.正常.getCode()) || Func.equals(dbAsset.getStatus(), AssetStatusEnum.停用.getCode())) {
+			if (Func.isNull(asset.getYsysm())) {
+				//使用寿命-已使用月份数=0时,即已足额折旧
 //			仪器设置的算法:当前时间为2025年01月-2024年5月,差额为9个月,因为折旧从次月开始,所以已使用月数为8个月(即9-1=8),再将使用寿命-已使用月份数=0时,即已足额折旧。
 //			仪器设置的算法:当前时间为2025年01月-2024年5月,差额为9个月,因为折旧从次月开始,所以已使用月数为8个月(即9-1=8),再将使用寿命-已使用月份数=0时,即已足额折旧。
 //			无形资产:当月即摊销,不需要-1
 //			无形资产:当月即摊销,不需要-1
-
-		if(Func.isNull(asset.getYsysm())){
-			long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(cn.hutool.core.date.DateUtil.date(), asset.getKssj(), false);
+				long ysysm = cn.hutool.core.date.DateUtil.betweenMonth(cn.hutool.core.date.DateUtil.date(), asset.getKssj(), false);
 //			这里
 //			这里
-			if (!Func.equals("仪器设备", asset.getZclb())) {
-				ysysm++;
+				if (!Func.equals("仪器设备", asset.getZclb())) {
+					ysysm++;
+				}
+				asset.setYsysm((int) ysysm);
+			}
+			if (asset.getSysm() - asset.getYsysm() <= 0) {
+				asset.setStatus(AssetStatusEnum.已足额折旧.getCode());
 			}
 			}
-			asset.setYsysm((int) ysysm);
 		}
 		}
-
-		asset.setStatus((asset.getSysm() - asset.getYsysm() <= 0) ? 2 : 0);
 		return this.updateById(asset);
 		return this.updateById(asset);
 	}
 	}
 
 
+	@Override
+	public boolean updateStatus(AssetEntity asset) {
+		if (asset.getId() == null) {
+			throw new ServiceException("参数assetId不能为空");
+		}
+		if (Func.isNull(asset.getStatus())) {
+			throw new ServiceException("参数status不能为空");
+		}
+		AssetEntity dbAsset = baseMapper.selectById(asset.getId());
+		if (Func.isNull(dbAsset)) {
+			throw new ServiceException("资产不存在");
+		}
+
+		if (List.of("仪器设备", "房屋建筑物").contains(dbAsset.getZclb())) {
+			throw new ServiceException("只有固定资产才能改造");
+		}
+//		String name = AssetStatusEnum.改造.name();
+//		① 正常状态:表示正常使用中;正常折旧,已使用寿命/月数累加。可进行“改造”、“停用”、“资产处置”。
+//		② 停用状态:表示停止使用状态;虽然停用,但是正常折旧,已使用寿命/月数继续累加。停用后,可点击“恢复”恢复为正常状态。可进行“改造”、“资产处置”。
+//		③ 改造状态:表示改造中,改造期已使用寿命/月数/折旧为“全部暂停”状态。改造完成,需点击“恢复按钮”,恢复时需对资产内容进行修改完成。恢复为正常状态。
+//		④ 已足额折扣状态:按照使用寿命,全部折旧完毕;不可以进行操作;后续不再提折旧。不再使用,不再显示。
+//		⑤ 资产处理状态:表示资产已被转让、报废、捐赠或其他处理等;不可以进行操作;后续不属于企业 ,不再计提折旧,不能再使用。
+//		⑥ /:表示无操作
+//		⑦ 注意,资产总表涉及资产明细统计,需进行相应的处理
+		if (Func.equals(dbAsset.getStatus(), AssetStatusEnum.已足额折旧.getCode())) {
+			throw new ServiceException("该资产已足额折旧");
+		}
+		if (Func.equals(dbAsset.getStatus(), AssetStatusEnum.资产处置.getCode())) {
+			throw new ServiceException("该资产已处置");
+		}
+		if (Func.equals(AssetStatusEnum.正常.getCode(), dbAsset.getStatus())) {
+			//① 正常状态:表示正常使用中;正常折旧,已使用寿命/月数累加。可进行“改造”、“停用”、“资产处置”。
+
+			if (!Arrays.asList(AssetStatusEnum.改造.getCode(), AssetStatusEnum.停用.getCode(), AssetStatusEnum.资产处置.getCode()).contains(asset.getStatus())) {
+				throw new ServiceException("状态为正常的资产,可进行改造、停用、资产处置操作");
+			}
+
+		} else if (Func.equals(AssetStatusEnum.停用.getCode(), dbAsset.getStatus())) {
+			//② 停用状态:表示停止使用状态;虽然停用,但是正常折旧,已使用寿命/月数继续累加。停用后,可点击“恢复”恢复为正常状态。可进行“改造”、“资产处置”。
+			if (!Arrays.asList(AssetStatusEnum.改造.getCode(), AssetStatusEnum.资产处置.getCode(), AssetStatusEnum.正常.getCode()).contains(asset.getStatus())) {
+				throw new ServiceException("状态为停用的资产,可进行改造、恢复、资产处置操作");
+			}
+		} else if (Func.equals(AssetStatusEnum.改造.getCode(), dbAsset.getStatus())) {
+			//改造状态:表示改造中,改造期已使用寿命/月数/折旧为“全部暂停”状态。改造完成,需点击“恢复按钮”,恢复时需对资产内容进行修改完成。恢复为正常状态。
+			if (!List.of(AssetStatusEnum.正常.getCode()).contains(asset.getStatus())) {
+				throw new ServiceException("状态为改造的资产,可进行恢复操作");
+			}
+		}
+
+		return baseMapper.updateStatus(asset.getId(), asset.getStatus()) == 1;
+	}
+
 }
 }

+ 31 - 21
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmCostDetailsServiceImpl.java

@@ -450,19 +450,30 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		DeductionCostQt qt = qtMapper.selectOne(Wrappers.<DeductionCostQt>lambdaQuery().eq(DeductionCostQt::getYearAndMonth, dto.getYearAndMonth()));
 		DeductionCostQt qt = qtMapper.selectOne(Wrappers.<DeductionCostQt>lambdaQuery().eq(DeductionCostQt::getYearAndMonth, dto.getYearAndMonth()));
 
 
 		if (Func.notNull(qt)) {
 		if (Func.notNull(qt)) {
+
+			summary.setRyrgfy_qt(qt.getRyrgfyQt());
+			summary.setZjtrfy_qt(qt.getZjtrfyQt());
+			summary.setZjfy_qt(qt.getZjfyQt());
+			summary.setWxzctx_qt(qt.getWxzctxQt());
+			summary.setXcpsjfd_qt(qt.getXcpsjfdQt());
+			summary.setQtxgfyhj_qt(qt.getQtxgfyhjQt());
+			summary.setWtjnjgfy_qt(qt.getWtjnjgfyQt());
+			summary.setWtjwjgfy_qt(qt.getWtjwjgfyQt());
+
 			//先将“其中:其他事项”加入到 对应的费用化金额小计
 			//先将“其中:其他事项”加入到 对应的费用化金额小计
-			summary.setRyrgfy_fyh(summary.getRyrgfy_fyh().add(qt.getRyrgfyQt()));
-			summary.setZjtrfy_fyh(summary.getZjtrfy_fyh().add(qt.getZjtrfyQt()));
-			summary.setZjfy_fyh(summary.getZjfy_fyh().add(qt.getZjfyQt()));
-			summary.setWxzctx_fyh(summary.getWxzctx_fyh().add(qt.getWxzctxQt()));
-			summary.setXcpsjfd_fyh(summary.getXcpsjfd_fyh().add(qt.getXcpsjfdQt()));
-			summary.setQtxgfyhj_fyh(summary.getQtxgfyhj_fyh().add(qt.getQtxgfyhjQt()));
-			summary.setWtjnjgfy_fyh(summary.getWtjnjgfy_fyh().add(qt.getWtjnjgfyQt()));
-			summary.setWtjwjgfy_fyh(summary.getWtjwjgfy_fyh().add(qt.getWtjwjgfyQt()));
+			summary.setRyrgfy_fyh(summary.getRyrgfy_fyh().add(summary.getRyrgfy_qt()));
+			summary.setZjtrfy_fyh(summary.getZjtrfy_fyh().add(summary.getZjtrfy_qt()));
+			summary.setZjfy_fyh(summary.getZjfy_fyh().add(summary.getZjfy_qt()));
+			summary.setWxzctx_fyh(summary.getWxzctx_fyh().add(summary.getWxzctx_qt()));
+			summary.setXcpsjfd_fyh(summary.getXcpsjfd_fyh().add(summary.getXcpsjfd_qt()));
+			summary.setQtxgfyhj_fyh(summary.getQtxgfyhj_fyh().add(summary.getQtxgfyhj_qt()));
+			summary.setWtjnjgfy_fyh(summary.getWtjnjgfy_fyh().add(summary.getWtjnjgfy_qt()));
+			summary.setWtjwjgfy_fyh(summary.getWtjwjgfy_fyh().add(summary.getWtjwjgfy_qt()));
 
 
 			//其中:其他事项-前五项 小计
 			//其中:其他事项-前五项 小计
 			summary.setTotal_qt(qt.getRyrgfyQt().add(qt.getZjtrfyQt()).add(qt.getZjfyQt()).add(qt.getWxzctxQt()).add(qt.getXcpsjfdQt()));
 			summary.setTotal_qt(qt.getRyrgfyQt().add(qt.getZjtrfyQt()).add(qt.getZjfyQt()).add(qt.getWxzctxQt()).add(qt.getXcpsjfdQt()));
 
 
+			summary.setTotal_fyh(summary.getTotal_fyh().add(summary.getTotal_qt()));
 		}
 		}
 
 
 
 
@@ -537,8 +548,10 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 				}
 				}
 			}
 			}
 
 
+
+
 			//前五项小计=1、人员人工费用+2、直接投入费用+3、折旧费用+4、无形资产摊销+5、新产品设计费等
 			//前五项小计=1、人员人工费用+2、直接投入费用+3、折旧费用+4、无形资产摊销+5、新产品设计费等
-			fyhSummary.setTotal(fyhSummary.getRyrgTotal().add(fyhSummary.getZjtrTotal()).add(fyhSummary.getZjfyTotal()).add(fyhSummary.getWxzctxTotal()).add(fyhSummary.getXcpsjfd()));
+			fyhSummary.setTotal(summary.getTotal_qt().add(fyhSummary.getTotal().add(fyhSummary.getRyrgTotal().add(fyhSummary.getZjtrTotal()).add(fyhSummary.getZjfyTotal()).add(fyhSummary.getWxzctxTotal()).add(fyhSummary.getXcpsjfd()))));
 			zbhSummary.setTotal(zbhSummary.getRyrgTotal().add(zbhSummary.getZjtrTotal()).add(zbhSummary.getZjfyTotal()).add(zbhSummary.getWxzctxTotal()).add(zbhSummary.getXcpsjfd()));
 			zbhSummary.setTotal(zbhSummary.getRyrgTotal().add(zbhSummary.getZjtrTotal()).add(zbhSummary.getZjfyTotal()).add(zbhSummary.getWxzctxTotal()).add(zbhSummary.getXcpsjfd()));
 
 
 			zbhSummary.setWtjnfyAdjust(zbhSummary.getWtjnfyAdjust().multiply(new BigDecimal("0.8")));
 			zbhSummary.setWtjnfyAdjust(zbhSummary.getWtjnfyAdjust().multiply(new BigDecimal("0.8")));
@@ -630,14 +643,13 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		summary.setTotal_hjje(summary.getTotal_zbh().add(summary.getTotal_fyh()));
 		summary.setTotal_hjje(summary.getTotal_zbh().add(summary.getTotal_fyh()));
 
 
 		//=IF(K20*0.1/0.9<L20,K20*0.1/0.9,L20)
 		//=IF(K20*0.1/0.9<L20,K20*0.1/0.9,L20)
-		BigDecimal divide = summary.getTotal_hjje().multiply(new BigDecimal("0.1")).divide(new BigDecimal("0.9"),2, RoundingMode.HALF_UP);
+		BigDecimal divide = summary.getTotal_hjje().multiply(new BigDecimal("0.1")).divide(new BigDecimal("0.9"), 2, RoundingMode.HALF_UP);
 		summary.setQtxgfyhj_adjust_hjje(divide.compareTo(summary.getQtxgfyhj_hjje()) < 0 ? divide : summary.getQtxgfyhj_hjje());
 		summary.setQtxgfyhj_adjust_hjje(divide.compareTo(summary.getQtxgfyhj_hjje()) < 0 ? divide : summary.getQtxgfyhj_hjje());
 
 
 
 
-
 		//金额合计-经限额调整后的委托境外机构进行研发活动所发生的费用
 		//金额合计-经限额调整后的委托境外机构进行研发活动所发生的费用
 		//(K20+M20+O20)*2/3
 		//(K20+M20+O20)*2/3
-		BigDecimal d1 = summary.getTotal_hjje().add(summary.getQtxgfyhj_hjje()).add(summary.getWtjnjgfy_hjje()).multiply(new BigDecimal("2")).divide(new BigDecimal("3"),2, RoundingMode.HALF_UP);
+		BigDecimal d1 = summary.getTotal_hjje().add(summary.getQtxgfyhj_hjje()).add(summary.getWtjnjgfy_hjje()).multiply(new BigDecimal("2")).divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP);
 		//P20*0.8
 		//P20*0.8
 		BigDecimal d2 = summary.getWtjwjgfy_hjje().multiply(new BigDecimal("0.8"));
 		BigDecimal d2 = summary.getWtjwjgfy_hjje().multiply(new BigDecimal("0.8"));
 		summary.setWtjwjgfy_adjust_hjje(d1.compareTo(d2) < 0 ? d1 : d2);
 		summary.setWtjwjgfy_adjust_hjje(d1.compareTo(d2) < 0 ? d1 : d2);
@@ -645,12 +657,12 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		for (DeductionCostSummaryItem item : summaryList) {
 		for (DeductionCostSummaryItem item : summaryList) {
 
 
 			//=$Q$20/$P$20*P8 经限额调整后的委托境外机构进行研发活动所发生的费用
 			//=$Q$20/$P$20*P8 经限额调整后的委托境外机构进行研发活动所发生的费用
-			if(BigDecimal.ZERO.compareTo(summary.getWtjwjgfy_hjje()) != 0){
+			if (BigDecimal.ZERO.compareTo(summary.getWtjwjgfy_hjje()) != 0) {
 				item.setWtjwfyAdjust(summary.getWtjwjgfy_adjust_hjje().multiply(item.getWtjwfy()).divide(summary.getWtjwjgfy_hjje(), 2, RoundingMode.HALF_UP));
 				item.setWtjwfyAdjust(summary.getWtjwjgfy_adjust_hjje().multiply(item.getWtjwfy()).divide(summary.getWtjwjgfy_hjje(), 2, RoundingMode.HALF_UP));
 			}
 			}
 
 
 			//=M20/L20*L9
 			//=M20/L20*L9
-			if(BigDecimal.ZERO.compareTo(summary.getQtxgfyhj_hjje()) != 0){
+			if (BigDecimal.ZERO.compareTo(summary.getQtxgfyhj_hjje()) != 0) {
 				item.setQtxgfyAdjustTotal(summary.getQtxgfyhj_adjust_hjje().multiply(item.getQtxgfyTotal()).divide(summary.getQtxgfyhj_hjje(), 2, RoundingMode.HALF_UP));
 				item.setQtxgfyAdjustTotal(summary.getQtxgfyhj_adjust_hjje().multiply(item.getQtxgfyTotal()).divide(summary.getQtxgfyhj_hjje(), 2, RoundingMode.HALF_UP));
 			}
 			}
 
 
@@ -659,9 +671,9 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 
 
 			if (item.getType() == 1) {
 			if (item.getType() == 1) {
 				summary.setQtxgfyhj_adjust_fyh(summary.getQtxgfyhj_adjust_fyh().add(item.getQtxgfyAdjustTotal()));
 				summary.setQtxgfyhj_adjust_fyh(summary.getQtxgfyhj_adjust_fyh().add(item.getQtxgfyAdjustTotal()));
- 				summary.setWtjwjgfy_adjust_fyh(summary.getWtjwjgfy_adjust_fyh().add(item.getWtjwfyAdjust()));
+				summary.setWtjwjgfy_adjust_fyh(summary.getWtjwjgfy_adjust_fyh().add(item.getWtjwfyAdjust()));
 
 
-				 summary.setYxjjkcjehj_fyh(summary.getYxjjkcjehj_fyh().add(item.getYxjjkcjehj()));
+				summary.setYxjjkcjehj_fyh(summary.getYxjjkcjehj_fyh().add(item.getYxjjkcjehj()));
 
 
 			} else if (item.getType() == 2) {
 			} else if (item.getType() == 2) {
 				summary.setQtxgfyhj_adjust_zbh(summary.getQtxgfyhj_adjust_zbh().add(item.getQtxgfyAdjustTotal()));
 				summary.setQtxgfyhj_adjust_zbh(summary.getQtxgfyhj_adjust_zbh().add(item.getQtxgfyAdjustTotal()));
@@ -675,24 +687,22 @@ public class XmCostDetailsServiceImpl extends BaseServiceImpl<XmCostDetailsMappe
 		summary.setYxjjkcjehj_hjje(summary.getYxjjkcjehj_hjje().add(summary.getYxjjkcjehj_fyh()).add(summary.getYxjjkcjehj_zbh()));
 		summary.setYxjjkcjehj_hjje(summary.getYxjjkcjehj_hjje().add(summary.getYxjjkcjehj_fyh()).add(summary.getYxjjkcjehj_zbh()));
 
 
 
 
-
-
 		summary.setItemList(summaryList);
 		summary.setItemList(summaryList);
 		return summary;
 		return summary;
 	}
 	}
 
 
 	@Override
 	@Override
 	public boolean updateDeductionQt(DeductionCostQt dto) {
 	public boolean updateDeductionQt(DeductionCostQt dto) {
-		if(Func.isBlank(dto.getYearAndMonth())){
+		if (Func.isBlank(dto.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
 		}
 		LambdaQueryWrapper<DeductionCostQt> eq = Wrappers.<DeductionCostQt>lambdaQuery()
 		LambdaQueryWrapper<DeductionCostQt> eq = Wrappers.<DeductionCostQt>lambdaQuery()
 			.eq(DeductionCostQt::getYearAndMonth, dto.getYearAndMonth())
 			.eq(DeductionCostQt::getYearAndMonth, dto.getYearAndMonth())
 			.eq(DeductionCostQt::getTenantId, SecureUtil.getTenantId());
 			.eq(DeductionCostQt::getTenantId, SecureUtil.getTenantId());
 		DeductionCostQt dbQt = qtMapper.selectOne(eq);
 		DeductionCostQt dbQt = qtMapper.selectOne(eq);
-		if(Func.isNull(dbQt)){
+		if (Func.isNull(dbQt)) {
 			return qtMapper.insert(dto) == 1;
 			return qtMapper.insert(dto) == 1;
-		}else {
+		} else {
 			dto.setId(dbQt.getId());
 			dto.setId(dbQt.getId());
 			return qtMapper.updateById(dto) == 1;
 			return qtMapper.updateById(dto) == 1;
 		}
 		}