package com.consum.base.service; import com.consum.base.pojo.FinSysTenantParam; 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 java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.springframework.stereotype.Service; @Service public class FinSysTenantServiceImpl extends BaseServiceImpl { 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_BY_PARENT_ID = "SELECT * FROM FIN_SYS_TENANT WHERE parent_id = ?"; private static final String QUERY_BY_PARENT_CODE = "SELECT * FROM FIN_SYS_TENANT WHERE CODE = ?"; 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 "; private static final String QUERY_LIST_BY_PARENT_ID = "SELECT * FROM FIN_SYS_TENANT WHERE PARENT_ID = ? ORDER BY LV ASC"; /** * @Author :power * @Date : 2023/7/20 20:41 获取区划信息 主要用于缓存 */ 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; } private static final String QUERY_LV2_ALL = "SELECT * FROM FIN_SYS_TENANT WHERE LV < 3 ORDER BY CODE ASC"; public List queryForTree() { // 展示全部节点 return this.select(QUERY_TREE_ALL, new Object[]{}, new FinSysTenant()); } /** * @Author :power * @Date : 2023/7/20 16:34 根据id 查询下级所有节点 地市查询自己 省查询所有地市 */ 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 特殊数据 禁止其他接口使用 */ 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)); } /** * @Description 查询所有的市级带河南省的区划 * @Author wh * @Date 2023/7/20 15:29 */ public List selectByLV2() { return this.select(QUERY_LV2_ALL, new Object[]{}, new FinSysTenant()); } /** * @Description 根据父级id获取下级列表 * @Author wh * @Date 2023/7/25 13:53 */ public List getByParentId(Long parentId) { return this.select(QUERY_LIST_BY_PARENT_ID, new Object[]{parentId}, new FinSysTenant()); } /** * @Description 根据parentId查询 * @Author wh * @Date 2023/9/11 19:16 */ public FinSysTenant selectByParentId(String parentId) { List select = this.select(QUERY_BY_PARENT_ID, new Object[]{parentId}, new FinSysTenant()); if (StringUtils.isEmptyList(select)) { return null; } else { return select.get(0); } } public FinSysTenant selectByTenantId(String tenantCode) { List select = this.select(QUERY_BY_PARENT_CODE, new Object[]{tenantCode}, new FinSysTenant()); if (StringUtils.isEmptyList(select)) { return null; } else { return select.get(0); } } /** * 删除 * * @author 卢庆阳 * @date 2023/10/4 */ public int updateById(FinSysTenantParam param, FinSysTenantUser sysInfo) { FinSysTenant finSysTenant = new FinSysTenant(); finSysTenant.setTempId(param.getId()); finSysTenant.setStatus(0); finSysTenant.setIsDelete(1); finSysTenant.setModified(getCurrentDate()); finSysTenant.setUpdateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis())); finSysTenant.setUpdateBy(sysInfo.getUserName()); return this.update(finSysTenant); } /** * 添加机构 * * @author 卢庆阳 * @date 2023/10/4 */ 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) && 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(getCurrentDate()); 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 */ private 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 */ public void insertFinSysTenantBatch(List params, FinSysTenantUser sysInfo, int lv) { for (FinSysTenantParam param : params) { addFinSysTenant(param, sysInfo, lv); } } /** * 获取当前日期 * * @author 卢庆阳 * @date 2023/10/4 */ private Date getCurrentDate() { Date currentDate = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = dateFormat.format(currentDate); try { Date convertedDate = dateFormat.parse(formattedDate); } catch (ParseException e) { e.printStackTrace(); } return currentDate; } /** * 编辑 * * @author 卢庆阳 * @date 2023/10/6 */ 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(getCurrentDate()); finSysTenant.setUpdateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis())); finSysTenant.setUpdateBy(sysInfo.getUserName()); return this.update(finSysTenant); } }