Просмотр исходного кода

feat(system): 完善商户管理功能并优化国家服务

- 更新开发环境数据库配置,修改数据库名为cwg_card,ActiveMQ连接地址改为localhost
- 在商户实体类中新增邮箱、手机号、地址、姓名、国家等字段,完善商户信息结构
- 新增商户单条查询接口,使用TenantSingleEntity接收请求参数,替换原有@RequestParam方式
- 集成MaxMind GeoIP2库实现IP地理位置定位功能,支持通过IP获取国家代码
- 重构国家服务控制器,移除Feign远程调用,改为本地服务实现,提升性能和稳定性
- 添加国家数据仓库查询方法,支持按父ID批量获取国家数据和按编码获取单个国家信息
- 在用户实体和传输对象中新增isMerchantAdmin字段,用于标识商户管理员权限
- 修复用户控制器中的管理员身份判断逻辑,移除冗余的条件判断
- 更新商户查询映射器XML文件,增加对新增字段的查询支持
- 创建TenantSingleEntity实体类用于商户单条记录查询操作
kongxiangyang 4 месяцев назад
Родитель
Сommit
daacb52238
23 измененных файлов с 405 добавлено и 184 удалено
  1. 6 0
      uacrd-manager-server/pom.xml
  2. 4 6
      uacrd-manager-server/src/main/java/com/crm/manager/controller/MerchantController.java
  3. 53 77
      uacrd-manager-server/src/main/java/com/crm/manager/controller/SysCountryController.java
  4. 0 3
      uacrd-manager-server/src/main/java/com/crm/manager/controller/UserController.java
  5. 7 4
      uacrd-manager-server/src/main/java/com/crm/manager/dao/repository/SysCountryRepository.java
  6. 32 17
      uacrd-manager-server/src/main/java/com/crm/manager/service/SysCountryService.java
  7. 93 69
      uacrd-manager-server/src/main/java/com/crm/manager/service/impl/SysCountryServiceImpl.java
  8. 2 2
      uacrd-manager-server/src/main/resources/application-dev.yml
  9. 1 1
      uacrd-manager-server/src/main/resources/mapper/TenantMapper.xml
  10. 30 0
      ucard-core/src/main/java/com/crm/rely/backend/core/dto/tenant/TenantSearchDto.java
  11. 1 1
      ucard-core/src/main/java/com/crm/rely/backend/core/dto/user/info/UserInfoDto.java
  12. 2 0
      ucard-core/src/main/java/com/crm/rely/backend/core/dto/user/info/UserInfoSearchDto.java
  13. 2 0
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/custom/info/IbInfoEntity.java
  14. 32 4
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantAddEntity.java
  15. 31 0
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantEditEntity.java
  16. 31 0
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantEntity.java
  17. 31 0
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantRespEntity.java
  18. 8 0
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantSingleEntity.java
  19. 2 0
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/user/info/UserInfoAddEntity.java
  20. 2 0
      ucard-core/src/main/java/com/crm/rely/backend/core/entity/user/info/UserInfoUpdateEntity.java
  21. 31 0
      ucard-core/src/main/java/com/crm/rely/backend/core/pojo/table/MerchantTable.java
  22. 2 0
      ucard-core/src/main/java/com/crm/rely/backend/core/pojo/table/UserInfoTable.java
  23. 2 0
      ucard-core/src/main/java/com/crm/rely/backend/core/pojo/view/UserInfoView.java

+ 6 - 0
uacrd-manager-server/pom.xml

@@ -101,6 +101,12 @@
             <version>2.5.1</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.maxmind.geoip2</groupId>
+            <artifactId>geoip2</artifactId>
+            <version>2.15.0</version> <!-- 支持Java 8的较新版本 -->
+        </dependency>
+
     </dependencies>
     <dependencyManagement>
         <dependencies>

+ 4 - 6
uacrd-manager-server/src/main/java/com/crm/manager/controller/MerchantController.java

