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<ChannelOrgConfig> getList(Map map) {
|
return null;
|
}
|
|
@Override
|
public List<ChannelOrgConfig> getList(ChannelOrgConfig channelOrgConfig) {
|
return null;
|
}
|
|
@Override
|
public List<Map> getListOfMap(Map map) {
|
return null;
|
}
|
|
@Override
|
public List<Map> 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<ChannelOrgConfigDto> 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<ConfigOrgDetailChannel> 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<ConfigOrgDetailChannel> getValidChannelsForOrg(Long orgId, Long parentId) {
|
List<ConfigOrgDetailChannel> orgConfigList = channelOrgConfigMapper.selectValidByCondition(orgId, parentId);
|
Map<Long,ConfigOrgDetailChannel> 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());
|
}
|
}
|