lyhzzz 2 tygodni temu
rodzic
commit
d15c80a44b

+ 17 - 0
doc/update.2.2.0.sql

@@ -0,0 +1,17 @@
+CREATE TABLE `4dkankan_v4`.`t_district_code`  (
+                                           `id` int NOT NULL AUTO_INCREMENT,
+                                           `code` varchar(255) NULL,
+                                           `name` varchar(255) NULL,
+                                           `parent_code` varchar(255) NULL,
+                                           PRIMARY KEY (`id`)
+);
+
+
+ALTER TABLE `4dkankan_v4`.`jy_platform`
+    ADD COLUMN `district_code` varchar(255) NULL AFTER `id_card`,
+    ADD COLUMN `district_name` varchar(255) NULL AFTER `district_code`;
+
+
+ALTER TABLE `4dkankan_v4`.`jy_user`
+    ADD COLUMN `district_code` varchar(255) NULL AFTER `platform_id`,
+    ADD COLUMN `district_name` varchar(255) NULL AFTER `district_code`;

+ 108 - 0
src/main/java/com/fdkankan/manage/common/DistrictUtil.java

@@ -0,0 +1,108 @@
+package com.fdkankan.manage.common;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DistrictUtil {
+
+    public static String determineLevel(String code) {
+        if (code.endsWith("0000")) return "province";
+        if (code.endsWith("00")) return "city";
+        return "district";
+    }
+
+    public static  Boolean isCityLevel(String code) {
+        return code.endsWith("00") && !code.endsWith("0000");
+    }
+
+    public static  boolean isDistrictLevel(String code) {
+        return !code.endsWith("00");
+    }
+
+
+    public static String getPureCityName(String fullDistrictName) {
+        if (fullDistrictName == null || fullDistrictName.isEmpty()) {
+            return "";
+        }
+
+        // 1. 先尝试正则表达式精确匹配
+        String cityName = tryRegexExtract(fullDistrictName);
+        if (!cityName.isEmpty()) {
+            return cityName;
+        }
+
+        // 2. 备选方案:智能分割
+        return smartSplitExtract(fullDistrictName);
+    }
+
+    private static String tryRegexExtract(String fullName) {
+        // 常见模式的正则表达式
+        Pattern[] patterns = {
+                // 模式:XX省YY市ZZ区
+                Pattern.compile("^(.+省)(.+市).+区$"),
+                // 模式:XX省YY市
+                Pattern.compile("^(.+省)(.+市)$"),
+                // 模式:XX自治区YY市ZZ区
+                Pattern.compile("^(.+自治区)(.+市).+区$"),
+                // 模式:直辖市XX区
+                Pattern.compile("^(北京|天津|上海|重庆)市?(.+区)?$")
+        };
+
+        for (Pattern pattern : patterns) {
+            Matcher matcher = pattern.matcher(fullName);
+            if (matcher.matches()) {
+                if (pattern.pattern().contains("(北京|天津|上海|重庆)")) {
+                    // 直辖市:直接返回城市名
+                    return matcher.group(1).replace("市", "");
+                } else if (matcher.groupCount() >= 2) {
+                    // 提取市级部分
+                    String cityPart = matcher.group(2);
+                    return cityPart.replace("市", "");
+                }
+            }
+        }
+
+        return "";
+    }
+
+
+    private static String smartSplitExtract(String fullName) {
+        // 定义分割符优先级
+        String[] splitters = {"市", "州", "地区", "盟"};
+
+        for (String splitter : splitters) {
+            if (fullName.contains(splitter)) {
+                // 按分割符分割
+                String[] parts = fullName.split(splitter);
+                if (parts.length > 0) {
+                    // 取分割符之前的部分
+                    String beforeSplitter = parts[0];
+
+                    // 如果前面还有省份,需要进一步提取
+                    return extractCityFromPart(beforeSplitter);
+                }
+            }
+        }
+
+        // 如果没有找到分割符,返回原名称(去除常见后缀)
+        return removeSuffixes(fullName);
+    }
+
+    private static String extractCityFromPart(String part) {
+        // 移除省份前缀
+        String[] provinceKeywords = {"省", "自治区", "特别行政区"};
+
+        for (String keyword : provinceKeywords) {
+            int index = part.lastIndexOf(keyword);
+            if (index != -1) {
+                return part.substring(index + keyword.length());
+            }
+        }
+
+        return part;
+    }
+
+    private static String removeSuffixes(String name) {
+        return name.replaceAll("(省|市|区|县|自治州|地区|盟|特别行政区)$", "");
+    }
+}

