1811872455@163.com hai 2 semanas
pai
achega
3933d14d7d
Modificáronse 18 ficheiros con 307 adicións e 22 borrados
  1. 21 10
      storlead-centre-api/src/main/java/com/storlead/centre/app/AppManageApiController.java
  2. 0 3
      storlead-centre-api/src/main/java/com/storlead/centre/system/LoginApiController.java
  3. 3 0
      storlead-centre-api/src/main/java/com/storlead/centre/util/HttpSecurityCheckUtil.java
  4. 1 1
      storlead-centre-api/src/main/resources/application-dev.yml
  5. 1 1
      storlead-centre-api/src/main/resources/application-prod.yml
  6. 1 1
      storlead-centre-api/src/main/resources/application-test.yml
  7. 20 0
      storlead-centre-service/src/main/java/com/storlead/centre/controller/AttendanceSignRecordController.java
  8. 99 0
      storlead-centre-service/src/main/java/com/storlead/centre/entity/AttendanceSignRecordEntity.java
  9. 16 0
      storlead-centre-service/src/main/java/com/storlead/centre/mapper/AttendanceSignRecordMapper.java
  10. 46 0
      storlead-centre-service/src/main/java/com/storlead/centre/mapper/xml/AttendanceSignRecordMapper.xml
  11. 16 0
      storlead-centre-service/src/main/java/com/storlead/centre/service/AttendanceSignRecordService.java
  12. 20 0
      storlead-centre-service/src/main/java/com/storlead/centre/service/impl/AttendanceSignRecordServiceImpl.java
  13. 46 0
      storlead-centre-service/src/main/resources/mapper/AttendanceSignRecordMapper.xml
  14. 9 0
      storlead-framework/storlead-auth/src/main/java/com/storlead/framework/util/LoginUserUtil.java
  15. 3 3
      storlead-framework/storlead-common/src/main/java/com/storlead/framework/common/constant/UserCacheKeyConstants.java
  16. 3 1
      storlead-user/src/main/java/com/storlead/user/service/impl/UserServiceImpl.java
  17. 1 1
      ui/sp-user-center/vite.config.ts
  18. 1 1
      ui/sp-user-center/vite.config.ts.timestamp-1766566524412-75fb9cb060e12.mjs

+ 21 - 10
storlead-centre-api/src/main/java/com/storlead/centre/app/AppManageApiController.java

@@ -1,5 +1,6 @@
 package com.storlead.centre.app;
 
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,6 +13,7 @@ import com.storlead.centre.service.SysAppInfoService;
 import com.storlead.centre.service.SysAppPageInfoService;
 import com.storlead.centre.util.CryptoZipUtil;
 import com.storlead.centre.util.HttpSecurityCheckUtil;
+import com.storlead.framework.auth.vo.LoginUser;
 import com.storlead.framework.common.constant.CommonConstant;
 import com.storlead.framework.common.util.MD5Util;
 import com.storlead.framework.util.LoginUserUtil;
