diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/enums/OrgEventEnum.java b/base-service/src/main/java/com/hzya/frame/dingtalk/enums/OrgEventEnum.java new file mode 100755 index 00000000..f01431f0 --- /dev/null +++ b/base-service/src/main/java/com/hzya/frame/dingtalk/enums/OrgEventEnum.java @@ -0,0 +1,48 @@ +package com.hzya.frame.dingtalk.enums; + +/** + * @Description 通讯录事件类型 + * @Author xiangerlin + * @Date 2024/8/27 15:58 + **/ +public enum OrgEventEnum { + USER_ADD_ORG("user_add_org","通讯录用户新增"), + USER_MODIFY_ORG("user_modify_org","通讯录用户更改"), + USER_LEAVE_ORG("user_leave_org","通讯录用户离职"), + USER_ACTIVE_ORG("user_active_org","加入企业后用户激活"), + ORG_DEPT_CREATE("org_dept_create","通讯录企业部门创建"), + ORG_DEPT_MODIFY("org_dept_modify","通讯录企业部门更改"), + ORG_DEPT_REMOVE("org_dept_remove","通讯录企业部门删除"), + ; + + + private String code; + private String explain; + + OrgEventEnum(String code, String explain) { + this.code = code; + this.explain = explain; + } + + public String getCode() { + return code; + } + + public String getExplain() { + return explain; + } + + /** + * 根据code获取事件类型 + * @param code + * @return + */ + public static OrgEventEnum getByCode(String code){ + for (OrgEventEnum org : OrgEventEnum.values()) { + if (org.getCode().equals(code)){ + return org; + } + } + return null; + } +} diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkExtService.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkExtService.java new file mode 100755 index 00000000..ffbba432 --- /dev/null +++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkExtService.java @@ -0,0 +1,32 @@ +package com.hzya.frame.dingtalk.service; + +import com.alibaba.fastjson.JSONObject; +import com.hzya.frame.sysnew.application.entity.SysApplicationEntity; +import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity; + +/** + * @Description 钉钉集成扩展类 + * @Author xiangerlin + * @Date 2024/8/28 14:25 + **/ +public interface IDingTalkExtService { + + /** + * 调用这个方法初始化钉钉参数 + * @param entity + * @return + */ + SysExtensionApiEntity init(SysExtensionApiEntity entity); + + /** + * 查询配置在应用上的钉钉参数 + * @param sysApplication + * @return + */ + JSONObject getDingTalkConfig(SysApplicationEntity sysApplication); + + /** + * 清空配置缓存 + */ + void clearDingTalkConfigCatch(); +} diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkService.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkService.java new file mode 100755 index 00000000..be742955 --- /dev/null +++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkService.java @@ -0,0 +1,66 @@ +package com.hzya.frame.dingtalk.service; + +import com.dingtalk.api.request.OapiV2UserListRequest; +import com.dingtalk.api.response.OapiV2DepartmentGetResponse; +import com.dingtalk.api.response.OapiV2DepartmentListsubResponse; +import com.dingtalk.api.response.OapiV2UserGetResponse; +import com.dingtalk.api.response.OapiV2UserListResponse; + +import java.util.List; + +/** + * @Description 钉钉service + * @Author xiangerlin + * @Date 2024/8/27 16:17 + **/ +public interface IDingTalkService { + + /** + * 根据userid获取用户详情 + * @param userId 钉钉userid + * @param appKey + * @param appSecret + * @return + */ + OapiV2UserGetResponse.UserGetResponse getUserById(String userId, String appKey, String appSecret); + + /** + * 根据userid获取用户详情 + * @param userId + * @return + */ + OapiV2UserGetResponse.UserGetResponse getUserById(String userId); + + /** + * 获取部门用户列表 + * @param req 请求参数 + * @param appKey + * @param appSecret + * @return + */ + OapiV2UserListResponse.PageResult getUserListByDeptId(OapiV2UserListRequest req, String appKey, String appSecret); + /** + * 根据部门id获取部门详情 + * @param deptId 钉钉部门id + * @param appKey + * @param appSecret + * @return + */ + OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId, String appKey, String appSecret); + + /** + * 根据部门id获取部门详情 + * @param deptId + * @return + */ + OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId); + + /** + * 获取部门列表,此接口只会返回下一级部门信息 + * @param deptId 部门id,如果不传则查询一级部门 + * @param appKey + * @param appSecret + * @return + */ + List getDeptList(Long deptId, String appKey, String appSecret); +} diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkExtServiceImpl.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkExtServiceImpl.java new file mode 100755 index 00000000..dd0267f8 --- /dev/null +++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkExtServiceImpl.java @@ -0,0 +1,100 @@ +package com.hzya.frame.dingtalk.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.hzya.frame.dingtalk.service.IDingTalkExtService; +import com.hzya.frame.dingtalk.util.DingTalkAccessToken; +import com.hzya.frame.sysnew.application.api.entity.SysApplicationApiEntity; +import com.hzya.frame.sysnew.application.apiPara.dao.ISysApplicationApiParaDao; +import com.hzya.frame.sysnew.application.apiPara.entity.SysApplicationApiParaEntity; +import com.hzya.frame.sysnew.application.apiPara.service.ISysApplicationApiParaService; +import com.hzya.frame.sysnew.application.entity.SysApplicationEntity; +import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Description 钉钉集成扩展类 + * @Author xiangerlin + * @Date 2024/8/28 14:25 + **/ +@Service(value = "dingTalkExtService") +public class DingTalkExtServiceImpl implements IDingTalkExtService { + + + @Resource + private ISysApplicationApiParaDao sysApplicationApiParaDao; + private final ConcurrentHashMap dingTalkMap = new ConcurrentHashMap<>(); + /** + * 调用这个方法初始化钉钉参数 + * + * @param entity + * @return + */ + @Override + public SysExtensionApiEntity init(SysExtensionApiEntity entity) { + Map headers = entity.getHeaders(); + if (null == headers){ + headers = new HashMap<>(); + } + SysApplicationEntity receiveApp = entity.getReceiveApp(); + //查询应用上配置的参数 + JSONObject dingTalkConfig = getDingTalkConfig(receiveApp); + //给token赋值 + entity.setQuerys("access_token="+DingTalkAccessToken.getAccessToken(dingTalkConfig.getString("appKey"),dingTalkConfig.getString("appSecret"))); + return entity; + } + + /** + * 查询配置在应用上的钉钉参数 + * + * @param sysApplication + * @return + */ + @Override + public JSONObject getDingTalkConfig(SysApplicationEntity sysApplication) { + if (null != sysApplication && StrUtil.isNotEmpty(sysApplication.getId()) && null != sysApplication.getAppId()){ + JSONObject jsonObject = new JSONObject(); + String key = sysApplication.getAppId()+"dingTalk"; + if (null != dingTalkMap.get(key)){ + return dingTalkMap.get(key); + }else { + //查询应用上配置的参数 + SysApplicationApiParaEntity paraEntity = new SysApplicationApiParaEntity(); + paraEntity.setAppId(sysApplication.getId()); + List paraList = sysApplicationApiParaDao.query(paraEntity); + if (CollectionUtils.isNotEmpty(paraList)) { + List appKeyList = paraList.stream().filter(p -> p.getInterfaceKey().equals("appKey")).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(appKeyList)) { + jsonObject.put("appKey", appKeyList.get(0).getInterfaceValue()); + } + List appSecretList = paraList.stream().filter(p -> p.getInterfaceKey().equals("appSecret")).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(appSecretList)) { + jsonObject.put("appSecret", appSecretList.get(0).getInterfaceValue()); + } + dingTalkMap.put(key,jsonObject); + return dingTalkMap.get(key); + } + } + } + return null; + } + + /** + * 清空配置缓存 + */ + @Override + public void clearDingTalkConfigCatch() { + dingTalkMap.clear(); + } +} diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkServiceImpl.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkServiceImpl.java new file mode 100755 index 00000000..8e74ae9d --- /dev/null +++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkServiceImpl.java @@ -0,0 +1,164 @@ +package com.hzya.frame.dingtalk.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiV2DepartmentGetRequest; +import com.dingtalk.api.request.OapiV2DepartmentListsubRequest; +import com.dingtalk.api.request.OapiV2UserGetRequest; +import com.dingtalk.api.request.OapiV2UserListRequest; +import com.dingtalk.api.response.OapiV2DepartmentGetResponse; +import com.dingtalk.api.response.OapiV2DepartmentListsubResponse; +import com.dingtalk.api.response.OapiV2UserGetResponse; +import com.dingtalk.api.response.OapiV2UserListResponse; +import com.hzya.frame.dingtalk.service.IDingTalkService; +import com.hzya.frame.dingtalk.util.DingTalkAccessToken; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description 钉钉service + * @Author xiangerlin + * @Date 2024/8/27 16:17 + **/ +@Service(value = "dingTalkService") +public class DingTalkServiceImpl implements IDingTalkService { + Logger logger = LoggerFactory.getLogger(getClass()); + @Value("${dingtalk.appKey:}") + private String dAppKey; + @Value("${dingtalk.appSecret:}") + private String dAppSecret; + + + /** + * 根据userid获取用户详情 + * + * @param userId 钉钉userid + * @param appKey + * @param appSecret + * @return + */ + @Override + public OapiV2UserGetResponse.UserGetResponse getUserById(String userId, String appKey, String appSecret) { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get"); + OapiV2UserGetRequest req = new OapiV2UserGetRequest(); + req.setUserid(userId); + req.setLanguage("zh_CN"); + try { + OapiV2UserGetResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret)); + if (rsp.isSuccess()){ + OapiV2UserGetResponse.UserGetResponse result = rsp.getResult(); + String s = JSONObject.toJSONString(result); + logger.info("人员详情信息:{}",s); + return result; + } + }catch (Exception e){ + logger.error("根据部门id获取钉钉用户详情出错:{}",e); + } + return null; + } + + /** + * 根据userid获取用户详情 + * + * @param userId + * @return + */ + @Override + public OapiV2UserGetResponse.UserGetResponse getUserById(String userId) { + return getUserById(userId,dAppKey,dAppSecret); + } + + /** + * 获取部门用户列表 + * + * @param req 请求参数 + * @param appKey + * @param appSecret + * @return + */ + @Override + public OapiV2UserListResponse.PageResult getUserListByDeptId(OapiV2UserListRequest req, String appKey, String appSecret) { + try { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list"); + req.setSize(100L);//每页最大只能查100条 + req.setOrderField("modify_desc"); + req.setContainAccessLimit(false); + req.setLanguage("zh_CN"); + OapiV2UserListResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret)); + OapiV2UserListResponse.PageResult result = rsp.getResult(); + return result; + }catch (Exception e){ + e.printStackTrace(); + } + return null; + } + + /** + * 根据部门id获取部门详情 + * + * @param deptId 钉钉部门id + * @param appKey + * @param appSecret + * @return + */ + @Override + public OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId, String appKey, String appSecret) { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get"); + OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest(); + req.setDeptId(deptId); + req.setLanguage("zh_CN"); + try { + OapiV2DepartmentGetResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret)); + if (rsp.isSuccess()){ + OapiV2DepartmentGetResponse.DeptGetResponse result = rsp.getResult(); + String s = JSONObject.toJSONString(result); + logger.info("部门详情信息:{}",s); + return result; + } + }catch(Exception e){ + logger.error("根据部门id获取钉钉部门出错:{}",e); + } + return null; + } + + /** + * 根据部门id获取部门详情 + * + * @param deptId + * @return + */ + @Override + public OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId) { + return getDeptById(deptId,dAppKey,dAppSecret); + } + + /** + * 获取部门列表,此接口只会返回下一级部门信息 + * @param deptId 部门id,如果不传则查询一级部门 + * @param appKey + * @param appSecret + * @return + */ + @Override + public List getDeptList(Long deptId,String appKey,String appSecret) { + try { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub"); + OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest(); + req.setDeptId(deptId); + req.setLanguage("zh_CN"); + OapiV2DepartmentListsubResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret)); + if (rsp.isSuccess()){ + List result = rsp.getResult(); + return result; + } + }catch (Exception e){ + logger.error("获取部门列表接口出错:{}",e); + } + return null; + } +} diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/util/DingTalkAccessToken.java b/base-service/src/main/java/com/hzya/frame/dingtalk/util/DingTalkAccessToken.java new file mode 100755 index 00000000..eb951180 --- /dev/null +++ b/base-service/src/main/java/com/hzya/frame/dingtalk/util/DingTalkAccessToken.java @@ -0,0 +1,103 @@ +package com.hzya.frame.dingtalk.util; + +import cn.hutool.core.util.StrUtil; +import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse; +import com.aliyun.tea.TeaException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; + +import java.time.Instant; + +/** + * @Description 钉钉获取accessToken + * @Author xiangerlin + * @Date 2024/8/27 14:05 + **/ +public class DingTalkAccessToken { + static Logger logger = LoggerFactory.getLogger(DingTalkAccessToken.class); + //token + private static String accessToken; + //过期时间 + private static Instant expireTime; + private static final Long CACHE_EXPIRY_TIME = 7000L; // 缓存有效时间(秒) + //应用key + private static String appKey; + //应用密钥 + private static String appSecret; + @Value("${dingtalk.appKey:}") + public static void setAppKey(String appKey) { + DingTalkAccessToken.appKey = appKey; + } + @Value("${dingtalk.appSecret:}") + public static void setAppSecret(String appSecret) { + DingTalkAccessToken.appSecret = appSecret; + } + + /** + * 获取token + * @return + */ + public static String getAccessToken(){ + return getAccessToken(appKey,appSecret); + } + /** + * 获取accessToken + * + * @param appKey + * @param appSecret + * @return + */ + public static String getAccessToken(String appKey,String appSecret) { + //判断是否过期 如果没过期直接返回 + if (null != accessToken && expireTime != null && Instant.now().isBefore(expireTime)) { + return accessToken; + } + //获取新的accessToken + accessToken = fetchNewAccessToken(appKey,appSecret); + //过期时间设置成当前事件+7000s,预留200s的时间 + expireTime = Instant.now().plusSeconds(CACHE_EXPIRY_TIME); + return accessToken; + } + + /** + * 获取新的accessToken + * + * @return + */ + private static String fetchNewAccessToken(String appKey,String appSecret) { + try { + //查询应用上配置的钉钉信息 + if (StrUtil.isNotEmpty(appKey) && StrUtil.isNotEmpty(appSecret)) { + //查询应用上的信息 + com.aliyun.dingtalkoauth2_1_0.Client client = DingTalkAccessToken.createClient(); + com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest() + .setAppKey(appKey) + .setAppSecret(appSecret); + GetAccessTokenResponse accessToken = client.getAccessToken(getAccessTokenRequest); + String accessToken1 = accessToken.getBody().getAccessToken(); + return accessToken1; + } + } catch (Exception _err) { + TeaException err = new TeaException(_err.getMessage(), _err); + if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { + // err 中含有 code 和 message 属性,可帮助开发定位问题 + } + logger.error("获取钉钉token出错:{}", _err); + } + return null; + } + + /** + * 使用 Token 初始化账号Client + * + * @return Client + * @throws Exception + */ + private static com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); + config.protocol = "https"; + config.regionId = "central"; + return new com.aliyun.dingtalkoauth2_1_0.Client(config); + } +} diff --git a/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java b/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java index 6ee65aa3..cda6cf9c 100644 --- a/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java +++ b/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java @@ -50,6 +50,7 @@ public class HomeServiceImpl extends BaseService implements for (int a = 0; a < sysApplicationEntities.size(); a++) { if(homeEntities.get(i).getAppId()!= null && sysApplicationEntities.get(a).getId().equals(homeEntities.get(i).getAppId())){ homeEntities.get(i).setPath(sysApplicationEntities.get(a).getAppLogo()); + homeEntities.get(i).setName(sysApplicationEntities.get(a).getName()); continue; } } diff --git a/base-service/src/main/java/com/hzya/frame/mdm/entity/MdmFiledsRuleDto.java b/base-service/src/main/java/com/hzya/frame/mdm/entity/MdmFiledsRuleDto.java new file mode 100644 index 00000000..f6bd998b --- /dev/null +++ b/base-service/src/main/java/com/hzya/frame/mdm/entity/MdmFiledsRuleDto.java @@ -0,0 +1,77 @@ +package com.hzya.frame.mdm.entity; + + +public class MdmFiledsRuleDto { + /** 主数据模版ID */ + private String mdmId; + /** 模版数据库id */ + private String dbId; + /** 模版数据库字段id */ + private String filedId; + /** 字段类型 1、select 2、treeselect */ + private String filedType; + /** 字段服务 */ + private String typeFiled; + /** 字段服务 */ + private String id; + /** 字段服务 */ + private String dataId; + + public String getMdmId() { + return mdmId; + } + + public void setMdmId(String mdmId) { + this.mdmId = mdmId; + } + + public String getDbId() { + return dbId; + } + + public void setDbId(String dbId) { + this.dbId = dbId; + } + + public String getFiledId() { + return filedId; + } + + public void setFiledId(String filedId) { + this.filedId = filedId; + } + + public String getFiledType() { + return filedType; + } + + public void setFiledType(String filedType) { + this.filedType = filedType; + } + + public String getTypeFiled() { + return typeFiled; + } + + public void setTypeFiled(String typeFiled) { + this.typeFiled = typeFiled; + } + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDataId() { + return dataId; + } + + public void setDataId(String dataId) { + this.dataId = dataId; + } +} + diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java index 1940d472..7c936af7 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java @@ -3,6 +3,7 @@ package com.hzya.frame.mdm.mdmModule.dao; import com.alibaba.fastjson.JSONObject; import com.hzya.frame.mdm.entity.MdmDataDto; import com.hzya.frame.mdm.entity.MdmDto; +import com.hzya.frame.mdm.entity.MdmFiledsRuleDto; import com.hzya.frame.mdm.entity.MdmQuery; import com.hzya.frame.mdm.mdmModule.entity.MdmModuleEntity; import com.hzya.frame.basedao.dao.IBaseDao; @@ -68,5 +69,7 @@ public interface IMdmModuleDao extends IBaseDao { void updataTreeUpData(Map updateMaps); void updataTreeUpDataDetail(Map updateMaps); + + MdmFiledsRuleDto queryDataId(MdmFiledsRuleDto mdmFiledsRuleDto); } diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java index c9d4ea70..56e4777e 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.hzya.frame.basedao.dao.MybatisGenericDao; import com.hzya.frame.mdm.entity.MdmDataDto; import com.hzya.frame.mdm.entity.MdmDto; +import com.hzya.frame.mdm.entity.MdmFiledsRuleDto; import com.hzya.frame.mdm.entity.MdmQuery; import com.hzya.frame.mdm.mdmModule.dao.IMdmModuleDao; import com.hzya.frame.mdm.mdmModule.entity.MdmModuleEntity; @@ -181,6 +182,12 @@ public class MdmModuleDaoImpl extends MybatisGenericDao super.update(getSqlIdPrifx() + "updataTreeUpDataDetail", maps); } + @Override + public MdmFiledsRuleDto queryDataId(MdmFiledsRuleDto mdmFiledsRuleDto) { + MdmFiledsRuleDto o = (MdmFiledsRuleDto) super.selectOne(getSqlIdPrifx() + "queryDataId", mdmFiledsRuleDto); + return o; + } + @Override public List queryMdMFields(Map maps) { List o = (List) super.selectList(getSqlIdPrifx() + "queryMdMFields", maps); diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml index 629067a8..8403c031 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml @@ -1086,5 +1086,14 @@ where id = #{id} AND b.sts = 'Y' AND b.data_status != 'N' + + + + diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java index 7169f57f..c32080d1 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java @@ -2340,7 +2340,20 @@ public class MdmModuleServiceImpl extends BaseService i xf.setCreate(); sysButtonConfigDao.save(xf); } - + if ("viewData".equals(mdmModuleViewButtonEntities.get(i).getButtonValue())) { + SysButtonConfigEntity xf = new SysButtonConfigEntity(); + xf.setCode("viewData"); + xf.setNameCh("查看数据格式"); + xf.setNameEn("viewData"); + xf.setMenuId(module.getId()); + xf.setIconName(""); + xf.setStyles(""); + xf.setBtnFunction("viewData"); + xf.setRemark("查看数据格式"); + xf.setSorts(i + 1L); + xf.setCreate(); + sysButtonConfigDao.save(xf); + } } } diff --git a/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java b/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java index fff31302..70de4325 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java @@ -87,6 +87,15 @@ public interface IMdmService { * @Date 9:40 上午 2023/10/18 **/ JsonResultEntity queryMdmShowDetailsData(JSONObject jsonObject); + + /** + * @param jsonObject + * @return com.hzya.frame.web.entity.JsonResultEntity + * @Author lvleigang + * @Description 主数据详情数据字典 + * @Date 9:40 上午 2023/10/18 + **/ + JsonResultEntity queryMdmShowDetailsDictionary(JSONObject jsonObject); // /** * @param jsonObject diff --git a/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java index fcb46154..b5d7e716 100644 --- a/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java +++ b/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java @@ -101,12 +101,6 @@ public class MdmServiceImpl implements IMdmService { @Resource private IMdmServiceCache mdmServiceCache; @Resource - private ISysMenuConfigDao sysMenuConfigDao; - @Resource - private ISysButtonConfigDao sysButtonConfigDao; - @Resource - private ISysPopedomOperateDao sysPopedomOperateDao; - @Resource private IMdmModuleDbDao mdmModuleDbDao; @Resource private ISysUserDao sysUserDao; @@ -1381,15 +1375,188 @@ public class MdmServiceImpl implements IMdmService { } } - //if (tablename != null && !"".equals(tablename)) { - // Map queryData = new HashMap<>(); - // queryData.put("tableName", tablename);//表名 - // queryData.put("id", entity.getId());//字段 - // List> datas = mdmModuleDbDao.getServiceByDistributeId(queryData); - // jsonObject.put(tablename, datas); - //} + + return BaseResult.getSuccessMessageEntity("获取数据成功", jsonObject); + } + + + /** + * @param object + * @return com.hzya.frame.web.entity.JsonResultEntity + * @Author lvleigang + * @Description 主数据详情数据字典 + * @Date 9:40 上午 2023/10/18 + **/ + @Override + public JsonResultEntity queryMdmShowDetailsDictionary(JSONObject object) { + MdmDto entity = getData("jsonStr", object, MdmDto.class); + if (entity == null) { + return BaseResult.getFailureMessageEntity("参数不允许为空"); + } + if (entity.getMdmCode() == null || "".equals(entity.getMdmCode())) { + return BaseResult.getFailureMessageEntity("系统错误"); + } + if (entity.getId() == null || "".equals(entity.getId())) { + return BaseResult.getFailureMessageEntity("系统错误"); + } + //查询模版 + + MdmModuleEntity mdmModuleEntity = mdmServiceCache.getMdmModuleEntity(entity.getMdmCode()); + if (mdmModuleEntity == null) { + return BaseResult.getFailureMessageEntity("系统错误"); + } + //查询数据源主表 + MdmModuleDbEntity mdmModuleDbEntity = new MdmModuleDbEntity(); + mdmModuleDbEntity.setMdmId(mdmModuleEntity.getId()); + mdmModuleDbEntity.setSts("Y"); + List mdmModuleDbEntityList = mdmServiceCache.queryMdmModuleDb(mdmModuleDbEntity); + if (mdmModuleDbEntityList == null || mdmModuleDbEntityList.size() == 0) { + return BaseResult.getFailureMessageEntity("系统错误"); + } + MdmModuleDbFiledsEntity queryFild = new MdmModuleDbFiledsEntity(); + queryFild.setMdmId(mdmModuleEntity.getId()); + queryFild.setSts("Y"); + List mdmModuleDbFiledsEntities = mdmServiceCache.queryMdmModuleDbFileds(queryFild); + + MdmModuleDbFiledsRuleEntity mdmModuleDbFiledsRuleEntity = new MdmModuleDbFiledsRuleEntity(); + mdmModuleDbFiledsRuleEntity.setMdmId(mdmModuleEntity.getId()); + mdmModuleDbFiledsRuleEntity.setSts("Y"); + List mdmModuleDbFiledsRuleEntities = mdmModuleDbFiledsRuleDao.queryBase(mdmModuleDbFiledsRuleEntity); + + List mdmFiledsRuleDtos = new ArrayList<>(); + if(mdmModuleDbFiledsRuleEntities != null && mdmModuleDbFiledsRuleEntities.size() > 0){ + for (int i = 0; i < mdmModuleDbFiledsRuleEntities.size(); i++) { + if("treeselect".equals(mdmModuleDbFiledsRuleEntities.get(i).getRuleValue()) || "select".equals(mdmModuleDbFiledsRuleEntities.get(i).getRuleValue())){ + MdmFiledsRuleDto mdmFiledsRuleDto = new MdmFiledsRuleDto(); + mdmFiledsRuleDto.setDbId(mdmModuleDbFiledsRuleEntities.get(i).getDbId()); + mdmFiledsRuleDto.setFiledId(mdmModuleDbFiledsRuleEntities.get(i).getFiledId()); + mdmFiledsRuleDto.setMdmId(mdmModuleDbFiledsRuleEntities.get(i).getMdmId()); + mdmFiledsRuleDto.setFiledType(mdmModuleDbFiledsRuleEntities.get(i).getRuleValue()); + mdmFiledsRuleDtos.add(mdmFiledsRuleDto); + } + } + } + + if(mdmFiledsRuleDtos != null && mdmFiledsRuleDtos.size() > 0){ + for (int i = 0; i < mdmFiledsRuleDtos.size(); i++) { + for (int i1 = 0; i1 < mdmModuleDbFiledsRuleEntities.size(); i1++) { + if(mdmFiledsRuleDtos.get(i).getFiledId().equals(mdmModuleDbFiledsRuleEntities.get(i1).getFiledId()) + && "service".equals(mdmModuleDbFiledsRuleEntities.get(i1).getRuleCode())){ + mdmFiledsRuleDtos.get(i).setTypeFiled(mdmModuleDbFiledsRuleEntities.get(i1).getRuleValue()); + } + } + } + } + + //String tablename = null; + JSONObject jsonObject = new JSONObject(); + jsonObject.put("appName","数智中台"); + jsonObject.put("appCode","800004"); + jsonObject.put("mdmCode",entity.getMdmCode()); + jsonObject.put("optionName","admin"); + for (int i = 0; i < mdmModuleDbEntityList.size(); i++) { + if ("1".equals(mdmModuleDbEntityList.get(i).getDbType()) || "2".equals(mdmModuleDbEntityList.get(i).getDbType())) { + //查询数据 + Map queryData = new HashMap<>(); + queryData.put("tableName", mdmModuleDbEntityList.get(i).getDbName());//表名 + if ("1".equals(mdmModuleDbEntityList.get(i).getDbType())) { + queryData.put("detailFlag", false);//是否明细 + queryData.put("id", entity.getId());//字段 + HashMap datas = mdmModuleDbDao.getServiceDataById(queryData); + convertKeysToLowerCase(datas); + JSONObject zbdata = new JSONObject(); + if(mdmModuleDbFiledsEntities != null && mdmModuleDbFiledsEntities.size() > 0){ + for (int i2 = 0; i2 < mdmModuleDbFiledsEntities.size(); i2++) { + if(mdmModuleDbFiledsEntities.get(i2).getDbId().equals(mdmModuleDbEntityList.get(i).getId())){ + if("1".equals(mdmModuleDbFiledsEntities.get(i2).getViewType())){ + //判断是否是下拉类型 + Object data = datas.get(mdmModuleDbFiledsEntities.get(i2).getEnName()); + if(mdmFiledsRuleDtos != null && mdmFiledsRuleDtos.size() > 0){ + for (int i1 = 0; i1 < mdmFiledsRuleDtos.size(); i1++) { + if(mdmModuleDbFiledsEntities.get(i2).getId().equals(mdmFiledsRuleDtos.get(i1).getFiledId())){ + //查询对应的data_id + String strData = String.valueOf(data); + int index = strData.lastIndexOf(','); + if (index!= -1) { + strData = strData.substring(index + 1); + } + mdmFiledsRuleDtos.get(i1).setId(strData); + MdmFiledsRuleDto mdmFiledsRuleDto = mdmModuleDao.queryDataId(mdmFiledsRuleDtos.get(i1)); + if(mdmFiledsRuleDto != null && mdmFiledsRuleDto.getDataId() != null && !"".equals(mdmFiledsRuleDto.getDataId())){ + data = mdmFiledsRuleDto.getDataId(); + }else { + data = null; + } + } + } + } + zbdata.put(mdmModuleDbFiledsEntities.get(i2).getEnName(),data); + } + } + } + } + jsonObject.put(mdmModuleDbEntityList.get(i).getDbName(), zbdata); + } else { + queryData.put("detailFlag", true);//是否明细 + queryData.put("id", entity.getId());//字段 + List> datas = mdmModuleDbDao.getServiceByFormmainId(queryData); + convertKeysToLowerCase(datas); + List mxDataList = new ArrayList<>(); + if(datas != null && datas.size() > 0){ + for (int i1 = 0; i1 < datas.size(); i1++) { + JSONObject mxData = new JSONObject(); + if(mdmModuleDbFiledsEntities != null && mdmModuleDbFiledsEntities.size() > 0){ + for (int i2 = 0; i2 < mdmModuleDbFiledsEntities.size(); i2++) { + if(mdmModuleDbFiledsEntities.get(i2).getDbId().equals(mdmModuleDbEntityList.get(i).getId())){ + if("1".equals(mdmModuleDbFiledsEntities.get(i2).getViewType())){ + + //判断是否是下拉类型 + Object data = datas.get(i1).get(mdmModuleDbFiledsEntities.get(i2).getEnName()); + if(mdmFiledsRuleDtos != null && mdmFiledsRuleDtos.size() > 0){ + for (int b = 0; b < mdmFiledsRuleDtos.size(); b++) { + if(mdmModuleDbFiledsEntities.get(i2).getId().equals(mdmFiledsRuleDtos.get(b).getFiledId())){ + //查询对应的data_id + String strData = String.valueOf(data); + int index = strData.lastIndexOf(','); + if (index!= -1) { + strData = strData.substring(index + 1); + } + mdmFiledsRuleDtos.get(b).setId(strData); + MdmFiledsRuleDto mdmFiledsRuleDto = mdmModuleDao.queryDataId(mdmFiledsRuleDtos.get(b)); + if(mdmFiledsRuleDto != null && mdmFiledsRuleDto.getDataId() != null && !"".equals(mdmFiledsRuleDto.getDataId())){ + data = mdmFiledsRuleDto.getDataId(); + }else { + data = null; + } + } + } + } + mxData.put(mdmModuleDbFiledsEntities.get(i2).getEnName(),data); + } + } + } + } + mxDataList.add(mxData); + } + }else { + JSONObject mxData = new JSONObject(); + if(mdmModuleDbFiledsEntities != null && mdmModuleDbFiledsEntities.size() > 0){ + for (int i2 = 0; i2 < mdmModuleDbFiledsEntities.size(); i2++) { + if(mdmModuleDbFiledsEntities.get(i2).getDbId().equals(mdmModuleDbEntityList.get(i).getId())){ + if("1".equals(mdmModuleDbFiledsEntities.get(i2).getViewType())){ + mxData.put(mdmModuleDbFiledsEntities.get(i2).getEnName(),null); + } + } + } + } + mxDataList.add(mxData); + } + jsonObject.put(mdmModuleDbEntityList.get(i).getDbName(), mxDataList); + } + } + } return BaseResult.getSuccessMessageEntity("获取数据成功", jsonObject); } diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java index 25ec9090..f8dd60b1 100644 --- a/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java +++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java @@ -3,6 +3,7 @@ package com.hzya.frame.sysnew.application.service; import com.alibaba.fastjson.JSONObject; import com.hzya.frame.sysnew.application.entity.SysApplicationEntity; import com.hzya.frame.basedao.service.IBaseService; +import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity; import com.hzya.frame.sysnew.messageManageLog.entity.SysMessageManageLogEntity; import com.hzya.frame.web.entity.JsonResultEntity; @@ -432,4 +433,8 @@ public interface ISysApplicationService extends IBaseService 0) { + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject object1 = jsonArray.getJSONObject(i); + if(i > 0){ + stringBuilder.append("&"); + } + stringBuilder.append(object1.getString("parameterName")).append("=").append(object1.getString("example")); + } + } + } + sysExtensionApiEntity.setQuerys(stringBuilder.toString()); + return sysExtensionApiEntity; + } + + @Override + public SysExtensionApiEntity setDDUserId(SysExtensionApiEntity sysExtensionApiEntity) { + String bodys = sysExtensionApiEntity.getBodys(); + StringBuilder stringBuilder = new StringBuilder(); + JSONObject jsonObject = JSONObject.parseObject(bodys); + stringBuilder.append("userid=").append(jsonObject.getString("userid")); + stringBuilder.append("&"); + stringBuilder.append("access_token=").append(jsonObject.getString("access_token")); + sysExtensionApiEntity.setQuerys(stringBuilder.toString()); + return sysExtensionApiEntity; + } + + } diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java index 985b999d..80a7fc3a 100644 --- a/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java +++ b/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java @@ -181,7 +181,7 @@ public class LoginServiceImpl implements ILoginService { String requestType = entity.getString("UserAgent");// pc端还是移动端 JSONObject bodyParams = new JSONObject(); bodyParams.put("code",code); - String result = HttpRequest.post("url"). + String result = HttpRequest.post(url). header("appId",appId). header("apiCode",userApiCode). header("publicKey","ZJYAWb7lhAUTYqekPkU+uHJv1/ObJxb7dT7sD8HPRDGAgyhCe7eDIk+3zDUT+v578prj"). @@ -192,26 +192,24 @@ public class LoginServiceImpl implements ILoginService { JSONObject resultJson = JSONObject.parseObject(result); boolean flag = resultJson.getBoolean("flag"); if(!flag){ - throw new BaseSystemException("请求错误:"+resultJson.getString("msg")); + return BaseResult.getFailureMessageEntity("请求错误:"+resultJson.getString("msg")); } - String userid = resultJson.getString("userid"); + String userid = resultJson.getJSONObject("attribute").getJSONObject("result").getString("userid"); if(StrUtil.isEmpty(userid)){ - return BaseResult.getFailureMessageEntity("认证失败!当前用户未绑定钉钉","1005"); + return BaseResult.getFailureMessageEntity("认证失败!获取钉钉userid错误","1006"); } userEntity.setDdUserId( userid); userEntity = sysUserDao.queryOne(userEntity); if(null == userEntity ){ - if(StrUtil.isEmpty(userid)){ - JSONObject object = new JSONObject(); - object.put("userid",userid); - return BaseResult.getFailureMessageEntity("认证失败!当前用户未绑定钉钉","1005",object); - } + JSONObject object = new JSONObject(); + object.put("userid",userid); + return BaseResult.getFailureMessageEntity("认证失败!当前用户未绑定钉钉","1005",object); } break; case "weChat": break; default: - throw new BaseSystemException("错误的App类型:"+appType+" 支持的app类型有:DD,weChat"); + return BaseResult.getFailureMessageEntity("错误的App类型:"+appType+" 支持的app类型有:DD,weChat"); } //登录 @@ -266,6 +264,18 @@ public class LoginServiceImpl implements ILoginService { } + private JSONObject getAccess_token(String appId,String apiCode) { + String result = HttpRequest.post(url). + header("appId",appId). + header("apiCode",apiCode). + header("publicKey","ZJYAWb7lhAUTYqekPkU+uHJv1/ObJxb7dT7sD8HPRDGAgyhCe7eDIk+3zDUT+v578prj"). + header("secretKey","fviZnLBsQUAGF8w8FSOdJi7XlIm/XAZclMxRagDLfTyJFlvnIBF3w66Hrpfzs8cYj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA="). + execute(). + body(); + JSONObject resultJson = JSONObject.parseObject(result); + return resultJson; + } + protected T getData(String key, JSONObject jsonObject, Class clz) { if (checkStr(jsonObject.getString(key))) { diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java index c6218dc0..67bb5e5a 100644 --- a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java +++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java @@ -21,7 +21,9 @@ public class SysMessageManageLogEntity extends BaseEntity { private String messageCode; /** 发送者应用 */ private String sendApp; - /** 发送者 */ + private String sendAppName; + + /** 发送者 */ private String sendApi; /** 接收者编码 */ private String receiveCode; @@ -196,5 +198,13 @@ public class SysMessageManageLogEntity extends BaseEntity { public void setCreateTimeEnd(Date createTimeEnd) { this.createTimeEnd = createTimeEnd; } + + public String getSendAppName() { + return sendAppName; + } + + public void setSendAppName(String sendAppName) { + this.sendAppName = sendAppName; + } } diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java index e8fbb850..2813a75e 100644 --- a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java +++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java @@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.hzya.frame.basedao.service.impl.BaseService; +import com.hzya.frame.sysnew.application.dao.ISysApplicationDao; +import com.hzya.frame.sysnew.application.entity.SysApplicationEntity; import com.hzya.frame.sysnew.messageManageLogBack.detail.server.ISysMessageManageLogDetailBackService; import com.hzya.frame.sysnew.messageManageLogBack.service.ISysMessageManageLogBackService; import com.hzya.frame.sysnew.messageManageLogDetail.dao.ISysMessageManageLogDetailDao; @@ -41,7 +43,8 @@ public class SysMessageManageLogServiceImpl extends BaseServiceand sts = #{sts} and org_id = #{org_id} and company_id = #{companyId} + and dd_user_id = #{ddUserId} + and wx_user_id = #{wxUserId} and sts='Y' order by sorts asc diff --git a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java index 75e73ca6..1227f020 100644 --- a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java +++ b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java @@ -52,7 +52,6 @@ public class EntranceController { protected ISysApplicationService sysApplicationService; @RequestMapping(value = "/option") @ResponseBody - @CrossOrigin(origins = "*") public JsonResultEntity option(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception { return entranceService.doBusiness(servletRequest, servletResponse); }