Browse Source

任务进度

cr 1 day ago
parent
commit
394f404817

+ 3 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TaskProgressVO1.java

@@ -4,6 +4,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
+
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
@@ -13,5 +15,5 @@ public class TaskProgressVO1 {
 
     private Integer totalCount;
 
-    private Double pace;
+    private BigDecimal pace;
 }

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TaskProgressMapper.xml

@@ -38,6 +38,8 @@
     </select>
     <select id="selectTaskBatchSize" resultType="java.lang.Integer">
         SELECT COUNT(*)
+        FROM (
+        SELECT DISTINCT JSON_UNQUOTE(JSON_EXTRACT(utb.json_data, '$.taskId')) as taskId
         FROM u_task_batch utb
         INNER JOIN m_task_progress mtp
         ON FIND_IN_SET(
@@ -50,6 +52,7 @@
                 #{id}
             </foreach>
         </if>
+        ) distinct_tasks
     </select>
 
 </mapper>

+ 20 - 9
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskProgressServiceImpl.java

@@ -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);