package com.consum.base.service.impl;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.consum.base.service.SLoginInfoServiceImp;
|
import com.consum.model.po.SLoginInfo;
|
import com.iplatform.model.po.S_role;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import com.consum.base.pojo.FinSysTenantParam;
|
import com.consum.base.service.FinSysTenantService;
|
import com.consum.model.po.FinSysTenant;
|
import com.consum.model.po.FinSysTenantUser;
|
import com.walker.infrastructure.utils.CollectionUtils;
|
import com.walker.infrastructure.utils.DateUtils;
|
import com.walker.infrastructure.utils.StringUtils;
|
import com.walker.jdbc.service.BaseServiceImpl;
|
|
import cn.hutool.core.date.DateUtil;
|
import org.springframework.transaction.annotation.Transactional;
|
|
@Service
|
public class FinSysTenantServiceImpl extends BaseServiceImpl implements FinSysTenantService {
|
|
private static final String QUERY_TREE_ALL =
|
"select * from FIN_SYS_TENANT where is_delete = 0 and status = 1 order by parent_id, LV ASC";
|
private static final String QUERY_TREE_BY_CODE = "SELECT * FROM FIN_SYS_TENANT ";
|
private static final String QUERY_LIST_BY_CITY_CODE =
|
"SELECT ID, NAME, CODE, CASE WHEN LV = 2 THEN ID ELSE PARENT_ID END AS PARENT_ID, LV, TENANT_TYPE, BELONG_PROVINCE FROM FIN_SYS_TENANT ";
|
|
@Autowired
|
private SLoginInfoServiceImp sLoginInfoService;
|
|
|
/**
|
* @Author :power
|
* @Date : 2023/7/20 20:41 获取区划信息 主要用于缓存
|
*/
|
@Override
|
public FinSysTenant queryOneByCode(String code) {
|
FinSysTenant tenant = new FinSysTenant();
|
tenant.setCode(code);
|
List<FinSysTenant> tenantList = this.select(tenant);
|
if (!StringUtils.isEmptyList(tenantList)) {
|
return tenantList.get(0);
|
}
|
return null;
|
}
|
|
@Override
|
public List<FinSysTenant> queryForTree() {
|
// 展示全部节点
|
return this.select(QUERY_TREE_ALL, new Object[]{}, new FinSysTenant());
|
}
|
|
/**
|
* @Author :power
|
* @Date : 2023/7/20 16:34 根据id 查询下级所有节点 地市查询自己 省查询所有地市
|
*/
|
@Override
|
public List<FinSysTenant> queryTreeById(Long id, Integer lv) {
|
if (lv == 3) {
|
return new ArrayList<>();
|
}
|
Map<String, Object> parameter = new HashMap<>(5);
|
StringBuilder sql = new StringBuilder(QUERY_TREE_BY_CODE);
|
if (id != null && lv == 1) {
|
sql.append(" WHERE PARENT_ID = :orgId OR ID = :orgId");
|
parameter.put("orgId", id);
|
}
|
if (id != null && lv == 2) {
|
sql.append(" WHERE ID = :orgId");
|
parameter.put("orgId", id);
|
}
|
return this.select(sql.toString(), parameter, new FinSysTenant());
|
}
|
|
/**
|
* @Author :power
|
* @Date : 2023/7/21 14:46 特殊数据 禁止其他接口使用
|
*/
|
@Override
|
public Map<Long, List<FinSysTenant>> queryCountyByCityCode(Long id, Integer lv) {
|
Map<String, Object> parameter = new HashMap<>(5);
|
StringBuilder sql = new StringBuilder(QUERY_LIST_BY_CITY_CODE);
|
if (id != null && (lv == 2 || lv == 3)) {
|
sql.append(" WHERE LV >= 2 ");
|
sql.append(" AND (PARENT_ID = :orgId OR ID = :orgId ) ");
|
parameter.put("orgId", id);
|
} else {
|
sql.append(" WHERE LV > 1 ");
|
sql.append(" AND PARENT_ID IS NOT NULL ");
|
}
|
sql.append(" ORDER BY PARENT_ID ,ID ");
|
List<FinSysTenant> list = this.select(sql.toString(), parameter, new FinSysTenant());
|
// return list.stream().filter(tenant ->
|
// Objects.nonNull(tenant.getParentId())).collect(Collectors.groupingBy(FinSysTenant::getParentId));
|
return list.stream().collect(Collectors.groupingBy(FinSysTenant::getParentId));
|
}
|
|
/**
|
* 删除
|
*
|
* @author 卢庆阳
|
* @date 2023/10/4
|
*/
|
@Override
|
public int updateById(FinSysTenantParam param, FinSysTenantUser sysInfo) {
|
FinSysTenant finSysTenant = new FinSysTenant();
|
finSysTenant.setTempId(param.getId());
|
finSysTenant.setStatus(0);
|
finSysTenant.setIsDelete(1);
|
finSysTenant.setModified(DateUtils.getDate("yyyy-MM-dd HH:mm:ss"));
|
finSysTenant.setUpdateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
finSysTenant.setUpdateBy(sysInfo.getUserName());
|
return this.update(finSysTenant);
|
}
|
|
/**
|
* 添加机构
|
*
|
* @author 卢庆阳
|
* @date 2023/10/4
|
*/
|
@Override
|
public int addFinSysTenant(FinSysTenantParam param, FinSysTenantUser sysInfo, int lv) {
|
FinSysTenant finSysTenant = new FinSysTenant();
|
|
// id和tempId
|
StringBuilder sql = new StringBuilder("SELECT max(id) FROM fin_sys_tenant WHERE 1=1");
|
HashMap<String, Object> paramts = new HashMap<>();
|
|
sql.append(" and parent_id =:parent_id");
|
paramts.put("parent_id", param.getParentId());
|
|
List<Map<String, Object>> list = this.select(sql.toString(), paramts);
|
long id = 0L;
|
if (!CollectionUtils.isEmpty(list) && list.get(0).get("max(id)")!=null) {
|
id = (Long) list.get(0).get("max(id)") + 1;
|
} else {
|
id = param.getParentId() * 1000 + 1;
|
}
|
finSysTenant.setTempId(id);
|
finSysTenant.setId(id);
|
finSysTenant.setStatus(param.getStatus());
|
|
finSysTenant.setParentId(param.getParentId());
|
finSysTenant.setCode(param.getCode());
|
// 设置详细地址及经纬度
|
finSysTenant.setName(param.getName());
|
finSysTenant.setCreateTime3(DateUtil.date());
|
finSysTenant.setCreateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
finSysTenant.setSummary(param.getSummary());
|
finSysTenant.setCreateBy(sysInfo.getUserName());
|
// 设置各层级id及名称
|
finSysTenant.setLv(lv);
|
setLvIdAndName(param, finSysTenant, id, lv);
|
|
return this.insert(finSysTenant);
|
}
|
|
/**
|
* 设置各层级id及名称
|
*
|
* @author 卢庆阳
|
* @date 2023/10/4
|
*/
|
public void setLvIdAndName(FinSysTenantParam param, FinSysTenant finSysTenant, long id, int lv) {
|
if (lv == 2) { // 新增市级机构
|
// 查询上一级 - 省级
|
FinSysTenant finSysTenant1 = this.get(new FinSysTenant(param.getParentId()));
|
if (finSysTenant1 != null) {
|
finSysTenant.setLv1Id(finSysTenant1.getId());
|
finSysTenant.setLv1Name(finSysTenant1.getName());
|
finSysTenant.setLv2Id(id);
|
finSysTenant.setLv2Name(param.getName());
|
}
|
} else if (lv == 3) { // 新增县级机构
|
// 查询上一级 - 市级
|
FinSysTenant finSysTenant2 = this.get(new FinSysTenant(param.getParentId()));
|
if (finSysTenant2 != null) {
|
// 查询上一级 - 省级
|
FinSysTenant finSysTenant1 = this.get(new FinSysTenant(finSysTenant2.getParentId()));
|
|
finSysTenant.setLv1Id(finSysTenant1.getId());
|
finSysTenant.setLv1Name(finSysTenant1.getName());
|
finSysTenant.setLv2Id(finSysTenant2.getId());
|
finSysTenant.setLv2Name(finSysTenant2.getName());
|
finSysTenant.setLv3Id(id);
|
finSysTenant.setLv3Name(param.getName());
|
}
|
} else if (lv == 4) { // 新增支局机构
|
// 查询上一级 - 县级
|
FinSysTenant finSysTenant3 = this.get(new FinSysTenant(param.getParentId()));
|
if (finSysTenant3 != null) {
|
// 查询上一级 - 市级
|
FinSysTenant finSysTenant2 = this.get(new FinSysTenant(finSysTenant3.getParentId()));
|
if (finSysTenant2 != null) {
|
// 查询上一级 - 省级
|
FinSysTenant sysTenant1 = this.get(new FinSysTenant(finSysTenant2.getParentId()));
|
if (sysTenant1 != null) {
|
finSysTenant.setLv1Id(sysTenant1.getId());
|
finSysTenant.setLv1Name(sysTenant1.getName());
|
finSysTenant.setLv2Id(finSysTenant2.getId());
|
finSysTenant.setLv2Name(finSysTenant2.getName());
|
finSysTenant.setLv3Id(finSysTenant3.getId());
|
finSysTenant.setLv3Name(finSysTenant3.getName());
|
finSysTenant.setLv4Id(id);
|
finSysTenant.setLv4Name(param.getName());
|
}
|
}
|
}
|
}
|
}
|
|
/**
|
* 批量添加机构
|
*
|
* @author jlq
|
* @date 2023/10/9
|
*/
|
@Override
|
public void insertFinSysTenantBatch(List<FinSysTenantParam> params, FinSysTenantUser sysInfo, int lv) {
|
for (FinSysTenantParam param : params) {
|
addFinSysTenant(param, sysInfo, lv);
|
}
|
}
|
|
/**
|
* 编辑
|
*
|
* @author 卢庆阳
|
* @date 2023/10/6
|
*/
|
@Override
|
public int updateFinSysTenant(FinSysTenant finSysTenant, FinSysTenantUser sysInfo) {
|
Integer lv = finSysTenant.getLv();
|
if (lv == 1) {
|
finSysTenant.setLv1Name(finSysTenant.getName());
|
} else if (lv == 2) {
|
finSysTenant.setLv2Name(finSysTenant.getName());
|
} else {
|
finSysTenant.setLv3Name(finSysTenant.getName());
|
}
|
finSysTenant.setModified(DateUtil.date());
|
finSysTenant.setUpdateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
finSysTenant.setUpdateBy(sysInfo.getUserName());
|
return this.update(finSysTenant);
|
}
|
|
@Override
|
public FinSysTenant selectById(Long id) {
|
FinSysTenant tenant = new FinSysTenant();
|
tenant.setTempId(id);
|
return this.get(tenant);
|
}
|
|
@Override
|
public FinSysTenant selectByName(String tenantName) {
|
FinSysTenant tenant = new FinSysTenant();
|
tenant.setName(tenantName);
|
return this.select(tenant).stream().findFirst().orElse(null);
|
}
|
|
@Override
|
public FinSysTenant selectByNameAndPid(Long pid, String tenantName) {
|
FinSysTenant tenant = new FinSysTenant();
|
tenant.setName(tenantName);
|
tenant.setParentId(pid);
|
return this.select(tenant).stream().findFirst().orElse(null);
|
}
|
|
@Override
|
public FinSysTenant selectByNameAndPid100(Long pid, String tenantName) {
|
FinSysTenant tenant = new FinSysTenant();
|
tenant.setName(tenantName);
|
tenant.setParentId(100L);
|
return this.select(tenant).stream().findFirst().orElse(null);
|
}
|
|
@Override
|
public FinSysTenant selectByNameAndPid0(Long pid, String tenantName) {
|
FinSysTenant tenant = new FinSysTenant();
|
tenant.setName(tenantName);
|
tenant.setParentId(0L);
|
return this.select(tenant).stream().findFirst().orElse(null);
|
}
|
|
/**
|
* 修改登录日志的信息,加上登陆人,登录人的部门
|
*
|
* @param sysUserName 用户name
|
*/
|
@Override
|
@Transactional(readOnly = false)
|
public void changeSLoginInfo(String sysUserName) {
|
// 查询当前登录用户的最后一条日志
|
Map<String, Object> parameter = new HashMap();
|
parameter.put("userName", sysUserName);
|
StringBuilder whStr = new StringBuilder(" order by login_time desc LIMIT 1 ");
|
List<SLoginInfo> select = select(new SLoginInfo(), whStr.toString(), parameter);
|
if (!CollectionUtil.isEmpty(select) && select.size() == 1) {
|
// 查询用户关联的机构部门和姓名
|
SLoginInfo sLoginInfo = select.get(0);
|
StringBuilder selSql = new StringBuilder("SELECT fstu.USER_NAME userName,fst.NAME tenantName,fstd.NAME sysDeptName FROM\n" +
|
"\tFIN_SYS_TENANT_USER fstu LEFT JOIN fin_sys_tenant fst ON fst.id = fstu.TENANT_ID LEFT JOIN fin_sys_tenant_department fstd ON fstd.id = fstu.SYS_DEPT_ID \n" +
|
"WHERE fstu.IS_DELETE = 0 ");
|
selSql.append(" AND fstu.USER_NAME =:userName");
|
parameter.put("userName", sysUserName);
|
List<Map<String, Object>> selected = select(selSql.toString(), parameter);
|
Object unit = null;
|
Object name = null;
|
if (!CollectionUtil.isEmpty(selected)) {
|
Map<String, Object> stringObjectMap = selected.get(0);
|
name = stringObjectMap.get("userName");
|
unit = stringObjectMap.get("sysDeptName");
|
}
|
if (unit != null && name != null) {
|
// 如果有部门和用户名 更新日志表的数据
|
StringBuilder sb = new StringBuilder("update s_login_info set sys_user_unit = '");
|
sb.append(unit == null ? "" : unit.toString() + "',");
|
sb.append(" sys_user_name = '");
|
sb.append(name == null ? "" : name.toString() + "'");
|
sb.append(" where info_id = ");
|
sb.append(sLoginInfo.getInfoId());
|
sLoginInfoService.update(sb.toString());
|
}
|
}
|
}
|
}
|