From dac3a5dcb26d74ffdff1887b04d1ae1205ab990d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=95=B8=E9=9D=9E?= <8153694@qq.com>
Date: Thu, 15 May 2025 16:15:44 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BA=E5=9F=9F=E6=89=B9?=
 =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../module/base/service/BaseAreaService.java  |  2 +-
 .../service/impl/BaseAreaServiceImpl.java     | 24 ++++++++++---------
 .../module/base/web/BaseAreaController.java   | 17 ++++++++++++-
 .../sqlmap/module/base/BaseAreaMapper.xml     |  2 +-
 .../java/com/mortals/httpclient/system.http   |  2 +-
 5 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/agent-manager/src/main/java/com/mortals/xhx/module/base/service/BaseAreaService.java b/agent-manager/src/main/java/com/mortals/xhx/module/base/service/BaseAreaService.java
index 25fb69c..a16247a 100644
--- a/agent-manager/src/main/java/com/mortals/xhx/module/base/service/BaseAreaService.java
+++ b/agent-manager/src/main/java/com/mortals/xhx/module/base/service/BaseAreaService.java
@@ -29,6 +29,6 @@ public interface BaseAreaService extends ICRUDService<BaseAreaEntity, Long> {
     Rest<List<String>> getSubAreaByRootName(BaseAreaEntity baseAreaEntity, Context context);
 
 
-    Rest<Void> updateArea(BaseAreaEntity baseAreaEntity, Context context);
+    Rest<Void> updateArea(BaseAreaEntity baseAreaEntity,List<BaseAreaEntity> list, Context context);
 
 }
\ No newline at end of file
diff --git a/agent-manager/src/main/java/com/mortals/xhx/module/base/service/impl/BaseAreaServiceImpl.java b/agent-manager/src/main/java/com/mortals/xhx/module/base/service/impl/BaseAreaServiceImpl.java
index c61976f..00b19c0 100644
--- a/agent-manager/src/main/java/com/mortals/xhx/module/base/service/impl/BaseAreaServiceImpl.java
+++ b/agent-manager/src/main/java/com/mortals/xhx/module/base/service/impl/BaseAreaServiceImpl.java
@@ -25,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -95,32 +96,33 @@ public class BaseAreaServiceImpl extends AbstractCRUDServiceImpl<BaseAreaDao, Ba
 
 
     @Override
