diff --git a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java index b94d6b73..6e1a77b2 100644 --- a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java +++ b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/RemoteUserService.java @@ -110,6 +110,16 @@ public interface RemoteUserService @PostMapping("/user/register") public R registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** + * 注册用户信息 + * + * @param sysUser 用户信息 + * @param source 请求来源 + * @return 结果 + */ + @PostMapping("/user/registerAppIdUser") + public R registerAppIdUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** * 删除用户角色 * diff --git a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java index 3043c90c..3c277563 100644 --- a/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java +++ b/yanzhu-api/yanzhu-api-system/src/main/java/com/yanzhu/system/api/factory/RemoteUserFallbackFactory.java @@ -83,6 +83,12 @@ public class RemoteUserFallbackFactory implements FallbackFactory registerAppIdUserInfo(SysUser sysUser, String source) + { + return R.fail("注册用户失败:" + throwable.getMessage()); + } + @Override public R removeUserRoles(SysUser sysUser, String source) { diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/enums/ShiFouEnum.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/enums/ShiFouEnum.java new file mode 100644 index 00000000..0b30ca6a --- /dev/null +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/enums/ShiFouEnum.java @@ -0,0 +1,39 @@ +package com.yanzhu.common.core.enums; + + +import com.yanzhu.common.core.text.Convert; + +/** + * 是否状态 + * + * @author JiangYuQi + */ +public enum ShiFouEnum { + + FOU("0", "否"), SHI("1", "是"); + + private final String code; + private final String info; + + ShiFouEnum(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } + + public Long getLongCode() + { + return Convert.toLong(code); + } + +} diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/enums/UserTypeEnums.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/enums/UserTypeEnums.java index d78a9184..2229b95a 100644 --- a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/enums/UserTypeEnums.java +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/enums/UserTypeEnums.java @@ -7,6 +7,7 @@ public enum UserTypeEnums { XTRY("00", "正式人员","key"), XMRY("08", "项目人员","key"), + DJRY("98", "对接人员","key"), QTRY("99", "其它人员","key"), FBWTDL("80", "分包代理人","fbwtdl"), FBXMJL("79", "分包项目经理","fbxmjl"), diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/NoUtils.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/NoUtils.java index 0ef19a95..078d1b67 100644 --- a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/NoUtils.java +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/NoUtils.java @@ -34,4 +34,25 @@ public class NoUtils { return ++Seq; } + private static final String APPPREFIX = "yzkj"; + private static int COUNTER = 0; + + /** + * 生成appId + * + * @author JiangYuQi + * @date 2023-11-07 + */ + public static String createAppId() { + long timestamp = System.currentTimeMillis(); + String sequencePart = String.format("%03d", getContractNextSequence()); + return APPPREFIX + timestamp+ StringUtils.randomString(5) + sequencePart; + } + + private static synchronized int getContractNextSequence() { + if (COUNTER >= 999) { + COUNTER = 0; + } + return ++COUNTER; + } } diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/StringUtils.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/StringUtils.java index 14dd42a2..f9a3fa82 100644 --- a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/StringUtils.java +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/StringUtils.java @@ -769,4 +769,27 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils } } + private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + + /** + * 获取随机字符串 + * + * @param length 长度 + * @return 返回指定长度的随机字符串。 + */ + public static String randomString(int length) { + if (length < 1) { + length = 1; + } + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < length; i++) { + int randomIndex = random.nextInt(CHARACTERS.length()); + char randomChar = CHARACTERS.charAt(randomIndex); + sb.append(randomChar); + } + String randomString = sb.toString(); + return randomString; + } + } diff --git a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/http/HttpUtils.java b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/http/HttpUtils.java index d53938fa..4e5a06cf 100644 --- a/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/http/HttpUtils.java +++ b/yanzhu-common/yanzhu-common-core/src/main/java/com/yanzhu/common/core/utils/http/HttpUtils.java @@ -7,12 +7,11 @@ import org.slf4j.LoggerFactory; import javax.net.ssl.*; import java.io.*; -import java.net.ConnectException; -import java.net.SocketTimeoutException; -import java.net.URL; -import java.net.URLConnection; +import java.net.*; import java.nio.charset.StandardCharsets; import java.security.cert.X509Certificate; +import java.util.List; +import java.util.Map; /** * 通用http发送方法 @@ -182,6 +181,57 @@ public class HttpUtils return result.toString(); } + /** + * 向指定 URL 发送POST方法的请求 + * + * @param reqUrl 发送请求的 URL + * @param reqJson 请求参数,请求参数应该是 JSON 的形式。 + * @param headerMap 请求头部,头部参数应该是 MAPS 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendJSONPost(String reqUrl, String reqJson, Map headerMap) throws IOException { + // 创建URL对象 + URL url = new URL(reqUrl); + + // 打开连接 + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + // 设置请求方法为POST + connection.setRequestMethod("POST"); + + // headers不为空,设置请求头 + if (headerMap != null) { + for (Map.Entry entry : headerMap.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + } + + // 允许输入输出流 + connection.setDoOutput(true); + connection.setDoInput(true); + // 设置请求头 + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Accept", "application/json"); + + // 发送JSON数据 + try (OutputStream os = connection.getOutputStream()) { + byte[] input = reqJson.getBytes("utf-8"); + os.write(input, 0, input.length); + } + + // 获取响应实体 + StringBuilder responseBody = new StringBuilder(); + try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"))) { + String inputLine; + while ((inputLine = in.readLine()) != null) { + responseBody.append(inputLine); + } + } + // 关闭连接 + connection.disconnect(); + // 返回响应结果 + return responseBody.toString(); + } + public static String sendSSLPost(String url, String param) { StringBuilder result = new StringBuilder(); diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/SurProjectAttendanceUser.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/SurProjectAttendanceUser.java index e4f9335e..9fb49eb9 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/SurProjectAttendanceUser.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/SurProjectAttendanceUser.java @@ -51,7 +51,6 @@ public class SurProjectAttendanceUser extends JhBaseEntity private Long workerCategory; /** 工号 */ - private Long qrCode; /** 姓名 */ @@ -87,11 +86,9 @@ public class SurProjectAttendanceUser extends JhBaseEntity private String photo; /** 近照 */ - private String recentPhoto; /** 所属班组ID */ - private String groupId; /** 所属班组 */ diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/SysApplyConfig.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/SysApplyConfig.java new file mode 100644 index 00000000..8baba9ab --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/domain/SysApplyConfig.java @@ -0,0 +1,173 @@ +package com.yanzhu.manage.domain; + +import com.yanzhu.common.core.annotation.Excel; +import com.yanzhu.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 系统应用注册对象 sys_apply_config + * + * @author JiangYuQi + * @date 2024-01-13 + */ +public class SysApplyConfig extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 服务配置主键 */ + private Long cfgId; + + /** 服务配置类型 */ + private String cfgType; + + /** 应用主键 */ + @Excel(name = "应用主键") + private String appId; + + /** 公钥 */ + private String publicKey; + + /** 私钥 */ + private String privateKey; + + /** 项目主键 */ + @Excel(name = "项目主键") + private Long projectId; + + /** 项目名称 */ + @Excel(name = "项目名称") + private String projectName; + + /** 部门主键 */ + @Excel(name = "部门主键") + private Long deptId; + + /** 部门名称 */ + @Excel(name = "部门名称") + private String deptName; + + /** 是否删除 */ + @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; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public Long getCfgId() { + return cfgId; + } + + public void setCfgId(Long cfgId) { + this.cfgId = cfgId; + } + + public String getCfgType() { + return cfgType; + } + + public void setCfgType(String cfgType) { + this.cfgType = cfgType; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("cfgId", getCfgId()) + .append("cfgType", getCfgType()) + .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/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SysApplyConfigMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SysApplyConfigMapper.java new file mode 100644 index 00000000..5b09eead --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SysApplyConfigMapper.java @@ -0,0 +1,62 @@ +package com.yanzhu.manage.mapper; + +import com.yanzhu.manage.domain.SysApplyConfig; + +import java.util.List; + +/** + * 系统应用注册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/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SysApplyConfigMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SysApplyConfigMapper.xml new file mode 100644 index 00000000..0a867739 --- /dev/null +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SysApplyConfigMapper.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select sac.id, sac.cfg_type, sac.cfg_id, sac.app_id, sac.public_key, sac.private_key, sac.project_id, sp.project_name, sac.dept_id, sd.dept_name, sac.is_del, sac.create_by, sac.create_time, sac.update_by, sac.update_time, sac.remark from sys_apply_config sac + left join pro_project_info sp on sac.project_id = sp.id + left join sys_dept sd on sac.dept_id = sd.dept_id + + + + + + + + insert into sys_apply_config + + id, + cfg_type, + cfg_id, + app_id, + public_key, + private_key, + project_id, + dept_id, + is_del, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{id}, + #{cfgType}, + #{cfgId}, + #{appId}, + #{publicKey}, + #{privateKey}, + #{projectId}, + #{deptId}, + #{isDel}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update sys_apply_config + + cfg_type = #{cfgType}, + cfg_id = #{cfgId}, + 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/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java index fd609736..f1d429c1 100644 --- a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java +++ b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceJgwTask.java @@ -80,7 +80,7 @@ public class AttendanceJgwTask { * @param secret 应用密钥 * @return */ - public static String getToken(String appid, String secret) { + private String getToken(String appid, String secret) { log.info("开始查询济工网TOKEN...{}::{}",appid,secret); String grantType = "client_credential"; String path = "/webapi/credential"; @@ -204,12 +204,12 @@ public class AttendanceJgwTask { quartzProSubdepts.setCreateBy("JGW-TASK"); quartzProSubdepts.setCreateTime(DateUtils.getNowDate()); quartzProSubdeptsService.insertQuartzProSubdepts(quartzProSubdepts); - redisService.setCacheObject("doSyncProContractor.contractorId::"+json.getString("contractorId"),quartzProSubdepts,2L,TimeUnit.HOURS); + redisService.setCacheObject("doSyncProContractor.jgw.contractorId::"+json.getString("contractorId"),quartzProSubdepts,2L,TimeUnit.HOURS); }else{ QuartzProSubdepts quartzProSubdepts = list.get(0); quartzProSubdepts.setSource(code.toUpperCase()+"::"+json.getString("contractorId")); quartzProSubdeptsService.updateQuartzProSubdepts(quartzProSubdepts); - redisService.setCacheObject("doSyncProContractor.contractorId::"+json.getString("contractorId"),list.get(0),2L,TimeUnit.HOURS); + redisService.setCacheObject("doSyncProContractor.jgw.contractorId::"+json.getString("contractorId"),list.get(0),2L,TimeUnit.HOURS); } }else{ QuartzProSubdepts quartzProSubdepts = new QuartzProSubdepts(); @@ -226,7 +226,7 @@ public class AttendanceJgwTask { quartzProSubdepts.setSource(code.toUpperCase()+"::"+json.getString("contractorId")); quartzProSubdepts.setCreateBy("JGW-TASK"); quartzProSubdepts.setCreateTime(DateUtils.getNowDate()); - redisService.setCacheObject("doSyncProContractor.contractorId::"+json.getString("contractorId"),quartzProSubdepts,2L,TimeUnit.HOURS); + redisService.setCacheObject("doSyncProContractor.jgw.contractorId::"+json.getString("contractorId"),quartzProSubdepts,2L,TimeUnit.HOURS); } } if (arr.size()>=10 && rowId > 0) { @@ -328,7 +328,7 @@ public class AttendanceJgwTask { quartzProSubdeptsGroup.setCreateTime(DateUtils.getNowDate()); quartzProSubdeptsGroup.setSource(code.toUpperCase()+"::"+json.getString("id")); quartzProSubdeptsGroupService.insertQuartzProSubdeptsGroup(quartzProSubdeptsGroup); - redisService.setCacheObject("doSyncDirectlyUnderGroup.teamLeaderId::"+json.getString("leaderId"),quartzProSubdeptsGroup,2L,TimeUnit.HOURS); + redisService.setCacheObject("doSyncDirectlyUnderGroup.jgw.teamLeaderId::"+json.getString("leaderId"),quartzProSubdeptsGroup,2L,TimeUnit.HOURS); }else{ QuartzProSubdeptsGroup quartzProSubdeptsGroup = list.get(0); quartzProSubdeptsGroup.setSource(code.toUpperCase()+"::"+json.getString("id")); @@ -336,7 +336,7 @@ public class AttendanceJgwTask { quartzProSubdeptsGroup.setUpdateBy("JGW-TASK"); quartzProSubdeptsGroup.setUpdateTime(DateUtils.getNowDate()); quartzProSubdeptsGroupService.updateQuartzProSubdeptsGroup(quartzProSubdeptsGroup); - redisService.setCacheObject("doSyncDirectlyUnderGroup.teamLeaderId::"+json.getString("leaderId"),quartzProSubdeptsGroup,2L,TimeUnit.HOURS); + redisService.setCacheObject("doSyncDirectlyUnderGroup.jgw.teamLeaderId::"+json.getString("leaderId"),quartzProSubdeptsGroup,2L,TimeUnit.HOURS); } } if (rowId > 0) { diff --git a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceSzjTask.java b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceSzjTask.java new file mode 100644 index 00000000..da70b003 --- /dev/null +++ b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceSzjTask.java @@ -0,0 +1,478 @@ +package com.yanzhu.job.task; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.yanzhu.common.core.constant.SecurityConstants; +import com.yanzhu.common.core.enums.*; +import com.yanzhu.common.core.text.Convert; +import com.yanzhu.common.core.utils.DateUtils; +import com.yanzhu.common.core.utils.Md5Utils; +import com.yanzhu.common.core.utils.StringUtils; +import com.yanzhu.common.core.utils.file.FileUtils; +import com.yanzhu.common.core.utils.http.HttpUtils; +import com.yanzhu.common.redis.service.RedisService; +import com.yanzhu.common.security.utils.SecurityUtils; +import com.yanzhu.job.domain.*; +import com.yanzhu.job.service.*; +import com.yanzhu.system.api.RemoteFileService; +import com.yanzhu.system.api.RemoteUserService; +import com.yanzhu.system.api.domain.SysUser; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * @Description: 数智建数据定时任务 + * @Title: AttendanceJgwTask + * @Package com.yanzhu.job.task + * @Author: JiangYuQi + * @CreateTime: 2024/10/26 17:05 + */ +@Slf4j +@Component("attendanceSzjTask") +public class AttendanceSzjTask { + + @Autowired + private RedisService redisService; + + @Autowired + private ISysNativeService sysNativeService; + + @Autowired + private RemoteFileService remoteFileService; + + @Autowired + private RemoteUserService remoteUserService; + + @Autowired + private IQuartzProSubdeptsService quartzProSubdeptsService; + + @Autowired + private IQuartzProSubdeptsGroupService quartzProSubdeptsGroupService; + + @Autowired + private IQuartzProSubdeptsUsersService quartzProSubdeptsUsersService; + + @Autowired + private IQuartzProAttendanceCfgService quartzProAttendanceCfgService; + + @Autowired + private IQuartzProAttendanceDataService quartzProAttendanceDataService; + + private final String code = "szj"; + private static final String SZJ_HOST = "https://sc.uni-ubi.com/sc/api/"; + + /** + * 获取访问令牌 + * + * @param secret 应用密钥 + * @return + */ + public String getToken(String secret) { + log.info("开始查询数智建TOKEN...{}",secret); + String key = "attendanceSzjTask.getToken::"+secret; + String token = redisService.getCacheObject(key); + if(StringUtils.isNotEmpty(token)){ + return token; + }else{ + Map params = new HashMap<>(); + params.put("secret",secret); + try { + String result = HttpUtils.sendJSONPost(SZJ_HOST+"v1/api/verify/getToken",JSON.toJSONString(params),null); + JSONObject jsonObject = JSONObject.parseObject(result); + if(jsonObject!=null && jsonObject.getBoolean("success")){ + token = jsonObject.getJSONObject("data").getString("token"); + redisService.setCacheObject(key,token,5L,TimeUnit.HOURS); + return token; + } + }catch (Exception e){ + e.printStackTrace(); + } + } + throw new RuntimeException("无效token..."); + } + + /** + * 同步单位及班组信息 + */ + public void syncContractorAndGroupData() { + log.info("开始同步数智建单位&班组信息...{}",DateUtils.dateTimeStr()); + QuartzProAttendanceCfg where = new QuartzProAttendanceCfg(); + where.setEnabled(ShiFouEnums.SHI.getCode()); + where.setIsDel(ShiFouEnums.FOU.getCode()); + where.setVendorsCode(code); + List list = quartzProAttendanceCfgService.selectProAttendanceCfgList(where); + for (QuartzProAttendanceCfg item : list) { + String param = item.getVendorsParameter(); + if (StringUtils.isNotEmpty(param)) { + JSONObject jSONObject = JSON.parseObject(param); + try { + String token = getToken(jSONObject.getString("secret")); + doSyncProContractor(token, item); + //doSyncDirectlyUnderGroup(jo, 0l, item); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + } + + /** + * 查询直属班组 + * + * @param token 请求令牌 + * @param it 配置信息 + */ + private void doSyncProContractor(String token, QuartzProAttendanceCfg it){ + log.info("开始查询数智建参建单位信息...{}",it.getProjectId()); + Map headerMap = new HashMap<>(); + headerMap.put("token",token); + try { + Map params = new HashMap<>(); + String result = HttpUtils.sendJSONPost(SZJ_HOST+"v1/api/enterprise/query",JSON.toJSONString(params),headerMap); + JSONObject jsonObject = JSONObject.parseObject(result); + if(jsonObject!=null && jsonObject.getBoolean("success")){ + JSONArray jsonArray = jsonObject.getJSONArray("data"); + if(jsonArray.size()>0){ + for (int i = 0; i < jsonArray.size(); i++){ + JSONObject json = jsonArray.getJSONObject(i); + String subDeptType = convertSubDeptType(json.getString("enterpriseType")); + // 总包单位不同步 + if(!"3".equals(subDeptType)){ + QuartzProSubdepts quartzProSubdeptsQuery = new QuartzProSubdepts(); + quartzProSubdeptsQuery.setProjectId(it.getProjectId()); + quartzProSubdeptsQuery.setSubDeptCode(json.getString("creditCode")); + List list = quartzProSubdeptsService.selectQuartzProSubdeptsList(quartzProSubdeptsQuery); + if(StringUtils.isEmpty(list)){ + QuartzProSubdepts quartzProSubdepts = new QuartzProSubdepts(); + quartzProSubdepts.setComId(it.getComId()); + quartzProSubdepts.setProjectId(it.getProjectId()); + quartzProSubdepts.setSubDeptType(subDeptType); + quartzProSubdepts.setSubDeptName(json.getString("enterpriseName")); + quartzProSubdepts.setSubDeptCode(json.getString("creditCode")); + quartzProSubdepts.setSubDeptLeaderName(json.getString("contactPerson")); + quartzProSubdepts.setSubDeptLeaderPhone(json.getString("contactNumber")); + Map subDeptInfos = new HashMap<>(); + subDeptInfos.put("signDate",json.getString("registTime")); + subDeptInfos.put("address",json.getString("enterpriseAddress")); + subDeptInfos.put("businessAddress",json.getString("enterpriseAddress")); + subDeptInfos.put("officePhone",json.getString("contactNumber")); + quartzProSubdepts.setSubDeptInfos(JSON.toJSONString(subDeptInfos)); + quartzProSubdepts.setUseStatus(UseStateEnums.IN.getCode()); + quartzProSubdepts.setUseDates(DateUtils.getNowDate()); + quartzProSubdepts.setApproveStatus(ApproveStatus.passed.getCode()); + quartzProSubdepts.setSource(code.toUpperCase()+"::"+json.getString("id")); + quartzProSubdepts.setCreateBy("SZJ-TASK"); + quartzProSubdepts.setCreateTime(DateUtils.getNowDate()); + quartzProSubdeptsService.insertQuartzProSubdepts(quartzProSubdepts); + redisService.setCacheObject("doSyncProContractor.szj.contractorId::"+json.getString("id"),quartzProSubdepts,2L,TimeUnit.HOURS); + }else{ + QuartzProSubdepts quartzProSubdepts = list.get(0); + quartzProSubdepts.setSource(code.toUpperCase()+"::"+json.getString("contractorId")); + quartzProSubdeptsService.updateQuartzProSubdepts(quartzProSubdepts); + redisService.setCacheObject("doSyncProContractor.szj.contractorId::"+json.getString("id"),list.get(0),2L,TimeUnit.HOURS); + } + }else{ + QuartzProSubdepts quartzProSubdepts = new QuartzProSubdepts(); + quartzProSubdepts.setComId(it.getComId()); + quartzProSubdepts.setProjectId(it.getProjectId()); + quartzProSubdepts.setSubDeptType(subDeptType); + quartzProSubdepts.setSubDeptName(json.getString("enterpriseName")); + quartzProSubdepts.setSubDeptCode(json.getString("creditCode")); + quartzProSubdepts.setSubDeptLeaderName(json.getString("contactPerson")); + quartzProSubdepts.setSubDeptLeaderPhone(json.getString("contactNumber")); + quartzProSubdepts.setUseStatus(UseStateEnums.IN.getCode()); + quartzProSubdepts.setUseDates(DateUtils.getNowDate()); + quartzProSubdepts.setApproveStatus(ApproveStatus.passed.getCode()); + quartzProSubdepts.setSource(code.toUpperCase()+"::"+json.getString("id")); + quartzProSubdepts.setCreateBy("SZJ-TASK"); + quartzProSubdepts.setCreateTime(DateUtils.getNowDate()); + redisService.setCacheObject("doSyncProContractor.szj.contractorId::"+json.getString("id"),quartzProSubdepts,2L,TimeUnit.HOURS); + } + } + } + }; + }catch (Exception e){ + e.printStackTrace(); + } + } + + /** + * 转换单位类型 + * @param enterpriseType + * @return + */ + private String convertSubDeptType(String enterpriseType){ + String subDeptType; + switch (enterpriseType){ + case "1" : subDeptType = "2"; break; + case "13" : subDeptType = "0"; break; + case "3" : subDeptType = "1"; break; + case "4" : subDeptType = "5"; break; + case "5" : subDeptType = "4"; break; + case "6" : subDeptType = "11"; break; + case "7" : subDeptType = "6"; break; + case "8" : subDeptType = "7"; break; + case "9" : subDeptType = "8"; break; + case "10" : subDeptType = "9"; break; + case "11" : subDeptType = "10"; break; + default : subDeptType = "99"; break; + } + return subDeptType; + } + + /** + * 查询直属班组 + * + * @param token 请求令牌 + * @param it 配置信息 + */ + private void doSyncDirectlyUnderGroup(String token, QuartzProAttendanceCfg it) { + log.info("开始同步数智建直属班组信息...{}",it.getProjectId()); + Map headerMap = new HashMap<>(); + headerMap.put("token",token); + Map params = new HashMap<>(); + try { + String result = HttpUtils.sendJSONPost(SZJ_HOST+"v1/api/team/query",JSON.toJSONString(params),headerMap); + JSONObject jsonObject = JSONObject.parseObject(result); + if(jsonObject!=null && jsonObject.getBoolean("success")) { + JSONArray jsonArray = jsonObject.getJSONArray("data"); + if (jsonArray.size() > 0) { + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject json = jsonArray.getJSONObject(i); + Map dataMap = convertSubJobTypes(json.getString("corpType")); + QuartzProSubdeptsGroup quartzProSubdeptsGroupQuery = new QuartzProSubdeptsGroup(); + quartzProSubdeptsGroupQuery.setProjectId(it.getProjectId()); + quartzProSubdeptsGroupQuery.setGroupName(json.getString("teamName")); + List list = quartzProSubdeptsGroupService.selectQuartzProSubdeptsGroupList(quartzProSubdeptsGroupQuery); + if(StringUtils.isEmpty(list)){ + QuartzProSubdepts quartzProSubdepts = redisService.getCacheObject("doSyncProContractor.contractorId::"+json.getString("contractorId")); + QuartzProSubdeptsGroup quartzProSubdeptsGroup = new QuartzProSubdeptsGroup(); + quartzProSubdeptsGroup.setComId(it.getComId()); + quartzProSubdeptsGroup.setProjectId(it.getProjectId()); + quartzProSubdeptsGroup.setSubDeptId(quartzProSubdepts.getId()); + quartzProSubdeptsGroup.setSubDeptType(quartzProSubdepts.getSubDeptType()); + quartzProSubdeptsGroup.setSubDeptName(quartzProSubdepts.getSubDeptName()); + quartzProSubdeptsGroup.setSubDeptCode(quartzProSubdepts.getSubDeptCode()); + quartzProSubdeptsGroup.setGroupName(json.getString("teamName")); + if(StringUtils.eqObj(dataMap.get("type"),"2")){ + quartzProSubdeptsGroup.setGroupCode(DeptGroupEnums.SPECIAL.getCode()); + }else if(StringUtils.eqObj(dataMap.get("type"),"3")){ + quartzProSubdeptsGroup.setGroupCode(DeptGroupEnums.MANAGE.getCode()); + } + quartzProSubdeptsGroup.setCraftType(dataMap.get("type")); + quartzProSubdeptsGroup.setCraftPost(dataMap.get("post")); + quartzProSubdeptsGroup.setUseStatus(UseStateEnums.IN.getCode()); + quartzProSubdeptsGroup.setApproveStatus(ApproveStatus.passed.getCode()); + quartzProSubdeptsGroup.setIsDel(Convert.toLong(json.getString("deleteFlag"),0L)); + quartzProSubdeptsGroup.setCreateBy("JGW-TASK"); + quartzProSubdeptsGroup.setCreateTime(DateUtils.getNowDate()); + quartzProSubdeptsGroup.setSource(code.toUpperCase()+"::"+json.getString("id")); + quartzProSubdeptsGroupService.insertQuartzProSubdeptsGroup(quartzProSubdeptsGroup); + redisService.setCacheObject("doSyncDirectlyUnderGroup.jgw.teamLeaderId::"+json.getString("leaderId"),quartzProSubdeptsGroup,2L,TimeUnit.HOURS); + }else{ + QuartzProSubdeptsGroup quartzProSubdeptsGroup = list.get(0); + quartzProSubdeptsGroup.setSource(code.toUpperCase()+"::"+json.getString("id")); + quartzProSubdeptsGroup.setIsDel(Convert.toLong(json.getString("deleteFlag"),0L)); + quartzProSubdeptsGroup.setUpdateBy("JGW-TASK"); + quartzProSubdeptsGroup.setUpdateTime(DateUtils.getNowDate()); + quartzProSubdeptsGroupService.updateQuartzProSubdeptsGroup(quartzProSubdeptsGroup); + redisService.setCacheObject("doSyncDirectlyUnderGroup.jgw.teamLeaderId::"+json.getString("leaderId"),quartzProSubdeptsGroup,2L,TimeUnit.HOURS); + } + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + /** + * 转换工种类型 + * @param jobTypes + * @return + */ + private Map convertSubJobTypes(String jobTypes){ + Map dataMap = new HashMap<>(); + if(StringUtils.isEmpty(jobTypes)){ + dataMap.put("type","3"); + dataMap.put("post","4037"); + return dataMap; + } + switch (jobTypes){ + case "3001" : dataMap.put("type","2");dataMap.put("post","1015"); break; + case "3002" : dataMap.put("type","2");dataMap.put("post","1014"); break; + case "3003" : + case "3004" : dataMap.put("type","2");dataMap.put("post","2021"); break; + case "3005" : dataMap.put("type","2");dataMap.put("post","2022"); break; + case "3006" : dataMap.put("type","2");dataMap.put("post","1013"); break; + case "3007" : dataMap.put("type","1");dataMap.put("post","1006"); break; + case "3008" : dataMap.put("type","1");dataMap.put("post","1004"); break; + case "3009" : dataMap.put("type","1");dataMap.put("post","1001"); break; + case "3010" : dataMap.put("type","1");dataMap.put("post","1003"); break; + case "3011" : dataMap.put("type","1");dataMap.put("post","1017"); break; + case "3012" : dataMap.put("type","1");dataMap.put("post","1007"); break; + case "3013" : dataMap.put("type","1");dataMap.put("post","1008"); break; + case "3014" : dataMap.put("type","1");dataMap.put("post","1009"); break; + case "3015" : dataMap.put("type","1");dataMap.put("post","1012"); break; + case "3016" : dataMap.put("type","3");dataMap.put("post","3024"); break; + case "3017" : dataMap.put("type","1");dataMap.put("post","1010"); break; + case "3018" : dataMap.put("type","3");dataMap.put("post","3025"); break; + case "3019" : dataMap.put("type","2");dataMap.put("post","2017"); break; + case "3020" : dataMap.put("type","2");dataMap.put("post","2018"); break; + case "3021" : dataMap.put("type","2");dataMap.put("post","2016"); break; + case "3031" : + case "3032" : + case "3042" : dataMap.put("type","2");dataMap.put("post","2019"); break; + case "3072" : + case "3039" : + case "6002" : + case "6003" : + case "6004" : + case "6005" : + case "6006" : + case "6007" : + case "6008" : + case "6009" : + case "6010" : + case "6012" : + case "6013" : + case "6014" : + case "6015" : + case "6016" : + case "6017" : + case "6018" : + case "6019" : + case "6020" : + case "6021" : + case "6022" : + case "6023" : + case "6024" : + case "6025" : + case "6026" : + case "6027" : + case "6028" : + case "6029" : + case "6030" : + case "6031" : + case "6032" : + case "6033" : + case "6034" : + case "6035" : + case "6036" : + case "6037" : + case "6038" : + case "6039" : + case "6040" : + case "6041" : + case "6042" : + case "6043" : + case "6044" : + case "6045" : + case "6046" : + case "6047" : + case "6048" : + case "6049" : + case "6050" : + case "6051" : + case "6052" : + case "6053" : + case "6054" : + case "6055" : + case "6056" : + case "6057" : + case "6058" : + case "6059" : + case "6060" : + case "6061" : + case "6062" : + case "6063" : + case "6064" : + case "6065" : + case "6066" : + case "6067" : + case "6068" : + case "6069" : + case "6070" : + case "6071" : + case "6072" : + case "6073" : + case "6074" : + case "6075" : + case "6076" : + case "6077" : + case "6078" : + case "6079" : + case "6080" : + case "6081" : + case "6082" : + case "6083" : + case "6084" : + case "6085" : + case "6086" : + case "6087" : + case "6088" : + case "6089" : + case "6090" : + case "6091" : + case "6092" : + case "6093" : + case "6094" : + case "6095" : + case "6096" : + case "6097" : + case "6001" : dataMap.put("type","3");dataMap.put("post","4037"); break; + case "6011" : dataMap.put("type","3");dataMap.put("post","3023"); break; + case "3036" : + case "3054" : + case "3056" : + case "3057" : + case "3058" : + case "3059" : + case "3060" : + case "3061" : + case "3062" : + case "3063" : + case "3064" : + case "3065" : + case "3055" : dataMap.put("type","1");dataMap.put("post","8888"); break; + case "3041" : + case "3040" : + case "3037" : + case "3038" : + case "3043" : + case "3044" : + case "3045" : + case "3046" : + case "3047" : + case "3048" : + case "3049" : + case "3050" : + case "3051" : + case "3052" : + case "3053" : + case "3033" : + case "3066" : + case "3067" : + case "3068" : + case "3069" : + case "3070" : + case "3035" : + case "3071" : + case "3034" : dataMap.put("type","2");dataMap.put("post","9999"); break; + default : dataMap.put("type","3");dataMap.put("post","4037"); break; + } + return dataMap; + } + +} diff --git a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceTask.java b/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceTask.java deleted file mode 100644 index 579f5df5..00000000 --- a/yanzhu-modules/yanzhu-job/src/main/java/com/yanzhu/job/task/AttendanceTask.java +++ /dev/null @@ -1,327 +0,0 @@ -//package com.yanzhu.job.task; -// -//import cn.hutool.core.util.StrUtil; -//import com.alibaba.fastjson2.JSON; -//import com.alibaba.fastjson2.JSONArray; -//import com.alibaba.fastjson2.JSONObject; -//import com.yanzhu.common.redis.service.RedisService; -//import com.yanzhu.job.domain.*; -//import com.yanzhu.job.service.*; -//import okhttp3.HttpUrl; -//import okhttp3.OkHttpClient; -//import okhttp3.Request; -//import okhttp3.Response; -//import org.apache.commons.codec.digest.DigestUtils; -//import org.apache.logging.log4j.util.Strings; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Component; -// -//import java.io.IOException; -//import java.util.*; -//import java.util.concurrent.TimeUnit; -//import java.util.stream.Collectors; -// -//@Component("attendanceTask") -//public class AttendanceTask { -// -// @Autowired -// private RedisService redisCache; -// -// @Autowired -// private ISysNativeService sysNativeService; -// -// @Autowired -// IQuartzProjectAttendanceUserService attendanceUserService; -// -// @Autowired -// IQuartzProAttendanceCfgService attendanceCfgService; -// -// @Autowired -// IQuartzProAttendanceDataService attendanceDataService; -// -// @Autowired -// IQuartzProjectAttendanceGroupService attendanceGroupService; -// -// private String getNative(long id){ -// String ckey="attendance_jgw_native_"+id; -// Object obj=redisCache.getCacheObject(ckey); -// String tmp=""; -// if(obj!=null){ -// tmp=obj.toString(); -// if(StrUtil.isNotEmpty(tmp)){ -// return tmp; -// } -// } -// List list=sysNativeService.selectSysNativeListById(id); -// if(list.size()==0){ -// id=id/100*100; -// list=sysNativeService.selectSysNativeListById(id); -// if(list.size()==0){ -// id=id/10000*10000; -// list=sysNativeService.selectSysNativeListById(id); -// } -// } -// if(list.size()==0){ -// tmp=""; -// }else{ -// tmp= list.get(0).getAddress(); -// } -// redisCache.setCacheObject(ckey, tmp, 1L, TimeUnit.DAYS); -// return tmp; -// } -// -// public void syncWorker(){ -// QuartzProAttendanceCfg where =new QuartzProAttendanceCfg(); -// where.setEnabled(1l); -// where.setIsDel(0l); -// where.setVendorsCode("gld"); -// List list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); -// for(QuartzProAttendanceCfg it :list){ -// String param= it.getVendorsParameter(); -// if(Strings.isNotEmpty(param)){ -// try{ -// JSONObject jo=JSON.parseObject(param); -// String appId=jo.getString("appId"); -// String secret=jo.getString("secret"); -// String projectId=jo.getString("projectId"); -// doSyncWorker(appId,secret,projectId,1,it); -// }catch (Exception ex){ -// ex.printStackTrace(); -// } -// } -// } -// } -// -// public void syncGroup(){ -// QuartzProAttendanceCfg where =new QuartzProAttendanceCfg(); -// where.setEnabled(1l); -// where.setIsDel(0l); -// where.setVendorsCode("gld"); -// List list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); -// for(QuartzProAttendanceCfg it :list){ -// String param= it.getVendorsParameter(); -// if(Strings.isNotEmpty(param)){ -// try{ -// JSONObject jo=JSON.parseObject(param); -// String appId=jo.getString("appId"); -// String secret=jo.getString("secret"); -// String projectId=jo.getString("projectId"); -// doSyncGroup(appId,secret,projectId,it); -// }catch (Exception ex){ -// ex.printStackTrace(); -// } -// } -// } -// } -// -// private void doSyncGroup(String appId, String secret, String projectId, QuartzProAttendanceCfg it) { -// Map params = new HashMap<>(); -// params.put("projectId", projectId); -// params.put("appid",appId); -// String sign = getSign(params,secret); -// String host="https://glm.glodon.com/api/open"; -// params.put("sign",sign); -// String path="/worker/allGroup"; -// HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(host + path)).newBuilder(); -// params.forEach((s, o) -> { -// urlBuilder.addQueryParameter(s, (String) o); -// }); -// Request request = new Request.Builder() -// .url(urlBuilder.build()) -// .build(); -// String data = getResult(request); -// JSONObject jo= JSON.parseObject(data); -// JSONArray arr=jo.getJSONArray("data"); -// if(arr!=null && arr.size()>0) { -// for (int i = 0; i < arr.size(); i++) { -// JSONObject json=arr.getJSONObject(i); -// QuartzProjectAttendanceGroup group= QuartzProjectAttendanceGroup.create(json); -// group.setAppId(appId); -// group.setCfgid(it.getId()); -// attendanceGroupService.add(group); -// } -// } -// } -// -// private void doSyncWorker(String appid, String secret, String projectld, int page, QuartzProAttendanceCfg it){ -// Map params = new HashMap<>(); -// params.put("projectId", projectld); -// params.put("start", "2000-01-01 00:00:00"); -// params.put("end", "2099-01-01 00:00:00"); -// params.put("pageNo",""+page); -// params.put("pageSize", "1000"); -// params.put("appid",appid); -// String sign = getSign(params,secret); -// String host="https://glm.glodon.com/api/open"; -// params.put("sign",sign); -// String path="/worker/new/allWorkerInfo"; -// HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(host + path)).newBuilder(); -// params.forEach((s, o) -> { -// urlBuilder.addQueryParameter(s, (String) o); -// }); -// Request request = new Request.Builder() -// .url(urlBuilder.build()) -// .build(); -// String data = getResult(request); -// JSONObject jo= JSON.parseObject(data); -// JSONArray arr=jo.getJSONArray("data"); -// if(arr!=null && arr.size()>0){ -// for(int i=0;i6){ -// try { -// long idStr = Long.parseLong(idNumber.substring(0, 6)); -// String natstr=getNative(idStr); -// if(StrUtil.isNotEmpty(natstr)){ -// user.setNativePlace(natstr); -// } -// }catch (Exception ex){ -// -// } -// } -// user.setVendorsCode(it.getVendorsCode()); -// user.setCfgid(it.getId()); -// user.setAppId(appid); -// attendanceUserService.add(user); -// } -// } -// if(arr.size()==1000){ -// doSyncWorker(appid,secret,projectld,page+1,it); -// } -// } -// -// public void syncAttendanceData(){ -// QuartzProAttendanceCfg where =new QuartzProAttendanceCfg(); -// where.setEnabled(1l); -// where.setIsDel(0l); -// where.setVendorsCode("gld"); -// List list=attendanceCfgService.selectSurProjectAttendanceCfgList(where); -// for(QuartzProAttendanceCfg it :list){ -// String param= it.getVendorsParameter(); -// if(Strings.isNotEmpty(param)){ -// try{ -// JSONObject jo=JSON.parseObject(param); -// String appId=jo.getString("appId"); -// String secret=jo.getString("secret"); -// String projectId=jo.getString("projectId"); -// QuartzProjectAttendanceData dwhere=new QuartzProjectAttendanceData(); -// dwhere.setCfgid(it.getId()); -// String startId=attendanceDataService.getLastServerId(dwhere); -// doSyncAttendanceData(appId,secret,projectId,startId,it); -// }catch (Exception ex){ -// ex.printStackTrace(); -// } -// } -// } -// } -// -// private void doSyncAttendanceData(String appid, String secret, String projectId, String id, QuartzProAttendanceCfg it){ -// Map params = new HashMap<>(); -// params.put("projectId", projectId); -// params.put("startId",""+id); -// params.put("pageSize", "500"); -// params.put("appid",appid); -// String sign = getSign(params,secret); -// String host="https://glm.glodon.com/api/open"; -// params.put("sign",sign); -// String path="/attendance/card"; -// HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(host + path)).newBuilder(); -// params.forEach((s, o) -> { -// urlBuilder.addQueryParameter(s, (String) o); -// }); -// Request request = new Request.Builder() -// .url(urlBuilder.build()) -// .build(); -// String data = getResult(request); -// JSONObject jo= JSON.parseObject(data); -// JSONArray arr=jo.getJSONArray("data"); -// String lastId= "0"; -// if(arr!=null && arr.size()>0){ -// for(int i=0;i"+id+","+lastId); -// if(arr.size()==500){ -// doSyncAttendanceData(appid,secret,projectId,lastId,it); -// } -// } -// public static void main(String[] args){ -// -// System.out.println("-------1--------->AttendanceUserTask.syncWorker"); -// Map params = new HashMap<>(); -// params.put("projectId", "709599705953792"); -// params.put("start", "2000-01-01 00:00:00"); -// params.put("end", "2099-01-01 00:00:00"); -// params.put("pageNo","1"); -// params.put("pageSize", "1000"); -// //params.put("pageNo", "1"); -// params.put("startId", "0"); -// params.put("appid","f24454233c5346fe82df6b8dd35e9d6d"); -// String sign = getSign(params,"754619e2a33491b84a4d47838d2ffc0a"); -// System.out.println("--->"+sign); -// params.put("sign",sign); -// String host="https://glm.glodon.com/api/open"; -// String path="/worker/new/allWorkerInfo"; -// HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(host + path)).newBuilder(); -// params.forEach((s, o) -> { -// urlBuilder.addQueryParameter(s, (String) o); -// }); -// Request request = new Request.Builder() -// .url(urlBuilder.build()) -// .build(); -// String data = getResult(request); -// //System.out.println("data:"+data); -// JSONObject jo= JSON.parseObject(data); -// JSONArray jsonArray=jo.getJSONArray("data"); -// for(int i=0;i paramsMap,String appSecret){ -// List paramsList = new ArrayList<>(); -// paramsMap.forEach((s, o) -> { -// String stringBuilder = s + o; -// paramsList.add(stringBuilder); -// }); -// StringBuilder beforeMd5 = new StringBuilder(); -// beforeMd5.append(appSecret); -// paramsList.stream() -// .sorted(String::compareTo) -// .collect(Collectors.toList()) -// .forEach(beforeMd5::append); -// beforeMd5.append(appSecret); -// return DigestUtils.md5Hex(beforeMd5.toString()).toUpperCase(); -// } -//} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/LabourApiController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/LabourApiController.java new file mode 100644 index 00000000..4118e829 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/LabourApiController.java @@ -0,0 +1,371 @@ +package com.yanzhu.manage.api; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.yanzhu.common.core.annotation.RateLimiter; +import com.yanzhu.common.core.constant.CacheConstants; +import com.yanzhu.common.core.constant.SecurityConstants; +import com.yanzhu.common.core.enums.ApplyCfgTypeEnum; +import com.yanzhu.common.core.enums.LimitType; +import com.yanzhu.common.core.enums.ShiFouEnum; +import com.yanzhu.common.core.enums.VendorsCodeEnum; +import com.yanzhu.common.core.exception.ServiceException; +import com.yanzhu.common.core.text.Convert; +import com.yanzhu.common.core.utils.StringUtils; +import com.yanzhu.common.core.utils.file.MultipartFileUtils; +import com.yanzhu.common.core.web.controller.BaseController; +import com.yanzhu.common.core.web.domain.AjaxResult; +import com.yanzhu.common.redis.service.RedisService; +import com.yanzhu.common.security.service.TokenService; +import com.yanzhu.common.security.utils.SecurityUtils; +import com.yanzhu.manage.api.vo.*; +import com.yanzhu.manage.domain.SurProjectAttendanceData; +import com.yanzhu.manage.domain.SurProjectAttendanceGroup; +import com.yanzhu.manage.domain.SurProjectAttendanceUser; +import com.yanzhu.manage.domain.SysApplyConfig; +import com.yanzhu.manage.enums.HttpStatusEnum; +import com.yanzhu.manage.service.ISurProjectAttendanceDataService; +import com.yanzhu.manage.service.ISurProjectAttendanceGroupService; +import com.yanzhu.manage.service.ISurProjectAttendanceUserService; +import com.yanzhu.system.api.RemoteFileService; +import com.yanzhu.system.api.RemoteUserService; +import com.yanzhu.system.api.domain.SysFile; +import com.yanzhu.system.api.model.LoginUser; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +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.*; +import java.util.concurrent.TimeUnit; + +/** + * 劳务人员APIController + * + * @author JiangYuQi + * @date 2024-01-13 + */ +@Slf4j +@RestController +@RequestMapping("/labourApi") +public class LabourApiController extends BaseController { + + @Autowired + private RedisService redisService; + + @Autowired + private TokenService tokenService; + + @Autowired + private RemoteFileService remoteFileService; + + @Autowired + private RemoteUserService remoteUserService; + + @Autowired + private ISurProjectAttendanceGroupService surProjectAttendanceGroupService; + + @Autowired + private ISurProjectAttendanceUserService surProjectAttendanceUserService; + + @Autowired + private ISurProjectAttendanceDataService surProjectAttendanceDataService; + + /** + * 获取系统token + * 限流规则[60秒内最多请求10次,限流策略IP] + * + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "获取TOKEN") + @RateLimiter(count = 10, limitType = LimitType.IP) + @PostMapping("/v1/getToken") + public AjaxResult getToken(@Validated @RequestBody LabourSignReqVo req) { + SysApplyConfig sysApplyConfig = redisService.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG + req.getAppId()); + if (sysApplyConfig == null) { + throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); + } + if (StringUtils.eqObj(ShiFouEnum.SHI.getCode(), sysApplyConfig.getIsDel())) { + throw new ServiceException(HttpStatusEnum.DISABLE.getInfo(), HttpStatusEnum.DISABLE.getCode()); + } + if (!StringUtils.eqObj(ApplyCfgTypeEnum.LABOUR.getCode(), sysApplyConfig.getCfgType())) { + throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); + } + if (!StringUtils.eqObj(req.getSecret(), sysApplyConfig.getPrivateKey())) { + throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); + } + String key = "labourApi.getToken::" + req.getAppId(); + Map rspMap = redisService.getCacheObject(key); + if (Objects.nonNull(rspMap)) { + return AjaxResult.success(rspMap); + } else { + rspMap = this.getAppIdLoginToken(sysApplyConfig); + redisService.setCacheObject(key, rspMap, 320L, TimeUnit.MINUTES); + return AjaxResult.success(rspMap); + } + } + + /** + * appId登录创建用户并模拟登录 + * + * @param sysApplyConfig 用户账号 + * @return token + */ + private Map getAppIdLoginToken(SysApplyConfig sysApplyConfig) { + // 查询用户是否存在,不存在则保存 + LoginUser loginUser = remoteUserService.getUserInfo(sysApplyConfig.getAppId(), SecurityConstants.INNER).getData(); + if (Objects.nonNull(loginUser)) { + return tokenService.createToken(loginUser); + } else { + throw new ServiceException(HttpStatusEnum.ERROR.getInfo()); + } + } + + /** + * 推送,修改班组信息 + * 限流规则[30秒内最多请求100次,限流策略IP] + * + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "推送班组信息") + @PostMapping("/v1/pushLabourGroup") + public AjaxResult pushLabourGroup(@Validated @RequestBody LabourGroupReqVo req) { + SysApplyConfig sysApplyConfig = redisService.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG + SecurityUtils.getUsername()); + if (StringUtils.equals(ShiFouEnum.SHI.getCode(), sysApplyConfig.getIsDel())) { + throw new ServiceException(HttpStatusEnum.DISABLE.getInfo(), HttpStatusEnum.DISABLE.getCode()); + } + if (!Objects.equals(ApplyCfgTypeEnum.LABOUR.getCode(), sysApplyConfig.getCfgType())) { + throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); + } + // 查询当前班组是否已推送 + SurProjectAttendanceGroup searchModel = new SurProjectAttendanceGroup(); + searchModel.setAppId(sysApplyConfig.getAppId()); + searchModel.setServerid(req.getServerid()); + List list = surProjectAttendanceGroupService.selectSurProjectAttendanceGroupList(searchModel); + if (list.size() > 0) { + SurProjectAttendanceGroup surProjectAttendanceGroup = list.get(0); + surProjectAttendanceGroup.setCompanyId(req.getCompanyId()); + surProjectAttendanceGroup.setCompanyName(req.getCompanyName()); + surProjectAttendanceGroup.setCompanyCode(req.getCompanyCode()); + surProjectAttendanceGroup.setCompanyTypeId(req.getCompanyTypeId()); + surProjectAttendanceGroup.setName(req.getName()); + surProjectAttendanceGroup.setLeaderName(req.getLeaderName()); + surProjectAttendanceGroup.setLeaderPhone(req.getLeaderPhone()); + surProjectAttendanceGroup.setIsDel(req.getIsDel()); + surProjectAttendanceGroup.setUpdateBy(VendorsCodeEnum.YANZHU.getCode()); + surProjectAttendanceGroup.setUpdateTime(new Date()); + surProjectAttendanceGroupService.updateSurProjectAttendanceGroup(surProjectAttendanceGroup); + } else { + SurProjectAttendanceGroup surProjectAttendanceGroup = new SurProjectAttendanceGroup(); + surProjectAttendanceGroup.setAppId(sysApplyConfig.getAppId()); + surProjectAttendanceGroup.setCfgid(sysApplyConfig.getCfgId()); + surProjectAttendanceGroup.setServerid(req.getServerid()); + surProjectAttendanceGroup.setCompanyId(req.getCompanyId()); + surProjectAttendanceGroup.setCompanyCode(req.getCompanyCode()); + surProjectAttendanceGroup.setCompanyName(req.getCompanyName()); + surProjectAttendanceGroup.setCompanyTypeId(req.getCompanyTypeId()); + surProjectAttendanceGroup.setName(req.getName()); + surProjectAttendanceGroup.setLeaderName(req.getLeaderName()); + surProjectAttendanceGroup.setLeaderPhone(req.getLeaderPhone()); + surProjectAttendanceGroup.setIsDel(req.getIsDel()); + surProjectAttendanceGroup.setCreateBy(sysApplyConfig.getAppId()); + surProjectAttendanceGroup.setCreateTime(new Date()); + surProjectAttendanceGroupService.insertSurProjectAttendanceGroup(surProjectAttendanceGroup); + } + return success(); + } + + /** + * 推送,修改人员信息 + * 限流规则[30秒内最多请求100次,限流策略IP] + * + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "推送人员信息") + @PostMapping("/v1/pushLabourUser") + public AjaxResult pushLabourUser(@Validated @RequestBody LabourUserReqVo req) { + SysApplyConfig sysApplyConfig = redisService.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG + SecurityUtils.getUsername()); + if (StringUtils.equals(ShiFouEnum.SHI.getCode(), sysApplyConfig.getIsDel())) { + throw new ServiceException(HttpStatusEnum.DISABLE.getInfo(), HttpStatusEnum.DISABLE.getCode()); + } + if (!Objects.equals(ApplyCfgTypeEnum.LABOUR.getCode(), sysApplyConfig.getCfgType())) { + throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); + } + // 查询当前人员是否已推送 + SurProjectAttendanceUser searchModel = new SurProjectAttendanceUser(); + searchModel.setAppId(sysApplyConfig.getAppId()); + searchModel.setWorkerId(req.getWorkerId()); + List list = surProjectAttendanceUserService.selectSurProjectAttendanceUserList(searchModel); + if (CollectionUtils.isNotEmpty(list)) { + SurProjectAttendanceUser surProjectAttendanceUser = list.get(0); + surProjectAttendanceUser.setName(req.getName()); + surProjectAttendanceUser.setVendorsCode(VendorsCodeEnum.YANZHU.getCode()); + surProjectAttendanceUser.setEthnic(req.getEthnic()); + surProjectAttendanceUser.setNativePlace(req.getNativePlace()); + surProjectAttendanceUser.setGender(req.getGender()); + surProjectAttendanceUser.setPhone(req.getPhone()); + try { + //保存入场照片 + SysFile sysFile = remoteFileService.upload(MultipartFileUtils.base64ToMultipartFile(req.getRecentPhotoBase64())).getData(); + surProjectAttendanceUser.setRecentPhoto(sysFile.getUrl()); + } catch (Exception e) { + e.printStackTrace(); + } + surProjectAttendanceUser.setGroupId(req.getGroupId()); + surProjectAttendanceUser.setGroupName(req.getGroupName()); + surProjectAttendanceUser.setWorkTypeName(req.getWorkTypeName()); + surProjectAttendanceUser.setSpecWorkType(req.getSpecWorkType()); + surProjectAttendanceUser.setState(req.getState()); + surProjectAttendanceUser.setEnterDate(req.getEnterDate()); + surProjectAttendanceUser.setCompanyId(req.getCompanyId()); + surProjectAttendanceUser.setCompanyName(req.getCompanyName()); + surProjectAttendanceUser.setIsDel(req.getIsDel()); + surProjectAttendanceUser.setUpdateBy(sysApplyConfig.getAppId()); + surProjectAttendanceUser.setUpdateTime(new Date()); + surProjectAttendanceUserService.updateSurProjectAttendanceUser(surProjectAttendanceUser); + } else { + SurProjectAttendanceUser surProjectAttendanceUser = new SurProjectAttendanceUser(); + surProjectAttendanceUser.setAppId(sysApplyConfig.getAppId()); + surProjectAttendanceUser.setCfgid(sysApplyConfig.getCfgId()); + surProjectAttendanceUser.setName(req.getName()); + surProjectAttendanceUser.setEthnic(req.getEthnic()); + surProjectAttendanceUser.setNativePlace(req.getNativePlace()); + surProjectAttendanceUser.setGender(req.getGender()); + surProjectAttendanceUser.setPhone(req.getPhone()); + surProjectAttendanceUser.setGroupId(req.getGroupId()); + surProjectAttendanceUser.setGroupName(req.getGroupName()); + surProjectAttendanceUser.setWorkTypeName(req.getWorkTypeName()); + surProjectAttendanceUser.setSpecWorkType(req.getSpecWorkType()); + surProjectAttendanceUser.setState(req.getState()); + surProjectAttendanceUser.setEnterDate(req.getEnterDate()); + surProjectAttendanceUser.setCompanyId(req.getCompanyId()); + surProjectAttendanceUser.setCompanyName(req.getCompanyName()); + surProjectAttendanceUser.setIsDel(req.getIsDel()); + surProjectAttendanceUser.setCreateBy(sysApplyConfig.getAppId()); + surProjectAttendanceUser.setCreateTime(new Date()); + surProjectAttendanceUserService.insertSurProjectAttendanceUser(surProjectAttendanceUser); + } + return success(); + } + + + public static final String CACHEKEY = "api.labour.v1.pushLabourData::"; + + /** + * 推送,修改班组人员考勤信息 + * 限流规则[30秒内最多请求255次,限流策略IP] + * + * @param req 请求信息 + * @author JiangYuQi + * @date 2024-01-13 + */ + @ApiOperation(value = "推送班组人员考勤信息") + @RateLimiter(time = 30, count = 255, limitType = LimitType.IP) + @PostMapping("/v1/pushLabourData") + public AjaxResult pushLabourData(@Validated @RequestBody LabourDataReqVo req) { + SysApplyConfig sysApplyConfig = redisService.getCacheObject(CacheConstants.YANZHU_SYSTEM_CONFIG + SecurityUtils.getUsername()); + if (StringUtils.equals(ShiFouEnum.SHI.getCode(), sysApplyConfig.getIsDel())) { + throw new ServiceException(HttpStatusEnum.DISABLE.getInfo(), HttpStatusEnum.DISABLE.getCode()); + } + if (!Objects.equals(ApplyCfgTypeEnum.LABOUR.getCode(), sysApplyConfig.getCfgType())) { + throw new ServiceException(HttpStatusEnum.ERROR.getInfo(), HttpStatusEnum.ERROR.getCode()); + } + String cacheKey = CACHEKEY + req.getWorkerId(); + Boolean cacheValue = Convert.toBool(redisService.getCacheObject(cacheKey), true); + //30秒内未重复请求 + if (cacheValue) { + redisService.setCacheObject(cacheKey, false, 60L, TimeUnit.SECONDS); + // 查询当前班组人员考勤是否已推送 + SurProjectAttendanceData findData = new SurProjectAttendanceData(); + findData.setCfgid(sysApplyConfig.getCfgId()); + findData.setAppId(sysApplyConfig.getAppId()); + findData.setWorkerId(req.getWorkerId()); + findData.setAttendanceTime(req.getAttendanceTime()); + SurProjectAttendanceData surProjectAttendanceData = surProjectAttendanceDataService.findCurrentAttendanceData(findData); + if (surProjectAttendanceData != null) { + //这里不能修改出勤时间 + if (Objects.equals("L", req.getAttendanceType())) { + surProjectAttendanceData.setAttendanceOutTime(req.getAttendanceTime()); + } + surProjectAttendanceData.setUpdateBy(sysApplyConfig.getAppId() + "Api推送离场打卡"); + try { + List result; + if (surProjectAttendanceData.getRemark() != null) { + result = JSON.parseArray(surProjectAttendanceData.getRemark(), LabourDataPMReqVo.class); + } else { + result = new ArrayList<>(); + } + LabourDataPMReqVo labourDataPMReqVo = new LabourDataPMReqVo(); + labourDataPMReqVo.setAttendanceType(surProjectAttendanceData.getAttendanceType()); + labourDataPMReqVo.setAttendanceTime(surProjectAttendanceData.getAttendanceTime()); + labourDataPMReqVo.setScanPhoto(surProjectAttendanceData.getScanPhoto()); + result.add(labourDataPMReqVo); + surProjectAttendanceData.setRemark(JSONObject.toJSONString(result)); + } catch (Exception e) { + log.error("保存考勤PM信息出错...{}", e.getMessage()); + } + surProjectAttendanceDataService.updateSurProjectAttendanceData(surProjectAttendanceData); + } else { + surProjectAttendanceData = new SurProjectAttendanceData(); + /** + * 查询人员考勤信息 + */ + SurProjectAttendanceUser findUser = new SurProjectAttendanceUser(); + findUser.setCfgid(sysApplyConfig.getCfgId()); + findUser.setWorkerId(req.getWorkerId()); + SurProjectAttendanceUser surProjectAttendanceUser = surProjectAttendanceUserService.findYzCurrentAttendanceUser(findUser); + if (StringUtils.isNull(surProjectAttendanceUser)) { + throw new ServiceException("未查询到人员信息", HttpStatusEnum.DARA_EXCEPTION.getCode()); + } + if (StringUtils.isNull(surProjectAttendanceUser.getCompanyTypeId())) { + throw new ServiceException("人员部门类型信息不完整", HttpStatusEnum.DARA_EXCEPTION.getCode()); + } + surProjectAttendanceData.setCfgid(sysApplyConfig.getCfgId()); + surProjectAttendanceData.setAppId(sysApplyConfig.getAppId()); + surProjectAttendanceData.setProjectId(sysApplyConfig.getProjectId()); + surProjectAttendanceData.setProjectName(sysApplyConfig.getProjectName()); + surProjectAttendanceData.setDeptId(sysApplyConfig.getDeptId()); + surProjectAttendanceData.setDeptName(sysApplyConfig.getDeptName()); + surProjectAttendanceData.setVendorsCode(VendorsCodeEnum.YANZHU.getCode()); + surProjectAttendanceData.setCompanyId(surProjectAttendanceUser.getCompanyId()); + surProjectAttendanceData.setCompanyName(surProjectAttendanceUser.getCompanyName()); + surProjectAttendanceData.setWorkerName(surProjectAttendanceUser.getName()); + surProjectAttendanceData.setWorkerPhoto(surProjectAttendanceUser.getRecentPhoto()); + surProjectAttendanceData.setWorkerGender(surProjectAttendanceUser.getGender()); + surProjectAttendanceData.setBirthDate(surProjectAttendanceUser.getBirthDate()); + surProjectAttendanceData.setEthnic(surProjectAttendanceUser.getEthnic()); + surProjectAttendanceData.setNativePlace(surProjectAttendanceUser.getNativePlace()); + surProjectAttendanceData.setPhone(surProjectAttendanceUser.getPhone()); + surProjectAttendanceData.setWorkTypeName(surProjectAttendanceUser.getWorkTypeName()); + surProjectAttendanceData.setSpecWorkType(surProjectAttendanceUser.getSpecWorkType()); + surProjectAttendanceData.setGroupName(surProjectAttendanceUser.getGroupName()); + surProjectAttendanceData.setCompanyTypeId(surProjectAttendanceUser.getCompanyTypeId()); + surProjectAttendanceData.setWorkTypeCode(surProjectAttendanceUser.getWorkTypeCode()); + surProjectAttendanceData.setAttendanceTime(req.getAttendanceTime()); + try { + //保存打卡照片 + SysFile sysFile = remoteFileService.upload(MultipartFileUtils.base64ToMultipartFile(req.getScanPhotoBase64())).getData(); + surProjectAttendanceData.setScanPhoto(sysFile.getUrl()); + } catch (Exception e) { + e.printStackTrace(); + } + surProjectAttendanceData.setCreateBy(sysApplyConfig.getAppId() + "Api推送入场打卡"); + surProjectAttendanceData.setCreateTime(new Date()); + surProjectAttendanceDataService.insertSurProjectAttendanceData(surProjectAttendanceData); + } + } + return success(); + } + +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourDataPMReqVo.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourDataPMReqVo.java new file mode 100644 index 00000000..d093174f --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourDataPMReqVo.java @@ -0,0 +1,24 @@ +package com.yanzhu.manage.api.vo; + +import lombok.Data; + +/** + * 劳务实名制管理对象 + * + * @author JiangYuQi + * @date 2024-01-22 + */ +@Data +public class LabourDataPMReqVo +{ + private static final long serialVersionUID = 1L; + + /** 进门还是出门E进,L出 */ + private String attendanceType; + + /** 考勤时间yyyy-MM-dd HH:mm:ss */ + private String attendanceTime; + + /** 打卡照片 */ + private String scanPhoto; +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourDataReqVo.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourDataReqVo.java new file mode 100644 index 00000000..22e6da9e --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourDataReqVo.java @@ -0,0 +1,77 @@ +package com.yanzhu.manage.api.vo; + +import javax.validation.constraints.*; + +/** + * 劳务实名制管理对象 + * + * @author JiangYuQi + * @date 2024-01-22 + */ +public class LabourDataReqVo +{ + + /** 工人Id */ + @NotBlank(message = "工人ID不能为空") + @Size(max = 64, message = "工人ID最大长度64位") + private String workerId; + + /** 进门还是出门E进,L出 */ + @NotBlank(message = "进出门不能为空") + @Pattern(regexp = "E|L", message = "进出门类型格式异常,E进|L出") + private String attendanceType; + + /** 考勤时间yyyy-MM-dd HH:mm:ss */ + @NotBlank(message = "考勤时间不能为空") + @Size(min = 18,max = 20, message = "考勤时间格式异常YYYY-MM-dd HH:mm:ss") + private String attendanceTime; + + /** 打卡照片 */ + @NotBlank(message = "打卡照片不能为空") + private String scanPhotoBase64; + + /** 数据是否有效 */ + @NotNull(message = "数据是否有效不能为空") + @Max(value = 1, message = "数据是否有效格式异常,0有效|1无效") + private Long isDel; + + public String getWorkerId() { + return workerId; + } + + public void setWorkerId(String workerId) { + this.workerId = workerId; + } + + public String getAttendanceTime() { + return attendanceTime; + } + + public void setAttendanceTime(String attendanceTime) { + this.attendanceTime = attendanceTime; + } + + public String getScanPhotoBase64() { + return scanPhotoBase64; + } + + public void setScanPhotoBase64(String scanPhotoBase64) { + this.scanPhotoBase64 = scanPhotoBase64; + } + + public Long getIsDel() { + return isDel; + } + + public void setIsDel(Long isDel) { + this.isDel = isDel; + } + + public String getAttendanceType() { + return attendanceType; + } + + public void setAttendanceType(String attendanceType) { + this.attendanceType = attendanceType; + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourGroupReqVo.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourGroupReqVo.java new file mode 100644 index 00000000..de4fe4bd --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourGroupReqVo.java @@ -0,0 +1,138 @@ +package com.yanzhu.manage.api.vo; + +import javax.validation.constraints.*; + +public class LabourGroupReqVo { + + private static final long serialVersionUID = 1L; + + /** 工人id */ + @NotBlank(message = "班组主键ID不能为空") + @Size(max = 64, message = "班组主键最大64位") + private String serverid; + + /** 分包商id */ + @NotBlank(message = "分包商ID不能为空") + private String companyId; + + /** 分包商名称 */ + @NotBlank(message = "分包商名称不能为空") + @Size(max = 64, message = "分包商名称最大64位") + private String companyName; + + private String companyCode; + + /** 分包商类型不能为空 */ + @NotBlank(message = "分包商类型不能为空") + @Pattern(regexp = "1|2|3|4|5|6|7|8", message = "分包商类型错误,1总包|2劳务分包|8监理") + private String companyTypeId; + + private String bizLicense; + + /** 班组名称 */ + @NotBlank(message = "班组名称不能为空") + @Size(max = 64, message = "班组名称最大64位") + private String name; + + private String leaderName; + + private String leaderPhone; + + /** 进场日期 */ + @NotBlank(message = "进场日期不能为空") + @Size(max = 32, message = "进场日期格式异常") + private String enterDate; + + /** 数据是否有效 */ + @NotNull(message = "数据是否有效不能为空") + @Max(value = 1, message = "数据是否有效格式异常,0有效|1无效") + private Long isDel; + + public String getServerid() { + return serverid; + } + + public void setServerid(String serverid) { + this.serverid = serverid; + } + + public String getCompanyId() { + return companyId; + } + + public void setCompanyId(String companyId) { + this.companyId = companyId; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public String getCompanyTypeId() { + return companyTypeId; + } + + public void setCompanyTypeId(String companyTypeId) { + this.companyTypeId = companyTypeId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getIsDel() { + return isDel; + } + + public void setIsDel(Long isDel) { + this.isDel = isDel; + } + + public String getCompanyCode() { + return companyCode; + } + + public void setCompanyCode(String companyCode) { + this.companyCode = companyCode; + } + + public String getBizLicense() { + return bizLicense; + } + + public void setBizLicense(String bizLicense) { + this.bizLicense = bizLicense; + } + + public String getLeaderName() { + return leaderName; + } + + public void setLeaderName(String leaderName) { + this.leaderName = leaderName; + } + + public String getLeaderPhone() { + return leaderPhone; + } + + public void setLeaderPhone(String leaderPhone) { + this.leaderPhone = leaderPhone; + } + + public String getEnterDate() { + return enterDate; + } + + public void setEnterDate(String enterDate) { + this.enterDate = enterDate; + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourSignReqVo.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourSignReqVo.java new file mode 100644 index 00000000..2be19652 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourSignReqVo.java @@ -0,0 +1,33 @@ +package com.yanzhu.manage.api.vo; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 获取系统token 请求参数 + * + * @author: JiangYuQi + * @date: 2024/01/13 10:17 + */ +@Data +@Slf4j +public class LabourSignReqVo { + + /** + * AppId + */ + @NotBlank(message = "AppId不能为空") + @Size(min = 1, max = 64, message = "AppId格式异常") + private String appId; + + /** + * 账号密钥 + * RSA(用户账号 + 时间戳)加密 + */ + @NotBlank(message = "账号密钥不能为空") + @Size(min = 1, max = 64, message = "账号密钥格式异常") + private String secret; +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourSignetVo.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourSignetVo.java new file mode 100644 index 00000000..cf1f29af --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourSignetVo.java @@ -0,0 +1,74 @@ +package com.yanzhu.manage.api.vo; + +import com.ruoyi.common.utils.AuthRsaUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.sign.Md5Utils; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 劳务人员签名推送信息 请求参数 + * + * @author: JiangYuQi + * @date: 2024/01/13 12:21 + */ +@Data +@Slf4j +public class LabourSignetVo { + + /** + * 签名 + * RSA(dataMd5 + 时间戳)加密 + */ + @NotBlank(message = "签名不能为空") + private String sign; + + /** + * 推送数据 明文参数 + */ + @NotBlank(message = "推送数据不能为空") + private String data; + + /** + * 时间戳 + */ + @NotNull(message = "时间戳不能为空") + private Long timestamp; + + /** + * 获取数据签名 + * + * @author: JiangYuQi + * @date: 2024/01/13 10:17 + */ + public Boolean getDataSign(String privateKey) { + boolean signFlag = false; + try { + String decryptByPrivateKey = AuthRsaUtils.decryptByPrivateKey(privateKey,sign); + String privateDataStr = Md5Utils.hash(data) + timestamp; + log.info("签名值...{}",privateDataStr); + log.info("解密值...{}",decryptByPrivateKey); + if (StringUtils.equals(privateDataStr, decryptByPrivateKey)) { + signFlag = true; + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return signFlag; + } + + /** + * 效验时间签名[30分钟有效期] + */ + public Boolean checkTimestamp() { + boolean timestampFlag = true; + /**long timePoor = Math.abs(timestamp - System.currentTimeMillis()); + if (timePoor < 1000 * 60 * 30) { + timestampFlag = true; + }*/ + return timestampFlag; + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourUserReqVo.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourUserReqVo.java new file mode 100644 index 00000000..cdf6df2e --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/api/vo/LabourUserReqVo.java @@ -0,0 +1,215 @@ +package com.yanzhu.manage.api.vo; + +import javax.validation.constraints.Max; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +public class LabourUserReqVo { + + private static final long serialVersionUID = 1L; + + /** 工人id */ + @NotBlank(message = "工人ID不能为空") + @Size(max = 64, message = "工人ID最大长度64位") + private String workerId; + + /** 姓名 */ + @NotBlank(message = "工人姓名不能为空") + @Size(max = 32, message = "工人ID最大长度32位") + private String name; + + /** 民族 */ + @NotBlank(message = "工人民族不能为空") + @Size(max = 32, message = "工人民族最大长度32位") + private String ethnic; + + /** 籍贯 */ + @NotBlank(message = "工人籍贯不能为空") + @Size(max = 128, message = "工人籍贯最大长度128位") + private String nativePlace; + + /** 性别0:男 1:女 */ + @NotNull(message = "工人性别不能为空") + @Max(value = 1, message = "工人性别格式异常") + private Long gender; + + /** 联系电话 */ + @NotBlank(message = "联系电话不能为空") + @Size(max = 32, message = "联系电话最大32位") + private String phone; + + /** 入场照片 */ + @NotBlank(message = "入场照片不能为空") + private String recentPhotoBase64; + + /** 所属班组ID */ + @NotBlank(message = "所属班组ID不能为空") + private String groupId; + + /** 所属班组 */ + @NotBlank(message = "所属班组不能为空") + @Size(max = 64, message = "所属名称最大64位") + private String groupName; + + /** 工种名称 */ + @NotBlank(message = "工种名称不能为空") + @Size(max = 64, message = "工种名称最大64位") + private String workTypeName; + + /** 是否特殊工种 */ + @NotNull(message = "是否特殊工种不能为空") + @Max(value = 1, message = "是否特殊工种格式异常,0否|1是") + private Integer specWorkType; + + /** 进退场状态0:进场,1:退场 */ + @NotNull(message = "进退场状态不能为空") + @Max(value = 1, message = "进退场状态格式异常,0进场|1退场") + private Long state; + + /** 进场日期 */ + @NotBlank(message = "进场日期不能为空") + @Size(max = 32, message = "进场日期格式异常") + private String enterDate; + + /** 分包商id */ + @NotBlank(message = "分包商ID不能为空") + private String companyId; + + /** 分包商名称 */ + @Size(max = 64, message = "分包商名称最大64位") + private String companyName; + + /** 数据是否有效 */ + @NotNull(message = "数据是否有效不能为空") + @Max(value = 1, message = "数据是否有效格式异常,0有效|1无效") + private Long isDel; + + public String getWorkerId() { + return workerId; + } + + public void setWorkerId(String workerId) { + this.workerId = workerId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEthnic() { + return ethnic; + } + + public void setEthnic(String ethnic) { + this.ethnic = ethnic; + } + + public String getNativePlace() { + return nativePlace; + } + + public void setNativePlace(String nativePlace) { + this.nativePlace = nativePlace; + } + + public Long getGender() { + return gender; + } + + public void setGender(Long gender) { + this.gender = gender; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getRecentPhotoBase64() { + return recentPhotoBase64; + } + + public void setRecentPhotoBase64(String recentPhotoBase64) { + this.recentPhotoBase64 = recentPhotoBase64; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getWorkTypeName() { + return workTypeName; + } + + public void setWorkTypeName(String workTypeName) { + this.workTypeName = workTypeName; + } + + public Integer getSpecWorkType() { + return specWorkType; + } + + public void setSpecWorkType(Integer specWorkType) { + this.specWorkType = specWorkType; + } + + public Long getState() { + return state; + } + + public void setState(Long state) { + this.state = state; + } + + public String getEnterDate() { + return enterDate; + } + + public void setEnterDate(String enterDate) { + this.enterDate = enterDate; + } + + public String getCompanyId() { + return companyId; + } + + public void setCompanyId(String companyId) { + this.companyId = companyId; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public Long getIsDel() { + return isDel; + } + + public void setIsDel(Long isDel) { + this.isDel = isDel; + } +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SysApplyConfigController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SysApplyConfigController.java new file mode 100644 index 00000000..600778c5 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/SysApplyConfigController.java @@ -0,0 +1,148 @@ +package com.yanzhu.manage.controller; + +import com.yanzhu.common.core.enums.ApplyCfgTypeEnum; +import com.yanzhu.common.core.enums.ShiFouEnum; +import com.yanzhu.common.core.enums.VendorsCodeEnum; +import com.yanzhu.common.core.utils.NoUtils; +import com.yanzhu.common.core.utils.poi.ExcelUtil; +import com.yanzhu.common.core.web.controller.BaseController; +import com.yanzhu.common.core.web.domain.AjaxResult; +import com.yanzhu.common.core.web.page.TableDataInfo; +import com.yanzhu.common.log.annotation.Log; +import com.yanzhu.common.log.enums.BusinessType; +import com.yanzhu.common.security.annotation.RequiresPermissions; +import com.yanzhu.manage.domain.AttendanceCfg; +import com.yanzhu.manage.domain.SysApplyConfig; +import com.yanzhu.manage.service.IAttendanceCfgService; +import com.yanzhu.manage.service.ISysApplyConfigService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * 系统应用注册Controller + * + * @author JiangYuQi + * @date 2024-01-13 + */ +@RestController +@RequestMapping("/applyConfig") +public class SysApplyConfigController extends BaseController +{ + @Autowired + private ISysApplyConfigService sysApplyConfigService; + + @Autowired + private IAttendanceCfgService attendanceCfgService; + + /** + * 查询系统应用注册列表 + */ + @RequiresPermissions("@ss.hasPermi('system:applyConfig:list')") + @GetMapping("/list") + public TableDataInfo list(SysApplyConfig sysApplyConfig) + { + startPage(); + List list = sysApplyConfigService.selectSysApplyConfigList(sysApplyConfig); + return getDataTable(list); + } + + /** + * 导出系统应用注册列表 + */ + @RequiresPermissions("@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, "系统应用注册数据"); + } + + /** + * 获取系统应用注册详细信息 + */ + @RequiresPermissions("@ss.hasPermi('system:applyConfig:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(sysApplyConfigService.selectSysApplyConfigById(id)); + } + + /** + * 新增系统应用注册 + */ + @RequiresPermissions("@ss.hasPermi('system:applyConfig:add')") + @Log(title = "系统应用注册", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysApplyConfig sysApplyConfig) + { + if(ApplyCfgTypeEnum.LABOUR.getCode().equals(sysApplyConfig.getCfgType())){ + AttendanceCfg attendanceCfg = new AttendanceCfg(); + attendanceCfg.setProjectId(sysApplyConfig.getProjectId()); + attendanceCfg.setComId(sysApplyConfig.getDeptId()); + attendanceCfg.setVendorsCode(VendorsCodeEnum.YANZHU.getCode()); + attendanceCfg.setEnabled(sysApplyConfig.getIsDel().equals(ShiFouEnum.FOU.getCode())?ShiFouEnum.SHI.getLongCode():ShiFouEnum.FOU.getLongCode()); + attendanceCfg.setState(ShiFouEnum.FOU.getLongCode()); + int res = attendanceCfgService.insertAttendanceCfg(attendanceCfg); + if(res>0){ + // 同步将信息保存到sur_project_attendance_cfg + sysApplyConfig.setCfgId(attendanceCfg.getId()); + } + } + return toAjax(sysApplyConfigService.insertSysApplyConfig(sysApplyConfig)); + } + + /** + * 修改系统应用注册 + */ + @RequiresPermissions("@ss.hasPermi('system:applyConfig:edit')") + @Log(title = "系统应用注册", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysApplyConfig sysApplyConfig) + { + if(ApplyCfgTypeEnum.LABOUR.getCode().equals(sysApplyConfig.getCfgType())){ + AttendanceCfg attendanceCfg = new AttendanceCfg(); + attendanceCfg.setId(sysApplyConfig.getCfgId()); + attendanceCfg.setEnabled(sysApplyConfig.getIsDel().equals(ShiFouEnum.FOU.getCode())?ShiFouEnum.SHI.getLongCode():ShiFouEnum.FOU.getLongCode()); + attendanceCfgService.updateAttendanceCfg(attendanceCfg); + } + return toAjax(sysApplyConfigService.updateSysApplyConfig(sysApplyConfig)); + } + + /** + * 删除系统应用注册 + */ + @RequiresPermissions("@ss.hasPermi('system:applyConfig:remove')") + @Log(title = "系统应用注册", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + List cfgIds = new ArrayList<>(); + for(Long id:ids){ + SysApplyConfig sysApplyConfig = sysApplyConfigService.selectSysApplyConfigById(id); + if(ApplyCfgTypeEnum.LABOUR.getCode().equals(sysApplyConfig.getCfgType())){ + cfgIds.add(sysApplyConfig.getCfgId()); + } + } + if(CollectionUtils.isNotEmpty(cfgIds)){ + attendanceCfgService.deleteAttendanceCfgByIds(cfgIds.stream().toArray(Long[]::new)); + } + return toAjax(sysApplyConfigService.deleteSysApplyConfigByIds(ids)); + } + + /** + * 创建应用ID + */ + @PostMapping("/createAppId") + public AjaxResult createAppId() + { + return success(NoUtils.createAppId()); + } + +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISysApplyConfigService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISysApplyConfigService.java new file mode 100644 index 00000000..c35309e7 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISysApplyConfigService.java @@ -0,0 +1,67 @@ +package com.yanzhu.manage.service; + +import com.yanzhu.manage.domain.SysApplyConfig; + +import java.util.List; + +/** + * 系统应用注册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/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SysApplyConfigServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SysApplyConfigServiceImpl.java new file mode 100644 index 00000000..c8cd1502 --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SysApplyConfigServiceImpl.java @@ -0,0 +1,167 @@ +package com.yanzhu.manage.service.impl; + +import com.yanzhu.common.core.constant.CacheConstants; +import com.yanzhu.common.core.constant.SecurityConstants; +import com.yanzhu.common.core.enums.UserTypeEnums; +import com.yanzhu.common.core.utils.DateUtils; +import com.yanzhu.common.core.utils.StringUtils; +import com.yanzhu.common.redis.service.RedisService; +import com.yanzhu.common.security.utils.SecurityUtils; +import com.yanzhu.manage.domain.SysApplyConfig; +import com.yanzhu.manage.mapper.SysApplyConfigMapper; +import com.yanzhu.manage.service.ISysApplyConfigService; +import com.yanzhu.system.api.RemoteUserService; +import com.yanzhu.system.api.domain.SysUser; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.List; + +/** + * 系统应用注册Service业务层处理 + * + * @author JiangYuQi + * @date 2024-01-13 + */ +@Service +public class SysApplyConfigServiceImpl implements ISysApplyConfigService +{ + @Autowired + private RedisService redisService; + + @Autowired + private RemoteUserService remoteUserService; + + @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) { + redisService.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.setPrivateKey(StringUtils.randomString(25)); + sysApplyConfig.setCreateBy(SecurityUtils.getUsername()); + sysApplyConfig.setCreateTime(DateUtils.getNowDate()); + int res = sysApplyConfigMapper.insertSysApplyConfig(sysApplyConfig); + if(res>0){ + SysUser sysUser = new SysUser(); + sysUser.setComId(sysApplyConfig.getDeptId()); + sysUser.setDeptId(sysApplyConfig.getDeptId()); + sysUser.setUserName(sysApplyConfig.getAppId()); + sysUser.setUserType(UserTypeEnums.DJRY.getCode()); + sysUser.setNickName(sysApplyConfig.getAppId()); + sysUser.setPassword(SecurityUtils.encryptPassword(sysApplyConfig.getPrivateKey())); + sysUser.setStatus("0"); + sysUser.setCreateBy("AppId登录创建用户"); + sysUser.setUpdateBy(SecurityUtils.getUsername()); + sysUser.setUpdateTime(DateUtils.getNowDate()); + remoteUserService.registerAppIdUserInfo(sysUser,SecurityConstants.INNER); + 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/yanzhu-modules/yanzhu-manage/src/main/resources/bootstrap.yml b/yanzhu-modules/yanzhu-manage/src/main/resources/bootstrap.yml index f7c13a8b..30e02acb 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/resources/bootstrap.yml +++ b/yanzhu-modules/yanzhu-manage/src/main/resources/bootstrap.yml @@ -23,7 +23,7 @@ spring: # 工作空间配置 # namespace: a113aa27-4d61-46e0-81d6-9cede0457f0d # 服务分组 - #group: lijun + group: JiangYuQi config: # 配置中心地址 server-addr: @discovery.server-addr@ diff --git a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserController.java b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserController.java index 2de76f76..4f18dffd 100644 --- a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserController.java +++ b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/controller/SysUserController.java @@ -205,6 +205,7 @@ public class SysUserController extends BaseController { SysUser sysUser = userService.selectByPhone(phone); return R.ok(sysUser); } + /** * 获取当前用户信息 */ @@ -237,7 +238,7 @@ public class SysUserController extends BaseController { @InnerAuth @PostMapping("/register") public R register(@RequestBody SysUser sysUser) { - String username = sysUser.getUserName(); + //String username = sysUser.getUserName(); if (Objects.isNull(sysUser.getUserType()) || Objects.equals(UserTypeEnums.XTRY.getCode(), sysUser.getUserType()) || Objects.equals(UserTypeEnums.XMRY.getCode(), sysUser.getUserType())) { if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { return R.fail("当前系统没有开启注册功能!"); @@ -249,6 +250,15 @@ public class SysUserController extends BaseController { return R.ok(userService.registerUser(sysUser)); } + /** + * 注册用户信息 + */ + @InnerAuth + @PostMapping("/registerAppIdUser") + public R registerAppIdUser(@RequestBody SysUser sysUser) { + return R.ok(userService.registerAppIdUser(sysUser)); + } + /** * 删除用户角色 */ diff --git a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysUserService.java b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysUserService.java index d3eb6245..5b9e7b51 100644 --- a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysUserService.java +++ b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysUserService.java @@ -165,6 +165,13 @@ public interface ISysUserService */ public Long registerUser(SysUser user); + /** + * 注册用户信息 + * @param user 用户信息 + * @return + */ + public Long registerAppIdUser(SysUser user); + /** * 删除用户角色 * @param user diff --git a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysUserServiceImpl.java b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysUserServiceImpl.java index a3301d15..f5909809 100644 --- a/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysUserServiceImpl.java +++ b/yanzhu-modules/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysUserServiceImpl.java @@ -683,6 +683,20 @@ public class SysUserServiceImpl implements ISysUserService return userId; } + /** + * 注册用户信息 + * @param user 用户信息 + * @return + */ + public Long registerAppIdUser(SysUser user){ + int rows = userMapper.insertUser(user); + if(rows>0){ + return user.getUserId(); + }else{ + return null; + } + } + /** * 删除用户角色 * @param user diff --git a/yanzhu-ui-app/miniprogram/project.config.json b/yanzhu-ui-app/miniprogram/project.config.json index 6dd437da..270e3e58 100644 --- a/yanzhu-ui-app/miniprogram/project.config.json +++ b/yanzhu-ui-app/miniprogram/project.config.json @@ -1,7 +1,7 @@ { "appid": "wx46466c7828eede2b", "compileType": "miniprogram", - "libVersion": "3.6.0", + "libVersion": "3.8.9", "packOptions": { "ignore": [], "include": [] diff --git a/yanzhu-ui-vue3/src/api/manage/applyConfig.js b/yanzhu-ui-vue3/src/api/manage/applyConfig.js new file mode 100644 index 00000000..0db434cd --- /dev/null +++ b/yanzhu-ui-vue3/src/api/manage/applyConfig.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询系统应用注册列表 +export function listApplyConfig(query) { + return request({ + url: '/manage/applyConfig/list', + method: 'get', + params: query + }) +} + +// 查询系统应用注册详细 +export function getApplyConfig(id) { + return request({ + url: '/manage/applyConfig/' + id, + method: 'get' + }) +} + +// 新增系统应用注册 +export function addApplyConfig(data) { + return request({ + url: '/manage/applyConfig', + method: 'post', + data: data + }) +} + +// 修改系统应用注册 +export function updateApplyConfig(data) { + return request({ + url: '/manage/applyConfig', + method: 'put', + data: data + }) +} + +// 删除系统应用注册 +export function delApplyConfig(id) { + return request({ + url: '/manage/applyConfig/' + id, + method: 'delete' + }) +} diff --git a/yanzhu-ui-vue3/src/assets/icons/svg/aq.svg b/yanzhu-ui-vue3/src/assets/icons/svg/aq.svg new file mode 100644 index 00000000..b4f198c9 --- /dev/null +++ b/yanzhu-ui-vue3/src/assets/icons/svg/aq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/yanzhu-ui-vue3/src/assets/icons/svg/zl.svg b/yanzhu-ui-vue3/src/assets/icons/svg/zl.svg new file mode 100644 index 00000000..f82bd6a6 --- /dev/null +++ b/yanzhu-ui-vue3/src/assets/icons/svg/zl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/yanzhu-ui-vue3/src/views/manage/applyConfig/index.vue b/yanzhu-ui-vue3/src/views/manage/applyConfig/index.vue new file mode 100644 index 00000000..1e0ec1b8 --- /dev/null +++ b/yanzhu-ui-vue3/src/views/manage/applyConfig/index.vue @@ -0,0 +1,304 @@ + + + diff --git a/yanzhu-ui-vue3/src/views/manage/attendance_cfg/index.vue b/yanzhu-ui-vue3/src/views/manage/attendance_cfg/index.vue index 5c3660e2..31ae8bad 100644 --- a/yanzhu-ui-vue3/src/views/manage/attendance_cfg/index.vue +++ b/yanzhu-ui-vue3/src/views/manage/attendance_cfg/index.vue @@ -102,13 +102,13 @@ - +