@@ -4,10 +4,7 @@ import com.crm.login.rely.backend.controller.BaseLoginController;
 import com.crm.manager.service.TenantService;
 import com.crm.rely.backend.core.dto.base.BaseResultDto;
 import com.crm.rely.backend.core.dto.base.BaseResultWithPagerDto;
-import com.crm.rely.backend.core.entity.tenant.info.TenantAddEntity;
-import com.crm.rely.backend.core.entity.tenant.info.TenantEditEntity;
-import com.crm.rely.backend.core.entity.tenant.info.TenantEntity;
-import com.crm.rely.backend.core.entity.tenant.info.TenantSearchEntity;
+import com.crm.rely.backend.core.entity.tenant.info.*;
 import com.crm.rely.backend.exception.ServiceException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -46,11 +43,12 @@ public class MerchantController extends BaseLoginController {
 
     /**
      * 根据 id 查询指定商户
-     * @param id
+     * @param entity
      * @return
      */
     @PostMapping("/findSingle")
-    public BaseResultDto findSingle(@RequestParam Long id) {
+    public BaseResultDto findSingle(@RequestBody TenantSingleEntity entity) {
+        Long id = entity.getId();
         return BaseResultDto.success(tenantService.findSingle(id));
     }
 

+ 53 - 77
uacrd-manager-server/src/main/java/com/crm/manager/controller/SysCountryController.java

@@ -1,29 +1,21 @@
 package com.crm.manager.controller;
 
 import com.crm.manager.service.SysCountryService;
-import com.crm.manager.service.custom.SysCountryFeignService;
+import com.crm.rely.backend.core.constant.FeignClientAnnotation;
 import com.crm.rely.backend.core.dto.base.BaseResultDto;
-import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
 import com.crm.rely.backend.core.dto.country.SysCountryDto;
-import com.crm.rely.backend.core.dto.country.SysCountrySearchListDto;
-import com.crm.rely.backend.core.dto.risk.group.leverage.RiskGroupLeverageDto;
-import com.crm.rely.backend.core.dto.risk.symbol.RiskSymbolDto;
-import com.crm.rely.backend.core.dto.system.bank.SysBankSearchListDto;
-import com.crm.rely.backend.core.entity.base.SingleLongEntity;
-import com.crm.rely.backend.core.entity.country.*;
-import com.crm.rely.backend.core.entity.risk.group.leverage.RiskGroupLeverageSearchEntity;
-import com.crm.rely.backend.core.entity.system.bank.SysBankAddEntity;
-import com.crm.rely.backend.core.entity.system.bank.SysBankDeleteEntitys;
-import com.crm.rely.backend.core.entity.system.bank.SysBankUpdateEntity;
-import com.crm.rely.backend.util.StringUtil;
-import com.google.common.base.Strings;
+import com.crm.rely.backend.core.entity.country.SysCountryEntity;
+import com.crm.rely.backend.core.entity.country.SysCountryStateEntity;
+import com.crm.rely.backend.util.GetIpAndMac;
+import org.apache.catalina.servlet4preview.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * @author: houn
  */
@@ -31,9 +23,6 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/country")
 public class SysCountryController {
 
-    @Autowired
-    private SysCountryFeignService sysCountryFeignService;
-
     @Autowired
     private SysCountryService sysCountryService;
 
@@ -50,82 +39,69 @@ public class SysCountryController {
         if (entity.getPid() == null) {
             entity.setPid(0L);
         }
-        BaseResultDto resultDto = sysCountryFeignService.getAllCountry(entity);
+        List<SysCountryDto> sysCountryDtos = sysCountryService.getByPid(entity);
 
-        return resultDto;
+        return BaseResultDto.success(sysCountryDtos);
     }
 
-    @PostMapping("/get/state")
-    public BaseResultDto getManagerState(@RequestBody SysCountryStateEntity entity) throws Exception {
+    @PostMapping("/manager/get")
+    @FeignClientAnnotation
+    public BaseResultDto getManagerAllCountry(@RequestBody SysCountryEntity entity) throws Exception {
+
+        if (entity.getPid() == null) {
+            entity.setPid(0L);
+        }
+        List<SysCountryDto> sysCountryDtos = sysCountryService.getByPid(entity);
 
-        return sysCountryFeignService.getStates(entity);
+        return BaseResultDto.success(sysCountryDtos);
     }
 
-    /**
-     * 添加城市
-     *
-     * @param entity
-     * @return
-     * @throws Exception
-     */
-    @PostMapping("/add")
-    public BaseResultDto add(@RequestBody @Validated SysCountryAddEntity entity) throws Exception {
+    @PostMapping("/ucard/get")
+    @FeignClientAnnotation
+    public BaseResultDto getUcardAllCountry(@RequestBody SysCountryEntity entity) throws Exception {
 
         if (entity.getPid() == null) {
-            entity.setPid(0l);
-            if(Strings.isNullOrEmpty(entity.getCode()) || Strings.isNullOrEmpty(entity.getCallingCode())) {
-                return BaseResultDto.error("编码或区号为空");
-            }
-        }
-        if (entity.getValidForStarted() == null) {
-            entity.setValidForStarted(1);
+            entity.setPid(0L);
         }
-        sysCountryService.add(entity);
-        return BaseResultDto.success();
+        List<SysCountryDto> sysCountryDtos = sysCountryService.getByPid(entity);
+
+        return BaseResultDto.success(sysCountryDtos);
     }
 
-    /**
-     * 删除城市
-     *
-     * @param entitys
-     * @return
-     * @throws Exception
-     */
-    @PostMapping("/delete")
-    public BaseResultDto delete(@RequestBody @Validated SysCountryDeleteEntitys entitys) throws Exception {
+    @PostMapping("/manager/get/state")
+    @FeignClientAnnotation
+    public BaseResultDto getManagerState(@RequestBody SysCountryStateEntity entity) throws Exception {
 
-        sysCountryService.delete(entitys);
-        return BaseResultDto.success();
-    }
+        List<SysCountryDto> sysCountryDtos = sysCountryService.getByPid(entity);
 
-    /**
-     * 修改城市
-     *
-     * @param entity
-     * @return
-     * @throws Exception
-     */
-    @PostMapping("/update")
-    public BaseResultDto update(@RequestBody @Validated SysCountryUpdateEntity entity) throws Exception {
-        if (entity.getPid() == null) {
-            entity.setPid(0l);
-        }
-        if (entity.getValidForStarted() == null) {
-            entity.setValidForStarted(1);
-        }
-        sysCountryService.update(entity);
-        return BaseResultDto.success();
+        return BaseResultDto.success(sysCountryDtos);
     }
 
-    @PostMapping("/search/list")
-    public ResultWithPagerDto<SysCountrySearchListDto> pageList(@RequestBody SysCountrySearchListEntity entity) throws Exception {
-         return sysCountryService.searchPageList(entity);
+    @PostMapping("/getCodeByIp")
+    public BaseResultDto<String> getCodeByIp(HttpServletRequest request) throws Exception {
+        String ip = GetIpAndMac.getIp(request);
+//        String ip = "114.101.199.90";
+        return BaseResultDto.success(sysCountryService.getCodeByIp(ip));
     }
 
-    @PostMapping("/search/single")
-    public BaseResultDto searchSingle(@RequestBody @Validated SingleLongEntity entity) throws Exception {
-        SysCountrySearchListDto result = sysCountryService.searchSingle(entity);
-        return BaseResultDto.success(result);
+    @Autowired
+    private com.crm.rely.backend.service.SysCountryService countryService;
+
+    @RequestMapping("/get")
+    public BaseResultDto<String> getCountryCodeByIp(HttpServletRequest request) throws Exception {
+        String ip = GetIpAndMac.getIp(request);
+//        String ip = "114.101.199.90";
+//        return BaseResultDto.success(countryService.getCountryByIp(request));
+        String countryCode;
+        try {
+            countryCode=   sysCountryService.getCodeByIpAndMaxmind(ip);
+        }catch (Exception e)
+        {
+            countryCode=countryService.getCountryByIp(ip);
+        }
+
+        return BaseResultDto.success(countryCode,ip);
     }
 
+
 }

+ 0 - 3
uacrd-manager-server/src/main/java/com/crm/manager/controller/UserController.java

@@ -251,9 +251,6 @@ public class UserController extends BaseLoginController {
     public BaseResultDto info(InfoEntity entity) throws Exception {
 
         UserInfoDto userInfoDto = new UserInfoDto();
-        if(entity.getIbInfo().getRoleId() == null){
-            userInfoDto.setIsAdmin(1);
-        }
         BeanUtils.copyProperties(entity.getIbInfo(), userInfoDto);
         userInfoDto.setVerified(entity.getVerified());
         Long roleId;

+ 7 - 4
uacrd-manager-server/src/main/java/com/crm/manager/dao/repository/SysCountryRepository.java

@@ -15,13 +15,16 @@ import java.util.List;
  * @author: houn
  */
 @Repository
-public interface SysCountryRepository extends JpaRepository<SysCountryTable, Long>,JpaSpecificationExecutor<SysCountryTable> {
+public interface SysCountryRepository extends JpaRepository<SysCountryTable, Long>,
+        JpaSpecificationExecutor<SysCountryTable> {
 
-    @Lock(LockModeType.PESSIMISTIC_WRITE)
-    List<SysCountryTable> findAllByIdIn(List<Long> ids);
+    List<SysCountryTable> getAllByPidAndValidForStartedOrderByEnName(Long pid, Integer validForStarted);
+
+    SysCountryTable getByCode(String code);
+
+    List<SysCountryTable> getAllByPidIn(List<Long> pids);
 
     @Lock(LockModeType.PESSIMISTIC_WRITE)
     SysCountryTable findFirstById(Long id);
 
-    SysCountryTable getByCode(String code);
 }

+ 32 - 17
uacrd-manager-server/src/main/java/com/crm/manager/service/SysCountryService.java

@@ -1,11 +1,8 @@
 package com.crm.manager.service;
 
-import com.crm.rely.backend.core.dto.base.BaseResultDto;
-import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
 import com.crm.rely.backend.core.dto.country.SysCountryDto;
-import com.crm.rely.backend.core.dto.country.SysCountrySearchListDto;
-import com.crm.rely.backend.core.entity.base.SingleLongEntity;
-import com.crm.rely.backend.core.entity.country.*;
+import com.crm.rely.backend.core.entity.country.SysCountryEntity;
+import com.crm.rely.backend.core.entity.country.SysCountryStateEntity;
 import com.crm.rely.backend.core.pojo.table.SysCountryTable;
 import com.crm.rely.backend.exception.ServiceException;
 
@@ -16,16 +13,34 @@ import java.util.List;
  */
 public interface SysCountryService {
 
-    void add(SysCountryAddEntity entity) throws Exception;
-
-    void delete(SysCountryDeleteEntitys entity) throws Exception;
-
-    void update(SysCountryUpdateEntity entity) throws Exception;
-
-    ResultWithPagerDto<SysCountrySearchListDto> searchPageList(SysCountrySearchListEntity entity) throws Exception;
-
-    SysCountrySearchListDto searchSingle(SingleLongEntity entity) throws Exception;
-
-    SysCountryTable getByCode(String country) throws ServiceException;
-
+    /**
+     * 根据pid获取国家或者城市列表
+     *
+     * @param entity
+     * @return
+     * @throws ServiceException
+     */
+    List<SysCountryDto> getByPid(SysCountryEntity entity) throws ServiceException;
+
+    List<SysCountryDto> getByPid(SysCountryStateEntity entity) throws ServiceException;
+
+    /**
+     * 根据code获取数据
+     *
+     * @param code
+     * @return
+     * @throws ServiceException
+     */
+    SysCountryTable getByCode(String code) throws ServiceException;
+
+
+    /**
+     * 根据IP获取国家code
+     *
+     * @param ip
+     * @return
+     * @throws Exception
+     */
+    String getCodeByIp(String ip) throws Exception;
+    String getCodeByIpAndMaxmind(String ip) throws Exception;
 }

+ 93 - 69
uacrd-manager-server/src/main/java/com/crm/manager/service/impl/SysCountryServiceImpl.java

@@ -1,107 +1,85 @@
 package com.crm.manager.service.impl;
 
-import com.crm.manager.dao.mapper.SysCountryMapper;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.crm.manager.dao.repository.SysCountryRepository;
 import com.crm.manager.service.SysCountryService;
-import com.crm.rely.backend.core.constant.Constants;
 import com.crm.rely.backend.core.constant.CustomConstant;
-import com.crm.rely.backend.core.dto.base.PageDto;
-import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
-import com.crm.rely.backend.core.dto.country.SysCountrySearchListDto;
-import com.crm.rely.backend.core.entity.base.SingleLongEntity;
-import com.crm.rely.backend.core.entity.country.*;
+import com.crm.rely.backend.core.dto.country.SysCountryDto;
+import com.crm.rely.backend.core.entity.country.SysCountryEntity;
+import com.crm.rely.backend.core.entity.country.SysCountryStateEntity;
 import com.crm.rely.backend.core.pojo.table.SysCountryTable;
 import com.crm.rely.backend.exception.ServiceException;
+import com.crm.rely.backend.util.HttpUtil;
 import com.google.common.base.Strings;
+import com.maxmind.geoip2.DatabaseReader;
+import com.maxmind.geoip2.model.CountryResponse;
+import com.maxmind.geoip2.record.Country;
+import org.jsoup.Connection;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
+import java.io.InputStream;
+import java.net.InetAddress;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class SysCountryServiceImpl implements SysCountryService {
 
-    @Autowired
-    private SysCountryRepository sysCountryRepository;
+    private static DatabaseReader databaseReader;
 
     @Autowired
-    private SysCountryMapper sysCountryMapper;
+    private SysCountryRepository sysCountryRepository;
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void add(SysCountryAddEntity entity) throws ServiceException{
-        SysCountryTable table = new SysCountryTable();
-        BeanUtils.copyProperties(entity, table);
-        sysCountryRepository.save(table);
-    }
+    public List<SysCountryDto> getByPid(SysCountryEntity entity) throws ServiceException {
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void delete(SysCountryDeleteEntitys entity) throws ServiceException {
-        List<SysCountryTable> tables = sysCountryRepository.findAllByIdIn(entity.getIds());
-        if (tables == null) {
-            throw ServiceException.exception(Constants.INFO_NOT_FOUND);
-        }
-        //sysCountryRepository.delete(tables);
-        for (SysCountryTable table : tables) {
-            sysCountryRepository.delete(table);
-        }
-    }
+        List<SysCountryTable> sysCountryTables =
+                sysCountryRepository.getAllByPidAndValidForStartedOrderByEnName(entity.getPid(), 1);
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void update(SysCountryUpdateEntity entity) throws ServiceException {
-        SysCountryTable table = sysCountryRepository.findFirstById(entity.getId());
-        if (table == null) {
-            throw ServiceException.exception(Constants.INFO_NOT_FOUND);
+//        boolean isCn = Constants.CN_LANG.equals(entity.getLang());
+
+        List<SysCountryDto> sysCountryDtos = new ArrayList<>();
+
+        for (SysCountryTable sysCountryTable : sysCountryTables) {
+            SysCountryDto sysCountryDto = new SysCountryDto();
+            BeanUtils.copyProperties(sysCountryTable, sysCountryDto);
+
+            //判断是否是中国 不是则返回英文名称
+//            if (!isCn) {
+//                sysCountryDto.setName(sysCountryTable.getEnName());
+//            }
+            sysCountryDtos.add(sysCountryDto);
         }
-        BeanUtils.copyProperties(entity, table);
-        sysCountryRepository.save(table);
 
+        return sysCountryDtos;
     }
 
     @Override
-    public ResultWithPagerDto<SysCountrySearchListDto> searchPageList(SysCountrySearchListEntity entity) throws ServiceException {
-        PageDto pageDto = null;
-        if(entity.getPid() == null || entity.getPid() == 0){
-            entity.setPid(0l);
-            Integer count = sysCountryMapper.countList(entity);
-            pageDto = PageDto.format(entity, count);
-            if (count == null || count <= 0) {
-                return ResultWithPagerDto.success(pageDto);
-            }
-        }else{
-            entity.setPage(null);
-        }
+    public List<SysCountryDto> getByPid(SysCountryStateEntity entity) throws ServiceException {
 
-        List<SysCountryTable> sysCountryTables = sysCountryMapper.pageList(entity);
-        List<SysCountrySearchListDto> sysCountrySearchListDtos = new ArrayList<>(sysCountryTables.size());
+        List<SysCountryTable> sysCountryTables = sysCountryRepository.getAllByPidIn(entity.getPids());
 
-        for (SysCountryTable sysCountryTable : sysCountryTables) {
-            SysCountrySearchListDto sysCountrySearchListDto = transformSearchListDto(sysCountryTable);
-            sysCountrySearchListDtos.add(sysCountrySearchListDto);
-        }
-
-        return ResultWithPagerDto.success(pageDto, sysCountrySearchListDtos);
-    }
+//        boolean isCn = Constants.CN_LANG.equals(entity.getLang());
 
-    private SysCountrySearchListDto transformSearchListDto(SysCountryTable sysCountryTable) {
-        SysCountrySearchListDto sysCountrySearchListDto = new SysCountrySearchListDto();
-        BeanUtils.copyProperties(sysCountryTable, sysCountrySearchListDto);
-        return sysCountrySearchListDto;
-    }
+        List<SysCountryDto> sysCountryDtos = new ArrayList<>();
 
-    @Override
-    public SysCountrySearchListDto searchSingle(SingleLongEntity entity) throws ServiceException {
-        SysCountrySearchListDto dto = sysCountryMapper.getFirstById(entity.getId());
-        if (dto == null) {
-            throw ServiceException.exception(Constants.INFO_NOT_FOUND);
+        for (SysCountryTable sysCountryTable : sysCountryTables) {
+            SysCountryDto sysCountryDto = new SysCountryDto();
+            BeanUtils.copyProperties(sysCountryTable, sysCountryDto);
+
+            //判断是否是中国 不是则返回英文名称
+//            if (!isCn) {
+//                sysCountryDto.setName(sysCountryTable.getEnName());
+//            }
+            sysCountryDtos.add(sysCountryDto);
         }
 
-        return dto;
+        return sysCountryDtos;
     }
 
     @Override
@@ -120,4 +98,50 @@ public class SysCountryServiceImpl implements SysCountryService {
         return sysCountryTable;
     }
 
+    private static DatabaseReader getReader() {
+        try {
+            if (databaseReader == null) {
+//                File file = new File(SysCountryServiceImpl.class.getClassLoader().getResource
+//                ("country/GeoLite2-Country.mmdb").getFile());
+                InputStream inputStream = SysCountryServiceImpl.class.getClassLoader().getResourceAsStream("country" +
+                        "/GeoLite2-Country.mmdb");
+                databaseReader = new DatabaseReader.Builder(inputStream).build();
+                inputStream.close();
+                return databaseReader;
+            } else {
+                return databaseReader;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return databaseReader;
+        }
+    }
+
+
+    @Override
+    public String getCodeByIp(String ip) throws Exception {
+        Country country = null;
+        try {
+            InetAddress inetAddress = InetAddress.getByName(ip);
+            CountryResponse countryResponse = getReader().country(inetAddress);
+            country = countryResponse.getCountry();
+        } catch (Exception e) {
+            country = null;
+        }
+
+
+        return country != null ? country.getIsoCode() : null;
+    }
+
+    @Override
+    public String getCodeByIpAndMaxmind(String ip) throws Exception {
+        Map<String, String> header = new HashMap<>(1);
+
+        header.put("Authorization","Basic MTE2MDY3Mzozd0RJbHJfRGFlQ1ZzNjZYSEo5M3FZbXB1T2s1RUtnMDhkT3BfbW1r");
+        Connection.Response response =  HttpUtil.get(String.format("https://geoip.maxmind.com/geoip/v2.1/country/%s?pretty",ip),header);
+
+        JSONObject jsonObject = JSON.parseObject(response.body());
+
+      return   jsonObject.getJSONObject("country").get("iso_code").toString();
+    }
 }

+ 2 - 2
uacrd-manager-server/src/main/resources/application-dev.yml

@@ -1,7 +1,7 @@
 spring:
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://103.214.175.29:28571/cwg_ucard_local?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&allowMultiQueries=true&useSSL=false
+    url: jdbc:mysql://103.214.175.29:28571/cwg_card?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&allowMultiQueries=true&useSSL=false
     username: root
     password: NSH01Y0GTmUNjgg6xw80qg==
   jpa:
@@ -10,7 +10,7 @@ spring:
       naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
     show-sql: true
   activemq:
-    broker-url: tcp://103.214.175.29:61616
+    broker-url: tcp://localhost:61616
 logging:
   level:
     com.crm.manager.dao.mapper: trace

+ 1 - 1
uacrd-manager-server/src/main/resources/mapper/TenantMapper.xml

@@ -10,7 +10,7 @@
     </select>
 
     <select id="searchByPageList" resultType="com.crm.rely.backend.core.pojo.table.MerchantTable">
-        select id, merchant_code, merchant_name, admin_user_id, status, expire_time, max_users, add_time, add_user, add_ip, modify_time, modify_user, modify_ip, note from merchant
+        select id, merchant_code, merchant_name, add_time, add_user, add_ip, modify_time, modify_user, modify_ip, note, email, mobile, address, first_name, last_name, country from merchant
         <include refid="selectCondition">
         </include>
         <if test="page != null">

+ 30 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/dto/tenant/TenantSearchDto.java

@@ -6,4 +6,34 @@ import lombok.Data;
 @Data
 public class TenantSearchDto extends BaseInfoDto {
     private String merchantName;
+
+    /**
+     * 商户邮箱
+     */
+    private String email;
+
+    /**
+     * 商户手机号
+     */
+    private String mobile;
+
+    /**
+     * 商户地址
+     */
+    private String address;
+
+    /**
+     * 商户姓
+     */
+    private String firstName;
+
+    /**
+     * 商户名
+     */
+    private String lastName;
+
+    /**
+     * 商户国家
+     */
+    private String country;
 }

+ 1 - 1
ucard-core/src/main/java/com/crm/rely/backend/core/dto/user/info/UserInfoDto.java

@@ -117,7 +117,7 @@ public class UserInfoDto {
 
     private Integer valid;
     private Integer verified;
-    private Integer isAdmin;
+    private Integer isMerchantAdmin;
 
     private List<UserNodeDisplayDto> display;
 

+ 2 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/dto/user/info/UserInfoSearchDto.java

@@ -140,5 +140,7 @@ public class UserInfoSearchDto {
 
     private String countryEnName;
 
+    private Integer isMerchantAdmin;
+
     private List<String> excludeShowLoginTypes;
 }

+ 2 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/custom/info/IbInfoEntity.java

@@ -171,4 +171,6 @@ public class IbInfoEntity {
     private Integer merchantId;
 
     private String merchantName;
+
+    private Integer isMerchantAdmin;
 }

+ 32 - 4
ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantAddEntity.java

@@ -5,12 +5,40 @@ import lombok.Data;
 
 @Data
 public class TenantAddEntity extends BaseAddEntity {
-    /**
-     * 商户ID
-     */
-    private Long id;
+
     /**
      * 商户名称
      */
     private String merchantName;
+
+
+    /**
+     * 商户邮箱
+     */
+    private String email;
+
+    /**
+     * 商户手机号
+     */
+    private String mobile;
+
+    /**
+     * 商户地址
+     */
+    private String address;
+
+    /**
+     * 商户姓
+     */
+    private String firstName;
+
+    /**
+     * 商户名
+     */
+    private String lastName;
+
+    /**
+     * 商户国家
+     */
+    private String country;
 }

+ 31 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantEditEntity.java

@@ -12,4 +12,35 @@ public class TenantEditEntity {
      * 商户名称
      */
     private String merchantName;
+
+
+    /**
+     * 商户邮箱
+     */
+    private String email;
+
+    /**
+     * 商户手机号
+     */
+    private String mobile;
+
+    /**
+     * 商户地址
+     */
+    private String address;
+
+    /**
+     * 商户姓
+     */
+    private String firstName;
+
+    /**
+     * 商户名
+     */
+    private String lastName;
+
+    /**
+     * 商户国家
+     */
+    private String country;
 }

+ 31 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantEntity.java

@@ -12,4 +12,35 @@ public class TenantEntity {
      * 商户名称
      */
     private String merchantName;
+
+
+    /**
+     * 商户邮箱
+     */
+    private String email;
+
+    /**
+     * 商户手机号
+     */
+    private String mobile;
+
+    /**
+     * 商户地址
+     */
+    private String address;
+
+    /**
+     * 商户姓
+     */
+    private String firstName;
+
+    /**
+     * 商户名
+     */
+    private String lastName;
+
+    /**
+     * 商户国家
+     */
+    private String country;
 }

+ 31 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantRespEntity.java

@@ -12,4 +12,35 @@ public class TenantRespEntity {
      * 商户名称
      */
     private String merchantName;
+
+
+    /**
+     * 商户邮箱
+     */
+    private String email;
+
+    /**
+     * 商户手机号
+     */
+    private String mobile;
+
+    /**
+     * 商户地址
+     */
+    private String address;
+
+    /**
+     * 商户姓
+     */
+    private String firstName;
+
+    /**
+     * 商户名
+     */
+    private String lastName;
+
+    /**
+     * 商户国家
+     */
+    private String country;
 }

+ 8 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/tenant/info/TenantSingleEntity.java

@@ -0,0 +1,8 @@
+package com.crm.rely.backend.core.entity.tenant.info;
+
+import lombok.Data;
+
+@Data
+public class TenantSingleEntity {
+    private Long id;
+}

+ 2 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/user/info/UserInfoAddEntity.java

@@ -105,4 +105,6 @@ public class UserInfoAddEntity extends BaseAddEntity {
      */
     private Integer merchantId;
 
+    private Integer isMerchantAdmin;
+
 }

+ 2 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/user/info/UserInfoUpdateEntity.java

@@ -109,4 +109,6 @@ public class UserInfoUpdateEntity extends BaseUpdateEntity {
 
     private Date resignDate;
 
+    private Integer isMerchantAdmin;
+
 }

+ 31 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/pojo/table/MerchantTable.java

@@ -3,6 +3,7 @@ package com.crm.rely.backend.core.pojo.table;
 import com.crm.rely.backend.core.pojo.BaseTable;
 import lombok.Data;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Table;
 
@@ -14,4 +15,34 @@ public class MerchantTable extends BaseTable {
      * 商户名称
      */
     private String merchantName;
+
+    /**
+     * 商户邮箱
+     */
+    private String email;
+
+    /**
+     * 商户手机号
+     */
+    private String mobile;
+
+    /**
+     * 商户地址
+     */
+    private String address;
+
+    /**
+     * 名
+     */
+    private String firstName;
+
+    /**
+     * 姓
+     */
+    private String lastName;
+
+    /**
+     * 商户国家
+     */
+    private String country;
 }

+ 2 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/pojo/table/UserInfoTable.java

@@ -234,4 +234,6 @@ public class UserInfoTable extends BaseTable {
 
     private Integer merchantId;
 
+    private Integer isMerchantAdmin;
+
 }

+ 2 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/pojo/view/UserInfoView.java

@@ -238,4 +238,6 @@ public class UserInfoView extends BaseTable {
      */
     private Integer agentTransfer;
 
+    private Integer isMerchantAdmin;
+
 }