diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/SysDictType.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/SysDictType.java index 790628d41..6b461fc11 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/SysDictType.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/SysDictType.java @@ -34,6 +34,45 @@ public class SysDictType extends BaseEntity @Excel(name = "状态", readConverterExp = "0=正常,1=停用") private String status; + /** 组织表ID */ + private Long organizationId; + + /** 组织名称 */ + private String organizationName; + + /** 一级组织表ID */ + private Long topOrganizationId; + + public Long getOrganizationId() + { + return organizationId; + } + + public void setOrganizationId(Long organizationId) + { + this.organizationId = organizationId; + } + + public String getOrganizationName() + { + return organizationName; + } + + public void setOrganizationName(String organizationName) + { + this.organizationName = organizationName; + } + + public Long getTopOrganizationId() + { + return topOrganizationId; + } + + public void setTopOrganizationId(Long topOrganizationId) + { + this.topOrganizationId = topOrganizationId; + } + public Long getDictId() { return dictId; @@ -86,6 +125,9 @@ public class SysDictType extends BaseEntity .append("dictName", getDictName()) .append("dictType", getDictType()) .append("status", getStatus()) + .append("organizationId", getOrganizationId()) + .append("organizationName", getOrganizationName()) + .append("topOrganizationId", getTopOrganizationId()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/utils/ip/IpUtil.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/utils/ip/IpUtil.java index ebdb79b58..5a348a3e4 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/utils/ip/IpUtil.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/utils/ip/IpUtil.java @@ -65,27 +65,67 @@ public class IpUtil { public static IpLocation getLocation(String ip) { IpLocation location = new IpLocation(); location.setIp(ip); - try (InputStream inputStream = IpUtils.class.getResourceAsStream("/ip2region.xdb");) { + if (StrUtil.isBlank(ip) || "unknown".equalsIgnoreCase(ip.trim())) + { + return location; + } + String ipv4 = ip.trim(); + if (ipv4.contains(",")) + { + ipv4 = ipv4.substring(0, ipv4.indexOf(',')).trim(); + } + // ip2region xdb 对 IPv6 / 非法串可能抛 ArrayIndexOutOfBoundsException,仅对 IPv4 做库查询 + if (!isLikelyIpv4(ipv4)) + { + return location; + } + try (InputStream inputStream = IpUtils.class.getResourceAsStream("/ip2region.xdb")) + { + if (inputStream == null) + { + log.warn("ip2region.xdb 未找到,跳过 IP 归属解析"); + return location; + } byte[] bytes = IoUtil.readBytes(inputStream); Searcher searcher = Searcher.newWithBuffer(bytes); - String region = searcher.search(ip); - if (StrUtil.isAllNotBlank(region)) { - // xdb返回格式 国家|区域|省份|城市|ISP, - // 只有中国的数据绝大部分精确到了城市,其他国家部分数据只能定位到国家,后前的选项全部是0 - String[] result = region.split("\\|"); - location.setCountry(ZERO.equals(result[0]) ? StrUtil.EMPTY : result[0]); - location.setProvince(ZERO.equals(result[2]) ? StrUtil.EMPTY : result[2]); - location.setCity(ZERO.equals(result[3]) ? StrUtil.EMPTY : result[3]); - location.setIsp(ZERO.equals(result[4]) ? StrUtil.EMPTY : result[4]); + try + { + String region = searcher.search(ipv4); + if (StrUtil.isNotBlank(region)) + { + // xdb返回格式 国家|区域|省份|城市|ISP, + String[] result = region.split("\\|"); + if (result.length >= 5) + { + location.setCountry(ZERO.equals(result[0]) ? StrUtil.EMPTY : result[0]); + location.setProvince(ZERO.equals(result[2]) ? StrUtil.EMPTY : result[2]); + location.setCity(ZERO.equals(result[3]) ? StrUtil.EMPTY : result[3]); + location.setIsp(ZERO.equals(result[4]) ? StrUtil.EMPTY : result[4]); + } + } } - searcher.close(); - } catch (Exception e) { - log.error("ip地址解析异常,error:", e); + finally + { + searcher.close(); + } + } + catch (Exception e) + { + log.warn("ip地址解析失败,ip={}, msg={}", ipv4, e.getMessage()); return location; } return location; } + private static boolean isLikelyIpv4(String ip) + { + if (ip == null || ip.contains(":")) + { + return false; + } + return ip.chars().filter(ch -> ch == '.').count() == 3L; + } + /** * 根据iP获取归属地信息 - 拼接 * @@ -93,7 +133,7 @@ public class IpUtil { */ public static String getLocationSplicing(String ip) { IpLocation location = getLocation(ip); - return location.getProvince()+location.getCity(); + return StrUtil.nullToEmpty(location.getProvince()) + StrUtil.nullToEmpty(location.getCity()); } public static void main(String[] args) { diff --git a/mhd-common/mhd-common-log/src/main/java/com/mhd/common/log/aspect/LogAspect.java b/mhd-common/mhd-common-log/src/main/java/com/mhd/common/log/aspect/LogAspect.java index 394e4aaf3..abbaa6569 100644 --- a/mhd-common/mhd-common-log/src/main/java/com/mhd/common/log/aspect/LogAspect.java +++ b/mhd-common/mhd-common-log/src/main/java/com/mhd/common/log/aspect/LogAspect.java @@ -80,7 +80,15 @@ public class LogAspect // 请求的地址 String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); operLog.setOperIp(ip); - operLog.setOperLocation(StrUtil.isNotEmpty(operLog.getOperIp()) ? IpUtil.getLocationSplicing(operLog.getOperIp()) : ""); + try + { + operLog.setOperLocation(StrUtil.isNotEmpty(operLog.getOperIp()) ? IpUtil.getLocationSplicing(operLog.getOperIp()) : ""); + } + catch (Throwable t) + { + log.warn("操作日志 IP 归属解析跳过: {}", t.getMessage()); + operLog.setOperLocation(""); + } operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null){ diff --git a/mhd-common/mhd-common-security/src/main/java/com/mhd/common/security/utils/DictUtils.java b/mhd-common/mhd-common-security/src/main/java/com/mhd/common/security/utils/DictUtils.java index 6eed94dc9..227d578f1 100644 --- a/mhd-common/mhd-common-security/src/main/java/com/mhd/common/security/utils/DictUtils.java +++ b/mhd-common/mhd-common-security/src/main/java/com/mhd/common/security/utils/DictUtils.java @@ -72,4 +72,13 @@ public class DictUtils { return Constants.SYS_DICT_KEY + configKey; } + + /** + * 字典缓存键:同一 dict_type 在不同组织下可并存,需带上组织维度(null 视为 0 平台) + */ + public static String dictTypeOrgCacheKey(String dictType, Long organizationId) + { + long oid = organizationId == null ? 0L : organizationId.longValue(); + return dictType + "@" + oid; + } } diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java index 1866d8a12..6618ee0f2 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/controller/SysDictTypeController.java @@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.mhd.common.core.constant.UserConstants; +import com.mhd.common.core.domain.po.UserPo; +import com.mhd.common.core.utils.StringUtils; import com.mhd.common.core.utils.poi.ExcelUtil; import com.mhd.common.core.web.controller.BaseController; import com.mhd.common.core.web.domain.AjaxResult; @@ -23,6 +25,7 @@ import com.mhd.common.log.annotation.Log; import com.mhd.common.log.enums.BusinessType; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.domain.SysDictType; +import com.mhd.system.api.model.LoginUser; /** * 数据字典信息 @@ -73,6 +76,7 @@ public class SysDictTypeController extends BaseController @PostMapping public AjaxResult add(@Validated @RequestBody SysDictType dict) { + fillDictTypeOrganization(dict); if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); @@ -81,6 +85,47 @@ public class SysDictTypeController extends BaseController return toAjax(dictTypeService.insertDictType(dict)); } + /** + * 写入组织维度:优先使用请求体中选择的组织;未传时使用当前登录用户所属组织;无登录上下文时按平台(0)处理。 + */ + private void fillDictTypeOrganization(SysDictType dict) + { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser == null || loginUser.getUserPo() == null) + { + if (dict.getOrganizationId() == null) + { + dict.setOrganizationId(0L); + } + return; + } + UserPo userPo = loginUser.getUserPo(); + if (dict.getOrganizationId() == null) + { + dict.setOrganizationId(userPo.getOrganizationId()); + if (StringUtils.isEmpty(dict.getOrganizationName())) + { + dict.setOrganizationName(userPo.getOrganizationName()); + } + if (dict.getTopOrganizationId() == null) + { + dict.setTopOrganizationId(userPo.getTopOrganizationId()); + } + } + else + { + if (dict.getTopOrganizationId() == null) + { + dict.setTopOrganizationId(userPo.getTopOrganizationId()); + } + if (StringUtils.isEmpty(dict.getOrganizationName()) + && dict.getOrganizationId().equals(userPo.getOrganizationId())) + { + dict.setOrganizationName(userPo.getOrganizationName()); + } + } + } + /** * 修改字典类型 */ @@ -89,6 +134,7 @@ public class SysDictTypeController extends BaseController @PutMapping public AjaxResult edit(@Validated @RequestBody SysDictType dict) { + fillDictTypeOrganization(dict); if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictDataMapper.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictDataMapper.java index b91b23a2a..162c54935 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictDataMapper.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictDataMapper.java @@ -56,7 +56,7 @@ public interface SysDictDataMapper extends BaseMapper * @param dictType 字典类型 * @return 字典数据 */ - public int countDictDataByType(String dictType); + int countDictDataByType(@Param("dictType") String dictType, @Param("organizationId") Long organizationId); /** * 通过字典ID删除字典数据信息 @@ -97,5 +97,15 @@ public interface SysDictDataMapper extends BaseMapper * @param newDictType 新旧字典类型 * @return 结果 */ - public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); + int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType, + @Param("organizationId") Long organizationId); + + /** + * 按字典类型批量同步字典数据的组织信息(与字典类型归属一致) + */ + int updateDictDataOrganizationByDictType(@Param("dictType") String dictType, + @Param("organizationId") Long organizationId, + @Param("organizationName") String organizationName, + @Param("topOrganizationId") Long topOrganizationId, + @Param("scopeOrganizationId") Long scopeOrganizationId); } diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java index 9984a5605..bd6d92ead 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/mapper/SysDictTypeMapper.java @@ -79,5 +79,5 @@ public interface SysDictTypeMapper * @param dictType 字典类型 * @return 结果 */ - public SysDictType checkDictTypeUnique(String dictType); + public SysDictType checkDictTypeUnique(SysDictType dictType); } diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java index f10053b47..b59dba788 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java @@ -107,8 +107,11 @@ public class SysDictDataServiceImpl extends ServiceImpl dictDatas = dictDataMapper.selectDictDataByType(dictData); - DictUtils.setDictCache(data.getDictType(), dictDatas); + DictUtils.setDictCache(DictUtils.dictTypeOrgCacheKey(data.getDictType(), oid), dictDatas); + DictUtils.removeDictCache(data.getDictType()); } } @@ -135,8 +138,11 @@ public class SysDictDataServiceImpl extends ServiceImpl dictDatas = dictDataMapper.selectDictDataByType(dictData); - DictUtils.setDictCache(data.getDictType(), dictDatas); + DictUtils.setDictCache(DictUtils.dictTypeOrgCacheKey(data.getDictType(), oid), dictDatas); + DictUtils.removeDictCache(data.getDictType()); } return row; } @@ -180,13 +186,20 @@ public class SysDictDataServiceImpl extends ServiceImpl 0) { + DictUtils.removeDictCache(DictUtils.dictTypeOrgCacheKey(sysDictData.getDictType(), oldOid)); SysDictData dictData = new SysDictData(); dictData.setDictType(data.getDictType()); + Long oid = data.getOrganizationId() != null ? data.getOrganizationId() + : (sysDictData.getOrganizationId() != null ? sysDictData.getOrganizationId() : 0L); + dictData.setOrganizationId(oid); List dictDatas = dictDataMapper.selectDictDataByType(dictData); - DictUtils.setDictCache(data.getDictType(), dictDatas); + DictUtils.setDictCache(DictUtils.dictTypeOrgCacheKey(data.getDictType(), oid), dictDatas); + DictUtils.removeDictCache(data.getDictType()); + DictUtils.removeDictCache(sysDictData.getDictType()); } return row; } diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictTypeServiceImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictTypeServiceImpl.java index 5d3d4ffac..754e01e96 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictTypeServiceImpl.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictTypeServiceImpl.java @@ -16,8 +16,10 @@ import com.mhd.common.core.constant.UserConstants; import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.utils.StringUtils; import com.mhd.common.security.utils.DictUtils; +import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.domain.SysDictData; import com.mhd.system.api.domain.SysDictType; +import com.mhd.system.api.model.LoginUser; /** * 字典 业务层处理 @@ -74,22 +76,47 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService @Override public List selectDictDataByType(String dictType) { - List dictDatas = DictUtils.getDictCache(dictType); + Long orgId = resolveLoginOrganizationIdForDict(); + String cacheKey = DictUtils.dictTypeOrgCacheKey(dictType, orgId); + List dictDatas = DictUtils.getDictCache(cacheKey); + if (StringUtils.isEmpty(dictDatas)) + { + dictDatas = DictUtils.getDictCache(dictType); + } if (StringUtils.isNotEmpty(dictDatas)) { return dictDatas; } SysDictData dictData = new SysDictData(); dictData.setDictType(dictType); + dictData.setOrganizationId(orgId); dictDatas = dictDataMapper.selectDictDataByType(dictData); if (StringUtils.isNotEmpty(dictDatas)) { - DictUtils.setDictCache(dictType, dictDatas); + DictUtils.setDictCache(cacheKey, dictDatas); return dictDatas; } return null; } + /** 字典数据按组织隔离;未登录按平台 0 */ + private Long resolveLoginOrganizationIdForDict() + { + try + { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser != null && loginUser.getUserPo() != null + && loginUser.getUserPo().getOrganizationId() != null) + { + return loginUser.getUserPo().getOrganizationId(); + } + } + catch (Exception ignored) + { + } + return 0L; + } + /** * 根据字典类型ID查询信息 * @@ -125,11 +152,13 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService for (Long dictId : dictIds) { SysDictType dictType = selectDictTypeById(dictId); - if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) + Long typeOrgId = dictType.getOrganizationId() != null ? dictType.getOrganizationId() : 0L; + if (dictDataMapper.countDictDataByType(dictType.getDictType(), typeOrgId) > 0) { throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); } dictTypeMapper.deleteDictTypeById(dictId); + DictUtils.removeDictCache(DictUtils.dictTypeOrgCacheKey(dictType.getDictType(), typeOrgId)); DictUtils.removeDictCache(dictType.getDictType()); } } @@ -142,7 +171,8 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { SysDictData dictData = new SysDictData(); dictData.setStatus("0"); - Map> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType)); + Map> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream() + .collect(Collectors.groupingBy(d -> DictUtils.dictTypeOrgCacheKey(d.getDictType(), d.getOrganizationId()))); for (Map.Entry> entry : dictDataMap.entrySet()) { DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList())); @@ -180,7 +210,9 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService int row = dictTypeMapper.insertDictType(dict); if (row > 0) { - DictUtils.setDictCache(dict.getDictType(), null); + Long oid = dict.getOrganizationId() != null ? dict.getOrganizationId() : 0L; + DictUtils.removeDictCache(DictUtils.dictTypeOrgCacheKey(dict.getDictType(), oid)); + DictUtils.removeDictCache(dict.getDictType()); } return row; } @@ -196,14 +228,27 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService public int updateDictType(SysDictType dict) { SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); - dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); + Long oldTypeOrgId = oldDict.getOrganizationId() != null ? oldDict.getOrganizationId() : 0L; + dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType(), oldTypeOrgId); int row = dictTypeMapper.updateDictType(dict); if (row > 0) { + if (dictDataMapper.countDictDataByType(dict.getDictType(), oldTypeOrgId) > 0) + { + dictDataMapper.updateDictDataOrganizationByDictType(dict.getDictType(), + dict.getOrganizationId(), dict.getOrganizationName(), dict.getTopOrganizationId(), + oldTypeOrgId); + } + DictUtils.removeDictCache(DictUtils.dictTypeOrgCacheKey(oldDict.getDictType(), oldTypeOrgId)); + DictUtils.removeDictCache(DictUtils.dictTypeOrgCacheKey(dict.getDictType(), dict.getOrganizationId())); + DictUtils.removeDictCache(oldDict.getDictType()); + DictUtils.removeDictCache(dict.getDictType()); SysDictData dictData = new SysDictData(); dictData.setDictType(dict.getDictType()); + Long newOrgId = dict.getOrganizationId() != null ? dict.getOrganizationId() : 0L; + dictData.setOrganizationId(newOrgId); List dictDatas = dictDataMapper.selectDictDataByType(dictData); - DictUtils.setDictCache(dict.getDictType(), dictDatas); + DictUtils.setDictCache(DictUtils.dictTypeOrgCacheKey(dict.getDictType(), newOrgId), dictDatas); } return row; } @@ -218,7 +263,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService public String checkDictTypeUnique(SysDictType dict) { Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); - SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); + SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict); if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { return UserConstants.NOT_UNIQUE; diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictDataMapper.xml index e21509cda..c0ba266f3 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -58,6 +58,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and (top_organization_id = #{topOrganizationId} OR is_default = 'Y') + + and (IFNULL(organization_id, 0) = #{organizationId} OR is_default = 'Y') + order by dict_sort asc @@ -73,7 +76,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -108,8 +113,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where dict_code = #{dictCode} - - update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType} + + update sys_dict_data set dict_type = #{newDictType} + where dict_type = #{oldDictType} + and IFNULL(organization_id, 0) = IFNULL(#{organizationId}, 0) + + + + update sys_dict_data + set organization_id = #{organizationId}, + organization_name = #{organizationName}, + top_organization_id = #{topOrganizationId}, + update_time = sysdate() + where dict_type = #{dictType} + and IFNULL(organization_id, 0) = IFNULL(#{scopeOrganizationId}, 0) diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictTypeMapper.xml index be77ef468..e55ad2b78 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictTypeMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -13,10 +13,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + - select dict_id, dict_name, dict_type, status, create_by, create_time, remark + select dict_id, dict_name, dict_type, status, create_by, create_time, remark, + organization_id, organization_name, top_organization_id from sys_dict_type @@ -32,6 +37,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND dict_type like concat('%', #{dictType}, '%') + + AND organization_id = #{organizationId} + + + AND (top_organization_id = #{topOrganizationId} OR IFNULL(organization_id, 0) = 0) + and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') @@ -53,11 +64,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - where dict_type = #{dictType} limit 1 + where dict_type = #{dictType} + and IFNULL(organization_id, 0) = IFNULL(#{organizationId}, 0) + limit 1 @@ -78,6 +93,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" dict_type = #{dictType}, status = #{status}, remark = #{remark}, + organization_id = #{organizationId}, + organization_name = #{organizationName}, + top_organization_id = #{topOrganizationId}, update_by = #{updateBy}, update_time = sysdate() @@ -90,6 +108,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" dict_type, status, remark, + organization_id, + organization_name, + top_organization_id, create_by, create_time )values( @@ -97,6 +118,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{dictType}, #{status}, #{remark}, + #{organizationId}, + #{organizationName}, + #{topOrganizationId}, #{createBy}, sysdate() )