|  | @@ -28,6 +28,8 @@ import org.springblade.core.tool.utils.Func;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.math.BigDecimal;
 | 
	
		
			
				|  |  | +import java.math.RoundingMode;
 | 
	
		
			
				|  |  |  import java.util.Collections;
 | 
	
		
			
				|  |  |  import java.util.HashMap;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
	
		
			
				|  | @@ -51,9 +53,12 @@ public class TaskProgressServiceImpl extends BaseServiceImpl<TaskProgressMapper,
 | 
	
		
			
				|  |  |  		Map<String, TaskProgressVO1> map = new HashMap<>();
 | 
	
		
			
				|  |  |  		TaskProgressVO vo1 = baseMapper.selectNewTaskProgress1(projectId, contractId,1);
 | 
	
		
			
				|  |  |  		if(vo1!=null){
 | 
	
		
			
				|  |  | -			map.put("save-again", new TaskProgressVO1(vo1.getFinishTatol(),vo1.getTaskTotal(),vo1.getTaskTotal() > 0 ?
 | 
	
		
			
				|  |  | -					(double) vo1.getFinishTatol() / vo1.getTaskTotal() * 100 :
 | 
	
		
			
				|  |  | -					0.00));
 | 
	
		
			
				|  |  | +			BigDecimal result = (vo1.getTaskTotal() != null && vo1.getTaskTotal() > 0 && vo1.getFinishTatol() != null) ?
 | 
	
		
			
				|  |  | +					new BigDecimal(vo1.getFinishTatol())
 | 
	
		
			
				|  |  | +							.divide(new BigDecimal(vo1.getTaskTotal()), 2, RoundingMode.HALF_UP)
 | 
	
		
			
				|  |  | +							.multiply(new BigDecimal(100)) :
 | 
	
		
			
				|  |  | +					BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +			map.put("save-again", new TaskProgressVO1(vo1.getFinishTatol(),vo1.getTaskTotal(),result));
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		TaskProgressVO vo2 = baseMapper.selectNewTaskProgress1(projectId, contractId,2);
 | 
	
		
			
				|  |  |  		if(vo2!=null){
 | 
	
	
		
			
				|  | @@ -62,9 +67,12 @@ public class TaskProgressServiceImpl extends BaseServiceImpl<TaskProgressMapper,
 | 
	
		
			
				|  |  |  				size=baseMapper.selectTaskBatchSize(Func.toLongList(vo2.getDataId()));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			Integer finishTatol=vo2.getTaskTotal()-size;
 | 
	
		
			
				|  |  | -			map.put("re-sign", new TaskProgressVO1(finishTatol,vo2.getTaskTotal(),vo2.getTaskTotal() > 0 ?
 | 
	
		
			
				|  |  | -					(double) finishTatol / vo2.getTaskTotal() * 100 :
 | 
	
		
			
				|  |  | -					0.00));
 | 
	
		
			
				|  |  | +			// 使用 BigDecimal 进行精确计算并保留两位小数
 | 
	
		
			
				|  |  | +			BigDecimal result = vo2.getTaskTotal() > 0 ?
 | 
	
		
			
				|  |  | +					new BigDecimal(finishTatol).divide(new BigDecimal(vo2.getTaskTotal()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)) :
 | 
	
		
			
				|  |  | +					BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +			result = result.setScale(2, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | +			map.put("re-sign", new TaskProgressVO1(finishTatol,vo2.getTaskTotal(),result));
 | 
	
		
			
				|  |  |  			if(size==0){
 | 
	
		
			
				|  |  |  				vo2.setIsDeleted(0);
 | 
	
		
			
				|  |  |  				baseMapper.updateById(vo2);
 | 
	
	
		
			
				|  | @@ -77,9 +85,12 @@ public class TaskProgressServiceImpl extends BaseServiceImpl<TaskProgressMapper,
 | 
	
		
			
				|  |  |  				size=baseMapper.selectTaskBatchSize(Func.toLongList(vo3.getDataId()));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			Integer finishTatol=vo3.getTaskTotal()-size;
 | 
	
		
			
				|  |  | -			map.put("electronic-sign", new TaskProgressVO1(finishTatol,vo3.getTaskTotal(),vo3.getTaskTotal() > 0 ?
 | 
	
		
			
				|  |  | -					(double) finishTatol / vo3.getTaskTotal() * 100 :
 | 
	
		
			
				|  |  | -					0.00));
 | 
	
		
			
				|  |  | +			// 使用 BigDecimal 进行精确计算并保留两位小数
 | 
	
		
			
				|  |  | +			BigDecimal result = vo3.getTaskTotal() > 0 ?
 | 
	
		
			
				|  |  | +					new BigDecimal(finishTatol).divide(new BigDecimal(vo3.getTaskTotal()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)) :
 | 
	
		
			
				|  |  | +					BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +			result = result.setScale(2, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | +			map.put("electronic-sign", new TaskProgressVO1(finishTatol,vo3.getTaskTotal(),result));
 | 
	
		
			
				|  |  |  			if(size==0){
 | 
	
		
			
				|  |  |  				vo3.setIsDeleted(0);
 | 
	
		
			
				|  |  |  				baseMapper.updateById(vo3);
 |