+ 39 - 0
src/main/java/com/fdkankan/manage/entity/DistrictCode.java

@@ -0,0 +1,39 @@
+package com.fdkankan.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-12-08
+ */
+@Getter
+@Setter
+@TableName("t_district_code")
+public class DistrictCode implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("code")
+    private String code;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("parent_code")
+    private String parentCode;
+
+
+}

+ 7 - 0
src/main/java/com/fdkankan/manage/entity/JyPlatform.java

@@ -71,5 +71,12 @@ public class JyPlatform implements Serializable {
     @TableField("update_time")
     private Date updateTime;
 
+    @TableField(value = "district_code")
+    private String districtCode;
 
+    @TableField(value = "district_name")
+    private String districtName;
+
+    @TableField(exist = false)
+    private Boolean isNew = false;
 }

+ 6 - 0
src/main/java/com/fdkankan/manage/entity/JyUser.java

@@ -82,4 +82,10 @@ public class JyUser implements Serializable {
 
     @TableField(value = "platform_id",updateStrategy = FieldStrategy.IGNORED)
     private Integer platformId;
+
+    @TableField(value = "district_code")
+    private String districtCode;
+
+    @TableField(value = "district_name")
+    private String districtName;
 }

+ 1 - 1
src/main/java/com/fdkankan/manage/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"manage", getTables(new String[]{
-                "t_dict_file_case"
+                "t_district_code"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 4 - 0
src/main/java/com/fdkankan/manage/httpClient/client/HaixinClient.java

@@ -18,7 +18,11 @@ public interface HaixinClient {
 
     @Post(value = "/ecs/api/openapi/queryEvidence",interceptor = HaixinInterceptor.class)
     JSONObject queryEvidence(@JSONBody HaixinParam param);
+    @Get(value = "/ecs/api/openapi/queryDictList/XZQHDM",interceptor = HaixinInterceptor.class)
+    JSONObject queryDictList();
 
     @Post("/ecs/api/panoramicImageService/submitPhoto")
     String submitPhoto(@JSONBody SubmitPhotoHaixinVo param);
+
+
 }

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/IDistrictCodeMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.DistrictCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-12-08
+ */
+@Mapper
+public interface IDistrictCodeMapper extends BaseMapper<DistrictCode> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/service/IDistrictCodeService.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.DistrictCode;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-12-08
+ */
+public interface IDistrictCodeService extends IService<DistrictCode> {
+
+    DistrictCode getByCode(String districtCode);
+
+    }

+ 2 - 0
src/main/java/com/fdkankan/manage/service/IJyPlatformService.java

@@ -34,4 +34,6 @@ public interface IJyPlatformService extends IService<JyPlatform> {
     JyPlatform getByIdCard(String idCard);
 
     List<JyPlatform> getNotBanList();
+
+    JyPlatform getByDistrictCode(String districtCode,String phone ,String idCard);
 }

+ 0 - 1
src/main/java/com/fdkankan/manage/service/impl/DictFileServiceImpl.java

@@ -5,7 +5,6 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson2.util.BeanUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

+ 34 - 0
src/main/java/com/fdkankan/manage/service/impl/DistrictCodeServiceImpl.java

@@ -0,0 +1,34 @@
+package com.fdkankan.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.manage.entity.DistrictCode;
+import com.fdkankan.manage.mapper.IDistrictCodeMapper;
+import com.fdkankan.manage.service.IDistrictCodeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-12-08
+ */
+@Service
+public class DistrictCodeServiceImpl extends ServiceImpl<IDistrictCodeMapper, DistrictCode> implements IDistrictCodeService {
+
+    @Override
+    public DistrictCode getByCode(String districtCode) {
+        LambdaQueryWrapper<DistrictCode> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DistrictCode::getCode,districtCode);
+        List<DistrictCode> list = this.list(wrapper);
+        if(list == null || list.isEmpty()){
+            return null;
+        }
+        return list.get(0);
+    }
+
+}

+ 68 - 0
src/main/java/com/fdkankan/manage/service/impl/JyPlatformServiceImpl.java

@@ -3,8 +3,10 @@ package com.fdkankan.manage.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.manage.common.DistrictUtil;
 import com.fdkankan.manage.common.PageInfo;
 import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.entity.DistrictCode;
 import com.fdkankan.manage.entity.JyPlatform;
 import com.fdkankan.manage.entity.JyUser;
 import com.fdkankan.manage.entity.SysUser;
@@ -42,6 +44,8 @@ public class JyPlatformServiceImpl extends ServiceImpl<IJyPlatformMapper, JyPlat
     ISysUserService sysUserService;
     @Autowired
     IJyUserService jyUserService;
+    @Autowired
+    IDistrictCodeService districtCodeService;
 
     @Override
     public Object pageList(JyPlatformParam param) {
@@ -216,4 +220,68 @@ public class JyPlatformServiceImpl extends ServiceImpl<IJyPlatformMapper, JyPlat
         wrapper.eq(JyPlatform::getStatus,0);
         return this.list(wrapper);
     }
+
+    @Override
+    public JyPlatform getByDistrictCode(String districtCode,String phone ,String idCard) {
+        DistrictCode district = getPlatFormDistrictCode(districtCode);
+        if(district != null){
+            JyPlatform jyPlatform = getPlatformByCode(district.getCode());
+            if(jyPlatform != null){
+                return jyPlatform;
+            }
+            String platflormName = DistrictUtil.getPureCityName(district.getName()) +"公安";
+            jyPlatform = this.getPlatformName(platflormName);
+            if(jyPlatform!=null){
+                LambdaUpdateWrapper<JyPlatform> wrapper = new LambdaUpdateWrapper<>();
+                wrapper.eq(JyPlatform::getId,jyPlatform.getId());
+                wrapper.set(JyPlatform::getDistrictCode,district.getCode());
+                wrapper.set(JyPlatform::getDistrictName,district.getName());
+                this.update(wrapper);
+                return jyPlatform;
+            }
+            String uuid = UUID.randomUUID().toString().substring(0, 18).replace("-", "");
+            jyPlatform = new JyPlatform();
+            jyPlatform.setPlatformName(platflormName);
+            jyPlatform.setPlatformAddress(uuid);
+            jyPlatform.setName(platflormName);
+            jyPlatform.setIdCard(idCard);
+            jyPlatform.setDistrictCode(district.getCode());
+            jyPlatform.setDistrictName(district.getName());
+            jyPlatform.setIsNew(true);
+            this.save(jyPlatform);
+            return jyPlatform;
+        }
+        return null;
+    }
+
+    private JyPlatform getPlatformName(String platflormName) {
+        LambdaQueryWrapper<JyPlatform> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(JyPlatform::getPlatformName,platflormName);
+        List<JyPlatform> list = this.list(wrapper);
+        if(list == null || list.isEmpty()){
+            return null;
+        }
+        return list.get(0);
+    }
+
+    private JyPlatform getPlatformByCode(String code){
+        LambdaQueryWrapper<JyPlatform> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(JyPlatform::getDistrictCode,code);
+        List<JyPlatform> list = this.list(wrapper);
+        if(list == null || list.isEmpty()){
+            return null;
+        }
+        return list.get(0);
+    }
+
+    private DistrictCode getPlatFormDistrictCode(String districtCode){
+        DistrictCode byCode = districtCodeService.getByCode(districtCode);
+        if(byCode == null || StringUtils.isBlank(byCode.getParentCode())){
+            return null;
+        }
+        if(DistrictUtil.isCityLevel(districtCode)){
+            return byCode;
+        }
+        return getPlatFormDistrictCode(byCode.getParentCode());
+    }
 }

