增加地区修复功能

This commit is contained in:
WenG 2022-06-16 15:41:15 +08:00
parent 45556c6419
commit 0ae52c409e
5 changed files with 231 additions and 1 deletions

View File

@ -148,5 +148,12 @@ public class AreaController extends DefaultBaseController {
return areaService.listByCode(areaCode);
}
@ApiOperation(value = "更新短标题和合并名称", notes = "更新短标题和合并名称接口")
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("update-sort-and-merger-name")
public SuccessResult updateShortAndMergerName() {
areaService.updateShortAndMergerName();
return new SuccessResult();
}
}

View File

@ -9,7 +9,6 @@ import ink.wgink.module.dictionary.pojo.dtos.AreaDTO;
import ink.wgink.pojo.dtos.ZTreeDTO;
import org.springframework.stereotype.Repository;
import java.rmi.RemoteException;
import java.util.List;
import java.util.Map;
@ -55,6 +54,15 @@ public interface IAreaDao extends IInitBaseTable {
*/
void update(Map<String, Object> params) throws UpdateException;
/**
* 修改合并名称和短名称
*
* @param params
* @throws UpdateException
*/
void updateShortAndMergerName(Map<String, Object> params) throws UpdateException;
/**
* 地区字典列表
*
@ -64,6 +72,15 @@ public interface IAreaDao extends IInitBaseTable {
*/
List<AreaDTO> list(Map<String, Object> params) throws SearchException;
/**
* 分页
*
* @param params
* @return
* @throws SearchException
*/
List<AreaDTO> listPage(Map<String, Object> params) throws SearchException;
/**
* 地区字典详情
*
@ -100,4 +117,13 @@ public interface IAreaDao extends IInitBaseTable {
*/
Integer countByParentId(String id) throws SearchException;
/**
* 统计总数
*
* @param params
* @return
* @throws SearchException
*/
Integer count(Map<String, Object> params) throws SearchException;
}

View File

@ -72,6 +72,14 @@ public interface IAreaService {
*/
AreaDTO getByCode(String areaCode);
/**
* 全等级
*
* @param areaId
* @return
*/
List<AreaDTO> listFullLevel(String areaId);
/**
* 地区列表
*
@ -135,4 +143,9 @@ public interface IAreaService {
*/
List<AreaDTO> listSubByCode(String areaCode);
/**
* 更新短标题和合并名称
*/
void updateShortAndMergerName();
}

View File

