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 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; @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 "; /** * @Author :power * @Date : 2023/7/20 20:41 获取区划信息 主要用于缓存 */ @Override public FinSysTenant queryOneByCode(String code) { FinSysTenant tenant = new FinSysTenant(); tenant.setCode(code); List tenantList = this.select(tenant); if (!StringUtils.isEmptyList(tenantList)) { return tenantList.get(0); } return null; } @Override public List queryForTree() { // 展示全部节点 return this.select(QUERY_TREE_ALL, new Object[] {}, new FinSysTenant()); } /** * @Author :power * @Date : 2023/7/20 16:34 根据id 查询下级所有节点 地市查询自己 省查询所有地市 */ @Override public List queryTreeById(Long id, Integer lv) { if (lv == 3) { return new ArrayList<>(); } Map 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> queryCountyByCityCode(Long id, Integer lv) { Map 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 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 paramts = new HashMap<>(); sql.append(" and parent_id =:parent_id"); paramts.put("parent_id", param.getParentId()); List> list = this.select(sql.toString(), paramts); long id = 0L; if (!CollectionUtils.isEmpty(list)) { 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 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); } }