+ 15 - 0
src/main/java/com/fdkankan/manage/service/impl/UserServiceImpl.java

@@ -67,6 +67,8 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
     IJyUserPlatformService jyUserPlatformService;
     @Autowired
     ManageConfig manageConfig;
+    @Autowired
+    IDistrictCodeService districtCodeService;
 
     @Override
     public PageInfo pageList(UserParam param) {
@@ -207,6 +209,13 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
             param.setIsJm(param.getIsJm() ==null?1:param.getIsJm());
             param.setPassword(StringUtils.isBlank(param.getPassword()) ? manageConfig.getDefaultPassword() :param.getPassword());
             param.setNickName(StringUtils.isBlank(param.getNickName())?param.getUserName():param.getNickName() );
+            if(StringUtils.isNotBlank(param.getDistrictCode())){
+                JyPlatform jyPlatform = jyPlatformService.getByDistrictCode(param.getDistrictCode(),param.getPhone(),param.getIdCard());
+                if(jyPlatform != null){
+                    param.setPlatformId(jyPlatform.getId());
+                    param.setIsNew(jyPlatform.getIsNew());
+                }
+            }
         }
 
         User user = this.addUser(jyUser.getUserId(),  param.getPassword(), param.getRyNo(), param.getNickName());
@@ -221,9 +230,15 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
         jyUser.setPhone(param.getPhone());
         jyUser.setIdCard(param.getIdCard());
         jyUser.setIsJm(param.getIsJm());