@ -3,6 +3,7 @@ package ink.wgink.module.dictionary.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.dictionary.dao.IAreaDao;
import ink.wgink.module.dictionary.pojo.dtos.AreaDTO;
import ink.wgink.module.dictionary.pojo.vos.AreaVO;
@ -12,12 +13,16 @@ import ink.wgink.pojo.dtos.ZTreeDTO;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.util.map.HashMapUtil;
import ink.wgink.util.string.WStringUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
/**
* When you feel like quitting. Think about why you started
@ -34,6 +39,10 @@ public class AreaServiceImpl extends DefaultBaseService implements IAreaService
@Autowired
private IAreaDao areaDao;
/**
* 更新合并和短标题线程池
*/
private static ExecutorService UPDATE_MERGER_SHORT_NAME_EXECUTOR_SERVICE = Executors.newFixedThreadPool(66);
@Override
public void save(AreaVO areaVO) {
@ -78,6 +87,15 @@ public class AreaServiceImpl extends DefaultBaseService implements IAreaService
return areaDao.get(params);
}
@Override
public List<AreaDTO> listFullLevel(String areaId) {
AreaDTO areaDTO = get(areaId);
List<AreaDTO> fullLevelAreaDTOS = new ArrayList<>();
fullLevelAreaDTOS.add(0, areaDTO);
setFullLevel(fullLevelAreaDTOS, areaDTO.getAreaParentId());
return fullLevelAreaDTOS;
}
@Override
public List<AreaDTO> list() {
Map<String, Object> params = getHashMap(0);
@ -143,6 +161,117 @@ public class AreaServiceImpl extends DefaultBaseService implements IAreaService
return areaDao.list(params);
}
@Override
public void updateShortAndMergerName() {
if (isUpdateShortAndMergerName()) {
return;
}
Map<String, Object> params = getHashMap(2);
Integer count = areaDao.count(params);
int row = 1000;
int totalPage = row % 1000 == 0 ? count / row : (count / row + 1);
// int totalPage = 1;
for (int currentPage = 1; currentPage <= totalPage; currentPage++) {
updateShortAndMergerName(currentPage, totalPage, row);
}
}
/**
* 是否正在更新
*
* @return
*/
private boolean isUpdateShortAndMergerName() {
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) UPDATE_MERGER_SHORT_NAME_EXECUTOR_SERVICE;
return threadPoolExecutor.getQueue().size() != 0 || threadPoolExecutor.getActiveCount() != 0;
}
private void updateShortAndMergerName(int currentPage, int totalPage, int row) {
if (currentPage > totalPage) {
return;
}
UPDATE_MERGER_SHORT_NAME_EXECUTOR_SERVICE.execute(() -> {
int limitStart = (currentPage - 1) * row;
Map<String, Object> params = getHashMap(2);
params.put("limitStart", limitStart);
params.put("limitRow", row);
List<AreaDTO> areaDTOS = areaDao.listPage(params);
if (areaDTOS.isEmpty()) {
return;
}
areaDTOS.forEach(areaDTO -> {
List<AreaDTO> fullLevelAreaDTOS = new ArrayList<>();
fullLevelAreaDTOS.add(0, areaDTO);
setFullLevel(fullLevelAreaDTOS, areaDTO.getAreaParentId());
// 完整的地区名称
String areaMergerName = "";
for (AreaDTO fullLevelAreaDTO : fullLevelAreaDTOS) {
areaMergerName += fullLevelAreaDTO.getAreaName();
}
String areaShortName = getAreaShortName(areaDTO.getAreaName());
params.clear();
params.put("areaId", areaDTO.getAreaId());
params.put("areaMergerName", areaMergerName);
params.put("areaShortName", areaShortName);
areaDao.updateShortAndMergerName(params);
});
});
}
/**
* 获取短名称
*
* @param areaName
* @return
*/
private String getAreaShortName(String areaName) {
String areaShortName = areaName;
if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
} else if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
} else if (areaName.endsWith("自治区")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 3);
} else if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
} else if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
} else if (areaName.endsWith("社区")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 2);
} else if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
} else if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
} else if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
} else if (areaName.endsWith("街道")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 2);
} else if (areaName.endsWith("居委会")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 2);
} else if (areaName.endsWith("嘎查村")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 3);
} else if (areaName.endsWith("")) {
areaShortName = areaShortName.substring(0, areaShortName.length() - 1);
}
return areaShortName;
}
/**
* 设置完整级别
*
* @param fullLevelAreaDTOS
* @param areaParentId
*/
private void setFullLevel(List<AreaDTO> fullLevelAreaDTOS, String areaParentId) {
if (StringUtils.equals(ISystemConstant.TREE_ROOT_ID, areaParentId)) {
return;
}
AreaDTO areaDTO = get(areaParentId);
fullLevelAreaDTOS.add(0, areaDTO);
setFullLevel(fullLevelAreaDTOS, areaDTO.getAreaParentId());
}
/**
* 递归查询子组
*

View File

@ -154,6 +154,17 @@
area_id = #{areaId}
</update>
<!-- 修改合并名称和短名称 -->
<update id="updateShortAndMergerName" parameterType="map" flushCache="true">
UPDATE
data_area
SET
area_merger_name = #{areaMergerName},
area_short_name = #{areaShortName}
WHERE
area_id = #{areaId}
</update>
<!-- ztree列表 -->
<select id="listZTree" parameterType="map" resultMap="areaZTreeDTO" useCache="true">
SELECT
@ -228,6 +239,36 @@
</if>
</select>
<!-- 字典列表 -->
<select id="listPage" parameterType="map" resultMap="areaDTO" useCache="true">
SELECT
area_id,
area_parent_id,
area_name,
area_code,
area_city_code,
area_merger_name,
area_short_name,
area_zip_code,
area_level,
area_lng,
area_lat,
area_pinyin,
area_first
FROM
data_area
WHERE
area_id >= (
SELECT
area_id
FROM
data_area
LIMIT
#{limitStart}, 1
)
LIMIT #{limitRow}
</select>
<!-- 字典详情 -->
<select id="get" parameterType="map" resultMap="areaDTO">
SELECT
@ -277,6 +318,20 @@
area_parent_id = #{_parameter}
</select>
<!-- 统计总数 -->
<select id="count" parameterType="map" resultType="Integer" useCache="true">
SELECT
COUNT(*)
FROM
data_area
WHERE
is_delete = 0
<if test="areaParentId != null and areaParentId != ''">
AND
area_parent_id = #{areaParentId}
</if>
</select>
<!-- 获取最后一个子字典,实际数据,包含已删除,方式编码重复 -->
<select id="getLastByParentId" parameterType="String" resultMap="areaDTO">
SELECT