@@ -111,6 +113,10 @@ public class AppManageApiController {
     @ApiOperation(value = "应用管理-跳转子页", notes = "应用管理-跳转子页")
     public Result<?> jumpToPage(Long pageId) {
 
+        String token = LoginUserUtil.getLoginToken();
+        if (StrUtil.isBlank(token)) {
+            return Result.error("未登录!");
+        }
         SysAppPageInfoEntity page = sysAppPageInfoService.getById(pageId);
         if (Objects.isNull(page)) {
             return Result.error("无权限");
@@ -121,15 +127,16 @@ public class AppManageApiController {
         Map<String,String> argMap = new HashMap<>();
         Long dt = System.currentTimeMillis() / 1000 % HttpSecurityCheckUtil.divisor;
         argMap.put("dt",dt.toString());
-        argMap.put("redirect",info.getRedirectUri());
+        argMap.put("redirect",page.getRedirectUri());
         argMap.put("appSecret",info.getAppSecret());
-        argMap.put("token","ouunwqlkeklnkljm23jk3nywwqk");
-        argMap.put("account","ouunwqlkeklnkljm23jk3nywwqk");
+        argMap.put("token",token);
+        argMap.put("account","admin");
         String sign = MD5Util.MD5Encode(HttpSecurityCheckUtil.makeSign(argMap),"UTF-8");
-
         argMap.put("sign",sign);
-        String urlParam =  HttpSecurityCheckUtil.buildUrlParams(argMap);
-        String requestUrl = info.getHomepageUrl()+"?"+urlParam;
+        argMap.remove("appSecret");
+//        String urlParam =  HttpSecurityCheckUtil.buildUrlParams(argMap);
+        String encrypted = CryptoZipUtil.encryptParams(argMap,SALT_KEY);
+        String requestUrl = info.getHomepageUrl()+"/ssoredirect?ticket="+encrypted;
         return Result.result(requestUrl);
     }
 
@@ -137,20 +144,24 @@ public class AppManageApiController {
     @ApiOperation(value = "应用管理-跳转主页", notes = "应用管理-跳转主页")
     public Result<?> jumpToHome(Long appId) {
         SysAppInfoEntity info = sysAppInfoService.getById(appId);
+        LoginUser loginUser = LoginUserUtil.getLoginUser();
 
-        LoginUserUtil.getLoginUser();
+        String token = LoginUserUtil.getLoginToken();
+        if (StrUtil.isBlank(token) || Objects.isNull(loginUser)) {
+            return Result.error("未登录!");
+        }
         Map<String,String> argMap = new HashMap<>();
         Long dt = System.currentTimeMillis() / 1000 % HttpSecurityCheckUtil.divisor;
         argMap.put("dt",dt.toString());
         argMap.put("redirect",info.getRedirectUri());
         argMap.put("appSecret",info.getAppSecret());
-        argMap.put("token","ouunwqlkeklnkljm23jk3nywwqk");
-        argMap.put("account","ouunwqlkeklnkljm23jk3nywwqk");
+        argMap.put("token",token);
+        argMap.put("account",loginUser.getMobile());
         String sign = MD5Util.MD5Encode(HttpSecurityCheckUtil.makeSign(argMap),"UTF-8");
 
         argMap.put("sign",sign);
         String urlParam =  HttpSecurityCheckUtil.buildUrlParams(argMap);
-        String requestUrl = info.getHomepageUrl()+"?"+urlParam;
+        String requestUrl = info.getHomepageUrl()+"/ssoredirect?ticket="+urlParam;
         return Result.result(requestUrl);
     }
 

+ 0 - 3
storlead-centre-api/src/main/java/com/storlead/centre/system/LoginApiController.java

@@ -195,9 +195,6 @@ public class LoginApiController {
         String json = JSONObject.toJSONString(loginUser);
         redisService.setCacheObject(token, json, 60 * 60 * 24L * 7, TimeUnit.SECONDS);
 
-        Map<String, String> apiMap = new HashMap();
-        redisService.setCacheObject(RedisKeySaltConstant.API_CODE_REDIS + loginUser.getMobile(), apiMap);
-
         obj.put("token", token);
         return Result.ok(obj);
     }

+ 3 - 0
storlead-centre-api/src/main/java/com/storlead/centre/util/HttpSecurityCheckUtil.java

@@ -31,6 +31,9 @@ public class HttpSecurityCheckUtil {
          */
         StringBuilder sb = new StringBuilder();
         for (Map.Entry<String, String> entry : entryList) {
+            if (sb.length() > 0) {
+                sb.append("&");
+            }
             sb.append(entry.getKey()).append("=").append(entry.getValue());
         }
         String dataToEncrypt = sb.toString();

+ 1 - 1
storlead-centre-api/src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
-  port: 10010
+  port: 10020
   tomcat:
     max-swallow-size: -1
     max-upload-size: 200MB

+ 1 - 1
storlead-centre-api/src/main/resources/application-prod.yml

@@ -1,7 +1,7 @@
 #开发模式
 debug: false
 server:
-  port: 10010
+  port: 10020
   tomcat:
     max-swallow-size: -1
     max-upload-size: 200MB

+ 1 - 1
storlead-centre-api/src/main/resources/application-test.yml

@@ -1,5 +1,5 @@
 server:
-  port: 10010
+  port: 10020
   tomcat:
     max-swallow-size: -1
     max-upload-size: 200MB

+ 20 - 0
storlead-centre-service/src/main/java/com/storlead/centre/controller/AttendanceSignRecordController.java

@@ -0,0 +1,20 @@
+package com.storlead.centre.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * OA系统签到/签退记录表 前端控制器
+ * </p>
+ *
+ * @author chenkq
+ * @since 2025-12-25
+ */
+@RestController
+@RequestMapping("/attendance-sign-record-entity")
+public class AttendanceSignRecordController {
+
+}

+ 99 - 0
storlead-centre-service/src/main/java/com/storlead/centre/entity/AttendanceSignRecordEntity.java

@@ -0,0 +1,99 @@
+package com.storlead.centre.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.storlead.framework.mybatis.entity.SysBaseField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * OA系统签到/签退记录表
+ * </p>
+ *
+ * @author chenkq
+ * @since 2025-12-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("attendance_sign_record")
+@ApiModel(value="AttendanceSignRecordEntity对象", description="OA系统签到/签退记录表")
+public class AttendanceSignRecordEntity extends SysBaseField {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "员工ID")
+    @TableField("user_id")
+    private Long userId;
+
+    @ApiModelProperty(value = "员工姓名(冗余)")
+    @TableField("user_name")
+    private String userName;
+
+    @ApiModelProperty(value = "部门ID")
+    @TableField("dept_id")
+    private Long deptId;
+
+    @ApiModelProperty(value = "部门名称(冗余)")
+    @TableField("dept_name")
+    private String deptName;
+
+    @ApiModelProperty(value = "签到日期")
+    @TableField("sign_date")
+    private LocalDate signDate;
+
+    @ApiModelProperty(value = "签到/签退时间")
+    @TableField("sign_time")
+    private LocalDateTime signTime;
+
+    @ApiModelProperty(value = "类型:1签到 2签退")
+    @TableField("sign_type")
+    private Integer signType;
+
+    @ApiModelProperty(value = "是否同步OA")
+    @TableField("sync_oa")
+    private Integer syncOa;
+
+    @ApiModelProperty(value = "来源:1OA 2APP 3H5")
+    @TableField("sign_source")
+    private Integer signSource;
+
+    @ApiModelProperty(value = "设备类型:PC / Android / iOS")
+    @TableField("device_type")
+    private String deviceType;
+
+    @ApiModelProperty(value = "设备标识")
+    @TableField("device_id")
+    private String deviceId;
+
+    @ApiModelProperty(value = "签到地址")
+    @TableField("sign_address")
+    private String signAddress;
+
+    @ApiModelProperty(value = "经度")
+    @TableField("longitude")
+    private BigDecimal longitude;
+
+    @ApiModelProperty(value = "纬度")
+    @TableField("latitude")
+    private BigDecimal latitude;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 16 - 0
storlead-centre-service/src/main/java/com/storlead/centre/mapper/AttendanceSignRecordMapper.java

@@ -0,0 +1,16 @@
+package com.storlead.centre.mapper;
+
+import com.storlead.centre.entity.AttendanceSignRecordEntity;
+import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+
+/**
+ * <p>
+ * OA系统签到/签退记录表 Mapper 接口
+ * </p>
+ *
+ * @author chenkq
+ * @since 2025-12-25
+ */
+public interface AttendanceSignRecordMapper extends MyBaseMapper<AttendanceSignRecordEntity> {
+
+}

+ 46 - 0
storlead-centre-service/src/main/java/com/storlead/centre/mapper/xml/AttendanceSignRecordMapper.xml

@@ -0,0 +1,46 @@
+<?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.storlead.centre.mapper.AttendanceSignRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.storlead.centre.entity.AttendanceSignRecordEntity">
+        <id column="id" property="id" />
+    <result column="sort" property="sort" />
+    <result column="create_time" property="createTime" />
+    <result column="update_by" property="updateBy" />
+    <result column="update_time" property="updateTime" />
+    <result column="is_delete" property="isDelete" />
+    <result column="enabled" property="enabled" />
+    <result column="create_by" property="createBy" />
+    <result column="owner_by" property="ownerBy" />
+        <result column="user_id" property="userId" />
+        <result column="user_name" property="userName" />
+        <result column="dept_id" property="deptId" />
+        <result column="dept_name" property="deptName" />
+        <result column="sign_date" property="signDate" />
+        <result column="sign_time" property="signTime" />
+        <result column="sign_type" property="signType" />
+        <result column="sync_oa" property="syncOa" />
+        <result column="sign_source" property="signSource" />
+        <result column="device_type" property="deviceType" />
+        <result column="device_id" property="deviceId" />
+        <result column="sign_address" property="signAddress" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        sort,
+        create_time,
+        update_by,
+        update_time,
+        is_delete,
+        enabled,
+        create_by,
+        owner_by,
+        id, user_id, user_name, dept_id, dept_name, sign_date, sign_time, sign_type, sync_oa, sign_source, device_type, device_id, sign_address, longitude, latitude, remark
+    </sql>
+
+</mapper>

+ 16 - 0
storlead-centre-service/src/main/java/com/storlead/centre/service/AttendanceSignRecordService.java

@@ -0,0 +1,16 @@
+package com.storlead.centre.service;
+
+import com.storlead.centre.entity.AttendanceSignRecordEntity;
+import com.storlead.framework.mybatis.service.MyBaseService;
+
+/**
+ * <p>
+ * OA系统签到/签退记录表 服务类
+ * </p>
+ *
+ * @author chenkq
+ * @since 2025-12-25
+ */
+public interface AttendanceSignRecordService extends MyBaseService<AttendanceSignRecordEntity> {
+
+}

+ 20 - 0
storlead-centre-service/src/main/java/com/storlead/centre/service/impl/AttendanceSignRecordServiceImpl.java

@@ -0,0 +1,20 @@
+package com.storlead.centre.service.impl;
+
+import com.storlead.centre.entity.AttendanceSignRecordEntity;
+import com.storlead.centre.mapper.AttendanceSignRecordMapper;
+import com.storlead.centre.service.AttendanceSignRecordService;
+import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * OA系统签到/签退记录表 服务实现类
+ * </p>
+ *
+ * @author chenkq
+ * @since 2025-12-25
+ */
+@Service
+public class AttendanceSignRecordServiceImpl extends MyBaseServiceImpl<AttendanceSignRecordMapper, AttendanceSignRecordEntity> implements AttendanceSignRecordService {
+
+}

+ 46 - 0
storlead-centre-service/src/main/resources/mapper/AttendanceSignRecordMapper.xml

@@ -0,0 +1,46 @@
+<?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.storlead.centre.mapper.AttendanceSignRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.storlead.centre.entity.AttendanceSignRecordEntity">
+        <id column="id" property="id" />
+    <result column="sort" property="sort" />
+    <result column="create_time" property="createTime" />
+    <result column="update_by" property="updateBy" />
+    <result column="update_time" property="updateTime" />
+    <result column="is_delete" property="isDelete" />
+    <result column="enabled" property="enabled" />
+    <result column="create_by" property="createBy" />
+    <result column="owner_by" property="ownerBy" />
+        <result column="user_id" property="userId" />
+        <result column="user_name" property="userName" />
+        <result column="dept_id" property="deptId" />
+        <result column="dept_name" property="deptName" />
+        <result column="sign_date" property="signDate" />
+        <result column="sign_time" property="signTime" />
+        <result column="sign_type" property="signType" />
+        <result column="sync_oa" property="syncOa" />
+        <result column="sign_source" property="signSource" />
+        <result column="device_type" property="deviceType" />
+        <result column="device_id" property="deviceId" />
+        <result column="sign_address" property="signAddress" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        sort,
+        create_time,
+        update_by,
+        update_time,
+        is_delete,
+        enabled,
+        create_by,
+        owner_by,
+        id, user_id, user_name, dept_id, dept_name, sign_date, sign_time, sign_type, sync_oa, sign_source, device_type, device_id, sign_address, longitude, latitude, remark
+    </sql>
+
+</mapper>

+ 9 - 0
storlead-framework/storlead-auth/src/main/java/com/storlead/framework/util/LoginUserUtil.java

@@ -22,6 +22,15 @@ public class LoginUserUtil {
             return null;
         }
     }
+
+    public static String getLoginToken(){
+        try {
+            String loginToken = Context.getContext().getAttribute(UserCacheKeyConstants.LOGIN_USER_INFO_TOKEN_KEY, String.class);
+            return loginToken;
+        } catch (Exception e) {
+            return null;
+        }
+    }
     /**
      * 获取当前用户信息
      * @return

+ 3 - 3
storlead-framework/storlead-common/src/main/java/com/storlead/framework/common/constant/UserCacheKeyConstants.java

@@ -8,17 +8,17 @@ package com.storlead.framework.common.constant;
  */
 public class UserCacheKeyConstants {
         /**
-         * 数据源分组 master库
+         * 用户redisKEY
          */
         public static final String LOGIN_USER_INFO_KEY = "login_user_info";
 
         /**
-         * 数据源分组 project库
+         * 当前登录用户token key
          */
         public static final String LOGIN_USER_INFO_TOKEN_KEY = "login_user_token_key";
 
         /**
-         * 数据源分组 oa库
+         * 登录用户id
          */
         public static final String LOGIN_USER_INFO_ID_KEY = "login_user_user_id";
 }

+ 3 - 1
storlead-user/src/main/java/com/storlead/user/service/impl/UserServiceImpl.java

@@ -157,7 +157,9 @@ public class UserServiceImpl extends MyBaseServiceImpl<UserMapper, UserEntity> i
 		LambdaQueryWrapper<UserEntity> wp = new LambdaQueryWrapper<>();
 		wp.isNull(UserEntity::getXworkUserId);
 		wp.eq(UserEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
-		wp.eq(UserEntity::getEnabled,true);
+		wp.isNotNull(UserEntity::getMobile).ne(UserEntity::getMobile,"");
+		wp.ne(UserEntity::getStatus,Integer.valueOf(5));
+		wp.isNotNull(UserEntity::getPermanentDate);
 		List<UserEntity> list = list(wp);
 
 		List<com.storlead.framework.common.vo.UserVo> us = new ArrayList<>();

+ 1 - 1
ui/sp-user-center/vite.config.ts

@@ -36,7 +36,7 @@ export default defineConfig(({mode, command}: ConfigEnv): UserConfig => {
                 '/api/': {
                     changeOrigin: true,
                     // 接口地址
-                    target: mode === 'dev67' ? 'http://192.168.1.67:10010' : 'http://localhost:10010',
+                    target: mode === 'dev67' ? 'http://192.168.1.67:10020' : 'http://localhost:10020',
                     // target: 'http://192.168.1.193:18090',
                     pathRewrite: {
                         ['^' + env.VITE_APP_BASE_API]: ''

+ 1 - 1
ui/sp-user-center/vite.config.ts.timestamp-1766566524412-75fb9cb060e12.mjs

@@ -172,7 +172,7 @@ var vite_config_default = defineConfig(({ mode, command }) => {
         "/api/": {
           changeOrigin: true,
           // 接口地址
-          target: mode === "dev67" ? "http://192.168.1.67:10010" : "http://localhost:10010",
+          target: mode === "dev67" ? "http://192.168.1.67:10020" : "http://localhost:10010",
           // target: 'http://192.168.1.193:18090',
           pathRewrite: {
             ["^" + env.VITE_APP_BASE_API]: ""