Gqingci il y a 1 semaine
Parent
commit
e2ad393d6c
20 fichiers modifiés avec 207 ajouts et 2 suppressions
  1. 8 0
      ruoyi-admin/src/main/resources/application-dev.yml
  2. 5 0
      ruoyi-admin/src/main/resources/application-prod.yml
  3. 21 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/config/AmapGeoProperties.java
  4. 11 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalAuthController.java
  5. 4 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainCompanyApply.java
  6. 2 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainPosition.java
  7. 2 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainPostApply.java
  8. 3 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainCompanyApplyBo.java
  9. 2 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainPositionBo.java
  10. 8 1
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainPostApplyBo.java
  11. 15 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/dto/GeoPointDto.java
  12. 7 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainCompanyApplyVo.java
  13. 6 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainPositionVo.java
  14. 6 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainPostApplyVo.java
  15. 8 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/CompanyGeoService.java
  16. 75 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/AmapCompanyGeoServiceImpl.java
  17. 2 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainAuditServiceImpl.java
  18. 12 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainCompanyApplyServiceImpl.java
  19. 6 1
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/WithdrawServiceImpl.java
  20. 4 0
      ruoyi-modules/ruoyi-main/src/main/resources/mapper/MainAuditMapper.xml

+ 8 - 0
ruoyi-admin/src/main/resources/application-dev.yml

@@ -279,3 +279,11 @@ justauth:
       client-id: 10**********6
       client-secret: 1f7d08**********5b7**********29e
       redirect-uri: ${justauth.address}/social-callback?source=gitea
+
+amap:
+  geo:
+    # 企业入驻办公地址转经纬度所需的高德 Web 服务 Key
+    key: "e0e8c3c7bdb74c82e805ed71e134ef5a"
+
+manage:
+  jumpTo: http://localhost:90/

+ 5 - 0
ruoyi-admin/src/main/resources/application-prod.yml

@@ -270,3 +270,8 @@ justauth:
       client-id: 10**********6
       client-secret: 1f7d08**********5b7**********29e
       redirect-uri: ${justauth.address}/social-callback?source=gitea
+
+amap:
+  geo:
+    # 企业入驻办公地址转经纬度所需的高德 Web 服务 Key
+    key: ""

+ 21 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/config/AmapGeoProperties.java

@@ -0,0 +1,21 @@
+package org.dromara.main.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "amap.geo")
+public class AmapGeoProperties {
+
+    /**
+     * Web 服务 Key
+     */
+    private String key;
+
+    /**
+     * 地址解析接口地址
+     */
+    private String geocodeUrl = "https://restapi.amap.com/v3/geocode/geo";
+}

+ 11 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalAuthController.java

