Преглед изворни кода

feat(main): 新增小程序配置和背调条款价格联动功能

- 配置微信小程序 appId 和 appSecret
- 修改 Redis 配置,将 host 改为 localhost 并注释密码
- 实现背调条款增删改时自动更新对应类别的总价
- 完善岗位查询条件,支持学历要求和经验要求筛选
- 优化学生登录逻辑,添加 clientId 参数传递
- 修复 SecurityConfig 中空指针异常的安全检查
西格玛许 пре 1 недеља
родитељ
комит
8e0386064c

+ 12 - 2
ruoyi-admin/src/main/resources/application-dev.yml

@@ -96,8 +96,8 @@ spring:
 spring.data:
   redis:
     # 地址
-    host: 192.168.194.130
-    password: 123456
+    host: localhost
+#    password: 123456
     # 端口,默认为6379
     port: 6379
     # 数据库索引
@@ -187,6 +187,16 @@ sms:
       sdk-app-id: 您的sdkAppId
 
 
+
+
+wechat:
+  miniapp:
+    # 小程序AppID(在微信公众平台获取)
+    app-id: wxb1effaafaf65ee9c
+    # 小程序AppSecret(在微信公众平台获取,注意保密)
+    app-secret: 3acbcb3940c7c873a837e4830782d182
+
+
 --- # 三方授权
 justauth:
   # 前端外网访问地址

+ 2 - 1
ruoyi-common/ruoyi-common-security/src/main/java/org/dromara/common/security/config/SecurityConfig.java

