From b529cf5946124abfdfb55c9fac2821de7231a929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E7=8E=89=E7=90=A6?= <7507756+jiang_yuqi@user.noreply.gitee.com> Date: Sat, 13 Jan 2024 19:53:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/pom.xml | 6 + .../java/com/ruoyi/api/base/TokenReqVo.java | 64 +++ .../controller/LabourApiController.java | 414 ++++++++++++++++++ .../api/labour/domain/LabourSignetVo.java | 42 ++ .../system/SysApplyConfigController.java | 98 +++++ .../src/main/resources/application-druid.yml | 60 ++- .../src/main/resources/application-test.yml | 117 +++++ .../src/main/resources/application.yml | 57 --- ruoyi-common/pom.xml | 6 + .../ruoyi/common/constant/CacheConstants.java | 5 + .../common/core/domain/entity/SysUser.java | 11 + .../com/ruoyi/common/enums/UserTypeEnum.java | 30 ++ .../com/ruoyi/common/utils/AuthRsaUtils.java | 184 ++++++++ .../controller/FlowDefinitionController.java | 2 - .../controller/FlowInstanceController.java | 1 - .../controller/SysFormController.java | 3 +- .../web/service/SysLoginService.java | 31 ++ .../ruoyi/system/domain/SysApplyConfig.java | 125 ++++++ .../system/mapper/SysApplyConfigMapper.java | 61 +++ .../service/ISysApplyConfigService.java | 66 +++ .../impl/SysApplyConfigServiceImpl.java | 147 +++++++ .../service/impl/SysUserServiceImpl.java | 7 + .../mapper/system/SysApplyConfigMapper.xml | 101 +++++ .../resources/mapper/system/SysUserMapper.xml | 5 + ruoyi-ui/src/api/system/applyConfig.js | 44 ++ .../src/views/system/applyConfig/index.vue | 322 ++++++++++++++ .../web/controller/DeptController.java | 1 + yanzhu-jh/pom.xml | 1 + .../domain/SurProjectAttendanceData.java | 32 +- .../domain/SurProjectAttendanceGroup.java | 20 +- .../domain/SurProjectAttendanceUser.java | 22 +- .../SurProjectAttendanceDataMapper.java | 18 +- .../SurProjectAttendanceGroupMapper.java | 16 + .../SurProjectAttendanceUserMapper.java | 16 + .../ISurProjectAttendanceDataService.java | 18 +- .../ISurProjectAttendanceGroupService.java | 16 + .../ISurProjectAttendanceUserService.java | 16 + .../SurProjectAttendanceDataServiceImpl.java | 24 +- .../SurProjectAttendanceGroupServiceImpl.java | 22 + .../SurProjectAttendanceUserServiceImpl.java | 22 + .../jh/project/task/AttendanceTask.java | 9 +- .../SurProjectAttendanceDataMapper.xml | 20 + .../SurProjectAttendanceGroupMapper.xml | 25 +- .../SurProjectAttendanceUserMapper.xml | 20 + 44 files changed, 2235 insertions(+), 92 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/api/base/TokenReqVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/api/labour/domain/LabourSignetVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysApplyConfigController.java create mode 100644 ruoyi-admin/src/main/resources/application-test.yml create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/UserTypeEnum.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/AuthRsaUtils.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysApplyConfig.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysApplyConfigMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysApplyConfigService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysApplyConfigServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysApplyConfigMapper.xml create mode 100644 ruoyi-ui/src/api/system/applyConfig.js create mode 100644 ruoyi-ui/src/views/system/applyConfig/index.vue diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 5085b10f..7e7af1ac 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -78,6 +78,12 @@ ruoyi-flowable + + org.projectlombok + lombok + true + + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/base/TokenReqVo.java b/ruoyi-admin/src/main/java/com/ruoyi/api/base/TokenReqVo.java new file mode 100644 index 00000000..1e70ba3e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/base/TokenReqVo.java @@ -0,0 +1,64 @@ +package com.ruoyi.api.base; + +import com.ruoyi.common.utils.AuthRsaUtils; +import com.ruoyi.common.utils.StringUtils; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 获取系统token 请求参数 + * + * @author: JiangYuQi + * @date: 2024/01/13 10:17 + */ +@Data +public class TokenReqVo { + + /** + * AppId + */ + @NotBlank(message = "AppId不能为空") + @Size(min = 1, max = 64, message = "AppId格式异常") + private String appId; + + /** + * 签名 + * RSA(用户账号 + 时间戳)加密 + */ + @NotBlank(message = "签名不能为空") + private String sign; + + /** + * 时间戳 + */ + @NotNull(message = "时间戳不能为空") + private Long timestamp; + + public Boolean getLoginSign(String privateKey) { + boolean signFlag = false; + try { + String decryptByPrivateKey = AuthRsaUtils.decryptByPrivateKey(privateKey,sign); + if (StringUtils.equals(appId + timestamp, decryptByPrivateKey) && checkTimestamp()) { + signFlag = true; + } + } catch (Exception e) { + throw new RuntimeException("签名解密异常"); + } + return signFlag; + } + + /** + * 效验时间签名 + */ + private Boolean checkTimestamp() { + boolean timestampFlag = false; + long timePoor = Math.abs(timestamp - System.currentTimeMillis()); + if (timePoor < 1000 * 60 * 3) { + timestampFlag = true; + } + return timestampFlag; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java new file mode 100644 index 00000000..5aa4c503 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/labour/controller/LabourApiController.java @@ -0,0 +1,414 @@ +package com.ruoyi.api.labour.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.api.base.TokenReqVo; +import com.ruoyi.api.labour.domain.LabourSignetVo; +import com.ruoyi.common.annotation.Anonymous; +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.LimitType; +import com.ruoyi.common.enums.UserTypeEnum; +import com.ruoyi.common.utils.AuthRsaUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.web.service.SysLoginService; +import com.ruoyi.system.domain.SysApplyConfig; +import com.ruoyi.system.service.ISysUserService; +import com.yanzhu.jh.project.domain.SurProjectAttendanceData; +import com.yanzhu.jh.project.domain.SurProjectAttendanceGroup; +import com.yanzhu.jh.project.domain.SurProjectAttendanceUser; +import com.yanzhu.jh.project.service.ISurProjectAttendanceDataService; +import com.yanzhu.jh.project.service.ISurProjectAttendanceGroupService; +import com.yanzhu.jh.project.service.ISurProjectAttendanceUserService; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections4.CollectionUtils; +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.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 劳务人员APIController + * + * @author JiangYuQi + * @date 2024-01-13 + */ +@RestController +@RequestMapping("/api/labour") +public class LabourApiController extends BaseController { + + @Autowired + private RedisCache redisCache; + + @Autowired + private ISysUserService userService; + + @Autowired + private SysLoginService loginService; + + @Autowired + private ISurProjectAttendanceGroupService surProjectAttendanceGroupService; + + @Autowired + private ISurProjectAttendanceUserService surProjectAttendanceUserService; + + @Autowired + private ISurProjectAttendanceDataService surProjectAttendanceDataService; + + /** + * 获取系统token + * 限流规则[60秒内最多请求10次,限流策略IP] + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @Anonymous + @ApiOperation(value = "获取TOKEN") + @RateLimiter(count = 10, limitType = LimitType.IP) + @PostMapping("/v1/getToken") + public AjaxResult getToken(@Validated @RequestBody TokenReqVo req) { + SysApplyConfig sysApplyConfig = redisCache.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG+req.getAppId()); + if(sysApplyConfig==null){ + throw new RuntimeException("AppId不存在或已被停用"); + } + AjaxResult ajax = AjaxResult.success(); + String systemToken = ""; + if (req.getLoginSign(sysApplyConfig.getPrivateKey())) { + systemToken = this.getAppIdLoginToken(req.getAppId(),sysApplyConfig); + } else { + throw new RuntimeException("签名值不合法"); + } + ajax.put("systemToken", systemToken); + return ajax; + } + + /** + * appId登录创建用户并模拟登录 + * + * @param appId 用户账号 + * @return token + */ + private String getAppIdLoginToken(String appId,SysApplyConfig sysApplyConfig) { + // 查询用户是否存在,不存在则保存 + SysUser sysUser = userService.selectUserByUserName(appId); + String password = Convert.toStr(System.currentTimeMillis()); + if (sysUser == null) { + sysUser = new SysUser(); + sysUser.setDeptId(sysApplyConfig.getDeptId()); + sysUser.setUserName(Convert.toStr(sysApplyConfig.getAppId())); + sysUser.setNickName(Convert.toStr(sysApplyConfig.getAppId())); + sysUser.setUserType(UserTypeEnum.APPLY.getCode()); + sysUser.setStatus("0"); + sysUser.setCreateBy("AppId登录创建用户"); + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + userService.insertUser(sysUser); + } else { + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser.setUpdateBy("AppId登录更新用户密码"); + userService.updateUser(sysUser); + } + return loginService.unifiedLogin(appId, password); + } + + /** + * 推送,修改班组信息 + * 限流规则[30秒内最多请求100次,限流策略IP] + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "推送班组信息") + @RateLimiter(time = 30, limitType = LimitType.IP) + @PostMapping("/v1/pushLabourGroup") + public AjaxResult pushLabourGroup(@Validated @RequestBody LabourSignetVo req) { + SysApplyConfig sysApplyConfig = redisCache.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG+super.getUsername()); + if(req.checkTimestamp()){ + try { + String result = AuthRsaUtils.decryptByPrivateKey(sysApplyConfig.getPrivateKey(),req.getSign()); + SurProjectAttendanceGroup surProjectAttendanceGroup = JSONObject.parseObject(result, SurProjectAttendanceGroup.class); + if(StringUtils.isNotEmpty(surProjectAttendanceGroup.getServerid())){ + // 查询当前班组是否已推送 + SurProjectAttendanceGroup searchModel = new SurProjectAttendanceGroup(); + searchModel.setAppId(sysApplyConfig.getAppId()); + searchModel.setServerid(surProjectAttendanceGroup.getServerid()); + List list = surProjectAttendanceGroupService.selectSurProjectAttendanceGroupList(searchModel); + if(CollectionUtils.isNotEmpty(list)){ + surProjectAttendanceGroup.setId(list.get(0).getId()); + surProjectAttendanceGroup.setCreateBy(list.get(0).getCreateBy()); + surProjectAttendanceGroup.setCreateTime(list.get(0).getCreateTime()); + surProjectAttendanceGroup.setUpdateBy(sysApplyConfig.getAppId()); + surProjectAttendanceGroup.setUpdateTime(new Date()); + surProjectAttendanceGroupService.updateSurProjectAttendanceGroup(surProjectAttendanceGroup); + }else{ + surProjectAttendanceGroup.setCreateBy(sysApplyConfig.getAppId()); + surProjectAttendanceGroup.setCreateTime(new Date()); + surProjectAttendanceGroupService.insertSurProjectAttendanceGroup(surProjectAttendanceGroup); + } + }else{ + throw new RuntimeException("数据解析异常"); + } + }catch (Exception e){ + throw new RuntimeException("签名解密异常"); + } + }else{ + throw new RuntimeException("数据已过期"); + } + return success(); + } + + /** + * 批量推送,修改班组列表信息 + * 限流规则[30秒内最多请求10次,限流策略IP] + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "推送班组列表信息") + @RateLimiter(time = 30, count = 10, limitType = LimitType.IP) + @PostMapping("/v1/pushLabourGroupList") + public AjaxResult pushLabourGroupList(@Validated @RequestBody LabourSignetVo req) { + SysApplyConfig sysApplyConfig = redisCache.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG+super.getUsername()); + if(req.checkTimestamp()){ + try { + // 失败集合 + List failServiceIdList = new ArrayList<>(); + // 保存集合 + List saveList = new ArrayList<>(); + String result = AuthRsaUtils.decryptByPrivateKey(sysApplyConfig.getPrivateKey(),req.getSign()); + List surProjectAttendanceGroupList = JSON.parseArray(result,SurProjectAttendanceGroup.class); + if(CollectionUtils.isNotEmpty(surProjectAttendanceGroupList)){ + // 批量删除已保存数据 + List params = new ArrayList<>(); + for(SurProjectAttendanceGroup surProjectAttendanceGroup:surProjectAttendanceGroupList){ + params.add(sysApplyConfig.getAppId()+"-"+surProjectAttendanceGroup.getServerid()); + } + surProjectAttendanceGroupService.deleteSurProjectAttendanceGroupByParams(params); + for(int i=0;i list = surProjectAttendanceUserService.selectSurProjectAttendanceUserList(searchModel); + if(CollectionUtils.isNotEmpty(list)){ + surProjectAttendanceUser.setId(list.get(0).getId()); + surProjectAttendanceUser.setCreateBy(list.get(0).getCreateBy()); + surProjectAttendanceUser.setCreateTime(list.get(0).getCreateTime()); + surProjectAttendanceUser.setUpdateBy(sysApplyConfig.getAppId()); + surProjectAttendanceUser.setUpdateTime(new Date()); + surProjectAttendanceUserService.updateSurProjectAttendanceUser(surProjectAttendanceUser); + }else{ + surProjectAttendanceUser.setCreateBy(sysApplyConfig.getAppId()); + surProjectAttendanceUser.setCreateTime(new Date()); + surProjectAttendanceUserService.insertSurProjectAttendanceUser(surProjectAttendanceUser); + } + }else{ + throw new RuntimeException("数据解析异常"); + } + }catch (Exception e){ + throw new RuntimeException("签名解密异常"); + } + }else{ + throw new RuntimeException("数据已过期"); + } + return success(); + } + + /** + * 批量推送,修改人员信息 + * 限流规则[30秒内最多请求10次,限流策略IP] + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "推送人员信息") + @RateLimiter(time = 30, count = 10, limitType = LimitType.IP) + @PostMapping("/v1/pushLabourUserList") + public AjaxResult pushLabourUserList(@Validated @RequestBody LabourSignetVo req) { + SysApplyConfig sysApplyConfig = redisCache.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG+super.getUsername()); + if(req.checkTimestamp()){ + try { + // 失败集合 + List failServiceIdList = new ArrayList<>(); + // 保存集合 + List saveList = new ArrayList<>(); + String result = AuthRsaUtils.decryptByPrivateKey(sysApplyConfig.getPrivateKey(),req.getSign()); + List surProjectAttendanceUserList = JSON.parseArray(result,SurProjectAttendanceUser.class); + if(CollectionUtils.isNotEmpty(surProjectAttendanceUserList)){ + // 批量删除已保存数据 + List params = new ArrayList<>(); + for(SurProjectAttendanceUser surProjectAttendanceUser:surProjectAttendanceUserList){ + params.add(sysApplyConfig.getAppId()+"-"+surProjectAttendanceUser.getWorkerId()); + } + surProjectAttendanceUserService.deleteSurProjectAttendanceUserByParams(params); + for(int i=0;i list = surProjectAttendanceDataService.selectSurProjectAttendanceDataList(searchModel); + if(CollectionUtils.isNotEmpty(list)){ + surProjectAttendanceData.setId(list.get(0).getId()); + surProjectAttendanceData.setCreateBy(list.get(0).getCreateBy()); + surProjectAttendanceData.setCreateTime(list.get(0).getCreateTime()); + surProjectAttendanceData.setUpdateBy(sysApplyConfig.getAppId()); + surProjectAttendanceData.setUpdateTime(new Date()); + surProjectAttendanceDataService.updateSurProjectAttendanceData(surProjectAttendanceData); + }else{ + surProjectAttendanceData.setCreateBy(sysApplyConfig.getAppId()); + surProjectAttendanceData.setCreateTime(new Date()); + surProjectAttendanceDataService.insertSurProjectAttendanceData(surProjectAttendanceData); + } + }else{ + throw new RuntimeException("数据解析异常"); + } + }catch (Exception e){ + throw new RuntimeException("签名解密异常"); + } + }else{ + throw new RuntimeException("数据已过期"); + } + return success(); + } + + /** + * 批量推送,修改班组人员考勤信息 + * 限流规则[30秒内最多请求10次,限流策略IP] + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "推送班组人员考勤信息") + @RateLimiter(time = 30, count = 10, limitType = LimitType.IP) + @PostMapping("/v1/pushLabourDataList") + public AjaxResult pushLabourDataList(@Validated @RequestBody LabourSignetVo req) { + SysApplyConfig sysApplyConfig = redisCache.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG+super.getUsername()); + if(req.checkTimestamp()){ + try { + // 失败集合 + List failServiceIdList = new ArrayList<>(); + // 保存集合 + List saveList = new ArrayList<>(); + String result = AuthRsaUtils.decryptByPrivateKey(sysApplyConfig.getPrivateKey(),req.getSign()); + List surProjectAttendanceDataList = JSON.parseArray(result,SurProjectAttendanceData.class); + if(CollectionUtils.isNotEmpty(surProjectAttendanceDataList)){ + // 批量删除已保存数据 + List params = new ArrayList<>(); + for(SurProjectAttendanceData surProjectAttendanceData:surProjectAttendanceDataList){ + params.add(sysApplyConfig.getAppId()+"-"+surProjectAttendanceData.getServerid()+"-"+surProjectAttendanceData.getWorkerId()); + } + surProjectAttendanceDataService.deleteSurProjectAttendanceDataByParams(params); + for(int i=0;i list = sysApplyConfigService.selectSysApplyConfigList(sysApplyConfig); + return getDataTable(list); + } + + /** + * 导出系统应用注册列表 + */ + @PreAuthorize("@ss.hasPermi('system:applyConfig:export')") + @Log(title = "系统应用注册", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysApplyConfig sysApplyConfig) + { + List list = sysApplyConfigService.selectSysApplyConfigList(sysApplyConfig); + ExcelUtil util = new ExcelUtil(SysApplyConfig.class); + util.exportExcel(response, list, "系统应用注册数据"); + } + + /** + * 获取系统应用注册详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:applyConfig:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(sysApplyConfigService.selectSysApplyConfigById(id)); + } + + /** + * 新增系统应用注册 + */ + @PreAuthorize("@ss.hasPermi('system:applyConfig:add')") + @Log(title = "系统应用注册", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysApplyConfig sysApplyConfig) + { + return toAjax(sysApplyConfigService.insertSysApplyConfig(sysApplyConfig)); + } + + /** + * 修改系统应用注册 + */ + @PreAuthorize("@ss.hasPermi('system:applyConfig:edit')") + @Log(title = "系统应用注册", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysApplyConfig sysApplyConfig) + { + return toAjax(sysApplyConfigService.updateSysApplyConfig(sysApplyConfig)); + } + + /** + * 删除系统应用注册 + */ + @PreAuthorize("@ss.hasPermi('system:applyConfig:remove')") + @Log(title = "系统应用注册", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(sysApplyConfigService.deleteSysApplyConfigByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 99cb72ac..0a4cb247 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -1,3 +1,37 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.8.6 + # 版权年份 + copyrightYear: 2023 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) + profile: D:/data/uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数字计算 char 字符验证 + captchaType: math +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 8090 + servlet: + # 应用的访问路径 + context-path: /jhapi + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 + # 数据源配置 spring: datasource: @@ -6,7 +40,7 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://cd-cynosdbmysql-grp-9rqrhxsm.sql.tencentcdb.com:27981/yanzhu_jh?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8 + url: jdbc:mysql://cd-cynosdbmysql-grp-9rqrhxsm.sql.tencentcdb.com:27981/yanzhu_jh_test?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8 username: root password: Sxyanzhu@cf # 从库数据源 @@ -58,4 +92,26 @@ spring: merge-sql: true wall: config: - multi-statement-allow: true \ No newline at end of file + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 127.0.0.1 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 0 + # 密码 + password: 123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml new file mode 100644 index 00000000..116ad2a6 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-test.yml @@ -0,0 +1,117 @@ +# 项目相关配置 +ruoyi: + # 名称 + name: RuoYi + # 版本 + version: 3.8.6 + # 版权年份 + copyrightYear: 2023 + # 实例演示开关 + demoEnabled: true + # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) + profile: /data/uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数字计算 char 字符验证 + captchaType: math +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 8091 + servlet: + # 应用的访问路径 + context-path: /jhapi + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 + +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://cd-cynosdbmysql-grp-9rqrhxsm.sql.tencentcdb.com:27981/yanzhu_jh_test?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8 + username: root + password: Sxyanzhu@cf + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + # redis 配置 + redis: + # 地址 + host: 127.0.0.1 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 1 + # 密码 + password: 123456 + # 连接超时时间 + timeout: 10s + lettuce: + pool: + # 连接池中的最小空闲连接 + min-idle: 0 + # 连接池中的最大空闲连接 + max-idle: 8 + # 连接池的最大数据库连接数 + max-active: 8 + # #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: -1ms \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 6ba332ab..f449f345 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -1,38 +1,3 @@ -# 项目相关配置 -ruoyi: - # 名称 - name: RuoYi - # 版本 - version: 3.8.6 - # 版权年份 - copyrightYear: 2023 - # 实例演示开关 - demoEnabled: true - # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) - profile: D:/data/uploadPath - # 获取ip地址开关 - addressEnabled: false - # 验证码类型 math 数字计算 char 字符验证 - captchaType: math - -# 开发环境配置 -server: - # 服务器的HTTP端口,默认为8080 - port: 8090 - servlet: - # 应用的访问路径 - context-path: /jhapi - tomcat: - # tomcat的URI编码 - uri-encoding: UTF-8 - # 连接数满后的排队数,默认为100 - accept-count: 1000 - threads: - # tomcat最大线程数,默认为200 - max: 800 - # Tomcat启动初始化的线程数,默认值10 - min-spare: 100 - # 日志配置 logging: level: @@ -68,28 +33,6 @@ spring: restart: # 热部署开关 enabled: true - # redis 配置 - redis: - # 地址 - host: 127.0.0.1 - # 端口,默认为6379 - port: 6379 - # 数据库索引 - database: 0 - # 密码 - password: 123456 - # 连接超时时间 - timeout: 10s - lettuce: - pool: - # 连接池中的最小空闲连接 - min-idle: 0 - # 连接池中的最大空闲连接 - max-idle: 8 - # 连接池的最大数据库连接数 - max-active: 8 - # #连接池最大阻塞等待时间(使用负值表示没有限制) - max-wait: -1ms # token配置 token: diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index ddce0f76..7297008c 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -157,6 +157,12 @@ 7.2.12 + + org.projectlombok + lombok + true + + \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 0080343a..38f01c98 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -41,4 +41,9 @@ public class CacheConstants * 登录账户密码错误次数 redis key */ public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; + + /** + * yanzhu系统应用注册 redis key + */ + public static final String YANZHU_SYSTEM_CONFIG = "yanzhu_system_config:"; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 53ad695a..4622c14d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -37,6 +37,9 @@ public class SysUser extends BaseEntity @Excel(name = "用户名称") private String nickName; + /** 用户类型 */ + private String userType; + /** 用户邮箱 */ @Excel(name = "用户邮箱") private String email; @@ -297,6 +300,14 @@ public class SysUser extends BaseEntity this.roleId = roleId; } + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserTypeEnum.java new file mode 100644 index 00000000..7b2dd2c8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserTypeEnum.java @@ -0,0 +1,30 @@ +package com.ruoyi.common.enums; + +/** + * 用户类型枚举 + * @author JiangYuQi + */ +public enum UserTypeEnum { + + SYSTEM("00","系统用户"), + APPLY("99","应用用户"); + + private final String code; + private final String info; + + UserTypeEnum(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/AuthRsaUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AuthRsaUtils.java new file mode 100644 index 00000000..16ff071a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AuthRsaUtils.java @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2016-2021. 西安屹城兴软件服务 All rights reserved. + */ +package com.ruoyi.common.utils; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Cipher; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +/** + * RSA加密解密 + **/ +public class AuthRsaUtils { + + // Rsa 私钥 + public static String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIcMS8aHgaLNdkABhwxcgsdAGu" + + "Z1X7ZKg4EjshM4376qh4w3mnjxnY4aJCdvQVZVhLpL8cE9pje7veZ16BbLTFATB0/K34DaUterGVUv7p1NfwUxSILKaIZHAyRp9N" + + "jLyFBVIY2fnT+1ZT9L7Ag6D1069AIxIcQw3VRt8HUNd0lBAgMBAAECgYBLPoOd2vRU5EuFgBRhw82t/L7ANxeb9spskpnucdrgXh" + + "1l97ket+iEO3Z3blqmIsHwFs5dT98j4Hv/QySMRrt+dkI2WKUY5ZNKVvpbbZJoNJXd1mF3SyfsRTM73l8fRgJLfhvE+ufV2+dBFM" + + "Nd8LsH8uTJo0aowHwgEXQ3ErZAAQJBAMh/FDQe/9Ku+1U67ABdifYl4CskfKNdd9srjYBBjw6NFmTZp3OEHxoWvTWDJMMC0uUBt5" + + "BV3Sx3+230dBeAQkECQQCsbvm+iQYMYpVkHe0RGU3nEckaehrqCJXlviH7c6kM4l/taV495mCxwvNwNUizV5uBeLEyKB2RPLAj7U" + + "b/10cBAkEAwIFrl6PQA60o+qupX6xwQ5wYQbQ1y/F5nEGUCnpn7hO/VbO52OsZpcYBg7jYejli3qkoY/hddU36ZpeZQ9tNQQJBAI" + + "JJP661fbpx6orBCdS3l+MVzyuQQzG91vTGGosRsxOnH/AUgz6mCT2HHcUUnZ/UfAzxkoFhSiXpAvXCXLkGggECQCWKhootNjqoz6" + + "txZheR5cpZTHNpAUwSSuqpFxK+rnv9PkEADZyaJKgsW4pHHtcUqUTBYQElDsSWOia86MubuyI="; + + // Rsa 公钥 + public static String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHDEvGh4GizXZAAYcMXILHQBrmdV+2SoOBI7I" + + "TON++qoeMN5p48Z2OGiQnb0FWVYS6S/HBPaY3u73mdegWy0xQEwdPyt+A2lLXqxlVL+6dTX8FMUiCymiGRwMkafTYy8hQVSGNn50" + + "/tWU/S+wIOg9dOvQCMSHEMN1UbfB1DXdJQQIDAQAB"; + + /** + * 私钥解密 + * + * @param text 待解密的文本 + * @return 解密后的文本 + */ + public static String decryptByPrivateKey(String text) throws Exception { + return decryptByPrivateKey(privateKey, text); + } + + /** + * 公钥解密 + * + * @param publicKeyString 公钥 + * @param text 待解密的信息 + * @return 解密后的文本 + */ + public static String decryptByPublicKey(String publicKeyString, String text) throws Exception { + X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, publicKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + return new String(result); + } + + /** + * 私钥加密 + * + * @param privateKeyString 私钥 + * @param text 待加密的信息 + * @return 加密后的文本 + */ + public static String encryptByPrivateKey(String privateKeyString, String text) throws Exception { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(text.getBytes()); + return Base64.encodeBase64String(result); + } + + /** + * 私钥解密 + * + * @param privateKeyString 私钥 + * @param text 待解密的文本 + * @return 解密后的文本 + */ + public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + return new String(result); + } + + /** + * 公钥加密 + * + * @param publicKeyString 公钥 + * @param text 待加密的文本 + * @return 加密后的文本 + */ + public static String encryptByPublicKey(String publicKeyString, String text) throws Exception { + X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] result = cipher.doFinal(text.getBytes()); + return Base64.encodeBase64String(result); + } + + /** + * 构建RSA密钥对 + * + * @return 生成后的公私钥信息 + */ + public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(1024); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); + String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded()); + String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded()); + return new RsaKeyPair(publicKeyString, privateKeyString); + } + + /** + * RSA密钥对对象 + */ + public static class RsaKeyPair { + private final String publicKey; + private final String privateKey; + + public RsaKeyPair(String publicKey, String privateKey) { + this.publicKey = publicKey; + this.privateKey = privateKey; + } + + public String getPublicKey() { + return publicKey; + } + + public String getPrivateKey() { + return privateKey; + } + } + + public static void main(String[] args) { +// try { +// RsaKeyPair rsaKeyPair = generateKeyPair(); +// System.out.println("私钥:" + rsaKeyPair.getPrivateKey()); +// System.out.println("公钥:" + rsaKeyPair.getPublicKey()); +// } catch (NoSuchAlgorithmException e) { +// throw new RuntimeException(e); +// } + + try { + String timestamp = String.valueOf(System.currentTimeMillis()); + String str = "oacsry" + timestamp; + System.out.println("明文信息:" + str); + // 公钥加密->私钥解密 + String encryptByPublicKeyStr = encryptByPublicKey(publicKey, str); + System.out.println("公钥加密:" + encryptByPublicKeyStr); + String decryptByPrivateKeyStr = decryptByPrivateKey(privateKey, encryptByPublicKeyStr); + System.out.println("私钥解密:" + decryptByPrivateKeyStr); + + System.out.println("***********************************"); + + // 私钥加密->公钥解密 + String encryptByPrivateKeyStr = encryptByPrivateKey(privateKey, str); + System.out.println("私钥加密:" + encryptByPrivateKeyStr); + String decryptByPublicKeyStr = decryptByPublicKey(publicKey, encryptByPrivateKeyStr); + System.out.println("公钥解密:" + decryptByPublicKeyStr); + } catch (Exception e) { + throw new RuntimeException(e); + } + + + } + +} diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowDefinitionController.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowDefinitionController.java index 22ad14af..77d814cf 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowDefinitionController.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowDefinitionController.java @@ -143,7 +143,6 @@ public class FlowDefinitionController extends BaseController { } - @ApiOperation(value = "保存流程设计器内的xml文件") @PostMapping("/save") public AjaxResult save(@RequestBody FlowSaveXmlVo vo) { @@ -167,7 +166,6 @@ public class FlowDefinitionController extends BaseController { return AjaxResult.success("导入成功"); } - @ApiOperation(value = "发起流程") @Log(title = "发起流程", businessType = BusinessType.INSERT) @PostMapping("/start/{procDefId}") diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowInstanceController.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowInstanceController.java index 15308709..19e9fec1 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowInstanceController.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/FlowInstanceController.java @@ -37,7 +37,6 @@ public class FlowInstanceController { } - @ApiOperation(value = "激活或挂起流程实例") @PostMapping(value = "/updateState") public AjaxResult updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state, diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/SysFormController.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/SysFormController.java index 92ce54fb..8be127cd 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/SysFormController.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/controller/SysFormController.java @@ -32,6 +32,7 @@ import com.ruoyi.common.core.page.TableDataInfo; @RestController @RequestMapping("/flowable/form") public class SysFormController extends BaseController { + @Autowired private ISysFormService SysFormService; @@ -105,10 +106,10 @@ public class SysFormController extends BaseController { return toAjax(SysFormService.deleteSysFormByIds(formIds)); } - /** * 挂载流程表单 */ + @PreAuthorize("@ss.hasPermi('flowable:form:edit')") @Log(title = "流程表单", businessType = BusinessType.INSERT) @PostMapping("/addDeployForm") public AjaxResult addDeployForm(@RequestBody SysDeployForm sysDeployForm) { diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 06c185a7..575df991 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -100,6 +100,37 @@ public class SysLoginService return tokenService.createToken(loginUser); } + /** + * 统一认证登录 + * + * @param username 用户名 + * @param password 密码 + */ + public String unifiedLogin(String username, String password) { + // 用户验证 + Authentication authentication = null; + try { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } catch (Exception e) { + if (e instanceof BadCredentialsException) { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } else { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } finally { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser)authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + return tokenService.createToken(loginUser); + } + /** * 校验验证码 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysApplyConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysApplyConfig.java new file mode 100644 index 00000000..f87d24be --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysApplyConfig.java @@ -0,0 +1,125 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 系统应用注册对象 sys_apply_config + * + * @author JiangYuQi + * @date 2024-01-13 + */ +public class SysApplyConfig extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 应用主键 */ + @Excel(name = "应用主键") + private String appId; + + /** 公钥 */ + private String publicKey; + + /** 私钥 */ + private String privateKey; + + /** 项目主键 */ + @Excel(name = "项目主键") + private Long projectId; + + /** 部门主键 */ + @Excel(name = "部门主键") + private Long deptId; + + /** 是否删除 */ + @Excel(name = "是否删除") + private String isDel; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setAppId(String appId) + { + this.appId = appId; + } + + public String getAppId() + { + return appId; + } + + public void setPublicKey(String publicKey) + { + this.publicKey = publicKey; + } + + public String getPublicKey() + { + return publicKey; + } + public void setPrivateKey(String privateKey) + { + this.privateKey = privateKey; + } + + public String getPrivateKey() + { + return privateKey; + } + public void setProjectId(Long projectId) + { + this.projectId = projectId; + } + + public Long getProjectId() + { + return projectId; + } + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getDeptId() + { + return deptId; + } + public void setIsDel(String isDel) + { + this.isDel = isDel; + } + + public String getIsDel() + { + return isDel; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("appId", getAppId()) + .append("publicKey", getPublicKey()) + .append("privateKey", getPrivateKey()) + .append("projectId", getProjectId()) + .append("deptId", getDeptId()) + .append("isDel", getIsDel()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysApplyConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysApplyConfigMapper.java new file mode 100644 index 00000000..69985868 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysApplyConfigMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysApplyConfig; + +/** + * 系统应用注册Mapper接口 + * + * @author JiangYuQi + * @date 2024-01-13 + */ +public interface SysApplyConfigMapper +{ + /** + * 查询系统应用注册 + * + * @param id 系统应用注册主键 + * @return 系统应用注册 + */ + public SysApplyConfig selectSysApplyConfigById(Long id); + + /** + * 查询系统应用注册列表 + * + * @param sysApplyConfig 系统应用注册 + * @return 系统应用注册集合 + */ + public List selectSysApplyConfigList(SysApplyConfig sysApplyConfig); + + /** + * 新增系统应用注册 + * + * @param sysApplyConfig 系统应用注册 + * @return 结果 + */ + public int insertSysApplyConfig(SysApplyConfig sysApplyConfig); + + /** + * 修改系统应用注册 + * + * @param sysApplyConfig 系统应用注册 + * @return 结果 + */ + public int updateSysApplyConfig(SysApplyConfig sysApplyConfig); + + /** + * 删除系统应用注册 + * + * @param id 系统应用注册主键 + * @return 结果 + */ + public int deleteSysApplyConfigById(Long id); + + /** + * 批量删除系统应用注册 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSysApplyConfigByIds(Long[] ids); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysApplyConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysApplyConfigService.java new file mode 100644 index 00000000..bc75e46e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysApplyConfigService.java @@ -0,0 +1,66 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.SysApplyConfig; + +/** + * 系统应用注册Service接口 + * + * @author JiangYuQi + * @date 2024-01-13 + */ +public interface ISysApplyConfigService +{ + /** + * 查询系统应用注册 + * + * @param id 系统应用注册主键 + * @return 系统应用注册 + */ + public SysApplyConfig selectSysApplyConfigById(Long id); + + /** + * 查询系统应用注册列表 + * + * @param sysApplyConfig 系统应用注册 + * @return 系统应用注册集合 + */ + public List selectSysApplyConfigList(SysApplyConfig sysApplyConfig); + + /** + * 新增系统应用注册 + * + * @param sysApplyConfig 系统应用注册 + * @return 结果 + */ + public int insertSysApplyConfig(SysApplyConfig sysApplyConfig); + + /** + * 修改系统应用注册 + * + * @param sysApplyConfig 系统应用注册 + * @return 结果 + */ + public int updateSysApplyConfig(SysApplyConfig sysApplyConfig); + + /** + * 批量删除系统应用注册 + * + * @param ids 需要删除的系统应用注册主键集合 + * @return 结果 + */ + public int deleteSysApplyConfigByIds(Long[] ids); + + /** + * 删除系统应用注册信息 + * + * @param id 系统应用注册主键 + * @return 结果 + */ + public int deleteSysApplyConfigById(Long id); + + /** + * 加载注册应用 + */ + public void loadingSysApplyConfigCache(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysApplyConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysApplyConfigServiceImpl.java new file mode 100644 index 00000000..232d1fd0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysApplyConfigServiceImpl.java @@ -0,0 +1,147 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.SysApplyConfigMapper; +import com.ruoyi.system.domain.SysApplyConfig; +import com.ruoyi.system.service.ISysApplyConfigService; +import com.ruoyi.common.utils.SecurityUtils; + +import javax.annotation.PostConstruct; + +/** + * 系统应用注册Service业务层处理 + * + * @author JiangYuQi + * @date 2024-01-13 + */ +@Service +public class SysApplyConfigServiceImpl implements ISysApplyConfigService +{ + @Autowired + private RedisCache redisCache; + + @Autowired + private SysApplyConfigMapper sysApplyConfigMapper; + + /** + * 项目启动时,初始化注册应用到缓存 + */ + @PostConstruct + public void init() + { + loadingSysApplyConfigCache(); + } + + /** + * 加载注册应用 + */ + @Override + public void loadingSysApplyConfigCache() + { + List configList = sysApplyConfigMapper.selectSysApplyConfigList(new SysApplyConfig()); + if(CollectionUtils.isNotEmpty(configList)){ + for (SysApplyConfig sysApplyConfig : configList) { + redisCache.setCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG + sysApplyConfig.getAppId(), sysApplyConfig); + } + } + } + + /** + * 查询系统应用注册 + * + * @param id 系统应用注册主键 + * @return 系统应用注册 + */ + @Override + public SysApplyConfig selectSysApplyConfigById(Long id) + { + return sysApplyConfigMapper.selectSysApplyConfigById(id); + } + + /** + * 查询系统应用注册列表 + * + * @param sysApplyConfig 系统应用注册 + * @return 系统应用注册 + */ + @Override + public List selectSysApplyConfigList(SysApplyConfig sysApplyConfig) + { + return sysApplyConfigMapper.selectSysApplyConfigList(sysApplyConfig); + } + + /** + * 新增系统应用注册 + * + * @param sysApplyConfig 系统应用注册 + * @return 结果 + */ + @Override + public int insertSysApplyConfig(SysApplyConfig sysApplyConfig) + { + sysApplyConfig.setCreateBy(SecurityUtils.getUsername()); + sysApplyConfig.setCreateTime(DateUtils.getNowDate()); + int res = sysApplyConfigMapper.insertSysApplyConfig(sysApplyConfig); + if(res>0){ + this.loadingSysApplyConfigCache(); + } + return res; + } + + /** + * 修改系统应用注册 + * + * @param sysApplyConfig 系统应用注册 + * @return 结果 + */ + @Override + public int updateSysApplyConfig(SysApplyConfig sysApplyConfig) + { + sysApplyConfig.setUpdateBy(SecurityUtils.getUsername()); + sysApplyConfig.setUpdateTime(DateUtils.getNowDate()); + int res = sysApplyConfigMapper.updateSysApplyConfig(sysApplyConfig); + if(res>0){ + this.loadingSysApplyConfigCache(); + } + return res; + } + + /** + * 批量删除系统应用注册 + * + * @param ids 需要删除的系统应用注册主键 + * @return 结果 + */ + @Override + public int deleteSysApplyConfigByIds(Long[] ids) + { + int res = sysApplyConfigMapper.deleteSysApplyConfigByIds(ids); + if(res>0){ + this.loadingSysApplyConfigCache(); + } + return res; + } + + /** + * 删除系统应用注册信息 + * + * @param id 系统应用注册主键 + * @return 结果 + */ + @Override + public int deleteSysApplyConfigById(Long id) + { + int res = sysApplyConfigMapper.deleteSysApplyConfigById(id); + if(res>0){ + this.loadingSysApplyConfigCache(); + } + return res; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 7121d40f..d06059a4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -4,6 +4,12 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import javax.validation.Validator; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.system.domain.SysApplyConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -564,4 +570,5 @@ public class SysUserServiceImpl implements ISysUserService public List selectUserRoles(String phonenumber) { return userRoleMapper.selectUserRoles(phonenumber); } + } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysApplyConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysApplyConfigMapper.xml new file mode 100644 index 00000000..41fb60b1 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysApplyConfigMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + select id, app_id, public_key, private_key, project_id, dept_id, is_del, create_by, create_time, update_by, update_time, remark from sys_apply_config + + + + + + + + insert into sys_apply_config + + id, + app_id, + public_key, + private_key, + project_id, + dept_id, + is_del, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{id}, + #{appId}, + #{publicKey}, + #{privateKey}, + #{projectId}, + #{deptId}, + #{isDel}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update sys_apply_config + + app_id = #{appId}, + public_key = #{publicKey}, + private_key = #{privateKey}, + project_id = #{projectId}, + dept_id = #{deptId}, + is_del = #{isDel}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from sys_apply_config where id = #{id} + + + + delete from sys_apply_config where id in + + #{id} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index f52fa447..7ff6bd99 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -84,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) )) + AND user_type != '99' ${params.dataScope} @@ -101,6 +102,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND u.phonenumber like concat('%', #{phonenumber}, '%') + AND user_type != '99' ${params.dataScope} @@ -119,6 +121,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND u.phonenumber like concat('%', #{phonenumber}, '%') + AND user_type != '99' ${params.dataScope} @@ -159,6 +162,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status, create_by, remark, + user_type, create_time )values( #{userId}, @@ -173,6 +177,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{createBy}, #{remark}, + #{userType}, sysdate() ) diff --git a/ruoyi-ui/src/api/system/applyConfig.js b/ruoyi-ui/src/api/system/applyConfig.js new file mode 100644 index 00000000..e286dbaf --- /dev/null +++ b/ruoyi-ui/src/api/system/applyConfig.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询系统应用注册列表 +export function listApplyConfig(query) { + return request({ + url: '/system/applyConfig/list', + method: 'get', + params: query + }) +} + +// 查询系统应用注册详细 +export function getApplyConfig(id) { + return request({ + url: '/system/applyConfig/' + id, + method: 'get' + }) +} + +// 新增系统应用注册 +export function addApplyConfig(data) { + return request({ + url: '/system/applyConfig', + method: 'post', + data: data + }) +} + +// 修改系统应用注册 +export function updateApplyConfig(data) { + return request({ + url: '/system/applyConfig', + method: 'put', + data: data + }) +} + +// 删除系统应用注册 +export function delApplyConfig(id) { + return request({ + url: '/system/applyConfig/' + id, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/views/system/applyConfig/index.vue b/ruoyi-ui/src/views/system/applyConfig/index.vue new file mode 100644 index 00000000..5020cfdd --- /dev/null +++ b/ruoyi-ui/src/views/system/applyConfig/index.vue @@ -0,0 +1,322 @@ + + + diff --git a/yanzhu-bigscreen/src/main/java/com/yanzhu/jh/bigscreen/web/controller/DeptController.java b/yanzhu-bigscreen/src/main/java/com/yanzhu/jh/bigscreen/web/controller/DeptController.java index 4b64fdf2..7bb978da 100644 --- a/yanzhu-bigscreen/src/main/java/com/yanzhu/jh/bigscreen/web/controller/DeptController.java +++ b/yanzhu-bigscreen/src/main/java/com/yanzhu/jh/bigscreen/web/controller/DeptController.java @@ -26,6 +26,7 @@ public class DeptController extends BaseController { @Autowired private ISysDeptService sysDeptService; + @GetMapping("/list") public AjaxResult list(){ long roleId=SecurityUtils.getRoleId(); diff --git a/yanzhu-jh/pom.xml b/yanzhu-jh/pom.xml index 97f68532..6a518b59 100644 --- a/yanzhu-jh/pom.xml +++ b/yanzhu-jh/pom.xml @@ -22,6 +22,7 @@ hutool-poi ${hutool.version} + \ No newline at end of file diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceData.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceData.java index 7a14261e..41635497 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceData.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceData.java @@ -24,17 +24,21 @@ public class SurProjectAttendanceData extends BaseEntity @Excel(name = "配置项ID,可以获取项目ID和总包ID") private Long cfgid; + /** 注册应用ID */ + @Excel(name = "注册应用ID") + private String appId; + /** 厂商编号参考字典attendance_vendors */ @Excel(name = "厂商编号参考字典attendance_vendors") private String vendorsCode; /** 服务端ID */ @Excel(name = "服务端ID") - private Long serverid; + private String serverid; /** 工人Id */ @Excel(name = "工人Id") - private Long workerId; + private String workerId; /** 进门还是出门E进,L出 */ @Excel(name = "进门还是出门E进,L出") @@ -98,8 +102,8 @@ public class SurProjectAttendanceData extends BaseEntity public static SurProjectAttendanceData createFromHuazhu(JSONObject j) { SurProjectAttendanceData d=new SurProjectAttendanceData(); d.vendorsCode="huazhu"; - d.serverid=j.getLongValue("id",0); - d.workerId=j.getLongValue("labourWorkerId",0); + d.serverid=j.getString("id"); + d.workerId=j.getString("labourWorkerId"); d.attendanceType=j.getLongValue("inOrOut",1l)==1l?"E":"L"; long recordTime=j.getLongValue("recordTime",0); if(recordTime>0){ @@ -152,8 +156,8 @@ public class SurProjectAttendanceData extends BaseEntity SurProjectAttendanceData d=new SurProjectAttendanceData(); d.attendanceTime=json.getString("time"); d.attendanceType=json.getString("type"); - d.serverid=json.getLong("id"); - d.workerId=json.getLong("workerId"); + d.serverid=json.getString("id"); + d.workerId=json.getString("workerId"); d.identification=json.getString("identification"); d.teamId=json.getLong("teamId"); d.workTypeCode=json.getString("workerTypeId"); @@ -196,21 +200,21 @@ public class SurProjectAttendanceData extends BaseEntity { return vendorsCode; } - public void setServerid(Long serverid) + public void setServerid(String serverid) { this.serverid = serverid; } - public Long getServerid() + public String getServerid() { return serverid; } - public void setWorkerId(Long workerId) + public void setWorkerId(String workerId) { this.workerId = workerId; } - public Long getWorkerId() + public String getWorkerId() { return workerId; } @@ -341,6 +345,14 @@ public class SurProjectAttendanceData extends BaseEntity return isDel; } + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java index 5a9439d6..531af210 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceGroup.java @@ -26,9 +26,13 @@ public class SurProjectAttendanceGroup extends BaseEntity @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") private Long cfgid; + /** 注册应用ID */ + @Excel(name = "注册应用ID") + private String appId; + /** 服务器主键id */ @Excel(name = "服务器主键id") - private Long serverid; + private String serverid; /** 营业执照号 */ @Excel(name = "营业执照号") @@ -108,7 +112,7 @@ public class SurProjectAttendanceGroup extends BaseEntity public static SurProjectAttendanceGroup create(JSONObject json) { SurProjectAttendanceGroup g=new SurProjectAttendanceGroup(); - g.serverid=json.getLong("id"); + g.serverid=json.getString("id"); g.bizLicense=json.getString("bizLicense"); g.companyCode=json.getString("companyCode"); g.companyId=json.getLong("companyId"); @@ -150,12 +154,12 @@ public class SurProjectAttendanceGroup extends BaseEntity { return cfgid; } - public void setServerid(Long serverid) + public void setServerid(String serverid) { this.serverid = serverid; } - public Long getServerid() + public String getServerid() { return serverid; } @@ -331,6 +335,14 @@ public class SurProjectAttendanceGroup extends BaseEntity return isDel; } + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java index 242ce817..b020c4b1 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectAttendanceUser.java @@ -26,13 +26,17 @@ public class SurProjectAttendanceUser extends BaseEntity @Excel(name = "配置项ID,可以获取项目ID和总包ID") private Long cfgid; + /** 注册应用ID */ + @Excel(name = "注册应用ID") + private String appId; + /** 厂商编号参考字典attendance_vendors */ @Excel(name = "厂商编号参考字典attendance_vendors") private String vendorsCode; /** 工人id */ @Excel(name = "工人id") - private Long workerId; + private String workerId; /** 项目工人履历id对于旧劳务,这个字段相当于工人的projectWorkerId,管理人员的registerManagerId */ @Excel(name = "项目工人履历id对于旧劳务,这个字段相当于工人的projectWorkerId,管理人员的registerManagerId") @@ -159,7 +163,7 @@ public class SurProjectAttendanceUser extends BaseEntity public static SurProjectAttendanceUser createFromHuazhu(JSONObject j) { SurProjectAttendanceUser u=new SurProjectAttendanceUser(); - u.workerId=j.getLongValue("id",0); + u.workerId=j.getString("id"); u.name=j.getString("name"); u.ethnic=j.getString("nationalName"); u.nativePlace=j.getString("provinceName")+j.getString("cityName"); @@ -254,7 +258,7 @@ public class SurProjectAttendanceUser extends BaseEntity public static SurProjectAttendanceUser create(JSONObject json) { SurProjectAttendanceUser u=new SurProjectAttendanceUser(); - u.workerId=json.getLongValue("workerId",0); + u.workerId=json.getString("workerId"); u.laborWorkerId=json.getLongValue("laborWorkerId",0); u.workerCategory=json.getLongValue("workerCategory",0); u.qrCode=json.getLongValue("qrCode",0); @@ -312,12 +316,12 @@ public class SurProjectAttendanceUser extends BaseEntity { return vendorsCode; } - public void setWorkerId(Long workerId) + public void setWorkerId(String workerId) { this.workerId = workerId; } - public Long getWorkerId() + public String getWorkerId() { return workerId; } @@ -592,6 +596,14 @@ public class SurProjectAttendanceUser extends BaseEntity return isDel; } + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceDataMapper.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceDataMapper.java index f037fb58..5600fb06 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceDataMapper.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceDataMapper.java @@ -59,7 +59,23 @@ public interface SurProjectAttendanceDataMapper */ public int deleteSurProjectAttendanceDataByIds(Long[] ids); - public long getLastServerId(SurProjectAttendanceData where); + /** + * 批量删除劳务实名制管理 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + public int deleteSurProjectAttendanceDataByParams(List list); + + /** + * 批量新增劳务实名制考勤管理 + * + * @param SurProjectAttendanceDataList 劳务实名制考勤管理列表 + * @return 结果 + */ + public int batchSurProjectAttendanceData(List SurProjectAttendanceDataList); + + public String getLastServerId(SurProjectAttendanceData where); List groupByComany(SurProjectAttendanceData where); diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceGroupMapper.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceGroupMapper.java index 4921bb11..16a474af 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceGroupMapper.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceGroupMapper.java @@ -58,4 +58,20 @@ public interface SurProjectAttendanceGroupMapper * @return 结果 */ public int deleteSurProjectAttendanceGroupByIds(Long[] ids); + + /** + * 批量删除广联达班组信息 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + public int deleteSurProjectAttendanceGroupByParams(List list); + + /** + * 批量新增广联达班组信息 + * + * @param surProjectAttendanceGroupList 广联达班组信息列表 + * @return 结果 + */ + public int batchSurProjectAttendanceGroup(List surProjectAttendanceGroupList); } diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceUserMapper.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceUserMapper.java index b5da34ed..f1386a58 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceUserMapper.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectAttendanceUserMapper.java @@ -61,6 +61,22 @@ public interface SurProjectAttendanceUserMapper */ public int deleteSurProjectAttendanceUserByIds(Long[] ids); + /** + * 批量删除考勤人员基本属性 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + public int deleteSurProjectAttendanceUserByParams(List list); + + /** + * 批量新增考勤人员基本属性 + * + * @param surProjectAttendanceUserList 考勤人员基本属性列表 + * @return 结果 + */ + public int batchSurProjectAttendanceUser(List surProjectAttendanceUserList); + public List queryAttendanceData(SurProjectAttendanceCfg where); public long countTodayAttendance(SurProjectAttendanceUser where); diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceDataService.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceDataService.java index 80e2a4f8..7f8697a5 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceDataService.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceDataService.java @@ -60,9 +60,25 @@ public interface ISurProjectAttendanceDataService */ public int deleteSurProjectAttendanceDataById(Long id); + /** + * 批量删除劳务实名制管理 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + public int deleteSurProjectAttendanceDataByParams(List list); + + /** + * 批量新增劳务实名制考勤管理 + * + * @param SurProjectAttendanceDataList 劳务实名制管理考勤列表 + * @return 结果 + */ + public int batchSurProjectAttendanceData(List SurProjectAttendanceDataList); + public void add(SurProjectAttendanceData sdata); - public long getLastServerId(SurProjectAttendanceData where); + public String getLastServerId(SurProjectAttendanceData where); public List groupByComany(SurProjectAttendanceData where); diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceGroupService.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceGroupService.java index ad4415af..e8e9487d 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceGroupService.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceGroupService.java @@ -59,5 +59,21 @@ public interface ISurProjectAttendanceGroupService */ public int deleteSurProjectAttendanceGroupById(Long id); + /** + * 批量删除广联达班组信息 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + public int deleteSurProjectAttendanceGroupByParams(List list); + + /** + * 批量新增广联达班组信息 + * + * @param surProjectAttendanceGroupList 广联达班组信息列表 + * @return 结果 + */ + public int batchSurProjectAttendanceGroup(List surProjectAttendanceGroupList); + public void add(SurProjectAttendanceGroup group); } diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceUserService.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceUserService.java index b2e51334..662b7a47 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceUserService.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectAttendanceUserService.java @@ -61,6 +61,22 @@ public interface ISurProjectAttendanceUserService */ public int deleteSurProjectAttendanceUserById(Long id); + /** + * 批量删除考勤人员基本属性 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + public int deleteSurProjectAttendanceUserByParams(List list); + + /** + * 批量新增考勤人员基本属性 + * + * @param surProjectAttendanceUserList 考勤人员基本属性列表 + * @return 结果 + */ + public int batchSurProjectAttendanceUser(List surProjectAttendanceUserList); + public void add(SurProjectAttendanceUser user); public List queryAttendanceData(SurProjectAttendanceCfg where); diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java index 8092d0ad..9835c2fa 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceDataServiceImpl.java @@ -97,6 +97,28 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc return surProjectAttendanceDataMapper.deleteSurProjectAttendanceDataById(id); } + /** + * 批量删除劳务实名制管理 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + @Override + public int deleteSurProjectAttendanceDataByParams(List list) { + return surProjectAttendanceDataMapper.deleteSurProjectAttendanceDataByParams(list); + } + + /** + * 批量新增劳务实名制考勤管理 + * + * @param SurProjectAttendanceDataList 劳务实名制考勤管理列表 + * @return 结果 + */ + @Override + public int batchSurProjectAttendanceData(List SurProjectAttendanceDataList) { + return surProjectAttendanceDataMapper.batchSurProjectAttendanceData(SurProjectAttendanceDataList); + } + @Override public void add(SurProjectAttendanceData sdata) { SurProjectAttendanceData where=new SurProjectAttendanceData(); @@ -113,7 +135,7 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc } @Override - public long getLastServerId(SurProjectAttendanceData where) { + public String getLastServerId(SurProjectAttendanceData where) { return surProjectAttendanceDataMapper.getLastServerId(where); } diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceGroupServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceGroupServiceImpl.java index ea9d6fd1..28eefbf9 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceGroupServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceGroupServiceImpl.java @@ -96,6 +96,28 @@ public class SurProjectAttendanceGroupServiceImpl implements ISurProjectAttendan return surProjectAttendanceGroupMapper.deleteSurProjectAttendanceGroupById(id); } + /** + * 批量删除广联达班组信息 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + @Override + public int deleteSurProjectAttendanceGroupByParams(List list) { + return surProjectAttendanceGroupMapper.deleteSurProjectAttendanceGroupByParams(list); + } + + /** + * 批量新增广联达班组信息 + * + * @param surProjectAttendanceGroupList 广联达班组信息列表 + * @return 结果 + */ + @Override + public int batchSurProjectAttendanceGroup(List surProjectAttendanceGroupList) { + return surProjectAttendanceGroupMapper.batchSurProjectAttendanceGroup(surProjectAttendanceGroupList); + } + @Override public void add(SurProjectAttendanceGroup group) { SurProjectAttendanceGroup where=new SurProjectAttendanceGroup(); diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceUserServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceUserServiceImpl.java index 444a8b7c..6bdf9b23 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceUserServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectAttendanceUserServiceImpl.java @@ -98,6 +98,28 @@ public class SurProjectAttendanceUserServiceImpl implements ISurProjectAttendanc return surProjectAttendanceUserMapper.deleteSurProjectAttendanceUserById(id); } + /** + * 批量删除考勤人员基本属性 + * + * @param list 需要删除的数据参数集合 + * @return 结果 + */ + @Override + public int deleteSurProjectAttendanceUserByParams(List list) { + return surProjectAttendanceUserMapper.deleteSurProjectAttendanceUserByParams(list); + } + + /** + * 批量新增考勤人员基本属性 + * + * @param surProjectAttendanceUserList 考勤人员基本属性列表 + * @return 结果 + */ + @Override + public int batchSurProjectAttendanceUser(List surProjectAttendanceUserList) { + return surProjectAttendanceUserMapper.batchSurProjectAttendanceUser(surProjectAttendanceUserList); + } + @Override public void add(SurProjectAttendanceUser user) { SurProjectAttendanceUser where=new SurProjectAttendanceUser(); diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java index 27840bfc..b47a5feb 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/task/AttendanceTask.java @@ -166,7 +166,7 @@ public class AttendanceTask { String projectId=jo.getString("projectId"); SurProjectAttendanceData dwhere=new SurProjectAttendanceData(); dwhere.setCfgid(it.getId()); - long startId=attendanceDataService.getLastServerId(dwhere); + String startId=attendanceDataService.getLastServerId(dwhere); doSyncAttendanceData(appId,secret,projectId,startId,it); }catch (Exception ex){ ex.printStackTrace(); @@ -174,7 +174,7 @@ public class AttendanceTask { } } } - private void doSyncAttendanceData(String appid,String secret,String projectld,long id,SurProjectAttendanceCfg it){ + private void doSyncAttendanceData(String appid,String secret,String projectld,String id,SurProjectAttendanceCfg it){ Map params = new HashMap<>(); params.put("projectId", projectld); params.put("startId",""+id); @@ -194,7 +194,7 @@ public class AttendanceTask { String data=getResult(request); JSONObject jo= JSON.parseObject(data); JSONArray arr=jo.getJSONArray("data"); - long lastId=0; + String lastId= "0"; if(arr!=null && arr.size()>0){ for(int i=0;i paramsMap,String appSecret){ List paramsList = new ArrayList<>(); paramsMap.forEach((s, o) -> { diff --git a/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceDataMapper.xml b/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceDataMapper.xml index 6bbffee0..d12e3136 100644 --- a/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceDataMapper.xml +++ b/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceDataMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -48,6 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and cfgid = #{cfgid} + and app_id = #{appId} and vendors_code = #{vendorsCode} and serverid = #{serverid} and workerId = #{workerId} @@ -77,6 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into sur_project_attendance_data cfgid, + app_id, vendors_code, serverid, workerId, @@ -102,6 +105,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{cfgid}, + #{appId}, #{vendorsCode}, #{serverid}, #{workerId}, @@ -131,6 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update sur_project_attendance_data cfgid = #{cfgid}, + app_id = #{appId}, vendors_code = #{vendorsCode}, serverid = #{serverid}, workerId = #{workerId}, @@ -167,6 +172,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + + delete from sur_project_attendance_data where CONCAT(app_id,'-',serverid,'-',workerId) in + + #{item} + + + + + insert into sur_project_attendance_data( id, cfgid, app_id, vendors_code, serverid, workerId, attendance_type, attendance_time, identification, teamId, workTypeCode, companyId, vendorId, projectType, device_code, work_point_id, scanPhoto, other, state, remark, is_del, create_by, create_time, update_by, update_time) values + + ( #{item.id}, #{item.cfgid},#{item.appId}, #{item.vendorsCode}, #{item.serverid}, #{item.workerId}, #{item.attendanceType}, #{item.attendanceTime}, #{item.identification}, #{item.teamId}, #{item.workTypeCode}, #{item.companyId}, #{item.vendorId}, #{item.projectType}, #{item.deviceCode}, #{item.workPointId}, #{item.scanPhoto}, #{item.other}, #{item.state}, #{item.remark}, #{item.isDel}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}) + + + diff --git a/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceGroupMapper.xml b/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceGroupMapper.xml index 04cafae0..16a3c56e 100644 --- a/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceGroupMapper.xml +++ b/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceGroupMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -36,7 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, cfgid, serverid, bizLicense, companyCode, companyId, companyName, companyTypeId, vendorId, name, leaderName, leaderPhone, teamId, teamName, type, leaderId, deleted, createTime, platformGroupId, platformTeamId, enterDate, exitDate, remark, is_del, create_by, create_time, update_by, update_time + select id, cfgid, app_id, serverid, bizLicense, companyCode, companyId, companyName, companyTypeId, vendorId, name, leaderName, leaderPhone, teamId, teamName, type, leaderId, deleted, createTime, platformGroupId, platformTeamId, enterDate, exitDate, remark, is_del, create_by, create_time, update_by, update_time from vw_sur_project_attendance_group @@ -44,6 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and cfgid = #{cfgid} + and app_id = #{appId} and serverid = #{serverid} and bizLicense = #{bizLicense} and companyCode = #{companyCode} @@ -72,11 +74,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} - + insert into sur_project_attendance_group cfgid, + app_id, serverid, bizLicense, companyCode, @@ -106,6 +109,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{cfgid}, + #{appId}, #{serverid}, #{bizLicense}, #{companyCode}, @@ -139,6 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update sur_project_attendance_group cfgid = #{cfgid}, + app_id = #{appId}, serverid = #{serverid}, bizLicense = #{bizLicense}, companyCode = #{companyCode}, @@ -179,4 +184,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + + delete from sur_project_attendance_group where CONCAT(app_id,'-',serverid) in + + #{item} + + + + + insert into sur_project_attendance_data(id,cfgid,app_id,serverid,bizLicense,companyCode,companyId,companyName,companyTypeId,vendorId,name,leaderName,leaderPhone,teamId,teamName,type,leaderId,deleted,createTime,platformGroupId,platformTeamId,enterDate,exitDate,remark,create_by,create_time,update_by,update_time) values + + (#{item.id}, #{item.cfgid}, #{item.appId}, #{item.serverid}, #{item.bizLicense}, #{item.companyCode}, #{item.companyId}, #{item.companyName},#{item.companyTypeId}, #{item.vendorId}, #{item.name}, #{item.leaderName}, #{item.leaderPhone}, #{item.teamId}, #{item.teamName}, #{item.type}, #{item.leaderId}, #{item.deleted}, #{item.createTime}, #{item.platformGroupId}, #{item.platformTeamId}, #{item.enterDate}, + #{item.exitDate}, #{item.remark}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}) + + + \ No newline at end of file diff --git a/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceUserMapper.xml b/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceUserMapper.xml index bcb2cceb..2abcaa4b 100644 --- a/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceUserMapper.xml +++ b/yanzhu-jh/src/main/resources/mapper/project/SurProjectAttendanceUserMapper.xml @@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -60,6 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and cfgid = #{cfgid} + and app_id = #{appId} and vendors_code = #{vendorsCode} and workerId = #{workerId} and laborWorkerId = #{laborWorkerId} @@ -106,6 +108,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into sur_project_attendance_user cfgid, + app_id, vendors_code, workerId, laborWorkerId, @@ -146,6 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{cfgid}, + #{appId}, #{vendorsCode}, #{workerId}, #{laborWorkerId}, @@ -190,6 +194,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update sur_project_attendance_user cfgid = #{cfgid}, + app_id = #{appId}, vendors_code = #{vendorsCode}, workerId = #{workerId}, laborWorkerId = #{laborWorkerId}, @@ -241,6 +246,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + + delete from sur_project_attendance_user where CONCAT(app_id,'-',workerId) in + + #{item} + + + + + insert into sur_project_attendance_user( id, cfgid, vendors_code, workerId, laborWorkerId, workerCategory, qrCode, name, ethnic, nativePlace, gender, birthDate, phone, degreeName, photo, recentPhoto, groupId, groupName, leader, workTypeCode, workTypeName, specWorkType, hatCode, state, enterDate, exitDate, companyId, companyName, vendorId, teamId, teamName, enterType, other, remark, is_del, create_by, create_time, update_by, update_time) values + + ( #{item.id}, #{item.cfgid}, #{item.vendorsCode}, #{item.workerId}, #{item.laborWorkerId}, #{item.workerCategory}, #{item.qrCode}, #{item.name}, #{item.ethnic}, #{item.nativePlace}, #{item.gender}, #{item.birthDate}, #{item.phone}, #{item.degreeName}, #{item.photo}, #{item.recentPhoto}, #{item.groupId}, #{item.groupName}, #{item.leader}, #{item.workTypeCode}, #{item.workTypeName}, #{item.specWorkType}, #{item.hatCode}, #{item.state}, #{item.enterDate}, #{item.exitDate}, #{item.companyId}, #{item.companyName}, #{item.vendorId}, #{item.teamId}, #{item.teamName}, #{item.enterType}, #{item.other}, #{item.remark}, #{item.isDel}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}) + + + ( SELECT * FROM sur_project_attendance_data WHERE DATE(attendance_time)=date(#{createBy}) AND cfgid IN (