-    public Rest<Void> updateArea(BaseAreaEntity baseAreaEntity, Context context) {
+    public Rest<Void> updateArea(BaseAreaEntity baseAreaEntity,List<BaseAreaEntity> list, Context context) {
         //https://www.sczwfw.gov.cn/jiq/interface/jitem/find-by-code?code=510000000000&deptType=1&jsonpCallback=jsonpcallback&_=1747020251031
         //todo 鏇存柊鍥涘窛鍖哄煙鏁版嵁
         String url = "https://www.sczwfw.gov.cn/jiq/interface/jitem/find-by-code?code=" + baseAreaEntity.getAreaCode() + "&deptType=1&jsonpCallback=jsonpcallback&_=1747020251031";
-
         String rest = HttpUtil.get(url);
         rest = StrUtil.subBetween(rest, "jsonpcallback(", ")");
         Rest<RootAreaInfo> ret = JSON.parseObject(rest, new TypeReference<Rest<RootAreaInfo>>() {
         });
 
+
         if (200 == ret.getCode()) {
             GroupAreaInfo group = ret.getData().getGroup();
 
             //鏌ヨ褰撳墠group鏄惁瀛樺湪 瀛樺湪 鏇存柊鏁版嵁
             BaseAreaQuery baseAreaQuery = new BaseAreaQuery();
             baseAreaQuery.setAreaCode(group.getAreaCode());
-            updateAndSaveEntity(baseAreaQuery, group);
+            BaseAreaEntity entity = updateAndSaveEntity(baseAreaQuery, group);
+            list.add(entity);
 
             List<GroupAreaInfo> sonAreas = group.getSonAreas();
             for (GroupAreaInfo sonArea : sonAreas) {
                 //
                 baseAreaQuery = new BaseAreaQuery();
                 baseAreaQuery.setAreaCode(sonArea.getAreaCode());
-                updateAndSaveEntity(baseAreaQuery, sonArea);
-
-                updateArea(new BaseAreaQuery().areaCode(sonArea.getAreaCode()), context);
+                entity = updateAndSaveEntity(baseAreaQuery, sonArea);
+                list.add(entity);
+                updateArea(new BaseAreaQuery().areaCode(sonArea.getAreaCode()),list, context);
             }
         }
 
@@ -128,15 +130,13 @@ public class BaseAreaServiceImpl extends AbstractCRUDServiceImpl<BaseAreaDao, Ba
         return Rest.ok();
     }
 
-    private void updateAndSaveEntity(BaseAreaQuery baseAreaQuery, GroupAreaInfo group) {
+    private BaseAreaEntity updateAndSaveEntity(BaseAreaQuery baseAreaQuery, GroupAreaInfo group) {
         BaseAreaEntity entity = this.selectOne(baseAreaQuery);
         if (ObjectUtils.isEmpty(entity)) {
             //鏂板
-
             entity = new BaseAreaEntity();
             entity.initAttrValue();
             BeanUtils.copyProperties(group, entity, BeanUtil.getNullPropertyNames(group));
-
             entity.setName(group.getShortName());
 
             entity.setCreateTime(new Date());
@@ -144,13 +144,15 @@ public class BaseAreaServiceImpl extends AbstractCRUDServiceImpl<BaseAreaDao, Ba
             entity.setUpdateTime(new Date());
             entity.setStatus(1);
             //log.info("鏂板鏁版嵁:{}", JSON.toJSONString(group));
-            this.save(entity);
+            //this.save(entity);
         } else {
             //鏇存柊
             BeanUtils.copyProperties(group, entity, BeanUtil.getNullPropertyNames(group));
             entity.setUpdateTime(new Date());
-            this.update(entity);
+            //   this.update(entity);
         }
+
+        return entity;
     }
 
 
diff --git a/agent-manager/src/main/java/com/mortals/xhx/module/base/web/BaseAreaController.java b/agent-manager/src/main/java/com/mortals/xhx/module/base/web/BaseAreaController.java
index f0f03c2..8542705 100644
--- a/agent-manager/src/main/java/com/mortals/xhx/module/base/web/BaseAreaController.java
+++ b/agent-manager/src/main/java/com/mortals/xhx/module/base/web/BaseAreaController.java
@@ -1,6 +1,7 @@
 package com.mortals.xhx.module.base.web;
 
 import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
 import com.mortals.framework.annotation.UnAuth;
 import com.mortals.framework.common.Rest;
 import com.mortals.framework.exception.AppException;
@@ -21,7 +22,10 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 鍖哄煙
@@ -113,7 +117,18 @@ public class BaseAreaController extends BaseCRUDJsonBodyMappingController<BaseAr
             }
 
             new Thread(() -> {
-                this.service.updateArea(areaQuery, getContext());
+                List<BaseAreaEntity> list = new ArrayList<>();
+                this.service.updateArea(areaQuery, list, getContext());
+
+                Map<Boolean, List<BaseAreaEntity>> collect = list.stream().collect(Collectors.partitioningBy(x -> x.getId() == null));
+                List<BaseAreaEntity> saveList = collect.get(true);
+                if (!ObjectUtils.isEmpty(saveList)) {
+                    Lists.partition(saveList, 100).forEach(item -> this.service.save(item));
+                }
+                List<BaseAreaEntity> updateList = collect.get(false);
+                if (!ObjectUtils.isEmpty(updateList)) {
+                    Lists.partition(updateList, 100).forEach(item -> this.service.update(item));
+                }
             }).start();
 
             //缂栫爜浼樺厛
diff --git a/agent-manager/src/main/resources/sqlmap/module/base/BaseAreaMapper.xml b/agent-manager/src/main/resources/sqlmap/module/base/BaseAreaMapper.xml
index 8f5f645..4727dbd 100644
--- a/agent-manager/src/main/resources/sqlmap/module/base/BaseAreaMapper.xml
+++ b/agent-manager/src/main/resources/sqlmap/module/base/BaseAreaMapper.xml
@@ -67,7 +67,7 @@
                 a.domain,
             </if>
             <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('status') or colPickMode == 1 and data.containsKey('status')))">
-                a.status,
+                a.`status`,
             </if>
             <if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
                 a.createTime,
diff --git a/agent-manager/src/test/java/com/mortals/httpclient/system.http b/agent-manager/src/test/java/com/mortals/httpclient/system.http
index f318489..084ecb4 100644
--- a/agent-manager/src/test/java/com/mortals/httpclient/system.http
+++ b/agent-manager/src/test/java/com/mortals/httpclient/system.http
@@ -67,7 +67,7 @@ Content-Type: application/json
 POST {{baseUrl}}/base/area/updateBaseArea
 Content-Type: application/json
 
-{"areaCode": "510000000000"}
+{"areaCode": "511700000000"}
 
 
 ###controoler 娴嬭瘯
-- 
2.24.3