@@ -84,6 +84,9 @@ public class PortalAuthController extends BaseController {
     @Value("${spring.profiles.active:}")
     private String activeProfile;
 
+    @Value("${manage.jumpTo:}")
+    private String manageJumpTo;
+
     /**
      * 发送短信验证码
      *
@@ -220,6 +223,14 @@ public class PortalAuthController extends BaseController {
         return R.ok(result);
     }
 
+    @SaIgnore
+    @GetMapping("/publicConfig")
+    public R<Map<String, String>> getPublicConfig() {
+        Map<String, String> result = new LinkedHashMap<>(1);
+        result.put("manageJumpTo", manageJumpTo);
+        return R.ok(result);
+    }
+
     /**
      * 退出登录
      */

+ 4 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainCompanyApply.java

@@ -7,6 +7,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 
+import java.math.BigDecimal;
+
 @Data
 @EqualsAndHashCode(callSuper = true)
 @TableName("main_company_apply")
@@ -27,6 +29,8 @@ public class MainCompanyApply extends BaseEntity {
     private String surname;
     private String name;
     private String mobile;
+    private BigDecimal latitude;
+    private BigDecimal longitude;
     private Integer applyStatus;
     private Long auditId;
     private String tenantId;

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainPosition.java

@@ -32,6 +32,8 @@ public class MainPosition extends BaseEntity {
     private String educationRequirement;
     private String salaryType;
     private String salaryRange;
+    private BigDecimal minSalary;
+    private BigDecimal maxSalary;
     private Integer recruitNum;
     private Date registrationStartDate;
     private Date registrationEndDate;

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainPostApply.java

@@ -33,6 +33,8 @@ public class MainPostApply extends BaseEntity {
     private String educationRequirement;
     private String salaryType;
     private String salaryRange;
+    private BigDecimal minSalary;
+    private BigDecimal maxSalary;
     private Integer recruitNum;
     private Date registrationStartDate;
     private Date registrationEndDate;

+ 3 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainCompanyApplyBo.java

@@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.main.domain.MainCompanyApply;
 
 import java.io.Serial;
+import java.math.BigDecimal;
 
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -56,6 +57,8 @@ public class MainCompanyApplyBo extends BaseEntity {
     @NotBlank(message = "手机号不能为空", groups = {AddGroup.class, EditGroup.class})
     @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
     private String mobile;
+    private BigDecimal latitude;
+    private BigDecimal longitude;
     private Integer applyStatus;
     @NotBlank(message = "验证码不能为空", groups = {AddGroup.class})
     private String smsCode;

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainPositionBo.java

@@ -37,6 +37,8 @@ public class MainPositionBo implements Serializable {
     private String educationRequirement;
     private String salaryType;
     private String salaryRange;
+    private BigDecimal minSalary;
+    private BigDecimal maxSalary;
     private Integer recruitNum;
     private Date registrationStartDate;
     private Date registrationEndDate;

+ 8 - 1
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainPostApplyBo.java

@@ -9,7 +9,12 @@ import org.dromara.main.domain.MainPostApply;
 import java.math.BigDecimal;
 import java.util.Date;
 
-
+/**
+ * 岗位申请BO
+ *
+ * @author [Your Name]
+ * @date [Current Date]
+ */
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = MainPostApply.class, reverseConvertGenerate = false)
@@ -29,6 +34,8 @@ public class MainPostApplyBo extends BaseEntity {
     private String educationRequirement;
     private String salaryType;
     private String salaryRange;
+    private BigDecimal minSalary;
+    private BigDecimal maxSalary;
     private Integer recruitNum;
     private Date registrationStartDate;
     private Date registrationEndDate;

+ 15 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/dto/GeoPointDto.java

@@ -0,0 +1,15 @@
+package org.dromara.main.domain.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+public class GeoPointDto {
+
+    private BigDecimal latitude;
+
+    private BigDecimal longitude;
+}

+ 7 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainCompanyApplyVo.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import org.dromara.main.domain.MainCompanyApply;
 
 import java.io.Serial;
+import java.math.BigDecimal;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -50,6 +51,12 @@ public class MainCompanyApplyVo implements Serializable {
     @ExcelProperty(value = "手机号")
     private String mobile;
 
+    @ExcelProperty(value = "纬度")
+    private BigDecimal latitude;
+
+    @ExcelProperty(value = "经度")
+    private BigDecimal longitude;
+
     @ExcelProperty(value = "申请状态")
     private Integer applyStatus;
 

+ 6 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainPositionVo.java

@@ -58,6 +58,12 @@ public class MainPositionVo implements Serializable {
     @ExcelProperty(value = "薪资范围")
     private String salaryRange;
 
+    @ExcelProperty(value = "最小工资")
+    private BigDecimal minSalary;
+
+    @ExcelProperty(value = "最大工资")
+    private BigDecimal maxSalary;
+
     @ExcelProperty(value = "招聘人数")
     private Integer recruitNum;
 

+ 6 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainPostApplyVo.java

@@ -59,6 +59,12 @@ public class MainPostApplyVo implements Serializable {
     @ExcelProperty(value = "薪资范围")
     private String salaryRange;
 
+    @ExcelProperty(value = "最小工资")
+    private BigDecimal minSalary;
+
+    @ExcelProperty(value = "最大工资")
+    private BigDecimal maxSalary;
+
     @ExcelProperty(value = "招聘人数")
     private Integer recruitNum;
 

+ 8 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/CompanyGeoService.java

@@ -0,0 +1,8 @@
+package org.dromara.main.service;
+
+import org.dromara.main.domain.dto.GeoPointDto;
+
+public interface CompanyGeoService {
+
+    GeoPointDto geocode(String address);
+}

+ 75 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/AmapCompanyGeoServiceImpl.java

@@ -0,0 +1,75 @@
+package org.dromara.main.service.impl;
+
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.main.config.AmapGeoProperties;
+import org.dromara.main.domain.dto.GeoPointDto;
+import org.dromara.main.service.CompanyGeoService;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 基于高德 Web 服务地理编码接口,将地址转换为经纬度。
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AmapCompanyGeoServiceImpl implements CompanyGeoService {
+
+    private final AmapGeoProperties amapGeoProperties;
+
+    @Override
+    public GeoPointDto geocode(String address) {
+        if (StringUtils.isBlank(address)) {
+            throw new ServiceException("办公地址不能为空");
+        }
+        if (StringUtils.isBlank(amapGeoProperties.getKey())) {
+            throw new ServiceException("未配置高德地图地理编码 Key");
+        }
+
+        Map<String, Object> params = new HashMap<>(4);
+        params.put("key", amapGeoProperties.getKey());
+        params.put("address", address.trim());
+        params.put("output", "JSON");
+
+        try {
+            String response = HttpUtil.get(amapGeoProperties.getGeocodeUrl(), params);
+            JSONObject result = JSONUtil.parseObj(response);
+            if (!"1".equals(result.getStr("status"))) {
+                String info = result.getStr("info");
+                String infocode = result.getStr("infocode");
+                log.error("高德地理编码失败,address={}, info={}, infocode={}", address, info, infocode);
+                throw new ServiceException(StringUtils.format("地址解析失败: {}", StringUtils.blankToDefault(info, "高德接口调用失败")));
+            }
+
+            JSONArray geocodes = result.getJSONArray("geocodes");
+            if (geocodes == null || geocodes.isEmpty()) {
+                throw new ServiceException("地址解析失败: 未匹配到经纬度,请检查办公地址");
+            }
+
+            String location = geocodes.getJSONObject(0).getStr("location");
+            if (StringUtils.isBlank(location) || !location.contains(",")) {
+                throw new ServiceException("地址解析失败: 返回坐标格式异常");
+            }
+
+            String[] parts = location.split(",");
+            BigDecimal longitude = new BigDecimal(parts[0].trim());
+            BigDecimal latitude = new BigDecimal(parts[1].trim());
+            return new GeoPointDto(latitude, longitude);
+        } catch (ServiceException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            log.error("调用高德地理编码接口异常,address={}", address, ex);
+            throw new ServiceException("地址解析失败,请稍后重试");
+        }
+    }
+}

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainAuditServiceImpl.java

@@ -220,6 +220,8 @@ public class MainAuditServiceImpl implements IMainAuditService {
         position.setEducationRequirement(postApply.getEducationRequirement());
         position.setSalaryType(postApply.getSalaryType());
         position.setSalaryRange(postApply.getSalaryRange());
+        position.setMinSalary(postApply.getMinSalary());
+        position.setMaxSalary(postApply.getMaxSalary());
         position.setRecruitNum(postApply.getRecruitNum());
         position.setRegistrationStartDate(postApply.getRegistrationStartDate());
         position.setRegistrationEndDate(postApply.getRegistrationEndDate());

+ 12 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainCompanyApplyServiceImpl.java

@@ -16,9 +16,11 @@ import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.main.domain.MainAudit;
 import org.dromara.main.domain.MainCompanyApply;
 import org.dromara.main.domain.bo.MainCompanyApplyBo;
+import org.dromara.main.domain.dto.GeoPointDto;
 import org.dromara.main.domain.vo.MainCompanyApplyVo;
 import org.dromara.main.mapper.MainAuditMapper;
 import org.dromara.main.mapper.MainCompanyApplyMapper;
+import org.dromara.main.service.CompanyGeoService;
 import org.dromara.main.service.IMainCompanyApplyService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -32,6 +34,7 @@ public class MainCompanyApplyServiceImpl implements IMainCompanyApplyService {
 
     private final MainCompanyApplyMapper baseMapper;
     private final MainAuditMapper mainAuditMapper;
+    private final CompanyGeoService companyGeoService;
 
     @Override
     public TableDataInfo<MainCompanyApplyVo> queryPageList(MainCompanyApplyBo bo, PageQuery pageQuery) {
@@ -54,6 +57,7 @@ public class MainCompanyApplyServiceImpl implements IMainCompanyApplyService {
     @Override
     public Boolean insertByBo(MainCompanyApplyBo bo) {
         MainCompanyApply add = MapstructUtils.convert(bo, MainCompanyApply.class);
+        fillGeoPoint(add);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
@@ -65,6 +69,7 @@ public class MainCompanyApplyServiceImpl implements IMainCompanyApplyService {
     @Override
     public Boolean updateByBo(MainCompanyApplyBo bo) {
         MainCompanyApply update = MapstructUtils.convert(bo, MainCompanyApply.class);
+        fillGeoPoint(update);
         validEntityBeforeSave(update);
         return baseMapper.updateById(update) > 0;
     }
@@ -133,6 +138,7 @@ public class MainCompanyApplyServiceImpl implements IMainCompanyApplyService {
         apply.setApplyStatus(0);
         apply.setAuthLetter(parseFirstOssId(bo.getAuthLetter()));
         apply.setAvatar(parseFirstOssId(bo.getAvatar()));
+        fillGeoPoint(apply);
 
         validEntityBeforeSave(apply);
         boolean insertResult = baseMapper.insert(apply) > 0;
@@ -182,4 +188,10 @@ public class MainCompanyApplyServiceImpl implements IMainCompanyApplyService {
             throw new ServiceException("上传文件标识格式错误");
         }
     }
+
+    private void fillGeoPoint(MainCompanyApply entity) {
+        GeoPointDto geoPoint = companyGeoService.geocode(entity.getOfficeAddress());
+        entity.setLatitude(geoPoint.getLatitude());
+        entity.setLongitude(geoPoint.getLongitude());
+    }
 }

+ 6 - 1
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/WithdrawServiceImpl.java

@@ -147,7 +147,8 @@ public class WithdrawServiceImpl implements IWithdrawService {
         withdrawMapper.updateById(withdraw);
 
         try {
-            String tradeNo = transferToAlipay(withdraw);
+            // 联调阶段先跳过支付宝打款,直接模拟成功流水号,后续余额与状态流转保持不变。
+            String tradeNo = generateMockTradeNo(withdraw);
 
             SysTenant tenant = sysTenantMapper.selectById(withdraw.getCompanyId());
             if (tenant == null) {
@@ -428,6 +429,10 @@ public class WithdrawServiceImpl implements IWithdrawService {
         return "WD" + DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomNumbers(4);
     }
 
+    private String generateMockTradeNo(Withdraw withdraw) {
+        return "MOCK_" + withdraw.getWithdrawNo();
+    }
+
     private String defaultIfBlank(String value, String defaultValue) {
         return value == null || value.isBlank() ? defaultValue : value;
     }

+ 4 - 0
ruoyi-modules/ruoyi-main/src/main/resources/mapper/MainAuditMapper.xml

@@ -40,6 +40,8 @@
         <result property="educationRequirement" column="education_requirement" />
         <result property="salaryType"     column="salary_type"     />
         <result property="salaryRange"    column="salary_range"    />
+        <result property="minSalary"      column="min_salary"      />
+        <result property="maxSalary"      column="max_salary"      />
         <result property="recruitNum"     column="recruit_num"     />
         <result property="registrationStartDate" column="registration_start_date" />
         <result property="registrationEndDate" column="registration_end_date" />
@@ -101,6 +103,8 @@
             pa.education_requirement,
             pa.salary_type,
             pa.salary_range,
+            pa.min_salary,
+            pa.max_salary,
             pa.recruit_num,
             pa.registration_start_date,
             pa.registration_end_date,