@@ -65,7 +65,8 @@ public class SecurityConfig implements WebMvcConfigurer {
                         // 检查 header 与 param 里的 clientid 与 token 里的是否一致
                         String headerCid = request.getHeader(LoginHelper.CLIENT_KEY);
                         String paramCid = ServletUtils.getParameter(LoginHelper.CLIENT_KEY);
-                        String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString();
+                        Object clientIdObj = StpUtil.getExtra(LoginHelper.CLIENT_KEY);
+                        String clientId = cn.hutool.core.util.ObjectUtil.isNull(clientIdObj) ? null : clientIdObj.toString();
                         if (!StringUtils.equalsAny(clientId, headerCid, paramCid)) {
                             // token 无效
                             throw NotLoginException.newInstance(StpUtil.getLoginType(),

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

@@ -54,4 +54,8 @@ public class MainPositionBo implements Serializable {
     private BigDecimal gradeA;
     private BigDecimal gradeB;
     private BigDecimal gradeC;
+
+
+
+    private String keyword;
 }

+ 41 - 2
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainBackClauseServiceImpl.java

@@ -8,15 +8,19 @@ import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.main.domain.MainBackCategory;
 import org.dromara.main.domain.MainBackClause;
 import org.dromara.main.domain.bo.MainBackClauseBo;
 import org.dromara.main.domain.vo.MainBackClauseVo;
+import org.dromara.main.mapper.MainBackCategoryMapper;
 import org.dromara.main.mapper.MainBackClauseMapper;
 import org.dromara.main.service.IMainBackClauseService;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.List;
+import java.util.Objects;
 
 @RequiredArgsConstructor
 @Service
@@ -24,6 +28,8 @@ public class MainBackClauseServiceImpl implements IMainBackClauseService {
 
     private final MainBackClauseMapper baseMapper;
 
+    private final MainBackCategoryMapper categoryMapper;
+
     /**
      * 查询背调条款分页列表
      */
@@ -78,6 +84,7 @@ public class MainBackClauseServiceImpl implements IMainBackClauseService {
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());
+            updateCategoryPrice(bo.getCategoryId());
         }
         return flag;
     }
@@ -88,7 +95,12 @@ public class MainBackClauseServiceImpl implements IMainBackClauseService {
     @Override
     public Boolean updateByBo(MainBackClauseBo bo) {
         MainBackClause update = MapstructUtils.convert(bo, MainBackClause.class);
-        return baseMapper.updateById(update) > 0;
+
+        boolean flag=baseMapper.updateById(update)>0;
+        if(flag) {
+            updateCategoryPrice(bo.getCategoryId());
+        }
+        return flag;
     }
 
     /**
@@ -99,6 +111,33 @@ public class MainBackClauseServiceImpl implements IMainBackClauseService {
         if (isValid) {
             // 这里可以添加删除前的业务校验逻辑
         }
-        return baseMapper.deleteByIds(ids) > 0;
+        boolean flag=baseMapper.deleteBatchIds(ids) > 0;
+        if(flag){
+            updateCategoryPrice(ids.stream().findFirst().orElse(null));
+        }
+        return flag;
+    }
+
+    private void updateCategoryPrice(Long categoryId) {
+        if (categoryId == null) return;
+
+        // 1. 查询该类别下所有的条款
+        LambdaQueryWrapper<MainBackClause> lqw = Wrappers.lambdaQuery();
+        lqw.eq(MainBackClause::getCategoryId, categoryId);
+        List<MainBackClause> clauses = baseMapper.selectList(lqw);
+
+        // 2. 聚合计出总价
+        BigDecimal totalPrice = clauses.stream()
+            .map(MainBackClause::getPrice)
+            .filter(Objects::nonNull)
+            .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        // 3. 更新对应的分类表价格
+        MainBackCategory updateCategory = new MainBackCategory();
+        updateCategory.setId(categoryId);
+        updateCategory.setPrice(totalPrice);
+        categoryMapper.updateById(updateCategory);
     }
+
+
 }

+ 7 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainPositionServiceImpl.java

@@ -69,8 +69,15 @@ public class MainPositionServiceImpl extends ServiceImpl<MainPositionMapper, Mai
     private LambdaQueryWrapper<MainPosition> buildQueryWrapper(MainPositionBo bo) {
         LambdaQueryWrapper<MainPosition> lqw = Wrappers.lambdaQuery();
         lqw.eq(StringUtils.isNotBlank(bo.getTenantId()), MainPosition::getTenantId, bo.getTenantId());
+//        搜索栏查询
         lqw.like(StringUtils.isNotBlank(bo.getPostName()), MainPosition::getPostName, bo.getPostName());
+//        岗位类型筛选
         lqw.eq(StringUtils.isNotBlank(bo.getPostType()), MainPosition::getPostType, bo.getPostType());
+//        学历要求查询
+        lqw.eq(StringUtils.isNotBlank(bo.getSchoolRequirement()),MainPosition::getSchoolRequirement,bo.getSchoolRequirement());
+//        经验要求筛选
+        lqw.eq(StringUtils.isNotBlank(bo.getGradeRequirement()),MainPosition::getGradeRequirement,bo.getGradeRequirement());
+//
         lqw.eq(StringUtils.isNotBlank(bo.getWorkProvince()), MainPosition::getWorkProvince, bo.getWorkProvince());
         lqw.eq(StringUtils.isNotBlank(bo.getWorkCity()), MainPosition::getWorkCity, bo.getWorkCity());
         lqw.eq(StringUtils.isNotBlank(bo.getPostLevel()), MainPosition::getPostLevel, bo.getPostLevel());

+ 13 - 2
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainStudentServiceImpl.java

@@ -1,6 +1,7 @@
 package org.dromara.main.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.stp.parameter.SaLoginParameter;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
@@ -10,9 +11,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.ServletUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.main.domain.MainStudent;
 import org.dromara.main.domain.MainStudentEducation;
 import org.dromara.main.domain.MainStudentExperience;
@@ -201,8 +204,16 @@ public class MainStudentServiceImpl implements IMainStudentService {
                 baseMapper.insert(student);
             }
         }
-        // 4. 执行登录生成 token(如果你的项目用的是其他的 LoginHelper,请替换)
-        StpUtil.login(student.getId());
+        String clientId = ServletUtils.getRequest().getHeader(LoginHelper.CLIENT_KEY);
+        if (clientId == null || clientId.isEmpty()) {
+            clientId = "e5cd7e4891bf95d1d19206ce24a7b32e"; // 给个兜底默认值
+        }
+        SaLoginParameter loginModel = new SaLoginParameter()
+            .setDevice("app") // 后端可用于区分设备,控制互踢逻辑
+            .setExtra(LoginHelper.CLIENT_KEY, clientId)
+            .setExtra(LoginHelper.USER_KEY, student.getId())
+            .setExtra(LoginHelper.USER_NAME_KEY, student.getName());
+        StpUtil.login(student.getId(), loginModel);
         String token = StpUtil.getTokenValue();
         // 5. 组合组装返回结果
         MiniappLoginVo result = new MiniappLoginVo();