@@ -0,0 +1,19 @@ | |||||
package com.ningdatech.pmapi.scheduler.contants; | |||||
import java.math.BigDecimal; | |||||
/** | |||||
* @author PoffyZhang | |||||
* @Classname TaskContant | |||||
* @Description | |||||
* @Date 2023/1/18 11:00 | |||||
*/ | |||||
public interface TaskContant { | |||||
class Host { | |||||
public static final String HOST_ZPF = "LAPTOP-NQGEQP03"; | |||||
public static final String HOST_CMM2 = "DESKTOP-KN1L6HL"; | |||||
public static final String HOST_CMM = "LAPTOP-PCISPN2O"; | |||||
public static final String HOST_207 = "iZbp13nwyvib53j4j1p2xoZ"; | |||||
} | |||||
} |
@@ -0,0 +1,58 @@ | |||||
package com.ningdatech.pmapi.scheduler.task; | |||||
import cn.hutool.core.collection.CollUtil; | |||||
import cn.hutool.core.date.StopWatch; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.ningdatech.basic.exception.BizException; | |||||
import com.ningdatech.pmapi.scheduler.contants.TaskContant; | |||||
import com.ningdatech.pmapi.sys.contants.RegionContant; | |||||
import com.ningdatech.pmapi.sys.entity.Region; | |||||
import com.ningdatech.pmapi.sys.service.IRegionService; | |||||
import lombok.RequiredArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.springframework.scheduling.annotation.Scheduled; | |||||
import org.springframework.stereotype.Component; | |||||
import java.net.InetAddress; | |||||
import java.net.UnknownHostException; | |||||
import java.util.List; | |||||
/** | |||||
* @author ZPF | |||||
* @description | |||||
* @since 2023/1/18 08:54 | |||||
*/ | |||||
@Component | |||||
@Slf4j | |||||
@RequiredArgsConstructor | |||||
public class InitProcessTask { | |||||
private final IRegionService regionService; | |||||
// 定时更新车辆状态 | |||||
@Scheduled(cron = "0 52 15 18 1 ?") | |||||
public void doTask() throws UnknownHostException { | |||||
if (TaskContant.Host.HOST_ZPF.equals(InetAddress.getLocalHost().getHostName())) { | |||||
log.info("=========== 初始化丽水二期 系统表单和流程配置 ======== 任务开始"); | |||||
StopWatch stopWatch = new StopWatch(); | |||||
stopWatch.start(); | |||||
//1.查出丽水市下的 区县 分别去初始化 表单和流程配置数据 | |||||
List<Region> regions = regionService.list(Wrappers.lambdaQuery(Region.class) | |||||
.eq(Region::getDeleted,Boolean.FALSE) | |||||
.eq(Region::getParentCode, RegionContant.LS_REGION_CODE)); | |||||
if(CollUtil.isEmpty(regions)){ | |||||
throw new BizException("丽水地区数据为空 任务结束!"); | |||||
} | |||||
//2.首先插入表单默认配置 | |||||
for(Region region : regions){ | |||||
log.info("当前初始化的是 【{}】",region.getName()); | |||||
} | |||||
stopWatch.stop(); | |||||
log.info("=========== 更新车辆在线状态 ======== 任务结束 {}s",stopWatch.getTotalTimeSeconds()); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,20 @@ | |||||
package com.ningdatech.pmapi.sys.contants; | |||||
/** | |||||
* @Classname RegionContant | |||||
* @Description | |||||
* @Date 2023/1/18 9:37 | |||||
* @Created by PoffyZhang | |||||
*/ | |||||
public interface RegionContant { | |||||
public static final Integer FIRST_LEVEL = 1; | |||||
public static final Integer SECOND_LEVEL = 2; | |||||
public static final Integer THIRD_LEVEL = 3; | |||||
public static final Long EMPTY_PARENT_ID = 0L; | |||||
//丽水地区CODE | |||||
public static final String LS_REGION_CODE = "331100"; | |||||
} |
@@ -0,0 +1,10 @@ | |||||
package com.ningdatech.pmapi.sys.controller; | |||||
/** | |||||
* @Classname SysProcdefController | |||||
* @Description | |||||
* @Date 2023/1/18 14:28 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
public class SysFormController { | |||||
} |
@@ -0,0 +1,39 @@ | |||||
package com.ningdatech.pmapi.sys.controller; | |||||
import com.ningdatech.basic.model.PageVo; | |||||
import com.wflow.bean.vo.OrgProcdefVo; | |||||
import io.swagger.annotations.Api; | |||||
import io.swagger.annotations.ApiOperation; | |||||
import lombok.RequiredArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.springframework.validation.annotation.Validated; | |||||
import org.springframework.web.bind.annotation.GetMapping; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RequestParam; | |||||
import org.springframework.web.bind.annotation.RestController; | |||||
/** | |||||
* @Classname SysProcdefController | |||||
* @Description | |||||
* @Date 2023/1/18 14:28 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Slf4j | |||||
@Validated | |||||
@RestController | |||||
@RequestMapping("/api/v1/sys/procdef") | |||||
@Api(value = "SysProcdef", tags = "系统管理-流程配置") | |||||
@RequiredArgsConstructor | |||||
public class SysProcdefController { | |||||
// private final | |||||
@ApiOperation(value = "系统流程配置列表", notes = "系统流程配置列表") | |||||
@GetMapping("/list") | |||||
public PageVo<OrgProcdefVo> list(@RequestParam String regionCode, @RequestParam(defaultValue = "1") Integer pageNum, | |||||
@RequestParam(defaultValue = "10") Integer pageSize) { | |||||
// return orgProcdefService.getOrgProcessByOrgCode(orgCode,pageNum,pageSize); | |||||
return PageVo.empty(); | |||||
} | |||||
} |
@@ -0,0 +1,86 @@ | |||||
package com.ningdatech.pmapi.sys.convert; | |||||
import cn.hutool.core.util.ObjectUtil; | |||||
import com.ningdatech.basic.util.CollUtils; | |||||
import com.ningdatech.pmapi.sys.entity.Region; | |||||
import com.ningdatech.pmapi.sys.entity.dto.RegionDTO; | |||||
import com.ningdatech.pmapi.sys.entity.dto.RegionTreeDTO; | |||||
import com.ningdatech.pmapi.sys.entity.vo.RegionTreeVO; | |||||
import org.apache.commons.collections4.CollectionUtils; | |||||
import org.apache.commons.lang3.tuple.Pair; | |||||
import java.util.ArrayList; | |||||
import java.util.Collections; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.stream.Collectors; | |||||
/** | |||||
* <p> | |||||
* RegionConverter | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 10:31 2022/10/12 | |||||
*/ | |||||
public class RegionConverter { | |||||
public static RegionDTO toRegionDTO(Region region) { | |||||
RegionDTO dto = new RegionDTO(); | |||||
dto.setRegionLevel(region.getRegionLevel()); | |||||
dto.setRegionName(region.getName()); | |||||
dto.setParentCode(region.getParentCode()); | |||||
dto.setRegionCode(region.getRegionCode()); | |||||
dto.setId(region.getId()); | |||||
dto.setDeleted(region.getDeleted()); | |||||
dto.setGovUnit(region.getGovUnit()); | |||||
dto.setParentId(region.getParentId()); | |||||
dto.unionCode(); | |||||
return dto; | |||||
} | |||||
public static List<RegionTreeDTO> toRegionTreeDTOList(List<RegionDTO> regionDTOList) { | |||||
if (CollectionUtils.isEmpty(regionDTOList)) { | |||||
return new ArrayList<>(); | |||||
} | |||||
return regionDTOList.stream().map(RegionConverter::toRegionTreeDTO).collect(Collectors.toList()); | |||||
} | |||||
public static RegionTreeDTO toRegionTreeDTO(RegionDTO regionDTO) { | |||||
RegionTreeDTO treeDto = new RegionTreeDTO(); | |||||
treeDto.setLevel(regionDTO.getRegionLevel()); | |||||
treeDto.setName(regionDTO.getRegionName()); | |||||
treeDto.setParentCode(regionDTO.getParentCode()); | |||||
treeDto.setRegionCode(regionDTO.getRegionCode()); | |||||
treeDto.setUnionCode(regionDTO.getUnionCode()); | |||||
treeDto.setId(regionDTO.getId()); | |||||
treeDto.setDeleted(regionDTO.getDeleted()); | |||||
treeDto.setGovUnit(regionDTO.getGovUnit()); | |||||
return treeDto; | |||||
} | |||||
public static List<RegionTreeVO> toRegionTree(Long parentId, Map<Long, List<RegionDTO>> regions, | |||||
boolean showDeleted) { | |||||
List<RegionTreeVO> treeList = new ArrayList<>(); | |||||
List<RegionDTO> children = regions.getOrDefault(parentId, Collections.emptyList()); | |||||
for (RegionDTO region : children) { | |||||
if (!showDeleted && region.getDeleted()) { | |||||
continue; | |||||
} | |||||
RegionTreeVO treeNode = new RegionTreeVO(); | |||||
treeNode.setRegionLevel(region.getRegionLevel()); | |||||
treeNode.setName(region.getRegionName()); | |||||
treeNode.setParentCode(region.getParentCode()); | |||||
treeNode.setRegionCode(region.getRegionCode()); | |||||
List<RegionDTO> regionList = regions.get(region.getId()); | |||||
if (CollectionUtils.isNotEmpty(regionList)) { | |||||
treeNode.setChildren(toRegionTree(region.getId(), regions, showDeleted)); | |||||
} | |||||
treeNode.setId(region.getId()); | |||||
treeNode.setUnionCode(region.getUnionCode()); | |||||
treeNode.setGovUnit(region.getGovUnit()); | |||||
treeList.add(treeNode); | |||||
} | |||||
return treeList; | |||||
} | |||||
} |
@@ -0,0 +1,46 @@ | |||||
package com.ningdatech.pmapi.sys.entity; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import lombok.Data; | |||||
import java.io.Serializable; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* <p> | |||||
* Region - 地域实体 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 10:33 2022/10/12 | |||||
*/ | |||||
@Data | |||||
@TableName("nd_region") | |||||
public class Region implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Long id; | |||||
private String regionCode; | |||||
private String name; | |||||
private Integer regionLevel; | |||||
private String govUnit; | |||||
private String parentCode; | |||||
private Long parentId; | |||||
private LocalDateTime createOn; | |||||
private LocalDateTime updateOn; | |||||
private Boolean deleted; | |||||
} |
@@ -0,0 +1,56 @@ | |||||
package com.ningdatech.pmapi.sys.entity.dto; | |||||
import lombok.Builder; | |||||
import lombok.Data; | |||||
import lombok.experimental.Tolerate; | |||||
/** | |||||
* @author liuxinxin | |||||
* @date 2022/7/22 上午9:12 | |||||
*/ | |||||
@Data | |||||
@Builder | |||||
public class RegionDTO { | |||||
@Tolerate | |||||
public RegionDTO() { | |||||
} | |||||
/** | |||||
* 区域码 | |||||
*/ | |||||
private String regionCode; | |||||
/** | |||||
* 地区名 | |||||
*/ | |||||
private String regionName; | |||||
/** | |||||
* 地区级别 | |||||
*/ | |||||
private Integer regionLevel; | |||||
/** | |||||
* 地区父级code 当parent_code 为 -1 时为顶级区域 | |||||
*/ | |||||
private String parentCode; | |||||
/** | |||||
* 唯一编码:regionCode##regionName##regionLevel | |||||
*/ | |||||
private String unionCode; | |||||
private Long id; | |||||
private Boolean deleted; | |||||
private String govUnit; | |||||
private Long parentId; | |||||
public void unionCode() { | |||||
this.unionCode = String.format("%s##%s##%s", this.regionCode, this.regionName, this.regionLevel); | |||||
} | |||||
} |
@@ -0,0 +1,46 @@ | |||||
package com.ningdatech.pmapi.sys.entity.dto; | |||||
import lombok.Data; | |||||
import java.util.List; | |||||
/** | |||||
* @author liuxinxin | |||||
* @date 2022/7/22 上午9:08 | |||||
*/ | |||||
@Data | |||||
public class RegionTreeDTO { | |||||
/** | |||||
* 区域码 | |||||
*/ | |||||
private String regionCode; | |||||
/** | |||||
* 地区名 | |||||
*/ | |||||
private String name; | |||||
/** | |||||
* 地区级别 | |||||
*/ | |||||
private Integer level; | |||||
/** | |||||
* 地区父级code 当parent_code 为 -1 时为顶级区域 | |||||
*/ | |||||
private String parentCode; | |||||
private String unionCode; | |||||
private List<RegionTreeDTO> children; | |||||
private Long id; | |||||
private String mapData; | |||||
private Boolean deleted; | |||||
private String govUnit; | |||||
} |
@@ -0,0 +1,53 @@ | |||||
package com.ningdatech.pmapi.sys.entity.vo; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import lombok.ToString; | |||||
import javax.validation.constraints.NotBlank; | |||||
import javax.validation.constraints.NotNull; | |||||
import java.util.List; | |||||
/** | |||||
* <p> | |||||
* RegionTreeVO | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 10:35 2022/10/12 | |||||
*/ | |||||
@Data | |||||
@ToString(callSuper = true) | |||||
@ApiModel(value = "RegionTreeVO", description = "区域树状结构VO") | |||||
public class RegionTreeVO { | |||||
private Long id; | |||||
@ApiModelProperty("区域码") | |||||
@NotBlank(message = "地区编码不能为空") | |||||
private String regionCode; | |||||
@ApiModelProperty("地区名") | |||||
@NotBlank(message = "地区名称不能为空") | |||||
private String name; | |||||
@ApiModelProperty("级别") | |||||
@NotNull(message = "级别不能为空") | |||||
private Integer regionLevel; | |||||
@ApiModelProperty("区域级别") | |||||
@NotBlank(message = "区域级别不能为空") | |||||
private String govUnit; | |||||
@ApiModelProperty("地区父级编码:-1为顶级区域") | |||||
@NotBlank(message = "地区父级编码不能为空") | |||||
private String parentCode; | |||||
@ApiModelProperty("子区域") | |||||
private List<RegionTreeVO> children; | |||||
@ApiModelProperty("唯一编码:regionCode##name##level") | |||||
private String unionCode; | |||||
} |
@@ -0,0 +1,35 @@ | |||||
package com.ningdatech.pmapi.sys.manage; | |||||
import com.ningdatech.basic.util.CollUtils; | |||||
import com.ningdatech.pmapi.sys.convert.RegionConverter; | |||||
import com.ningdatech.pmapi.sys.entity.dto.RegionDTO; | |||||
import com.ningdatech.pmapi.sys.entity.vo.RegionTreeVO; | |||||
import com.ningdatech.pmapi.sys.service.IRegionService; | |||||
import lombok.RequiredArgsConstructor; | |||||
import org.springframework.stereotype.Component; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | |||||
* <p> | |||||
* RegionManage | |||||
* </p> | |||||
* | |||||
* @author ZPF | |||||
* @since 10:39 2023/1/18 | |||||
*/ | |||||
@Component | |||||
@RequiredArgsConstructor | |||||
public class RegionManage { | |||||
private final IRegionService regionService; | |||||
private final static Long ROOT_PARENT_ID = 1L; | |||||
public List<RegionTreeVO> getRegionTree() { | |||||
List<RegionDTO> regions = regionService.queryAll(); | |||||
Map<Long, List<RegionDTO>> regionMap = CollUtils.group(regions, RegionDTO::getParentId); | |||||
return RegionConverter.toRegionTree(ROOT_PARENT_ID, regionMap, false); | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.sys.mapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.ningdatech.pmapi.sys.entity.Region; | |||||
/** | |||||
* <p> | |||||
* Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author ZPF | |||||
* @since 2023-1-18 | |||||
*/ | |||||
public interface RegionMapper extends BaseMapper<Region> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.pmapi.sys.mapper.RegionMapper"> | |||||
</mapper> |
@@ -0,0 +1,51 @@ | |||||
package com.ningdatech.pmapi.sys.service; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
import com.ningdatech.pmapi.sys.entity.Region; | |||||
import com.ningdatech.pmapi.sys.entity.dto.RegionDTO; | |||||
import java.util.List; | |||||
/** | |||||
* <p> | |||||
* 地域管理 服务类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-1-18 | |||||
*/ | |||||
public interface IRegionService extends IService<Region> { | |||||
/** | |||||
* 查询所有区域 | |||||
* | |||||
* @return 所有区域 | |||||
*/ | |||||
List<RegionDTO> queryAll(); | |||||
/** | |||||
* 查询大于等与该级别的所有区域 | |||||
* | |||||
* @param regionLevel | |||||
* @return 区域集合 | |||||
*/ | |||||
List<RegionDTO> listGeLevel(int regionLevel); | |||||
/** | |||||
* 是否为父节点 | |||||
* | |||||
* @param regionId 区域ID | |||||
* @return boolean | |||||
**/ | |||||
boolean isParentRegion(Long regionId); | |||||
/** | |||||
* 获取当前区域的本级 | |||||
* | |||||
* @param parentId 区域ID | |||||
* @param regionCode 区域code | |||||
* @return 区域ID | |||||
**/ | |||||
Long getRegionIdByParentIdWithSameRegionCode(Long parentId, String regionCode); | |||||
} |
@@ -0,0 +1,56 @@ | |||||
package com.ningdatech.pmapi.sys.service.impl; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.ningdatech.basic.util.CollUtils; | |||||
import com.ningdatech.pmapi.sys.convert.RegionConverter; | |||||
import com.ningdatech.pmapi.sys.entity.Region; | |||||
import com.ningdatech.pmapi.sys.entity.dto.RegionDTO; | |||||
import com.ningdatech.pmapi.sys.mapper.RegionMapper; | |||||
import com.ningdatech.pmapi.sys.service.IRegionService; | |||||
import org.springframework.stereotype.Service; | |||||
import java.util.List; | |||||
/** | |||||
* <p> | |||||
* 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-1-18 | |||||
*/ | |||||
@Service | |||||
public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService { | |||||
@Override | |||||
public List<RegionDTO> queryAll() { | |||||
List<Region> allRegions = this.lambdaQuery().ne(Region::getId, -1).list(); | |||||
return CollUtils.convert(allRegions, RegionConverter::toRegionDTO); | |||||
} | |||||
@Override | |||||
public List<RegionDTO> listGeLevel(int regionLevel) { | |||||
List<Region> regionsByLevel = lambdaQuery().ne(Region::getId, -1) | |||||
.le(Region::getRegionLevel, regionLevel).list(); | |||||
return CollUtils.convert(regionsByLevel, RegionConverter::toRegionDTO); | |||||
} | |||||
@Override | |||||
public boolean isParentRegion(Long regionId) { | |||||
return baseMapper.exists(Wrappers.lambdaQuery(Region.class) | |||||
.eq(Region::getParentId, regionId) | |||||
.eq(Region::getDeleted, false)); | |||||
} | |||||
@Override | |||||
public Long getRegionIdByParentIdWithSameRegionCode(Long parentId, String regionCode) { | |||||
return baseMapper.selectOne(Wrappers.lambdaQuery(Region.class) | |||||
.eq(Region::getParentId, parentId) | |||||
.eq(Region::getRegionCode, regionCode) | |||||
.eq(Region::getDeleted, false)) | |||||
.getId(); | |||||
} | |||||
} |