package com.nuvole.four.service.impl; import com.nuvole.base.domain.SysUser; import com.nuvole.four.contants.Contants; import com.nuvole.four.domain.ChannelOrgConfig; import com.nuvole.four.domain.dto.ChannelOrgConfigDetailDto; import com.nuvole.four.domain.dto.ChannelOrgConfigDto; import com.nuvole.four.domain.dto.ConfigOrgDetailChannel; import com.nuvole.four.domain.params.ChannelOrgConfigParam; import com.nuvole.four.mapper.ChannelOrgConfigMapper; import com.nuvole.four.service.ChannelOrgConfigService; import com.nuvole.four.util.SystemUtil; import com.nuvole.util.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; /** * @Desc: 机构通道配置ServiceImpl * @Author: dqh * @Date: 2024-04-10 **/ @Slf4j @Service public class ChannelOrgConfigServiceImpl implements ChannelOrgConfigService { @Autowired private ChannelOrgConfigMapper channelOrgConfigMapper; @Autowired private ChannelInfoServiceImpl channelInfoService; @Autowired private SysOrgServiceImpl sysOrgService; @Override public List getList(Map map) { return null; } @Override public List getList(ChannelOrgConfig channelOrgConfig) { return null; } @Override public List getListOfMap(Map map) { return null; } @Override public List getListOfMap(ChannelOrgConfig channelOrgConfig) { return null; } @Override public Integer save(ChannelOrgConfig channelOrgConfig) { return null; } @Override public Integer update(ChannelOrgConfig channelOrgConfig) { return null; } @Override public Integer del(Long id) { return null; } @Override public ChannelOrgConfig getById(Long id) { return null; } @Override public ChannelOrgConfig get(Long id) { return channelOrgConfigMapper.selectByPrimaryKey(id); } @Override @Transactional(rollbackFor = Exception.class) public Integer configChannel(ChannelOrgConfigParam configParam) { Integer status = 0; ChannelOrgConfig dbIsExists = channelOrgConfigMapper.selectByOrgIdAndChannelId(configParam.getOrgId(),configParam.getChannelInfoId()); if(dbIsExists == null){ //不存在,进行新数据写入 status = insertChannelConfig(configParam); }else{ //参数校验 ChannelOrgConfig updateConfig = checkParam(dbIsExists,configParam); //校验通过后,进行数据修改 channelOrgConfigMapper.updateByPrimaryKeySelective(updateConfig); } return status; } /** * 机构通道配置数据写入 */ private Integer insertChannelConfig(ChannelOrgConfigParam configParam){ ChannelOrgConfig channelOrgConfig = new ChannelOrgConfig(); channelOrgConfig.setId(IdGenerator.getId()); BeanUtils.copyProperties(configParam,channelOrgConfig); Date date = new Date(); channelOrgConfig.setDefaultOrNot(0); channelOrgConfig.setCreateTime(date); channelOrgConfig.setUpdateTime(date); SysUser user = SystemUtil.getLoginUser(Contants.LOGIN_TYPE_PC); channelOrgConfig.setCreateBy(user.getId()); channelOrgConfig.setUpdateBy(user.getId()); channelOrgConfigMapper.insert(channelOrgConfig); return 1; } /** * 修改时参数逻辑校验 * @param dbConfig 数据库已存在的数据 * @param param 页面的请求数据 */ private ChannelOrgConfig checkParam(ChannelOrgConfig dbConfig,ChannelOrgConfigParam param){ //dbConfig.defaultOrNot=1(默认通道)、param.status=0(禁用)时;返回错误描述 if(param.getStatus() != null && (dbConfig.getDefaultOrNot().equals(1) && param.getStatus().equals(0))){ throw new IllegalArgumentException("当前为默认通道,不能禁用"); } //dbConfig.status=0(禁用)、param.defaultOrNot=1(默认通道)时;返回错误描述 if(param.getDefaultOrNot() != null && (dbConfig.getStatus().equals(0) && param.getDefaultOrNot().equals(1))){ throw new IllegalArgumentException("当前通道已被禁用,不能切换为默认"); } //校验默认通道是否存在 ChannelOrgConfig defaultChannelIsExists = channelOrgConfigMapper.queryDefaultChannelByOrgId(param.getOrgId()); if(defaultChannelIsExists != null){ /* param.defaultOrNot=1(默认通道)、且 请求的通道ID和数据库的默认通道ID不等时 移除原有的默认通道,更新当前请求数据为默认通道 */ if(param.getDefaultOrNot() != null && (param.getDefaultOrNot().equals(1) && !defaultChannelIsExists.getChannelInfoId().equals(param.getChannelInfoId()))){ ChannelOrgConfig config = new ChannelOrgConfig(); config.setId(defaultChannelIsExists.getId()); config.setDefaultOrNot(0); channelOrgConfigMapper.updateByPrimaryKeySelective(config); } } //校验通过;组装要入库的更新数据 SysUser user = SystemUtil.getLoginUser(Contants.LOGIN_TYPE_PC); dbConfig.setUpdateBy(user.getId()); dbConfig.setUpdateTime(new Date()); dbConfig.setStatus(param.getStatus()); dbConfig.setDefaultOrNot(param.getDefaultOrNot()); return dbConfig; } /** * 查询机构通道配置列表 * 仅包含当前orgId的下级,不包含(二三四级等) * * @param orgId 选择的机构ID * @param orgName 查询条件机构名称 */ @Override public List queryAllChannelOrg(Long orgId, String orgName) { return channelOrgConfigMapper.selectAllList(orgId,orgName); } /** * 方法描述: 查询机构通道详情 * 详情中的通道 仅包含当前orgId对应的pId对应的通道 * @date 2024-04-11 20:04 **/ @Override public ChannelOrgConfigDetailDto getChannelOrgConfigDetail(Long orgId) { // 查询当前机构、父级机构信息 ChannelOrgConfigDetailDto dto = sysOrgService.queryNameAndParentName(orgId); if(dto == null){ return dto; } if(dto.getLv() == null){ throw new IllegalArgumentException("当前选择的机构层级为空"); } List channelList = null; switch (dto.getLv()) { case 0: case 1: // 如果机构层级=0、1(省市);查询所有通道 channelList = channelOrgConfigMapper.selectAllAndChannelInfo(orgId); break; case 2: case 3: // 如果机构层级=2、3(县、支局);查询当前机构+父级机构 所有状态=1(开启)的通道 channelList = getValidChannelsForOrg(orgId, dto.getPId()); break; default: throw new IllegalArgumentException("机构层级无效"); } dto.setChannelList(channelList); return dto; } /** * 方法描述: 查询当前机构+父级机构 所有状态=1(开启)的通道 * * @date 2024-04-12 10:27 **/ private List getValidChannelsForOrg(Long orgId, Long parentId) { List orgConfigList = channelOrgConfigMapper.selectValidByCondition(orgId, parentId); Map map = new HashMap<>(); orgConfigList.forEach(c -> { // 父级机构有,本级机构无的通道;设置数据为初始化状态 if (!c.getOrgId().equals(orgId)) { c.setStatus(0); c.setDefaultOrNot(0); } /* 本级机构有,父级也有的通道;则对父级的数据进行剔除。 使用map特性,后者覆盖替换前者; 其中后者=机构本身,前者=父级机构的通道 */ map.put(c.getChannelInfoId(),c); }); return new ArrayList<>(map.values()); } }