Browse Source
# Conflicts: # epmet-module/epmet-heart/epmet-heart-server/pom.xml # epmet-user/epmet-user-server/pom.xmlrelease
262 changed files with 7903 additions and 1432 deletions
@ -0,0 +1,7 @@ |
|||
UPDATE sys_dict_data |
|||
SET DEL_FLAG = '1', |
|||
UPDATED_BY = 'yinzuomei', |
|||
UPDATED_TIME = NOW(), |
|||
remark = '2022.02.21删除社会组织功能,改用联建单位两新组织' |
|||
WHERE |
|||
dict_value = 'social_org'; |
|||
@ -0,0 +1,93 @@ |
|||
package com.epmet.commons.tools.config; |
|||
|
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
|||
import org.springframework.boot.context.properties.EnableConfigurationProperties; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
|||
|
|||
import java.util.concurrent.Executor; |
|||
import java.util.concurrent.ExecutorService; |
|||
import java.util.concurrent.RejectedExecutionHandler; |
|||
import java.util.concurrent.ThreadPoolExecutor; |
|||
|
|||
/** |
|||
* 线程池配置类 |
|||
* thread: |
|||
* # 线程池配置 |
|||
* threadPool: |
|||
* enableCustomize: true [true会使用自定义线程池,false则使用springboot自动配置的线程池。推荐使用自定义线程池] |
|||
* 可以只配置此参数,其他参会会使用默认值,但还是建议把参数配置全。 |
|||
* corePoolSize: 2 |
|||
* maxPoolSize: 4 |
|||
* queueCapacity: 2 |
|||
* keepAliveSeconds: 60 |
|||
* threadNamePrefix: [线程池名字] |
|||
* rejectedExecutionHandler: [拒绝策略] |
|||
* |
|||
* 顺序:核心线程->放入队列->未达到maxPoolSize则继续增加线程直到达到maxPoolSize->拒绝策略 |
|||
* 开启自定义线程池:thread.threadPool.enableCustomize=true,不配置或者配置为false,自定义线程池都不会开启 |
|||
* rejectedExecutionHandler拒绝策略:abortPolicy/discardPolicy/discardOldestPolicy/callerRunsPolicy(默认) |
|||
*/ |
|||
@EnableConfigurationProperties(EpmetThreadPoolProperties.class) |
|||
@Configuration |
|||
@ConditionalOnProperty(prefix = "thread.threadPool", name = "enableCustomize", havingValue = "true", matchIfMissing = false) |
|||
public class AsyncConfig { |
|||
|
|||
/** |
|||
* 默认值 |
|||
*/ |
|||
private int corePoolSize = 5; |
|||
private int maxPoolSize = 8; |
|||
private int queueCapacity = 20; |
|||
private String threadNamePrefix = "epmet-default-"; |
|||
private int keepAliveSeconds = 60; |
|||
private String rejectedExecutionHandler = "callerRunsPolicy"; |
|||
|
|||
public AsyncConfig(EpmetThreadPoolProperties properties) { |
|||
if (properties.getCorePoolSize() != null) corePoolSize = properties.getCorePoolSize(); |
|||
if (properties.getMaxPoolSize() != null) maxPoolSize = properties.getMaxPoolSize(); |
|||
if (properties.getQueueCapacity() != null) queueCapacity = properties.getQueueCapacity(); |
|||
if (properties.getThreadNamePrefix() != null) threadNamePrefix = properties.getThreadNamePrefix(); |
|||
if (properties.getKeepAliveSeconds() != null) keepAliveSeconds = properties.getKeepAliveSeconds(); |
|||
if (properties.getRejectedExecutionHandler() != null) rejectedExecutionHandler = properties.getRejectedExecutionHandler(); |
|||
} |
|||
|
|||
@Bean |
|||
public Executor executor() { |
|||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); |
|||
executor.setCorePoolSize(corePoolSize); |
|||
executor.setMaxPoolSize(maxPoolSize); |
|||
executor.setQueueCapacity(queueCapacity); |
|||
executor.setThreadNamePrefix(threadNamePrefix); |
|||
executor.setRejectedExecutionHandler(getRejectedExecutionHandler(rejectedExecutionHandler)); //对拒绝task的处理策略
|
|||
executor.setKeepAliveSeconds(keepAliveSeconds); |
|||
executor.initialize(); |
|||
return executor; |
|||
} |
|||
|
|||
@Bean |
|||
public ExecutorService executorService() { |
|||
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) executor(); |
|||
return executor.getThreadPoolExecutor(); |
|||
} |
|||
|
|||
/** |
|||
* 获取拒绝策略handler |
|||
* @param policy |
|||
* @return |
|||
*/ |
|||
private RejectedExecutionHandler getRejectedExecutionHandler(String policy) { |
|||
switch (policy) { |
|||
case "abortPolicy": |
|||
return new ThreadPoolExecutor.AbortPolicy(); |
|||
case "discardPolicy": |
|||
return new ThreadPoolExecutor.DiscardPolicy(); |
|||
case "discardOldestPolicy": |
|||
return new ThreadPoolExecutor.DiscardOldestPolicy(); |
|||
default: |
|||
// 默认情况下,使用主线程执行
|
|||
return new ThreadPoolExecutor.CallerRunsPolicy(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
package com.epmet.commons.tools.config; |
|||
|
|||
import lombok.Data; |
|||
import org.springframework.boot.context.properties.ConfigurationProperties; |
|||
|
|||
/** |
|||
* 线程池配置参数 |
|||
* thread-pool会自动对应到threadPool |
|||
*/ |
|||
@ConfigurationProperties(prefix = "thread.thread-pool") |
|||
@Data |
|||
public class EpmetThreadPoolProperties { |
|||
|
|||
/** |
|||
* 是否允许自定义线程池 |
|||
*/ |
|||
private Boolean enableCustomize; |
|||
/** |
|||
* 核心线程数 |
|||
*/ |
|||
private Integer corePoolSize; |
|||
|
|||
/** |
|||
* 最大线程数 |
|||
*/ |
|||
private Integer maxPoolSize; |
|||
|
|||
/** |
|||
* 队列容量 |
|||
*/ |
|||
private Integer queueCapacity; |
|||
|
|||
/** |
|||
* 线程名前缀 |
|||
*/ |
|||
private String threadNamePrefix; |
|||
|
|||
/** |
|||
* 线程存活时长 |
|||
*/ |
|||
private Integer keepAliveSeconds; |
|||
|
|||
/** |
|||
* 拒绝策略 |
|||
*/ |
|||
private String rejectedExecutionHandler; |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
package com.epmet.commons.tools.constant; |
|||
|
|||
public interface DingDingRobotConstant { |
|||
/** |
|||
* 尹作梅测试用 |
|||
*/ |
|||
String YZM_TEST_URL="https://oapi.dingtalk.com/robot/send?access_token=249c5f49006cf14b37f9c3bc502ede34c16926a5ac5a0deeb9c9b4be735c0daf"; |
|||
String YZM_TEST_SECRET="SECa03f447d67c62d924b5ae52dd9a7ddd9147d32c1d43f8cb43449f505444bdc6b"; |
|||
|
|||
/** |
|||
* EPMET V3 产品研发群 |
|||
*/ |
|||
String V3_ROBOT_URL="https://oapi.dingtalk.com/robot/send?access_token=75e9ab857536f3018baa09009646876edbd263d07521a1a22eedfc3852623614"; |
|||
String V3_ROBOT_SECRET="SECdc8d3fb6780faa919f38fd43783f76d111255036c3b5bdcbc086dff023ee84d5"; |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
package com.epmet.commons.tools.dto.form; |
|||
|
|||
import com.dingtalk.api.request.OapiRobotSendRequest; |
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* 钉钉机器人发送文本通知,@手机号,简参 |
|||
*/ |
|||
@Data |
|||
public class DingTextBriefNessFormDTO { |
|||
|
|||
/* { |
|||
"msgtype":"text", |
|||
"text":{ |
|||
"content":"我就是我, @15764229697 是不同的烟火" |
|||
}, |
|||
"at":{ |
|||
"atMobiles": [ |
|||
"15764229697" |
|||
], |
|||
"isAtAll":false |
|||
} |
|||
}*/ |
|||
private String msgtype; |
|||
private OapiRobotSendRequest.Text text; |
|||
private OapiRobotSendRequest.At at; |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.commons.tools.validator.group; |
|||
|
|||
/** |
|||
* 查询 Group |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
* @since 1.0.0 |
|||
*/ |
|||
public interface QueryGroup { |
|||
|
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
package com.epmet.dataaggre.feign; |
|||
|
|||
|
|||
import com.epmet.commons.tools.constant.ServiceConstant; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; |
|||
import com.epmet.dataaggre.feign.impl.DataAggregatorOpenFeignClientFallbackFactory; |
|||
import org.springframework.cloud.openfeign.FeignClient; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
|
|||
@FeignClient(name = ServiceConstant.DATA_AGGREGATOR_SERVER, fallbackFactory = DataAggregatorOpenFeignClientFallbackFactory.class) |
|||
// @FeignClient(name = ServiceConstant.DATA_AGGREGATOR_SERVER, fallbackFactory= DataAggregatorOpenFeignClientFallbackFactory.class,url = "localhost:8114")
|
|||
public interface DataAggregatorOpenFeignClient { |
|||
|
|||
/** |
|||
* 定时任务导出网格活跃统计表 |
|||
* @param form |
|||
* @return |
|||
*/ |
|||
@PostMapping(value = "data/aggregator/org/export-send-msg") |
|||
Result exportGridLiveRes(@RequestBody GridLivelyFormDTO form); |
|||
|
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
package com.epmet.dataaggre.feign.impl; |
|||
|
|||
import com.epmet.commons.tools.constant.ServiceConstant; |
|||
import com.epmet.commons.tools.utils.ModuleUtils; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.dataaggre.dto.govorg.form.GridLivelyFormDTO; |
|||
import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient; |
|||
|
|||
public class DataAggregatorOpenFeignClientFallback implements DataAggregatorOpenFeignClient { |
|||
/** |
|||
* 定时任务导出网格活跃统计表 |
|||
* @param form |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public Result exportGridLiveRes(GridLivelyFormDTO form) { |
|||
return ModuleUtils.feignConError(ServiceConstant.DATA_AGGREGATOR_SERVER, "pcworkRecordListExportSendMsg",form); |
|||
} |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
package com.epmet.dataaggre.feign.impl; |
|||
|
|||
import com.epmet.dataaggre.feign.DataAggregatorOpenFeignClient; |
|||
import feign.hystrix.FallbackFactory; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
@Slf4j |
|||
@Component |
|||
public class DataAggregatorOpenFeignClientFallbackFactory implements FallbackFactory<DataAggregatorOpenFeignClient> { |
|||
private DataAggregatorOpenFeignClientFallback fallback = new DataAggregatorOpenFeignClientFallback(); |
|||
|
|||
@Override |
|||
public DataAggregatorOpenFeignClient create(Throwable throwable) { |
|||
return null; |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
package com.epmet.dto.extract; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.List; |
|||
|
|||
|
|||
@Data |
|||
public class UserGroupIdDTO implements Serializable { |
|||
private String userId; |
|||
private List<String> groupIdList; |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
package com.epmet.dto.screen.result; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @Description |
|||
* @Author zhaoqifeng |
|||
* @Date 2022/3/7 15:56 |
|||
*/ |
|||
@Data |
|||
public class DataCheckDTO implements Serializable { |
|||
private static final long serialVersionUID = -5836567756526658928L; |
|||
/** |
|||
* 客户ID |
|||
*/ |
|||
private String customerId; |
|||
/** |
|||
* 客户名 |
|||
*/ |
|||
private String customerName; |
|||
/** |
|||
* 日期 |
|||
*/ |
|||
private String dateId; |
|||
/** |
|||
* 上报项目数 |
|||
*/ |
|||
private String reportCount; |
|||
/** |
|||
* 项目数 |
|||
*/ |
|||
private String count; |
|||
} |
|||
@ -1,49 +0,0 @@ |
|||
package com.epmet.config; |
|||
|
|||
import com.epmet.properties.ThreadProperties; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.boot.context.properties.EnableConfigurationProperties; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.scheduling.annotation.EnableAsync; |
|||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
|||
|
|||
import java.util.concurrent.Executor; |
|||
import java.util.concurrent.ExecutorService; |
|||
import java.util.concurrent.ThreadPoolExecutor; |
|||
|
|||
/** |
|||
* 线程池配置类 |
|||
*/ |
|||
@Configuration |
|||
@EnableConfigurationProperties(ThreadProperties.class) |
|||
@EnableAsync |
|||
public class AsyncConfig { |
|||
|
|||
@Autowired |
|||
private ThreadProperties threadProperties; |
|||
|
|||
@Bean |
|||
public Executor executor() { |
|||
ThreadProperties.ThreadPoolProperties threadPoolProps = threadProperties.getThreadPool(); |
|||
|
|||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); |
|||
executor.setCorePoolSize(threadPoolProps.getCorePoolSize()); |
|||
executor.setMaxPoolSize(threadPoolProps.getMaxPoolSize()); |
|||
executor.setQueueCapacity(threadPoolProps.getQueueCapacity()); |
|||
executor.setThreadNamePrefix("data-stats-"); |
|||
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
|
|||
// CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
|
|||
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //对拒绝task的处理策略
|
|||
executor.setKeepAliveSeconds(threadPoolProps.getKeepAlive()); |
|||
executor.initialize(); |
|||
return executor; |
|||
} |
|||
|
|||
@Bean |
|||
public ExecutorService executorService() { |
|||
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) executor(); |
|||
return executor.getThreadPoolExecutor(); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.service.evaluationindex.screen; |
|||
|
|||
import com.epmet.commons.mybatis.service.BaseService; |
|||
import com.epmet.dto.extract.form.ExtractOriginFormDTO; |
|||
import com.epmet.entity.evaluationindex.screen.ScreenProjectDataEntity; |
|||
|
|||
/** |
|||
* 中央区-项目数据 |
|||
* |
|||
* @author qu qu@elink-cn.com |
|||
* @since v1.0.0 2021-02-23 |
|||
*/ |
|||
public interface ProjectDataService extends BaseService<ScreenProjectDataEntity> { |
|||
|
|||
/** |
|||
* 平阴三个街道上报统计数据正确性校验 |
|||
* |
|||
* @Param formDTO |
|||
* @Return |
|||
* @Author zhaoqifeng |
|||
* @Date 2022/3/7 15:44 |
|||
*/ |
|||
void dataCheck(ExtractOriginFormDTO formDTO); |
|||
|
|||
} |
|||
@ -0,0 +1,94 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.service.evaluationindex.screen.impl; |
|||
|
|||
import com.alibaba.fastjson.JSON; |
|||
import com.dingtalk.api.request.OapiRobotSendRequest; |
|||
import com.epmet.commons.dynamic.datasource.annotation.DataSource; |
|||
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
|||
import com.epmet.commons.tools.constant.DingDingRobotConstant; |
|||
import com.epmet.commons.tools.utils.DateUtils; |
|||
import com.epmet.commons.tools.utils.HttpClientManager; |
|||
import com.epmet.constant.DataSourceConstant; |
|||
import com.epmet.dao.evaluationindex.screen.ScreenProjectDataDao; |
|||
import com.epmet.dto.extract.form.ExtractOriginFormDTO; |
|||
import com.epmet.dto.screen.result.DataCheckDTO; |
|||
import com.epmet.entity.evaluationindex.screen.ScreenProjectDataEntity; |
|||
import com.epmet.service.evaluationindex.screen.ProjectDataService; |
|||
import com.epmet.util.DimIdGenerator; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.commons.collections4.CollectionUtils; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 中央区-项目数据 |
|||
* |
|||
* @author qu qu@elink-cn.com |
|||
* @since v1.0.0 2021-02-23 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@DataSource(value = DataSourceConstant.EVALUATION_INDEX_READ) |
|||
public class ProjectDataServiceImpl extends BaseServiceImpl<ScreenProjectDataDao, ScreenProjectDataEntity> implements ProjectDataService { |
|||
|
|||
/** |
|||
* 平阴三个街道上报统计数据正确性校验 |
|||
* |
|||
* @param formDTO |
|||
* @Param formDTO |
|||
* @Return |
|||
* @Author zhaoqifeng |
|||
* @Date 2022/3/7 15:44 |
|||
*/ |
|||
@Override |
|||
public void dataCheck(ExtractOriginFormDTO formDTO) { |
|||
if (StringUtils.isNotBlank(formDTO.getStartDate()) && StringUtils.isNotBlank(formDTO.getEndDate())) { |
|||
formDTO.setDateId(null); |
|||
} else { |
|||
if (StringUtils.isBlank(formDTO.getDateId())){ |
|||
formDTO.setDateId(DimIdGenerator.getDateDimId(DateUtils.addDateDays(new Date(), -1))); |
|||
} |
|||
} |
|||
List<DataCheckDTO> list = baseDao.getCheckResult(formDTO); |
|||
if (CollectionUtils.isNotEmpty(list)) { |
|||
//发送钉钉消息
|
|||
//EPMETV3群机器人
|
|||
String secret = DingDingRobotConstant.V3_ROBOT_SECRET; |
|||
String url = DingDingRobotConstant.V3_ROBOT_URL; |
|||
|
|||
for (DataCheckDTO dto : list) { |
|||
OapiRobotSendRequest request = new OapiRobotSendRequest(); |
|||
request.setMsgtype("markdown"); |
|||
OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown(); |
|||
markdown.setTitle("平阴三个街道项目日统计数据上报比对结果"); |
|||
markdown.setText("客户ID:" + dto.getCustomerId() +"\n\n"+ |
|||
"> 客户名称:" + dto.getCustomerName() +"\n\n"+ |
|||
"> 日期:" + dto.getDateId() + "\n\n"+ |
|||
"> 上报项目数:" + dto.getReportCount() + "\n\n"+ |
|||
"> 表中项目数:" + dto.getCount()); |
|||
request.setMarkdown(markdown); |
|||
log.info("robot需要发送的内容为:"+markdown.getText()); |
|||
HttpClientManager.getInstance().sendDingMsg(JSON.toJSONString(request),url,secret); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
-- stat库执行 |
|||
alter table fact_origin_topic_main_daily add index `IDX_TOPIC_MAIN_GROUP_ID` (`GROUP_ID`); |
|||
alter table fact_origin_project_main_daily add index `IDX_P_MAIN_TOPIC_ID` (`TOPIC_ID`); |
|||
alter table fact_origin_issue_main_daily add index `IDX_ISSUE_MAIN_TOPIC_ID` (`TOPIC_ID`); |
|||
alter table fact_origin_group_member_daily add index `IDX_GM_GROUP_ID` (`GROUP_ID`); |
|||
@ -1,13 +1,20 @@ |
|||
package com.epmet.constant; |
|||
package com.epmet.constants; |
|||
|
|||
/** |
|||
* 导入任务的业务类型常量 |
|||
*/ |
|||
public interface ImportTaskConstants { |
|||
/** |
|||
* 居民 |
|||
* 业务类型:居民 |
|||
*/ |
|||
String BIZ_TYPE_RESI = "resi"; |
|||
String BIZ_TYPE_NEIGHBOR_HOOD = "neighborHood"; |
|||
String BIZ_TYPE_BUILDING = "building"; |
|||
String BIZ_TYPE_HOUSE = "house"; |
|||
String BIZ_TYPE_PARTY_MEMBER = "party_member"; |
|||
String BIZ_TYPE_COMMUNITY_SELF_ORG = "community_self_org"; |
|||
String BIZ_TYPE_PARTY_UNIT = "party_unit"; |
|||
String BIZ_TYPE_PARTY_ACTIVITY = "party_activity"; |
|||
|
|||
/** |
|||
* 处理状态:处理中 |
|||
@ -0,0 +1,55 @@ |
|||
package com.epmet.dto.form; |
|||
|
|||
import com.epmet.commons.tools.dto.form.PageFormDTO; |
|||
import com.epmet.commons.tools.validator.group.QueryGroup; |
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
|
|||
@Data |
|||
public class ImportTaskCommonFormDTO extends PageFormDTO { |
|||
|
|||
public interface Create {} |
|||
public interface Finish {} |
|||
|
|||
/** |
|||
* 原始文件名 |
|||
*/ |
|||
@NotBlank(message = "原始文件名必填", groups = { Create.class }) |
|||
private String originFileName; |
|||
|
|||
/** |
|||
* 操作者ID |
|||
*/ |
|||
@NotBlank(message = "操作者ID必填", groups = { Create.class, Finish.class, QueryGroup.class}) |
|||
private String operatorId; |
|||
|
|||
/** |
|||
* 业务类型 |
|||
*/ |
|||
@NotBlank(message = "业务类型必填", groups = { Create.class }) |
|||
private String bizType; |
|||
|
|||
/** |
|||
* 任务ID |
|||
*/ |
|||
@NotBlank(message = "任务ID必填", groups = { Finish.class }) |
|||
private String taskId; |
|||
|
|||
/** |
|||
* 处理状态 |
|||
*/ |
|||
@NotBlank(message = "处理状态必填", groups = { Finish.class }) |
|||
private String processStatus; |
|||
|
|||
/** |
|||
* 结果文件 url |
|||
*/ |
|||
private String resultDescFilePath; |
|||
|
|||
/** |
|||
* 结果描述文本 |
|||
*/ |
|||
private String resultDesc; |
|||
|
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
package com.epmet.dto.result; |
|||
|
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
public class ImportTaskCommonResultDTO implements Serializable { |
|||
public ImportTaskCommonResultDTO(String taskId) { |
|||
this.taskId = taskId; |
|||
} |
|||
|
|||
private String taskId; |
|||
|
|||
/** |
|||
* 原始文件名 |
|||
*/ |
|||
private String originFileName; |
|||
|
|||
/** |
|||
* 业务类型。resi:居民;楼栋:building;房屋:house。依次补充 |
|||
*/ |
|||
private String bizType; |
|||
|
|||
/** |
|||
* 处理状态。processing:处理中;finished:完成;导入失败:finished_fail |
|||
*/ |
|||
private String processStatus; |
|||
|
|||
/** |
|||
* 开始导入的时间 |
|||
*/ |
|||
private Date startTime; |
|||
|
|||
/** |
|||
* 失败文件地址 |
|||
*/ |
|||
private String resultDescFile; |
|||
|
|||
} |
|||
@ -0,0 +1,82 @@ |
|||
package com.epmet.controller; |
|||
|
|||
import com.epmet.commons.tools.annotation.LoginUser; |
|||
import com.epmet.commons.tools.exception.EpmetErrorCode; |
|||
import com.epmet.commons.tools.exception.EpmetException; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.security.dto.TokenDto; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.commons.tools.validator.ValidatorUtils; |
|||
import com.epmet.commons.tools.validator.group.QueryGroup; |
|||
import com.epmet.dto.form.ImportTaskCommonFormDTO; |
|||
import com.epmet.dto.result.ImportTaskCommonResultDTO; |
|||
import com.epmet.service.ImportTaskService; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
@RestController |
|||
@RequestMapping("import-task") |
|||
public class ImportTaskController { |
|||
|
|||
@Autowired |
|||
private ImportTaskService importTaskService; |
|||
|
|||
/** |
|||
* desc:分页获取个人导入记录 |
|||
* @param tokenDto |
|||
* @return |
|||
*/ |
|||
@RequestMapping("page") |
|||
public Result<PageData<ImportTaskCommonResultDTO>> list(@LoginUser TokenDto tokenDto, @RequestBody ImportTaskCommonFormDTO param) { |
|||
//tokenDto.setUserId("d8dfc6c1fa2538976059f3900036d419");
|
|||
param.setOperatorId(tokenDto.getUserId()); |
|||
ValidatorUtils.validateEntity(param, QueryGroup.class); |
|||
return new Result().ok(importTaskService.page(param)); |
|||
} |
|||
|
|||
/** |
|||
* 创建导入任务 |
|||
* @param input |
|||
* @return |
|||
*/ |
|||
@RequestMapping("create") |
|||
public Result<ImportTaskCommonResultDTO> createTask(@RequestBody ImportTaskCommonFormDTO input) { |
|||
ValidatorUtils.validateEntity(input, ImportTaskCommonFormDTO.Create.class); |
|||
String operatorId = input.getOperatorId(); |
|||
String bizType = input.getBizType(); |
|||
String originFileName = input.getOriginFileName(); |
|||
|
|||
String taskId = importTaskService.createProcessTask(operatorId, bizType, originFileName); |
|||
ImportTaskCommonResultDTO ro = new ImportTaskCommonResultDTO(taskId); |
|||
return new Result().ok(ro); |
|||
} |
|||
|
|||
/** |
|||
* 结束任务 |
|||
* @param input |
|||
* @return |
|||
*/ |
|||
@RequestMapping("finish") |
|||
public Result finishTask(@RequestBody ImportTaskCommonFormDTO input) { |
|||
ValidatorUtils.validateEntity(input, ImportTaskCommonFormDTO.Finish.class); |
|||
Boolean finished = importTaskService.finish(input.getTaskId(), input.getProcessStatus(), input.getOperatorId(), input.getResultDescFilePath(), input.getResultDesc()); |
|||
if (!finished) { |
|||
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), |
|||
"失败,请确认任务是否存在,以及是否已完成", |
|||
"失败,请确认任务是否存在,以及是否已完成"); |
|||
} |
|||
return new Result(); |
|||
} |
|||
|
|||
/** |
|||
* 检查是否有正在执行的任务。 |
|||
* @param bizType 业务类型,非必填,不传则任意一种导入正在执行都会返回true |
|||
* @return |
|||
*/ |
|||
@GetMapping("processing-check") |
|||
public Result processingTaskCheck(@RequestParam(value = "biz_type", required = false) String bizType) { |
|||
Boolean r = importTaskService.processingTaskCheck(bizType); |
|||
return new Result().ok(r); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,54 @@ |
|||
package com.epmet.service; |
|||
|
|||
|
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.dto.form.ImportTaskCommonFormDTO; |
|||
import com.epmet.dto.result.ImportTaskCommonResultDTO; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-02-15 |
|||
*/ |
|||
public interface ImportTaskService { |
|||
|
|||
// /**
|
|||
// * 检查指定类型该用户是否存在处理中的导入任务
|
|||
// * @param operatorId 操作者ID
|
|||
// * @param bizType 业务类型。resi:居民
|
|||
// * @return
|
|||
// */
|
|||
// boolean existsProcessingTask(String operatorId, String bizType);
|
|||
|
|||
/** |
|||
* 创建处理任务 |
|||
* @param operatorId |
|||
* @param bizType |
|||
* @param originFileName 原始文件名 |
|||
*/ |
|||
String createProcessTask(String operatorId, String bizType, String originFileName); |
|||
|
|||
/** |
|||
* 结束导入 |
|||
* @param taskId 任务id |
|||
* @param processStatus 处理状态 |
|||
* @param resultDescFile 结果描述文件 |
|||
* @param resultDesc 结果描述文本 |
|||
*/ |
|||
Boolean finish(String taskId, String processStatus, String operatorId, String resultDescFile, String resultDesc); |
|||
|
|||
/** |
|||
* desc:分页获取个人导入记录 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
PageData<ImportTaskCommonResultDTO> page(ImportTaskCommonFormDTO param); |
|||
|
|||
/** |
|||
* 检查是否有正在执行的任务 |
|||
* @param bizType |
|||
* @return |
|||
*/ |
|||
Boolean processingTaskCheck(String bizType); |
|||
} |
|||
@ -0,0 +1,123 @@ |
|||
package com.epmet.service.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.epmet.commons.tools.exception.EpmetErrorCode; |
|||
import com.epmet.commons.tools.exception.EpmetException; |
|||
import com.epmet.commons.tools.security.user.LoginUserUtil; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.utils.ConvertUtils; |
|||
import com.epmet.constants.ImportTaskConstants; |
|||
import com.epmet.dao.ImportTaskDao; |
|||
import com.epmet.dto.form.ImportTaskCommonFormDTO; |
|||
import com.epmet.dto.result.ImportTaskCommonResultDTO; |
|||
import com.epmet.entity.ImportTaskEntity; |
|||
import com.epmet.service.ImportTaskService; |
|||
import com.github.pagehelper.Page; |
|||
import com.github.pagehelper.PageHelper; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-02-15 |
|||
*/ |
|||
@Service |
|||
public class ImportTaskServiceImpl implements ImportTaskService { |
|||
|
|||
@Autowired |
|||
private ImportTaskDao importRecordDao; |
|||
|
|||
@Autowired |
|||
private LoginUserUtil loginUserUtil; |
|||
|
|||
// /**
|
|||
// * 该用户,该业务类型,是否有正在处理的导入任务
|
|||
// * @param operatorId 操作者ID
|
|||
// * @param bizType 业务类型。resi:居民
|
|||
// * @return
|
|||
// */
|
|||
// @Override
|
|||
// public boolean existsProcessingTask(String operatorId, String bizType) {
|
|||
// LambdaQueryWrapper<ImportTaskEntity> query = new LambdaQueryWrapper<>();
|
|||
// query.eq(ImportTaskEntity::getOperatorId, operatorId);
|
|||
// query.eq(ImportTaskEntity::getBizType, bizType);
|
|||
// query.eq(ImportTaskEntity::getProcessStatus, ImportTaskConstants.PROCESS_STATUS_PROCESSING);
|
|||
//
|
|||
// return importRecordDao.selectCount(query) > 0;
|
|||
// }
|
|||
|
|||
/** |
|||
* 检查是否有正在执行的任务 |
|||
* @param operatorId |
|||
* @param bizType |
|||
* @return |
|||
*/ |
|||
public boolean existsProcessingTask(String operatorId, String bizType) { |
|||
LambdaQueryWrapper<ImportTaskEntity> query = new LambdaQueryWrapper<>(); |
|||
query.eq(ImportTaskEntity::getOperatorId, operatorId); |
|||
query.eq(ImportTaskEntity::getBizType, bizType); |
|||
query.eq(ImportTaskEntity::getProcessStatus, ImportTaskConstants.PROCESS_STATUS_PROCESSING); |
|||
|
|||
return importRecordDao.selectCount(query) > 0; |
|||
} |
|||
|
|||
@Override |
|||
public String createProcessTask(String operatorId, String bizType, String originFileName) { |
|||
if (existsProcessingTask(operatorId, bizType)) { |
|||
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), |
|||
"存在进行中的导入", |
|||
"存在进行中的导入"); |
|||
} |
|||
|
|||
ImportTaskEntity importRecord = new ImportTaskEntity(); |
|||
importRecord.setProcessStatus(ImportTaskConstants.PROCESS_STATUS_PROCESSING); |
|||
importRecord.setOperatorId(operatorId); |
|||
importRecord.setBizType(bizType); |
|||
importRecord.setCustomerId(loginUserUtil.getLoginUserCustomerId()); |
|||
importRecord.setStartTime(new Date()); |
|||
importRecord.setOriginFileName(originFileName); |
|||
|
|||
importRecordDao.insert(importRecord); |
|||
return importRecord.getId(); |
|||
} |
|||
|
|||
@Override |
|||
public Boolean finish(String taskId, String processStatus, String operatorId, String resultDescFile, String resultDesc) { |
|||
return importRecordDao.finish(taskId, processStatus, operatorId, resultDesc, resultDescFile) > 0; |
|||
} |
|||
|
|||
@Override |
|||
public PageData<ImportTaskCommonResultDTO> page(ImportTaskCommonFormDTO param) { |
|||
LambdaQueryWrapper<ImportTaskEntity> queryWrapper = new LambdaQueryWrapper<>(); |
|||
queryWrapper.eq(ImportTaskEntity::getOperatorId,param.getOperatorId()) |
|||
.orderByDesc(ImportTaskEntity::getStartTime); |
|||
Page<ImportTaskEntity> page = PageHelper.startPage(param.getPageNo(), param.getPageSize(), param.isPage()).doSelectPage(() -> { |
|||
importRecordDao.selectList(queryWrapper); |
|||
}); |
|||
List<ImportTaskCommonResultDTO> list = new ArrayList<>(); |
|||
page.getResult().forEach(item->{ |
|||
ImportTaskCommonResultDTO record = ConvertUtils.sourceToTarget(item, ImportTaskCommonResultDTO.class); |
|||
record.setTaskId(item.getId()); |
|||
list.add(record); |
|||
}); |
|||
return new PageData<>(list,page.getTotal()); |
|||
} |
|||
|
|||
@Override |
|||
public Boolean processingTaskCheck(String bizType) { |
|||
LambdaQueryWrapper<ImportTaskEntity> query = new LambdaQueryWrapper<>(); |
|||
if (StringUtils.isNotBlank(bizType)) { |
|||
query.eq(ImportTaskEntity::getBizType, bizType); |
|||
} |
|||
query.eq(ImportTaskEntity::getProcessStatus, ImportTaskConstants.PROCESS_STATUS_PROCESSING); |
|||
|
|||
return importRecordDao.selectCount(query) > 0; |
|||
} |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
CREATE TABLE `import_task` ( |
|||
`ID` varchar(64) NOT NULL COMMENT 'ID', |
|||
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID', |
|||
`ORIGIN_FILE_NAME` varchar(128) NOT NULL COMMENT '原始文件名', |
|||
`BIZ_TYPE` varchar(32) NOT NULL COMMENT '业务类型。【resi:居民;neighborHood:小区;building:楼栋;house:房屋;party_member:党员;society_org:社会组织;community_self_org:社区自组织】依次补充', |
|||
`PROCESS_STATUS` varchar(32) NOT NULL COMMENT '处理状态。processing:处理中;finished_success:成功;finished_unsuccess:未完全成功', |
|||
`OPERATOR_ID` varchar(64) NOT NULL COMMENT '谁导入的', |
|||
`START_TIME` datetime NOT NULL COMMENT '开始导入的时间', |
|||
`RESULT_DESC_FILE` varchar(255) DEFAULT NULL COMMENT '导入失败结果描述文件', |
|||
`RESULT_DESC` varchar(255) DEFAULT NULL COMMENT '导入结果描述,可以输入任何描述信息', |
|||
`DEL_FLAG` tinyint(1) NOT NULL COMMENT '删除标识:0.未删除 1.已删除', |
|||
`REVISION` int(11) NOT NULL COMMENT '乐观锁', |
|||
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人', |
|||
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间', |
|||
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人', |
|||
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', |
|||
PRIMARY KEY (`ID`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
|||
|
|||
@ -0,0 +1 @@ |
|||
alter table import_task modify column PROCESS_STATUS varchar(32) comment '处理状态。processing:处理中;finished_success:成功;finished_fail:未完全成功' |
|||
@ -0,0 +1,85 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
|
|||
/** |
|||
* 联建活动与服务事项关联表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-02-21 |
|||
*/ |
|||
@Data |
|||
public class IcActivityServiceRelationDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键 |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 客户id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 组织ID |
|||
*/ |
|||
private String agencyId; |
|||
|
|||
/** |
|||
* 组织的所有上级 |
|||
*/ |
|||
private String pids; |
|||
|
|||
/** |
|||
* 活动ID |
|||
*/ |
|||
private String activityId; |
|||
|
|||
/** |
|||
* act_info表ID |
|||
*/ |
|||
private String actId; |
|||
|
|||
/** |
|||
* 服务事项 |
|||
*/ |
|||
private String serviceMatter; |
|||
|
|||
/** |
|||
* 删除标识 0未删除、1已删除 |
|||
*/ |
|||
private String delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
} |
|||
@ -0,0 +1,89 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import lombok.Data; |
|||
|
|||
|
|||
/** |
|||
* 联建活动与单位关联表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-02-21 |
|||
*/ |
|||
@Data |
|||
public class IcActivityUnitRelationDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键 |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 客户id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 组织ID |
|||
*/ |
|||
private String agencyId; |
|||
|
|||
/** |
|||
* 组织的所有上级 |
|||
*/ |
|||
private String pids; |
|||
|
|||
/** |
|||
* 活动ID |
|||
*/ |
|||
private String activityId; |
|||
|
|||
/** |
|||
* act_info表ID |
|||
*/ |
|||
private String actId; |
|||
|
|||
/** |
|||
* 单位ID |
|||
*/ |
|||
private String unitId; |
|||
|
|||
/** |
|||
* 服务事项 |
|||
*/ |
|||
private String serviceMatter; |
|||
|
|||
/** |
|||
* 删除标识 0未删除、1已删除 |
|||
*/ |
|||
private String delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
} |
|||
@ -0,0 +1,79 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import lombok.Data; |
|||
|
|||
|
|||
/** |
|||
* 联建活动与服务事项关联表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-02-21 |
|||
*/ |
|||
@Data |
|||
public class LatestActServiceRelationDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键 |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 客户id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 组织ID |
|||
*/ |
|||
private String agencyId; |
|||
|
|||
/** |
|||
* 组织的所有上级 |
|||
*/ |
|||
private String pids; |
|||
|
|||
/** |
|||
* latest_act_info表ID |
|||
*/ |
|||
private String actId; |
|||
|
|||
/** |
|||
* 服务事项 |
|||
*/ |
|||
private String serviceMatter; |
|||
|
|||
/** |
|||
* 删除标识 0未删除、1已删除 |
|||
*/ |
|||
private String delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
} |
|||
@ -0,0 +1,84 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import lombok.Data; |
|||
|
|||
|
|||
/** |
|||
* 联建活动与单位关联表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-02-21 |
|||
*/ |
|||
@Data |
|||
public class LatestActUnitRelationDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键 |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 客户id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 组织ID |
|||
*/ |
|||
private String agencyId; |
|||
|
|||
/** |
|||
* 组织的所有上级 |
|||
*/ |
|||
private String pids; |
|||
|
|||
/** |
|||
* latest_act_info表ID |
|||
*/ |
|||
private String actId; |
|||
|
|||
/** |
|||
* 单位ID |
|||
*/ |
|||
private String unitId; |
|||
|
|||
/** |
|||
* 服务事项 |
|||
*/ |
|||
private String serviceMatter; |
|||
|
|||
/** |
|||
* 删除标识 0未删除、1已删除 |
|||
*/ |
|||
private String delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue