Kaynağa Gözat

优化批量更新

zhoutg 5 yıl önce
ebeveyn
işleme
0edca3cfc6

+ 13 - 7
knowledgeman-service/src/main/java/com/diagbot/facade/DiagnoseFacade.java

@@ -416,8 +416,7 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
 
             // 更新明细
             if (ListUtil.isNotEmpty(diagnoseDetailList)) {
-//                diagnoseDetailService.updateBatchById(diagnoseDetailList);
-                diagnoseDetailService.updateBatch(diagnoseDetailList);
+                diagnoseDetailService.updateBatch(diagnoseDetailList); // 效率比框架的updateBatchById高很多
             }
 
             Long time5 = System.currentTimeMillis();
@@ -428,26 +427,33 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
             // 新增问题词
             if (ListUtil.isNotEmpty(diagnoseQuestionList)) {
                 // 新增问题词数据
-                diagnoseQuestionService.saveBatch(diagnoseQuestionList);
-
+                diagnoseQuestionService.insertBatch(diagnoseQuestionList); // 效率比框架的saveBatch高很多
             }
             Long time6 = System.currentTimeMillis();
-            res.append("新增问题词:" + (time6-time5)/1000.0).append("秒,");
+            res.append("新增问题词" + diagnoseQuestionList.size() + "条:" + (time6-time5)/1000.0).append("秒,");
 
             List<String> disNameList = diagnoseQuestionList.stream().map(row -> row.getDisName()).distinct().collect(Collectors.toList());
 
             // 修改问题词表的状态
+            List<Diagnose> updateDiagnose = new ArrayList<>();
             for (Diagnose diagnose : diagnoseListWithDB) {
+                String oldHasQueston = diagnose.getHasQuestion();
                 if (disNameList.contains(diagnose.getDisName())) {
                     diagnose.setHasQuestion(String.valueOf(HasQuestionEnum.HAS_QUESTION.getKey()));
                 } else {
                     diagnose.setHasQuestion(String.valueOf(HasQuestionEnum.NO_QUESTION.getKey()));
                 }
+                if (!oldHasQueston.equals(diagnose.getHasQuestion())) {
+                    updateDiagnose.add(diagnose);
+                }
             }
             // 更新主表信息
-            diagnoseService.updateBatchById(diagnoseListWithDB);
+            if (ListUtil.isNotEmpty(updateDiagnose)) {
+//                diagnoseService.updateBatchById(updateDiagnose);
+                diagnoseService.updateBatch(updateDiagnose);
+            }
             Long time7 = System.currentTimeMillis();
-            res.append("更新主表状态:" + (time7-time6)/1000.0).append("秒,");
+            res.append("更新主表" +updateDiagnose.size()+ "条:" + (time7-time6)/1000.0).append("秒,");
             res.append("总计花费时间:" + (time7-time1)/1000.0).append("秒。");
         } catch (Exception e) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, e.getMessage());

+ 7 - 0
knowledgeman-service/src/main/java/com/diagbot/mapper/DiagnoseMapper.java

@@ -37,4 +37,11 @@ public interface DiagnoseMapper extends BaseMapper<Diagnose> {
      */
     public List<ConceptBaseDTO> index(DiseaseIndexVO diseaseIndexVO);
 
+
+    /**
+     * 批量更新主表信息
+     * @param diagnoseList
+     */
+    public void updateBatch(List<Diagnose> diagnoseList);
+
 }

+ 4 - 1
knowledgeman-service/src/main/java/com/diagbot/mapper/DiagnoseQuestionMapper.java

@@ -1,7 +1,9 @@
 package com.diagbot.mapper;
 
-import com.diagbot.entity.DiagnoseQuestion;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.DiagnoseQuestion;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface DiagnoseQuestionMapper extends BaseMapper<DiagnoseQuestion> {
 
+    public void insertBatch(List<DiagnoseQuestion> diagnoseQuestionList);
 }

+ 4 - 2
knowledgeman-service/src/main/java/com/diagbot/service/DiagnoseQuestionService.java

@@ -1,7 +1,9 @@
 package com.diagbot.service;
 
-import com.diagbot.entity.DiagnoseQuestion;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.DiagnoseQuestion;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2019-08-08
  */
 public interface DiagnoseQuestionService extends IService<DiagnoseQuestion> {
-
+    public void insertBatch(List<DiagnoseQuestion> diagnoseQuestionList);
 }

+ 7 - 0
knowledgeman-service/src/main/java/com/diagbot/service/DiagnoseService.java

@@ -38,4 +38,11 @@ public interface DiagnoseService extends IService<Diagnose> {
      */
     public List<ConceptBaseDTO> index(DiseaseIndexVO diseaseIndexVO);
 
+
+    /**
+     * 批量更新主表信息
+     * @param diagnoseList
+     */
+    public void updateBatch(List<Diagnose> diagnoseList);
+
 }

+ 6 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/DiagnoseQuestionServiceImpl.java

@@ -6,6 +6,8 @@ import com.diagbot.service.DiagnoseQuestionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 诊断依据问题词表 服务实现类
@@ -17,4 +19,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class DiagnoseQuestionServiceImpl extends ServiceImpl<DiagnoseQuestionMapper, DiagnoseQuestion> implements DiagnoseQuestionService {
 
+    @Override
+    public void insertBatch(List<DiagnoseQuestion> diagnoseQuestionList) {
+        baseMapper.insertBatch(diagnoseQuestionList);
+    }
 }

+ 5 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/DiagnoseServiceImpl.java

@@ -33,4 +33,9 @@ public class DiagnoseServiceImpl extends ServiceImpl<DiagnoseMapper, Diagnose> i
     public List<ConceptBaseDTO> index(DiseaseIndexVO diseaseIndexVO) {
         return baseMapper.index(diseaseIndexVO);
     }
+
+    @Override
+    public void updateBatch(List<Diagnose> diagnoseList) {
+        baseMapper.updateBatch(diagnoseList);
+    }
 }

+ 12 - 0
knowledgeman-service/src/main/resources/mapper/DiagnoseMapper.xml

@@ -46,4 +46,16 @@
     </select>
 
 
+    <update id="updateBatch">
+        <foreach collection="list" item="item"  separator=";">
+            update kl_diagnose
+            <set>
+                <if test="item.hasQuestion != null">
+                    has_question = #{item.hasQuestion}
+                </if>
+            </set>
+            where id = #{item.id}
+        </foreach>
+    </update>
+
 </mapper>

+ 8 - 0
knowledgeman-service/src/main/resources/mapper/DiagnoseQuestionMapper.xml

@@ -18,4 +18,12 @@
         <result column="order_no" property="orderNo" />
     </resultMap>
 
+    <insert id="insertBatch">
+        INSERT INTO kl_diagnose_question(gmt_create, gmt_modified, diagnose_id, dis_name, `type`, question_name, question_type, order_no) VALUES
+        <foreach collection="list" item="item" index="index" separator=",">
+            (
+            #{item.gmtCreate},#{item.gmtModified},#{item.diagnoseId},#{item.disName},#{item.type},#{item.questionName},#{item.questionType},#{item.orderNo}
+            )
+        </foreach>
+    </insert>
 </mapper>