+        jyUser.setDistrictCode(param.getDistrictCode());
+        jyUser.setDistrictName(param.getDistrictName());
 
         if(param.getPlatformId() != null){
             jyUser.setPlatformId(param.getPlatformId());
+            if(param.getIsNew()){
+                sysUserService.updateRoleId(sysUser.getId(),48L);
+            }
+
         }else {
             if(StringUtils.isNotBlank(jyUser.getIdCard() )){
                 JyPlatformUserWait platformUserWait = platformUserWaitService.getByIdCard(jyUser.getIdCard());

+ 36 - 0
src/main/java/com/fdkankan/manage/task/TaskService.java

@@ -1,11 +1,15 @@
 package com.fdkankan.manage.task;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.manage.common.EvidenceEnum;
 import com.fdkankan.manage.common.OssPath;
 import com.fdkankan.manage.config.ManageConfig;
 import com.fdkankan.manage.entity.*;
+import com.fdkankan.manage.httpClient.client.HaixinClient;
 import com.fdkankan.manage.service.*;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -17,6 +21,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
+@Slf4j
 public class TaskService {
     @Autowired
     IJyUserService jyUserService;
@@ -38,6 +43,7 @@ public class TaskService {
         updateCaseTabulationPlatformId();
         updateCaseFusionPlatformId();
         initDick();
+        initDistrict();
     }
 
 
@@ -139,5 +145,35 @@ public class TaskService {
         }
     }
 
+    @Autowired
+    IDistrictCodeService districtCodeService;
+    @Autowired
+    HaixinClient haixinClient;
+    private void initDistrict() {
+        try {
+            List<DistrictCode> list = districtCodeService.list();
+            if(!list.isEmpty()){
+                return;
+            }
+            JSONObject jsonObject = haixinClient.queryDictList();
+            JSONArray jsonArray = jsonObject.getJSONArray("data");
+            if(jsonArray == null && jsonArray.isEmpty()){
+                return;
+            }
+            for (Object object : jsonArray) {
+                JSONObject obj = (JSONObject) object;
+                String code = obj.getString("key");
+                String name = obj.getString("value");
+                String parentKey = obj.getString("parentKey");
+                DistrictCode districtCode = new DistrictCode();
+                districtCode.setCode(code);
+                districtCode.setName(name);
+                districtCode.setParentCode(parentKey);
+                districtCodeService.save(districtCode);
+            }
 
+        }catch (Exception e){
+            log.info("initDistrict--error:{}",e);
+        }
+    }
 }

+ 6 - 0
src/main/java/com/fdkankan/manage/vo/request/UserParam.java

@@ -33,6 +33,12 @@ public class UserParam extends RequestBase {
 
     private Integer platformId ;
 
+    private String districtCode;
+
+    private String districtName;
+
+    private Boolean isNew = false;
+
     public String getPhone() {
         return StringUtils.isBlank(phone)?null:phone;
     }

+ 5 - 0
src/main/resources/mapper/manage/DistrictCodeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.manage.mapper.IDistrictCodeMapper">
+
+</mapper>