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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 (