viewtask 封装

segment2.0
linrf 2 years ago
parent d790ac17ab
commit 912240c873

@ -2,21 +2,21 @@ package com.docus.server.bl.infrastructure.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.docus.server.bl.common.DSKeyConstants;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Mapper
@DS(DSKeyConstants.DS_KEY)
public interface BlDeptMapper {
List<DeptDTO> getDeptListView(@Param("startDate") Date startDate,
@Param("endDate") Date endDate,
@Param("offset") int offset,
@Param("pageSize") int pageSize);
List<Map<String, Object>> list(@Param("startDate") Date startDate,
@Param("endDate") Date endDate,
@Param("offset") int offset,
@Param("pageSize") int pageSize);
}

@ -1,14 +1,14 @@
package com.docus.server.bl.service;
import com.docus.server.record.common.pojo.dto.TBasicDTO;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface IBlService {
List<DeptDTO> getDeptListView(Date startDate, Date endDate, int pageNum, int pageSize);
List<Map<String, Object>> list(Date startDate, Date endDate, int pageNum, int pageSize);
List<UserDTO> getUserListView(Date startDate, Date endDate, int pageNum, int pageSize);

@ -5,13 +5,13 @@ import com.docus.server.bl.infrastructure.mapper.BlTBasicMapper;
import com.docus.server.bl.infrastructure.mapper.BlUserMapper;
import com.docus.server.bl.service.IBlService;
import com.docus.server.record.common.pojo.dto.TBasicDTO;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
@AllArgsConstructor
@ -22,11 +22,10 @@ public class BlServiceImpl implements IBlService {
private final BlTBasicMapper blTBasicMapper;
@Override
public List<DeptDTO> getDeptListView(Date startDate, Date endDate, int pageNum, int pageSize) {
return blDeptMapper.getDeptListView(startDate, endDate, (pageNum - 1) * pageSize, pageSize);
public List<Map<String, Object>> list(Date startDate, Date endDate, int pageNum, int pageSize) {
return blDeptMapper.list(startDate, endDate, (pageNum - 1) * pageSize, pageSize);
}
@Override
public List<UserDTO> getUserListView(Date startDate, Date endDate, int pageNum, int pageSize) {
return blUserMapper.getUserListView(startDate, endDate, (pageNum - 1) * pageSize, pageSize);

@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.docus.server.bl.infrastructure.mapper.BlDeptMapper">
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="map">
SELECT `update_time` as update_time ,`dept_code` as dept_code,`dept_name` as dept_name FROM `his_dept`
WHERE update_time between #{startDate} and #{endDate}
order by update_time asc
@ -13,7 +13,7 @@
<!-- mysql
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
SELECT `update_time` as update_time ,`dept_code` as dept_code,`dept_name` as dept_name FROM `his`.`his_dept`
WHERE update_time between #{startDate} and #{endDate}
order by update_time asc
@ -23,7 +23,7 @@
<!-- mssqsql
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
select top pageSize `update_time` as update_time ,`dept_code` as dept_code,`dept_name` as dept_name
from (select row_number()
over(order by sno asc) as rownumber,*
@ -33,7 +33,7 @@
-->
<!-- oracle
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
SELECT * FROM
(SELECT tt.*,ROWNUM AS RN FROM
(SELECT t.* FROM ${tableName} t

@ -13,7 +13,7 @@
<!-- mysql
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
SELECT `update_time` as update_time ,`dept_code` as dept_code,`dept_name` as dept_name FROM `his`.`his_dept`
WHERE update_time between #{startDate} and #{endDate}
order by update_time asc
@ -23,7 +23,7 @@
<!-- mssqsql
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
select top pageSize `update_time` as update_time ,`dept_code` as dept_code,`dept_name` as dept_name
from (select row_number()
over(order by sno asc) as rownumber,*
@ -33,7 +33,7 @@
-->
<!-- oracle
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
SELECT * FROM
(SELECT tt.*,ROWNUM AS RN FROM
(SELECT t.* FROM ${tableName} t

@ -13,7 +13,7 @@
<!-- mysql
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
SELECT `update_time` as update_time ,`dept_code` as dept_code,`dept_name` as dept_name FROM `his`.`his_dept`
WHERE update_time between #{startDate} and #{endDate}
order by update_time asc
@ -23,7 +23,7 @@
<!-- mssqsql
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
select top pageSize `update_time` as update_time ,`dept_code` as dept_code,`dept_name` as dept_name
from (select row_number()
over(order by sno asc) as rownumber,*
@ -33,7 +33,7 @@
-->
<!-- oracle
<select id="getDeptListView" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
<select id="list" resultType="com.docus.server.sys.common.pojo.dto.DeptDTO">
SELECT * FROM
(SELECT tt.*,ROWNUM AS RN FROM
(SELECT t.* FROM ${tableName} t

@ -13,92 +13,92 @@ spring:
#公司病案的文件服务数据库
master:
url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_archivefile?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
username: docus
password: docus702
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#公司病案的系统服务数据库
system:
url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_system?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
username: docus
password: docus702
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#公司病案的基础服务数据库
record:
url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_medicalrecord?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
username: docus
password: docus702
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#医院的用户/科室/基础数据的数据库
his:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#病理数据
bl:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#电生理系统数据
ecg:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#电子病历系统数据
emr:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#护理文书系统数据
hl:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#手麻系统数据
issubmit:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#lis系统数据
lis:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/lis?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#Pacs系统数据视图
pacs:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#vte静脉血栓栓塞症
vte:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
#重症系统数据
zz:
url: jdbc:log4jdbc:mysql://127.0.0.1:3306/his?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
password: root@123456
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
type: com.alibaba.druid.pool.DruidDataSource
# rabbitmq:
@ -108,7 +108,7 @@ spring:
# password: guest
redis:
host: redis.docus.cn
# password: JSdocus@702
password: JSdocus@702
cloud:
nacos:
discovery:

@ -1,6 +1,6 @@
package com.docus.server.collect;
import com.docus.server.collect.web.domain.TaskConfig;
import com.docus.server.collect.web.common.entity.TaskConfig;
import com.docus.server.collect.web.utils.PeriodTime;
public interface IJob<T> {

@ -3,7 +3,7 @@ package com.docus.server.collect.basic.ws;
import com.docus.server.collect.ICollector;
import com.docus.server.collect.IWsCollector;
import com.docus.server.collect.web.job.AbstractCollectJob;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.docus.server.record.common.pojo.dto.TBasicDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@ -19,7 +19,7 @@ import java.util.List;
* @see IWsCollector
*/
@Component
public class TBasicWsCollectJob extends AbstractCollectJob<UserDTO> {
public class TBasicWsCollectJob extends AbstractCollectJob<TBasicDTO> {
@Resource(name = "wsBasicCollectorImpl")
private ICollector collector;
@ -40,14 +40,15 @@ public class TBasicWsCollectJob extends AbstractCollectJob<UserDTO> {
}
@Override
public void batchInsertOrUpdate(List<UserDTO> t) {
userService.batchInsertOrUpdatePowerUser(t);
public void batchInsertOrUpdate(List<TBasicDTO> t) {
basicService.batchSaveBasics(t);
}
@SuppressWarnings("unchecked")
@Override
public List<UserDTO> execute(Date startDate, Date endDate, int pageNum, int pageSize) {
public List<TBasicDTO> execute(Date startDate, Date endDate, int pageNum, int pageSize) {
//需要根据不同医院去解析不同的内容。使用接口实现的方式。
return collector.list(startDate, endDate, pageNum, pageSize);
}
}

@ -3,7 +3,7 @@ package com.docus.server.collect.dept.ws;
import com.docus.server.collect.ICollector;
import com.docus.server.collect.IWsCollector;
import com.docus.server.collect.web.job.AbstractCollectJob;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@ -19,7 +19,7 @@ import java.util.List;
* @see IWsCollector
*/
@Component
public class DeptWsCollectJob extends AbstractCollectJob<UserDTO> {
public class DeptWsCollectJob extends AbstractCollectJob<DeptDTO> {
@Resource(name = "wsDeptCollectorImpl")
private ICollector collector;
@ -40,13 +40,13 @@ public class DeptWsCollectJob extends AbstractCollectJob<UserDTO> {
}
@Override
public void batchInsertOrUpdate(List<UserDTO> t) {
userService.batchInsertOrUpdatePowerUser(t);
public void batchInsertOrUpdate(List<DeptDTO> t) {
deptService.batchInsertOrUpdatePowerDept(t);
}
@SuppressWarnings("unchecked")
@Override
public List<UserDTO> execute(Date startDate, Date endDate, int pageNum, int pageSize) {
public List<DeptDTO> execute(Date startDate, Date endDate, int pageNum, int pageSize) {
//需要根据不同医院去解析不同的内容。使用接口实现的方式。
return collector.list(startDate, endDate, pageNum, pageSize);
}

@ -0,0 +1,56 @@
package com.docus.server.collect.report.view;
import com.docus.server.collect.ICollector;
import com.docus.server.collect.IJob;
import com.docus.server.collect.web.job.AbstractCollectJob;
import com.docus.server.lis.common.DSKeyConstants;
import com.docus.server.lis.service.ILisService;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* job
*
* @author linruifeng
* @see AbstractCollectJob
* @see IJob
* @see ICollector
*/
@Component
public class LisViewCollectJob extends AbstractCollectJob<Map<String, Object>> {
@Resource
private ILisService lisService;
/**
* xxl jobhandler
*/
@XxlJob("startAllLisViewCollect")
public void startAllLisViewCollect() {
super.startCollectAll(getJobParam());
}
/**
* xxl jobhandler
*/
@XxlJob("startIncLisViewCollect")
public void startIncLisViewCollect() {
super.startCollectIncrement(getJobParam());
}
@Override
public void batchInsertOrUpdate(List<Map<String, Object>> t) {
collectService.processJobView(t, DSKeyConstants.DS_KEY);
}
@SuppressWarnings("unchecked")
@Override
public List<Map<String, Object>> execute(Date startDate, Date endDate, int pageNum, int pageSize) {
//每家医院按照固定的格式写sql不同医院需要替换不同的sql即可。
return lisService.list(startDate, endDate, pageNum, pageSize);
}
}

@ -0,0 +1,16 @@
package com.docus.server.collect.web.common;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Data
@Component
public class BasicProperties {
@Value("${basic.pageSize}")
private Integer pageSize;
@Value("${basic.ratelimit}")
private Integer ratelimit;
@Value("${basic.ratetime}")
private Integer ratetime;
}

@ -0,0 +1,93 @@
package com.docus.server.collect.web.common;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Data
@Component
public class DocusProperties {
@Value("${docus.doctorsyscode:}")
private String doctorsyscode;
@Value("${docus.doctorassortid:}")
private String doctorassortid;
/**
*
*/
@Value("${docus.lkzz.syscode:}")
private String lkzzsyscode;
@Value("${docus.lkzz.assortid:}")
private String lkzzassortid;
@Value("${docus.lkzz.url:}")
private String lkzzurl;
@Value("${docus.lkzz.reportname:}")
private String lkzzreportname;
/**
* 0,1:
*/
@Value("${docus.priority:0}")
private String priority;
/**
* mq rabbitmq,redis
*/
@Value("${docus.dispose.mode:mq}")
private String mode;
/**
* url
*/
@Value("${docus.task.taskurl:}")
private String taskurl;
/**
* url
*/
@Value("${docus.task.downurl:}")
private String downurl;
/**
*
*/
@Value("${docus.noviewoutcollectionjobcron:0 0 0 * * ?}")
private String noviewoutcollectionjobcron;
/**
*
*/
@Value("${docus.taskrestartjobcron:0 0/30 * * * ?}")
private String taskrestartjobcron;
/**
*
*/
@Value("${docus.collectaddbasicdatajobcron:0/5 * * * * ?}")
private String collectaddbasicdatajobcron;
/**
*
*/
@Value("${docus.collectlkzzjobcron:0 0/10 * * * ?}")
private String collectlkzzjobcron;
/**
*
*/
@Value("${docus.collectlkzznotoutjobcron:0 0/30 * * * ?}")
private String collectlkzznotoutjobcron;
/**
*
*/
@Value("${docus.collectionrequiretimedatajobcron:0 0/30 * * * ?}")
private String collectionrequiretimedatajobcron;
/**
*
*/
@Value("${docus.noviewcollectionjobcron:0 0 0 * * ?}")
private String noviewcollectionjobcron;
/**
*
*/
@Value("${docus.collectionmakeupcron:0 0 0 * * ?}")
private String collectionmakeupcron;
}

@ -0,0 +1,15 @@
package com.docus.server.collect.web.common;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Data
@Component
@Configuration
@ConfigurationProperties("noview.ch.newborn")
public class NoViewChNewbornProperties {
private String disdeptname;
private String syscode;
}

@ -0,0 +1,14 @@
package com.docus.server.collect.web.common;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Data
@Component
@Configuration
@ConfigurationProperties("noview")
public class NoViewProperties {
private int hospital=0;
}

@ -0,0 +1,39 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
import java.util.List;
@Data
public class BasicQueryDto {
/**
*
*/
private DableJsonDto table;
/**
*
*/
private List<FieldJsonDto> fields;
/**
* 0
*/
private int pageNumber;
/**
*
*/
private int pageSize;
/**
*
*/
private String lasDate;
/**
*
*/
private String nowDate;
/**
*
*/
private String dataFileName;
}

@ -0,0 +1,11 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
import java.util.List;
@Data
public class CollectionForJZHDto {
private List<String> jzhs;
private String syscode;
}

@ -0,0 +1,47 @@
package com.docus.server.collect.web.common.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
*
*/
@Data
public class CollectionRequire {
/**
*
*/
@ApiModelProperty("出院开始日期")
private String disStartTime;
/**
*
*/
@ApiModelProperty("出院结束日期")
private String disEndTime;
/**
*
*/
@ApiModelProperty("出院科室")
private List<String> disDepts;
/**
*
*/
@ApiModelProperty("记账号")
private List<String> jzhs;
/**
* 0
*/
@ApiModelProperty("页数从0开始")
private int pageNumber;
/**
*
*/
@ApiModelProperty("笔数")
private int pageSize;
}

@ -0,0 +1,32 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
/**
*
*/
@Data
public class CollectionRequireTimeDto {
/**
*
*/
private String startTime;
/**
*
*/
private String endTime;
/**
*
*/
private String where="";
/**
* 0
*/
private int pageNumber=0;
/**
*
*/
private int pageSize;
}

@ -0,0 +1,13 @@
package com.docus.server.collect.web.common.dto;
import com.docus.server.archivefile.pojo.entity.AfViewCollectionLog;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class CollectionSaveDto {
private List<AfViewCollectionLog> updates = new ArrayList<>();
private List<AfViewCollectionLog> adds = new ArrayList<>();
}

@ -0,0 +1,9 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
@Data
public class DaTypeDto {
private String oldtype;
private int newtype;
}

@ -0,0 +1,40 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
/**
*
*/
@Data
public class DableJsonDto {
private String name;
private String oldtable;
private String newtable;
/**
* (
*/
private Integer delayed = 0;
private Integer interval = 0;
/**
*
*/
private String relation;
/**
* dbkey
*/
private int dbkey;
/**
* dbdatasourcename
*/
private String dbName;
/**
*
*/
private String whereparam;
/**
* 0 jzh1 jzh+2 +3, + 4jzh+
*/
private int collectionMatchingMode = 0;
}

@ -0,0 +1,10 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
import java.util.List;
@Data
public class DataFormatDto {
private List<DaTypeDto> datypes;
}

@ -0,0 +1,18 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
@Data
public class DataSourceDto {
/**
* key, 4
*/
private int key;
private String name;
private String url;
private String userName;
private String password;
private String driverClassName;
private String connectionTestQuery;
}

@ -0,0 +1,11 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
import java.util.List;
@Data
public class DataSourcesDto {
private List<DataSourceDto> datasources;
}

@ -0,0 +1,11 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
import java.util.List;
@Data
public class DataTransferJsonDto {
private DableJsonDto table;
private List<FieldJsonDto> fields;
}

@ -0,0 +1,29 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
@Data
public class FieldJsonDto {
/**
*
*/
private String name;
/**
*
*/
private String oldfield;
/**
*
*/
private String newfield;
/**
*
*/
private String defaultvalue;
/**
* 0, jzh 1int
*/
private int fieldtype=0;
}

@ -0,0 +1,22 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
/**
*
*/
@Data
public class HoliDay {
/**
*
*/
// private String name;
/**
*
*/
private String date;
/**
* truefalse
*/
private Boolean isOffDay;
}

@ -0,0 +1,10 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
import java.util.List;
@Data
public class MutliDataTransferJsonDto {
private List<DataTransferJsonDto> jsondatas;
}

@ -0,0 +1,66 @@
package com.docus.server.collect.web.common.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class NoViewCollectionDto {
/**
*
*/
private String startTime;
/**
*
*/
private String endTime;
/**
*
*/
private String where="";
private Integer interval=5;
/**
* 0,1:
*/
private Integer holiday=0;
/**
* 0
*/
private int pageNumber=0;
/**
*
*/
private int pageSize;
/**
* ids, ,
*/
private String syscodes="";
/**
* , 0:1:
*/
private int queryway=0;
/**
*
*/
private int priority=1;
@Override
public String toString() {
return "NoViewCollectionDto{" +
"startTime='" + startTime + '\'' +
", endTime='" + endTime + '\'' +
", where='" + where + '\'' +
", interval=" + interval +
", holiday=" + holiday +
", pageNumber=" + pageNumber +
", pageSize=" + pageSize +
", syscodes='" + syscodes + '\'' +
", queryway=" + queryway +
", priority=" + priority +
'}';
}
}

@ -0,0 +1,15 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
@Data
public class NoViewConfig {
/**
*
*/
private String syscode;
/**
*
*/
private String deptname;
}

@ -0,0 +1,18 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
import java.util.Arrays;
import java.util.List;
@Data
public class NoViewMakeUpDto {
/**
*
*/
private List<Integer> interval= Arrays.asList(3,7); ;
/**
* ids, ,
*/
private String syscodes="1";
}

@ -0,0 +1,42 @@
package com.docus.server.collect.web.common.dto;
import lombok.Data;
/**
*
*/
@Data
public class TaskCollect {
/**
* key
*/
private String key;
/**
* 0,12
*/
private int state=2;
/**
* db
*/
private int dbKey;
/**
*
*/
private String dbName;
/**
* 01
*/
private int excepState=0;
/**
*
*/
private String name;
/**
*
*/
private String error;
}

@ -0,0 +1,39 @@
package com.docus.server.collect.web.common.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ViewReportTwoDto {
@ApiModelProperty(value = "患者id")
private String patientId;
@ApiModelProperty(value = "住院号/就诊号")
private String inpatientNo;
@ApiModelProperty(value = "记帐号")
private String jzh;
@ApiModelProperty(value = "档案类型")
private String recordType="1";
@ApiModelProperty(value = "档案时间")
private String createTime;
@ApiModelProperty(value = "患者姓名")
private String name;
@ApiModelProperty(value = "住院次数")
private Integer admissTimes;
@ApiModelProperty(value = "住院日期")
private String admissDate;
@ApiModelProperty(value = "出院日期")
private String disDate;
@ApiModelProperty(value = "出院科室名称")
private String disDeptName;
@ApiModelProperty(value = "卡号")
private String admissId;
@ApiModelProperty(value = "采集器标识")
private String collectorId;
@ApiModelProperty(value = "优先级,0最低级10最高级")
private int ispriority=1;
@ApiModelProperty(value = "无视图任务采集器标识 多个用逗号分割")
private String viewTaskCollectorId;
}

@ -0,0 +1,25 @@
package com.docus.server.collect.web.common.dto.two;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ReportDownTwoDto {
@ApiModelProperty(value = "档案编号")
private String patientId;
@ApiModelProperty(value = "记账号")
private String jzh;
@ApiModelProperty(value = "档案类型")
private String recordType;
@ApiModelProperty(value = "档案时间")
private String createTime;
@ApiModelProperty(value = "患者信息")
private ReportPatientTwoDto patient =new ReportPatientTwoDto();
@ApiModelProperty(value = "住院信息")
private List<ReportHospitalTwoDto> hospitals = new ArrayList<>();
@ApiModelProperty(value = "任务信息")
private List<ReportTaskTwoDto> tasks = new ArrayList<>();
}

@ -0,0 +1,25 @@
package com.docus.server.collect.web.common.dto.two;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*/
@Data
public class ReportHospitalTwoDto {
@ApiModelProperty(value = "患者id")
private String patientId;
@ApiModelProperty(value = "住院次数")
private Integer admissTimes;
@ApiModelProperty(value = "住院日期")
private String admissDate;
@ApiModelProperty(value = "出院日期")
private String disDate;
@ApiModelProperty(value = "出院科室名称")
private String disDeptName;
@ApiModelProperty(value = "卡号")
private String admissId;
}

@ -0,0 +1,18 @@
package com.docus.server.collect.web.common.dto.two;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*/
@Data
public class ReportPatientTwoDto {
@ApiModelProperty(value = "住院号/就诊号")
private String inpatientNo;
@ApiModelProperty(value = "患者姓名")
private String name;
@ApiModelProperty(value = "id号")
private String patientId;
}

@ -0,0 +1,19 @@
package com.docus.server.collect.web.common.dto.two;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*/
@Data
public class ReportTaskTwoDto {
@ApiModelProperty(value = "采集器标识")
private String collectorId;
@ApiModelProperty(value = "任务id")
private Long taskId;
@ApiModelProperty(value = "患者id")
private String patientId;
}

@ -1,8 +1,8 @@
package com.docus.server.collect.web.domain;
package com.docus.server.collect.web.common.entity;
import com.docus.server.collect.web.enums.StateEnum;
import com.docus.server.collect.web.utils.DateSpiltUtil;
import com.docus.server.collect.web.utils.PeriodTime;
import com.docus.server.common.enums.StateEnum;
import lombok.Data;
import java.util.Date;

@ -1,9 +1,11 @@
package com.docus.server.collect.web.enums;
package com.docus.server.collect.web.common.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.docus.server.collect.web.enums.CollectTypeEnum;
import com.docus.server.common.enums.StateEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@ -2,9 +2,9 @@ package com.docus.server.collect.web.convert;
import com.docus.core.util.DateUtil;
import com.docus.infrastructure.redis.service.IdService;
import com.docus.server.collect.web.common.entity.TaskOriginalMessage;
import com.docus.server.collect.web.enums.CollectTypeEnum;
import com.docus.server.collect.web.enums.StateEnum;
import com.docus.server.collect.web.enums.TaskOriginalMessage;
import com.docus.server.common.enums.StateEnum;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;

@ -0,0 +1,109 @@
package com.docus.server.collect.web.enums;
public enum ColectNameEnum {
/**
*
*/
COLLECTID("SYS_CODE"),
/**
*
*/
JZH("FVISIT_ID"),
/**
*
*/
FILENAME("REPORT_NAME"),
/**
*
*/
CHECKTIME("CHECKTIME"),
/**
*
*/
RUMMAGER("RUMMAGER"),
/**
* id
*/
FILEID("RP_EXAM_NO"),
/**
*
*/
ASSORTID("ASSORTID"),
/**
* -
*/
BGLX("BGLX"),
/**
*
*/
PATHTYPE("PATH_TYPE"),
/**
*
*/
FILEPATH("FILE_PATH"),
/**
* id
*/
TASKID("TASKID"),
/**
*
*/
STATE("STATE"),
/**
*
*/
JCH("JCH"),
/**
*
*/
AdmissTimes("ADMISS_TIMES"),
/**
*
*/
PatientId("patient_id"),
/**
*
*/
InpatientNo("inpatient_no"),
/**
*
*/
AdmissDate("admiss_date"),
/**
*
*/
DisDate("dis_date"),
/**
*
*/
MedicalRecord("MEDICALRECORD"),
/**
*
*/
EXAMTIME("EXAM_TIME"),
/**
*
*/
ZYH("ZYH"),
ModifyTime("MODIFYTIME"),
RecordLog("RECORDLOG"),
/**
*
*/
priority("PRIORITY"),
/**
* 0:1
*/
nowdata("nowdata"),
;
private String code;
private ColectNameEnum(String code) { //必须是private的否则编译错误
this.code = code;
}
public String value() {
return this.code;
}
}

@ -1,5 +1,7 @@
package com.docus.server.collect.web.enums;
import com.docus.server.common.enums.IIntegerEnum;
public enum CollectTypeEnum implements IIntegerEnum {
/**

@ -0,0 +1,7 @@
package com.docus.server.collect.web.enums;
public interface DisposeModeEnum {
public final static String mq="mq";
public final static String redis="redis";
}

@ -0,0 +1,28 @@
package com.docus.server.collect.web.enums;
/**
*
*/
public enum MedicalRecordEnum {
/**
* jzh
*/
jzh("0"),
/**
* +
*/
jzhAndTimes("1"),
/**
* +
*/
zyhAndTimes("2"),
;
private String value = "0";
private MedicalRecordEnum(String value) { //必须是private的否则编译错误
this.value = value;
}
public String value() {
return this.value;
}
}

@ -0,0 +1,5 @@
package com.docus.server.collect.web.enums;
public interface RedisKeyEnum {
public final static String QUEUEREDISKEY="docus:view:queue";
}

@ -3,18 +3,18 @@ package com.docus.server.collect.web.job;
import com.docus.core.util.Func;
import com.docus.infrastructure.redis.service.IdService;
import com.docus.server.collect.IJob;
import com.docus.server.collect.web.domain.TaskConfig;
import com.docus.server.collect.web.enums.StateEnum;
import com.docus.server.collect.web.common.entity.TaskConfig;
import com.docus.server.collect.web.service.CollectService;
import com.docus.server.collect.web.service.ITaskConfigService;
import com.docus.server.collect.web.utils.PeriodTime;
import com.docus.server.common.UserProperties;
import com.docus.server.common.config.UserProperties;
import com.docus.server.common.enums.StateEnum;
import com.docus.server.record.service.ITBasicService;
import com.docus.server.sys.service.IPowerDeptService;
import com.docus.server.sys.service.IPowerThirdLoginService;
import com.docus.server.sys.service.IPowerUserService;
import com.xxl.job.core.context.XxlJobHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.util.Date;
@ -22,16 +22,18 @@ import java.util.List;
@Slf4j
public abstract class AbstractCollectJob<T> implements IJob<T> {
@Resource
protected IPowerUserService userService;
@Resource
protected IPowerThirdLoginService thirdLoginService;
@Resource
protected ITaskConfigService taskConfigService;
@Resource
protected IPowerUserService userService;
@Resource
protected IPowerDeptService deptService;
@Autowired
@Resource
protected ITBasicService basicService;
@Resource
protected ITaskConfigService taskConfigService;
protected CollectService collectService;
@Resource
protected UserProperties userProperties;
@Resource
@ -93,9 +95,11 @@ public abstract class AbstractCollectJob<T> implements IJob<T> {
taskConfig.getPageSize()
);
if (Func.isEmpty(t)) {
log.info("本次采集0笔" + taskConfig.getType());
break;
}
log.info("本次采集:" + t.size() + "笔" + taskConfig.getType());
this.batchInsertOrUpdate(t);
}
}

@ -1,7 +1,7 @@
package com.docus.server.collect.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.docus.server.collect.web.domain.TaskConfig;
import com.docus.server.collect.web.common.entity.TaskConfig;
import org.apache.ibatis.annotations.Mapper;
@Mapper

@ -1,7 +1,7 @@
package com.docus.server.collect.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.docus.server.collect.web.enums.TaskOriginalMessage;
import com.docus.server.collect.web.common.entity.TaskOriginalMessage;
import org.apache.ibatis.annotations.Mapper;
/**

@ -7,10 +7,10 @@ import com.docus.log.processor.AbstractProcessor;
import com.docus.server.collect.IConverter;
import com.docus.server.collect.IResult;
import com.docus.server.collect.web.enums.CollectTypeEnum;
import com.docus.server.collect.web.enums.IIntegerEnum;
import com.docus.server.collect.web.enums.StateEnum;
import com.docus.server.collect.web.service.ITaskOriginalMessageService;
import com.docus.server.collect.web.utils.SpringUtils;
import com.docus.server.common.enums.IIntegerEnum;
import com.docus.server.common.enums.StateEnum;
import com.fasterxml.jackson.core.type.TypeReference;
import com.xxl.job.core.context.XxlJobHelper;
import lombok.extern.slf4j.Slf4j;

@ -4,13 +4,13 @@ import com.docus.core.util.Func;
import com.docus.core.util.json.JSON;
import com.docus.log.context.TrackContext;
import com.docus.log.processor.AbstractProcessor;
import com.docus.server.collect.web.enums.CollectTypeEnum;
import com.docus.server.collect.web.enums.StateEnum;
import com.docus.server.collect.web.enums.IIntegerEnum;
import com.docus.server.collect.web.utils.SpringUtils;
import com.docus.server.collect.IConverter;
import com.docus.server.collect.IResult;
import com.docus.server.collect.web.enums.CollectTypeEnum;
import com.docus.server.collect.web.service.ITaskOriginalMessageService;
import com.docus.server.collect.IConverter;
import com.docus.server.collect.web.utils.SpringUtils;
import com.docus.server.common.enums.IIntegerEnum;
import com.docus.server.common.enums.StateEnum;
import com.fasterxml.jackson.core.type.TypeReference;
import lombok.extern.slf4j.Slf4j;

@ -1,18 +1,53 @@
package com.docus.server.collect.web.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.docus.core.util.Func;
import com.docus.infrastructure.redis.service.IdService;
import com.docus.server.archivefile.pojo.entity.AfViewCollectionLog;
import com.docus.server.collect.web.common.BasicProperties;
import com.docus.server.collect.web.common.DocusProperties;
import com.docus.server.collect.web.common.dto.CollectionForJZHDto;
import com.docus.server.collect.web.common.dto.CollectionSaveDto;
import com.docus.server.collect.web.enums.ColectNameEnum;
import com.docus.server.collect.web.enums.DisposeModeEnum;
import com.docus.server.collect.web.enums.MedicalRecordEnum;
import com.docus.server.collect.web.enums.RedisKeyEnum;
import com.docus.server.collect.web.utils.MqQueueUtils;
import com.docus.server.collect.web.utils.RedisMq;
import com.docus.server.collect.web.utils.SpringRestTemplateUtils;
import com.docus.server.common.message.MqMessage;
import com.docus.server.record.common.pojo.dto.TBasicDTO;
import com.docus.server.record.service.ITBasicService;
import com.docus.server.sys.common.pojo.dto.DeptDTO;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.docus.server.sys.service.IPowerDeptService;
import com.docus.server.sys.service.IPowerUserService;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@Slf4j
public class CollectService {
protected final static String DEL_TYPE = "D";
@Resource
@ -21,6 +56,23 @@ public class CollectService {
private IPowerUserService userService;
@Resource
private ITBasicService tBasicService;
@Resource
private IdService idService;
@Autowired
private AmqpTemplate amqpTemplate;
@Resource
private BasicProperties basicProperties;
@Resource
private DocusProperties docusProperties;
@Resource
MqQueueUtils mqQueueUtils;
@Resource
Environment environment;
private String jzhkey = "FVISIT_ID";
private String syscodekey = "SYS_CODE";
@Resource
private RedisMq redisMq;
/**
* 3
@ -73,4 +125,398 @@ public class CollectService {
return Func.isNotEmpty(operateType)
&& operateType.contains(delType);
}
public void processJobView(List<Map<String, Object>> datas, String key) {
String mqKey = String.format("topic_task_%s_queue", key);
MqMessage mqMessage = new MqMessage();
//将key转为大写以免出错
datas = toReplaceKeyUp(datas);
// 去掉所有String值的前后空格
toReplaceBlank(datas);
boolean bflage = true;
List<Map<String, Object>> list = new ArrayList<>();
//包含报告时间并没有jzh数据处理
if (datas.get(0).containsKey(ColectNameEnum.EXAMTIME.value())
&& ((!datas.get(0).containsKey(ColectNameEnum.JZH.value())) || StringUtils.isEmpty(datas.get(0).get(ColectNameEnum.JZH.value())))) {
//根据住院号取得患者数据,根据报告时间属于哪个出入院时间之间,如无则按最近算
list = BatchForEXAMTIME(dto, datas);
} else {
//正常数据处理根据jzh取得患者本次病案采集器全部文件
list = BatchForJZH(dto, datas);
}
list = GenerateSDPriority(list);
if (list.size() > 0) {
GenerateQueue(mqKey, mqMessage, list);
}
log.info("本次采集:" + datas.size() + "笔" + key);
log.info("本次批采患者数据:" + list.size() + "笔" + key);
log.debug("本次批采患者原始数据:" + JSON.toJSONString(datas));
log.debug("本次批采患者数据:" + JSON.toJSONString(list));
datas.clear();
list.clear();
}
private void GenerateQueue(String mqKey, MqMessage mqMessage, List<Map<String, Object>> list) {
log.info("队列生成方式:{},推送 {} 条数据", docusProperties.getMode(), list.size());
if (docusProperties.getMode().equals(DisposeModeEnum.mq)) {
mqQueueUtils.DeclareQueue(mqKey);
mqMessage.setMessageBody(JSON.toJSONString(list, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue));
amqpTemplate.convertAndSend("", mqKey, mqMessage);
}
if (docusProperties.getMode().equals(DisposeModeEnum.redis)) {
redisMq.push(RedisKeyEnum.QUEUEREDISKEY, JSON.toJSONString(list, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue));
}
}
/**
*
*
* @param datas
* @return
*/
private List<Map<String, Object>> GenerateSDPriority(List<Map<String, Object>> datas) {
if (!(!StringUtils.isEmpty(docusProperties.getPriority()) && docusProperties.getPriority().equals("1"))) {
return datas;
}
int priority = 1;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String nowday = sdf.format(new Date());
String oldDate = "";
if (datas != null && datas.size() > 0) {
if (datas.get(0).containsKey(ColectNameEnum.ModifyTime.value()) && !ObjectUtils.isEmpty(datas.get(0).get(ColectNameEnum.ModifyTime.value()))) {
if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof java.util.Date) {
java.util.Date t = (java.util.Date) datas.get(0).get(ColectNameEnum.ModifyTime.value());
oldDate = sdf.format(t);
}
if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof java.sql.Date) {
java.sql.Date t = (java.sql.Date) datas.get(0).get(ColectNameEnum.ModifyTime.value());
oldDate = sdf.format(t);
}
if (datas.get(0).get(ColectNameEnum.ModifyTime.value()) instanceof String) {
oldDate = String.valueOf(datas.get(0).get(ColectNameEnum.ModifyTime.value())).replace("-", "").substring(0, 8);
}
}
if (oldDate.substring(0, 6).equals("202208")) {
priority = 2;
}
if (oldDate.equals(nowday)) {
priority = 3;
}
}
for (Map<String, Object> o : datas) {
o.put(ColectNameEnum.priority.value(), priority);
}
return datas;
}
/**
* jzh
*
* @param dto
* @param datas
*/
private List<Map<String, Object>> BatchForJZH(BasicQueryDto dto, List<Map<String, Object>> datas) {
String oldJzhkey = "";
String syscode = String.valueOf(datas.get(0).get(syscodekey));
List<String> jzhs = datas.stream().map(t -> String.valueOf(t.get(jzhkey))).distinct().collect(Collectors.toList());
FieldJsonDto fieldJsonDto = dto.getFields().stream().filter(t -> t.getNewfield().equals(jzhkey)).findFirst().orElse(null);
if (fieldJsonDto != null) {
oldJzhkey = fieldJsonDto.getOldfield();
}
if (datas.get(0).containsKey(ColectNameEnum.MedicalRecord.value())) {
String MedicalRecord = String.valueOf(datas.get(0).get(ColectNameEnum.MedicalRecord.value()));
if (MedicalRecord.equals(MedicalRecordEnum.jzhAndTimes.value())) {
return GetColectionForJZHAndAdmissTimes(dto, oldJzhkey, syscode, jzhs, datas);
}
if (MedicalRecord.equals(MedicalRecordEnum.zyhAndTimes.value())) {
jzhs = datas.stream().map(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value())).trim() + "_" + String.valueOf(t.get(ColectNameEnum.AdmissTimes.value())).trim()).distinct().collect(Collectors.toList());
return GetColectionForZYHAndAdmissTimes(dto, oldJzhkey, syscode, jzhs, datas);
}
}
return GetColectionForJZH(dto, oldJzhkey, syscode, jzhs);
}
private List<Map<String, Object>> GetColectionForJZHAndAdmissTimes(BasicQueryDto dto, String oldJzhkey, String syscode, List<String> jzhs, List<Map<String, Object>> datas) {
List<Map<String, Object>> batchcollects = repositiory.BatchForJZHAndAdmissTimes(dto, datas);
toReplaceBlank(batchcollects);
return GetColectionForJZH(syscode, jzhs, batchcollects);
}
private List<Map<String, Object>> GetColectionForZYHAndAdmissTimes(BasicQueryDto dto, String oldJzhkey, String syscode, List<String> jzhs, List<Map<String, Object>> datas) {
List<Map<String, Object>> batchcollects = repositiory.BatchForZYHAndAdmissTimes(dto, datas);
toReplaceBlank(batchcollects);
return GetColectionForJZH(syscode, jzhs, batchcollects);
}
/**
*
*
* @param jzhs
* @param syscode
* @return
*/
private List<AfViewCollectionLog> getOldConllectionLog(List<String> jzhs, String syscode) {
CollectionForJZHDto jzhDto = new CollectionForJZHDto();
jzhDto.setJzhs(jzhs);
jzhDto.setSyscode(syscode);
String url = String.format("http://localhost:%s", getPort());
String requstParam = JSON.toJSONString(jzhDto);
String sendPost = SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/logs", requstParam, MediaType.APPLICATION_JSON, null, true);
ObjectMapper objectMapper = new ObjectMapper();
List<AfViewCollectionLog> datas = new ArrayList<>();
try {
datas = objectMapper.readValue(sendPost, new TypeReference<List<AfViewCollectionLog>>() {
});
} catch (Exception ex) {
log.error("解析失败:" + sendPost);
return null;
}
return datas;
}
private List<Map<String, Object>> GetColectionForJZH(String syscode, List<String> jzhs, List<Map<String, Object>> batchcollects) {
//转为大写
batchcollects = toReplaceKeyUp(batchcollects);
batchcollects = batchcollects.stream().distinct().collect(Collectors.toList());
log.debug("JZH 处理后的数据 {} 条", batchcollects.size());
Boolean recordlog = false;
if (batchcollects != null && batchcollects.size() > 0) {
if (batchcollects.get(0).containsKey(ColectNameEnum.RecordLog.value())) {
recordlog = true;
}
}
log.debug("recordlog:{}", recordlog);
List<AfViewCollectionLog> oldcollects = getOldConllectionLog(jzhs, syscode);
List<Map<String, Object>> newcollects = new ArrayList<>();
List<AfViewCollectionLog> updates = new ArrayList<>();
List<AfViewCollectionLog> adds = new ArrayList<>();
for (Map<String, Object> o : batchcollects) {
String fileid = String.valueOf(o.get(ColectNameEnum.FILEID.value())).trim();
String jzhdata = String.valueOf(o.get(jzhkey));
String MedicalRecord = String.valueOf(o.get(ColectNameEnum.MedicalRecord.value()));
if (MedicalRecord.equals(MedicalRecordEnum.zyhAndTimes.value())) {
jzhdata = String.valueOf(o.get(ColectNameEnum.ZYH.value())).trim() + "_" + String.valueOf(o.get(ColectNameEnum.AdmissTimes.value())).trim();
}
String jzh = jzhdata;
String modifytime = String.valueOf(o.get(ColectNameEnum.ModifyTime.value()));
AfViewCollectionLog collectionLog = oldcollects.stream().filter(t -> t.getFileId().equals(fileid) && t.getJzh().equals(jzh)).findFirst().orElse(null);
log.debug("fileId {} AfViewCollectionLog is null? {}", fileid, collectionLog == null);
if (null == collectionLog) {
//电子病历,记录是否更新,合并时只给已更新的
if (recordlog) {
o.put(ColectNameEnum.nowdata.value(), 1);
}
newcollects.add(o);
log.debug("collectionLog is null");
AfViewCollectionLog logadd = new AfViewCollectionLog();
logadd.setFileId(fileid);
logadd.setCreateTime(new Date());
logadd.setFileModifyTime(modifytime);
logadd.setJzh(jzh);
logadd.setSysCode(syscode);
logadd.setId(idService.getDateSeq());
adds.add(logadd);
continue;
}
if (!collectionLog.getFileModifyTime().equals(modifytime)) {
log.debug("collectionLog FileModifyTime is not eq view FileModifyTime");
if (recordlog) {
o.put(ColectNameEnum.nowdata.value(), 1);
}
newcollects.add(o);
collectionLog.setFileModifyTime(modifytime);
updates.add(collectionLog);
continue;
}
if (recordlog) {
o.put(ColectNameEnum.nowdata.value(), 1);
newcollects.add(o);
}
}
SaveConllectionLog(adds, updates);
return newcollects;
}
private void SaveConllectionLog(List<AfViewCollectionLog> adds, List<AfViewCollectionLog> updates) {
CollectionSaveDto dto = new CollectionSaveDto();
dto.setAdds(adds);
dto.setUpdates(updates);
String url = String.format("http://localhost:%s", getPort());
String requstParam = JSON.toJSONString(dto);
SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/SaveLogs", requstParam, MediaType.APPLICATION_JSON, null, true);
}
/**
* map key
*
* @param maps
* @return
*/
private static List<Map<String, Object>> toReplaceKeyUp(List<Map<String, Object>> maps) {
List<Map<String, Object>> data = new ArrayList<>();
for (Map<String, Object> o : maps) {
Map re_map = new HashMap();
for (Map.Entry<String, Object> entry : o.entrySet()) {
re_map.put(entry.getKey().trim().toUpperCase(), entry.getValue());
}
data.add(re_map);
}
return data;
}
/**
* mapString
*
* @param datas
*/
private static void toReplaceBlank(List<Map<String, Object>> datas) {
if (datas == null || datas.isEmpty()) {
return;
}
for (Map<String, Object> data : datas) {
Set<Map.Entry<String, Object>> entries = data.entrySet();
for (Map.Entry<String, Object> entry : entries) {
Object value = entry.getValue();
if (value instanceof String) {
entry.setValue(String.valueOf(value).trim());
}
}
}
}
private List<Map<String, Object>> BatchForEXAMTIME(BasicQueryDto dto, List<Map<String, Object>> datas) {
String oldJzhkey = "";
String syscode = String.valueOf(datas.get(0).get(ColectNameEnum.COLLECTID.value()));
List<String> zyhs = datas.stream().map(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value()))).distinct().collect(Collectors.toList());
List<Map<String, Object>> basics = getBasicForZYHs(zyhs);
if (null == basics || basics.size() <= 0) {
return new ArrayList<>();
}
List<Map<String, Object>> list = new ArrayList<>();
for (Map<String, Object> o : datas) {
List<Map<String, Object>> temps = basics.stream().filter(t -> String.valueOf(t.get(ColectNameEnum.InpatientNo.value())).equals(
String.valueOf(o.get(ColectNameEnum.ZYH.value())))
).collect(Collectors.toList());
if (null == temps || temps.size() <= 0) {
continue;
}
String examTime = String.valueOf(o.get(ColectNameEnum.EXAMTIME.value()));
//region 取得出入院区间是否有数据
Map<String, Object> temp = temps.stream().filter(t ->
{
String AdmissDate = String.valueOf(t.get(ColectNameEnum.AdmissDate.value()));
String DisDate = String.valueOf(t.get(ColectNameEnum.DisDate.value()));
if (examTime.compareTo(AdmissDate) >= 0 && examTime.compareTo(DisDate) <= 0) {
return true;
}
return false;
}
).findFirst().orElse(null);
if (temp != null) {
o.put(ColectNameEnum.JZH.value(), temp.get("jzh"));
o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value()));
o.put(ColectNameEnum.DisDate.value(), temp.get(ColectNameEnum.DisDate.value()));
list.add(o);
continue;
}
//endregion
//region 取得大于入院日期的第一笔
temp = temps.stream().filter(t ->
{
String AdmissDate = String.valueOf(t.get(ColectNameEnum.AdmissDate.value()));
String DisDate = String.valueOf(t.get(ColectNameEnum.DisDate.value()));
if (examTime.compareTo(AdmissDate) >= 0 && examTime.compareTo(DisDate) >= 0) {
return true;
}
return false;
}
).sorted(Comparator.comparing(a -> String.valueOf(a.get(ColectNameEnum.AdmissDate.value())), Comparator.reverseOrder())).findFirst().orElse(null);
if (temp != null) {
o.put(ColectNameEnum.JZH.value(), temp.get("jzh"));
o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value()));
o.put(ColectNameEnum.DisDate.value(), examTime);
list.add(o);
continue;
}
//endregion
//region 取得最近一笔住院的
temp = temps.stream().sorted(Comparator.comparing(a -> String.valueOf(a.get(ColectNameEnum.AdmissDate.value())), Comparator.reverseOrder())).findFirst().orElse(null);
if (temp != null) {
o.put(ColectNameEnum.JZH.value(), temp.get("jzh"));
o.put(ColectNameEnum.AdmissDate.value(), temp.get(ColectNameEnum.AdmissDate.value()));
o.put(ColectNameEnum.DisDate.value(), temp.get(ColectNameEnum.DisDate.value()));
list.add(o);
continue;
}
//endregion
}
//取得该患者全部住院文件
List<Map<String, Object>> batchcollects = repositiory.BatchForEXAMTIME(dto, list);
toReplaceBlank(batchcollects);
//添加记帐号
for (Map<String, Object> k : batchcollects) {
Map<String, Object> temp = list.stream().filter(t -> String.valueOf(t.get(ColectNameEnum.ZYH.value())).equals(
String.valueOf(k.get(ColectNameEnum.ZYH.value())))
).findFirst().orElse(null);
k.put(ColectNameEnum.JZH.value(), temp.get(ColectNameEnum.JZH.value()));
}
list.forEach(t ->
{
t.remove(ColectNameEnum.AdmissDate.value());
t.remove(ColectNameEnum.DisDate.value());
}
);
batchcollects.removeAll(list);
batchcollects.addAll(list);
List<String> jzhs = list.stream().map(t -> String.valueOf(t.get(ColectNameEnum.JZH.value()))).collect(Collectors.toList());
return GetColectionForJZH(syscode, jzhs, batchcollects);
}
private List<Map<String, Object>> GetColectionForJZH(BasicQueryDto dto, String oldJzhkey, String syscode, List<String> jzhs) {
jzhs = jzhs.stream().distinct().collect(Collectors.toList());
List<Map<String, Object>> batchcollects = repositiory.BatchForJZH(dto, oldJzhkey, jzhs);
log.debug("oldJzhKey:{} ,条件 {} 查询 table: {},size:{}", oldJzhkey, jzhs, dto.getTable().getOldtable(), batchcollects.size());
toReplaceBlank(batchcollects);
return GetColectionForJZH(syscode, jzhs, batchcollects);
}
/**
*
*
* @param zyhs
* @return
*/
private List<Map<String, Object>> getBasicForZYHs(List<String> zyhs) {
List<Map<String, Object>> datas = new ArrayList<>();
String url = String.format("http://localhost:%s", getPort());
String requstParam = JSON.toJSONString(zyhs);
String sendPost = SpringRestTemplateUtils.getInstance().sendPost(url + "/api/conllection/getBasicForZYHs", requstParam, MediaType.APPLICATION_JSON, null, true);
ObjectMapper objectMapper = new ObjectMapper();
try {
datas = objectMapper.readValue(sendPost, new TypeReference<List<Map<String, Object>>>() {
});
} catch (Exception ex) {
log.error("解析失败:" + sendPost);
return null;
}
return datas;
}
/**
*
*
* @return
*/
private String getPort() {
return environment.getProperty("local.server.port");
}
}

@ -0,0 +1,35 @@
package com.docus.server.collect.web.service;
/**
*
*/
public enum HospitalEnum {
/**
*
*/
Default(0),
/**
*
*/
sd(1),
/**
*
*/
nk(2),
/**
*
*/
ch(3),
;
private int value = 0;
private HospitalEnum(int value) { //必须是private的否则编译错误
this.value = value;
}
public int value() {
return this.value;
}
public String ToString() {
return String.valueOf(this.value);
}
}

@ -1,11 +1,11 @@
package com.docus.server.collect.web.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.docus.server.collect.web.domain.TaskConfig;
import com.docus.server.collect.web.common.entity.TaskConfig;
import com.docus.server.common.service.IBaseService;
import java.util.Date;
public interface ITaskConfigService extends IService<TaskConfig> {
public interface ITaskConfigService extends IBaseService<TaskConfig> {
void updateAllPointerDate(String id, Date date);
void updateIncPointerDate(String id, Date date);

@ -1,7 +1,7 @@
package com.docus.server.collect.web.service;
import com.docus.server.collect.web.enums.CollectTypeEnum;
import com.docus.server.collect.web.enums.StateEnum;
import com.docus.server.common.enums.StateEnum;
public interface ITaskOriginalMessageService {

@ -1,16 +1,16 @@
package com.docus.server.collect.web.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.docus.server.collect.web.domain.TaskConfig;
import com.docus.server.collect.web.common.entity.TaskConfig;
import com.docus.server.collect.web.mapper.TaskConfigMapper;
import com.docus.server.collect.web.service.ITaskConfigService;
import com.docus.server.common.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@Service
public class TaskConfigServiceImpl extends ServiceImpl<TaskConfigMapper, TaskConfig> implements ITaskConfigService {
public class TaskConfigServiceImpl extends BaseServiceImpl<TaskConfigMapper, TaskConfig> implements ITaskConfigService {
@Transactional
@Override
public void updateAllPointerDate(String id, Date date) {

@ -3,12 +3,12 @@ package com.docus.server.collect.web.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.docus.core.util.DateUtil;
import com.docus.core.util.Func;
import com.docus.server.collect.web.convert.TaskOriginalMessageConverter;
import com.docus.server.collect.web.common.entity.TaskOriginalMessage;
import com.docus.server.collect.web.enums.CollectTypeEnum;
import com.docus.server.collect.web.enums.StateEnum;
import com.docus.server.collect.web.enums.TaskOriginalMessage;
import com.docus.server.collect.web.mapper.TaskOriginalMessageMapper;
import com.docus.server.collect.web.service.ITaskOriginalMessageService;
import com.docus.server.collect.web.convert.TaskOriginalMessageConverter;
import com.docus.server.common.enums.StateEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@ -0,0 +1,878 @@
package com.docus.server.collect.web.utils;
import lombok.extern.slf4j.Slf4j;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @Author zengdl
*/
@Slf4j
public class DateUtils {
/** 缺省日期格式 */
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/** 缺省时间格式 */
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
/** 缺省月格式 */
public static final String DEFAULT_MONTH = "MONTH";
/** 缺省年格式 */
public static final String DEFAULT_YEAR = "YEAR";
/** 缺省日格式 */
public static final String DEFAULT_DATE = "DAY";
/** 缺省小时格式 */
public static final String DEFAULT_HOUR = "HOUR";
/** 缺省分钟格式 */
public static final String DEFAULT_MINUTE = "MINUTE";
/** 缺省秒格式 */
public static final String DEFAULT_SECOND = "SECOND";
/** 缺省长日期格式 */
public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH-mm";
/** 缺省长日期格式,精确到秒 */
public static final String DEFAULT_DATETIME_FORMAT_SEC = "yyyy-MM-dd HH:mm:ss";
/** 星期数组 */
private static final String[] WEEKS = { "星期日", "星期一", "星期二", "星期三", "星期四",
"星期五", "星期六" };
/**
*
*
* @return ,2010-05-28
**/
public static String today() {
return today(DEFAULT_DATE_FORMAT);
}
/**
*
*
* @param strFormat
*
* @return
*/
public static String today(String strFormat) {
return toString(new Date(), strFormat);
}
/**
*
* @param hour
* @param min
* @param sec
* @param mill
* @return
*/
public static long getMillsecBeforeMoment(int hour,int min,int sec,int mill){
return getMillisecBetweenDate(new Date(),getMoment(hour,min,sec,mill));
}
/**
* Date
* @param hour 24
* @param min
* @param sec
* @param mill
* @return
*/
public static Date getMoment(int hour,int min,int sec,int mill){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY,hour);
calendar.set(Calendar.MINUTE,min);
calendar.set(Calendar.SECOND,sec);
calendar.set(Calendar.MILLISECOND,mill);
return calendar.getTime();
}
/**
*
* @param before
* @param after
* @return
*/
public static long getMillisecBetweenDate(Date before, Date after){
long beforeTime = before.getTime();
long afterTime = after.getTime();
return afterTime - beforeTime;
}
/**
* yyyy-MM-dd
*
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* ,
*
* @return ,:21:10:12
**/
public static String currentTime() {
return currentTime(DEFAULT_TIME_FORMAT);
}
/**
* 'hh:mm:ss'
*
* @return ,:21:10:12
**/
public static String currentTime(String strFormat) {
return toString(new Date(), strFormat);
}
/**
* // <br>
* 5,:<br>
* getAddDay("DATE", -5).
*
* @param field
* ,,"year","month","date",
* @param amount
* ,(),5,-1
* @return "2010-05-28"
* @throws ParseException
**/
public static String getAddDay(String field, int amount)
throws ParseException {
return getAddDay(field, amount, null);
}
/**
* //,
*
* 5,:<br>
* getAddDay("DATE", -5,'yyyy-mm-dd hh:mm').
*
* @param field
* ,,"year","month","date",
* @param amount
* ,(),5,-1
* @param strFormat
* ,,"yyyy-mm-dd","yyyy-mm-dd hh:mm"
* @return "2010-05-28"
* @throws ParseException
**/
public static String getAddDay(String field, int amount, String strFormat)
throws ParseException {
return getAddDay(null, field, amount, strFormat);
}
/**
* //,
*
* @param date
* String
* @param field
* int YEAR,MONTH,DAY
* @param amount
* int
* @param strFormat
*
* @return
* @throws ParseException
*/
public static String getAddDay(String date, String field, int amount,
String strFormat) throws ParseException {
if (strFormat == null) {
strFormat = DEFAULT_DATETIME_FORMAT_SEC;
}
Calendar rightNow = Calendar.getInstance();
if (date != null && !"".equals(date.trim())) {
rightNow.setTime(parseDate(date, strFormat));
}
if (field == null) {
return toString(rightNow.getTime(), strFormat);
}
rightNow.add(getInterval(field), amount);
return toString(rightNow.getTime(), strFormat);
}
/**
*
*
* @param field
*
* @return
*/
protected static int getInterval(String field) {
String tmpField = field.toUpperCase();
if (tmpField.equals(DEFAULT_YEAR)) {
return Calendar.YEAR;
} else if (tmpField.equals(DEFAULT_MONTH)) {
return Calendar.MONTH;
} else if (tmpField.equals(DEFAULT_DATE)) {
return Calendar.DATE;
} else if (DEFAULT_HOUR.equals(tmpField)) {
return Calendar.HOUR;
} else if (DEFAULT_MINUTE.equals(tmpField)) {
return Calendar.MINUTE;
} else {
return Calendar.SECOND;
}
}
/**
*
*
* @param strFormat
* "yyyy-MM-dd"
* @return
*/
public static SimpleDateFormat getSimpleDateFormat(String strFormat) {
if (strFormat != null && !"".equals(strFormat.trim())) {
return new SimpleDateFormat(strFormat);
} else {
return new SimpleDateFormat();
}
}
/**
*
*
* @return
* @throws ParseException
*/
public static String getWeekOfMonth() throws ParseException {
return getWeekOfMonth(null, null);
}
/**
*
*
* @param date
*
* @return
* @throws ParseException
*/
public static String getWeekOfMonth(String date, String fromat)
throws ParseException {
Calendar rightNow = Calendar.getInstance();
if (date != null && !"".equals(date.trim())) {
rightNow.setTime(parseDate(date, fromat));
}
return WEEKS[rightNow.get(Calendar.WEEK_OF_MONTH)];
}
/**
* java.util.date
*
* @param date
*
* @param format
*
* @return 2010-05-28
*/
public static String toString(Date date, String format) {
return getSimpleDateFormat(format).format(date);
}
/**
* java.util.date
*
* @param date
*
* @return 2010-05-28
*/
public static String toString(Date date) {
return toString(date, DEFAULT_DATE_FORMAT);
}
/**
*
*
* @param strDate
* yyyy-MM-dd
* @param format
* ps
* @return
* @throws ParseException
*/
public static Date parseDate(String strDate, String format)
throws ParseException {
return getSimpleDateFormat(format).parse(strDate);
}
/***
*
*
* @version 2011-7-12
* @param millisecond
* @param format
* @return
*/
public static String millisecondFormat(Long millisecond, String format) {
if (millisecond == null || millisecond <= 0) {
throw new IllegalArgumentException(String.format("传入的时间毫秒数[%s]不合法",
"" + millisecond));
}
if (format == null || "".equals(format.trim())) {
format = DEFAULT_DATE_FORMAT;
}
return toString(new Date(millisecond), format);
}
/**
*
*
* @param strDate
*
* @param format
*
* @return
* @throws ParseException
*/
public static Timestamp parseTimestamp(String strDate, String format)
throws ParseException {
Date utildate = getSimpleDateFormat(format).parse(strDate);
return new Timestamp(utildate.getTime());
}
/**
* getCurDate
*
* @return java.util.Date
**/
public static Date getCurDate() {
return (new Date());
}
/**
* getCurTimestamp
*
* @return java.sql.Timestamp
**/
public static Timestamp getCurTimestamp() {
return new Timestamp(System.currentTimeMillis());
}
/**
* getCurTimestamp
*
* @param format
*
* @return java.sql.Timestamp
**/
public static Date getCurDate(String format) throws Exception {
return getSimpleDateFormat(format).parse(toString(new Date(), format));
}
/**
* Timestamp
*
* @param timestamp
*
* @param format
* psyyyy.mm.dd
* @return 2010-05-28 2010-05-281 13:21
*/
public static String toString(Timestamp timestamp, String format) {
if (timestamp == null) {
return "";
}
return toString(new Date(timestamp.getTime()), format);
}
/**
* Timestamp
*
* @param ts
*
* @return 2010-05-28
*/
public static String toString(Timestamp ts) {
return toString(ts, DEFAULT_DATE_FORMAT);
}
/**
* Timestamp使
*
* @param timestamp
* Timestamp
* @param fullFormat
* 使
* @return 2010-05-28 2010-05-28 21:21
*/
public static String toString(Timestamp timestamp, boolean fullFormat) {
if (fullFormat) {
return toString(timestamp, DEFAULT_DATETIME_FORMAT_SEC);
} else {
return toString(timestamp, DEFAULT_DATE_FORMAT);
}
}
/**
* sqldate
*
* @param sqldate
*
* @param sFormat
* ps
* @return 2010-05-28 2010-05-28 00:00
*/
public static String toString(java.sql.Date sqldate, String sFormat) {
if (sqldate == null) {
return "";
}
return toString(new Date(sqldate.getTime()), sFormat);
}
/**
* sqldate
*
* @param sqldate
*
* @return 2010-05-28
*/
public static String toString(java.sql.Date sqldate) {
return toString(sqldate, DEFAULT_DATE_FORMAT);
}
/**
* date1date2
*
* @version 2011-7-12
* @param date1
* @param date2
* @return {@link Map} Map, day(),
* hour(),minute()second()
*/
public static Map<String, Long> timeDifference(final Date date1,
final Date date2) {
if (date1 == null || date2 == null) {
throw new NullPointerException("date1 and date2 can't null");
}
long mim1 = date1.getTime();
long mim2 = date2.getTime();
if (mim1 < mim2) {
throw new IllegalArgumentException(String.format(
"date1[%s] not be less than date2[%s].", mim1 + "", mim2
+ ""));
}
long m = (mim1 - mim2 + 1) / 1000L;
long mday = 24L * 3600L;
final Map<String, Long> map = new HashMap<String, Long>(16);
map.put("day", m / mday);
m = m % mday;
map.put("hour", (m) / 3600);
map.put("minute", (m % 3600) / 60);
map.put("second", (m % 3600 % 60));
return map;
}
public static Map<String, Integer> compareTo(final Date date1,
final Date date2) {
if (date1 == null || date2 == null) {
return null;
}
long time1 = date1.getTime();
long time2 = date2.getTime();
long time = Math.max(time1, time2) - Math.min(time1, time2);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
Map<String, Integer> map = new HashMap<String, Integer>(16);
map.put("year", (calendar.get(Calendar.YEAR) - 1970) > 0 ? (calendar
.get(Calendar.YEAR) - 1970) : 0);
map.put("month", (calendar.get(Calendar.MONTH) - 1) > 0 ? (calendar
.get(Calendar.MONTH) - 1) : 0);
map.put("day",
(calendar.get(Calendar.DAY_OF_MONTH) - 1) > 0 ? (calendar
.get(Calendar.DAY_OF_MONTH) - 1) : 0);
map.put("hour",
(calendar.get(Calendar.HOUR_OF_DAY) - 8) > 0 ? (calendar
.get(Calendar.HOUR_OF_DAY) - 8) : 0);
map.put("minute", calendar.get(Calendar.MINUTE) > 0 ? calendar
.get(Calendar.MINUTE) : 0);
map.put("second", calendar.get(Calendar.SECOND) > 0 ? calendar
.get(Calendar.SECOND) : 0);
return map;
}
public static Timestamp stringOrtimestamp(String reStr){
Timestamp ts = new Timestamp(System.currentTimeMillis());
try {
ts = Timestamp.valueOf(reStr+" 00:00:00");
} catch (Exception e) {
log.error(e.getMessage());
}
return ts;
}
/**
*
* @param length
* @return
*/
public static List<String> getAllYear(int length) {
List<String> list = new ArrayList<>();
String[] months = new String[length];
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH));
// 加一行代码,否则3月重复
cal.set(Calendar.DATE,1);
for (int i = 0; i < length; i++) {
months[length - i - 1] = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1);
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1);
}
for (int i = 0; i < months.length; i++) {
list.add(months[i]);
}
return list;
}
/**
*
* 退
* @param length
* @return
*/
public static List<String> getAllYear(int length,String str,String split) {
List<String> list = new ArrayList<>();
String[] months = new String[length];
Calendar cal = Calendar.getInstance();
if(split.equals("-")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Date date = null;
try {
date = sdf.parse(str);
} catch (ParseException e) {
log.error(e.getMessage());
}
cal.setTime(date);
}else{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
Date date = null;
try {
date = sdf.parse(str);
} catch (ParseException e) {
log.error(e.getMessage());
}
cal.setTime(date);
}
// 加一行代码,否则3月重复
cal.set(Calendar.DATE,1);
for (int i = 0; i < length; i++) {
months[length - i - 1] = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1);
if(split.equals("+")){
months[length - i - 1] = cal.get(Calendar.YEAR) + "" + (cal.get(Calendar.MONTH) + 1);
}
if((cal.get(Calendar.MONTH) + 1 < 10)){
months[length - i - 1] = cal.get(Calendar.YEAR) + "0" + (cal.get(Calendar.MONTH) + 1);
if(split.equals("-")){
months[length - i - 1] = cal.get(Calendar.YEAR) + "-0" + (cal.get(Calendar.MONTH) + 1);
}
}
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1);
}
for (int i = 0; i < months.length; i++) {
list.add(months[i]);
}
return list;
}
/**
*
* @param length str退
* @param str
* @param splt 2019-01-01 - +
* @return
*/
public static List<String> getAllYearPrecision(int length,String str,String splt) {
List<String> list = new ArrayList<>();
//如果str不为空,就处理
int year = 0;
int month = 0;
String[] months = new String[length];
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH));
if(str!=null&&!"".equals(str)){
if(splt.equals("-")){
String split[] = str.split(splt);
year = Integer.parseInt(split[1]);
month = Integer.parseInt(split[0]);
} else if(splt.equals("+")){
year = Integer.parseInt(str.substring(0,4));
month = Integer.parseInt(str.substring(4,6));
}
cal.set(Calendar.YEAR,year);
cal.set(Calendar.MONTH,month);
}
// 加一行代码,否则3月重复
cal.set(Calendar.DATE,1);
for (int i = 0; i < length; i++) {
months[length - i - 1] = cal.get(Calendar.YEAR) + "" + (cal.get(Calendar.MONTH) + 1);
if((cal.get(Calendar.MONTH) + 1 < 10)){
months[length - i - 1] = cal.get(Calendar.YEAR) + "0" + (cal.get(Calendar.MONTH) + 1);
}
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1);
}
for (int i = 0; i < months.length; i++) {
list.add(months[i]);
}
return list;
}
public static void main(String[] args) {
List<String> list = getAllYear(3,"201901","+");
for (String str : list) {
String[] split = str.split("-");
System.out.println(split[1]);
}
System.out.println(getAllYear(3,"201901","+"));
}
/**
* 12
* @param year
* @return
*/
public static List<String> getYearMonth(int year) {
List<String> list = new ArrayList<>();
for (int i = 1; i < 13; i++) {
list.add(year+"-"+i);
}
return list;
}
/**
* ,
* @param year
* @param month
* @param value
* @return
*/
public static String getCal(int year,int month,int day,int value) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
calendar.set(Calendar.MONTH, month-12);//当前时间前去一个月,即一个月前的时间    
calendar.set(Calendar.DAY_OF_MONTH, day);//当前时间前去一个月,即一个月前的时间    
return sdf.format(calendar.getTime());
}
/**
* 12
* @return
*/
public static String getCal(Date date,int value) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, -value);//当前时间前去一个月,即一个月前的时间    
return sdf.format(calendar.getTime());
}
public static Date stringToDate(String dstr,String format){
SimpleDateFormat sdf=new SimpleDateFormat(format);//小写的mm表示的是分钟
//String转date
Date date = null;
try {
date = sdf.parse(dstr);
} catch (ParseException e) {
log.error(e.getMessage());
}
//Date转String
// String date = formatter.format(new Date());
return date;
}
/**
* ()
* : 2019-09-09
* @param dstr
* @return
*/
public static String stringFormat(String dstr){
return dstr.replaceAll("-","");
}
/**
*
* @param date1
* @param date2
* @return
*/
public static List<String> getYear(Date date1,Date date2){
List<String> list = new ArrayList<>();
Calendar calendar=new GregorianCalendar();
calendar.setTime(date1);
Calendar scalendar=new GregorianCalendar();
scalendar.setTime(date2);
int year1=calendar.get(Calendar.YEAR);
int year2=scalendar.get(Calendar.YEAR);
for(int i= year2;i<=year1;i++){
list.add(i+"");
}
return list;
}
/**
* date1date2
* @param date1
* @param date2
* @return
*/
public static int getmonth(Date date1,Date date2){
Calendar calendar=new GregorianCalendar();
calendar.setTime(date1);
Calendar scalendar=new GregorianCalendar();
scalendar.setTime(date2);
int year1=calendar.get(Calendar.YEAR);
int year2=scalendar.get(Calendar.YEAR);
int month1=calendar.get(Calendar.MONTH);
int month2=scalendar.get(Calendar.MONTH);
return coundM(year1,year2,month1,month2);
}
/**
* date1date2
* @param date1
* @param date2
* @splt 201901 + 2019-02 -
* @return
*/
public static int getmonth(String date1,String date2,String splt){
int year1= 0;
int year2= 0;
int month1= 0;
int month2= 0;
if(splt.equals("-")){
String dateStr1[] = date1.split("-");
String dateStr2[] = date2.split("-");
year1= Integer.parseInt(dateStr1[0]);
year2= Integer.parseInt(dateStr2[0]);
month1= Integer.parseInt(dateStr1[1]);
month2= Integer.parseInt(dateStr2[1]);
} else if(splt.equals("+")){
year1 = Integer.parseInt(date1.substring(0,4));
year2 = Integer.parseInt(date2.substring(0,4));
month1 = Integer.parseInt(date1.substring(4,6));
month2 = Integer.parseInt(date2.substring(4,6));
}
return coundM(year1,year2,month1,month2);
}
/**
* 1 - 12 = 12
* @param year1
* @param year2
* @param month1
* @param month2
* @return
*/
public static int coundM(int year1, int year2, int month1, int month2){
int count = 0;
if(year1==year2&&month1>month2){
count= month1-(month2-1);
}
else if(year1==year2&&month1<month2){
count= month2-month1;
}
else if(year1 >year2&&month1>month2){
count= (year1-year2)*12+(month1-month2)+1;
}
else if(year1>year2&&month1<month2){
//应业务需求改为 -1
//count = (year1-year2) * 12 - (month2-month1) -1;
// count= year1-(year2+1)+(13-month2)+month1;
count= (year1-year2)*12+month1-month2+1;
}
else if(year1<year2&&month1 >month2){
count=(year2-year1 )*12+month1-month2;
}
else if(year1<year2&&month1<month2){
count= (year2-year1)*12+month2-month1;
}
else if(year1>year2&&month1==month2){
count= (year1-year2)*12 +1;
}
else if(year1==year2&&month1==month2){
count= 1;
}
return count;
}
/**
*
* @param beginTime
* @param month
* @return
*/
public static String dataStriing(String beginTime,Integer month){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化输出日期
Date dt = null;
try {
dt = sdf.parse(beginTime);
} catch (ParseException e) {
log.error(e.getMessage());
}
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(dt);
rightNow.add(Calendar.MONTH, month);//日期加月份
Date dt1 = rightNow.getTime();
String reStr = sdf.format(dt1);
return reStr;
}
private static final DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static boolean verifyDateTime(String dateTime) {
try {
dtf.parse(dateTime);
return true;
}catch (Exception ex){
log.error(ex.getMessage(),ex);
return false;
}
}
}

@ -0,0 +1,42 @@
package com.docus.server.collect.web.utils;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
import javassist.NotFoundException;
import javassist.bytecode.AnnotationsAttribute;
import javassist.bytecode.ConstPool;
import javassist.bytecode.FieldInfo;
import javassist.bytecode.annotation.Annotation;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
@Slf4j
public class DynamicAnnotation {
/**
*
*
* @param className
* @param attributeName
* @param typeName
*/
public static void addAnnotation(String className, String attributeName, String typeName) {
try {
ClassPool pool = ClassPool.getDefault();
CtClass ct = pool.get(className);
CtField cf = ct.getField(attributeName);
FieldInfo fieldInfo = cf.getFieldInfo();
AnnotationsAttribute attribute = (AnnotationsAttribute) fieldInfo.getAttribute(AnnotationsAttribute.visibleTag);
ConstPool cp = fieldInfo.getConstPool();
Annotation annotation = new Annotation(typeName, cp);
System.out.println(annotation);
attribute.addAnnotation(annotation);
System.out.println(Arrays.toString(attribute.getAnnotations()));
} catch (NotFoundException e) {
log.error("此类不存在", e);
}
}
}

@ -0,0 +1,71 @@
package com.docus.server.collect.web.utils;
import com.alibaba.fastjson.JSONArray;
import com.docus.viewtaskcollect.web.domain.dto.HoliDay;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
public class HoliDayUtil {
/**
*
* @param startTime
* @param endTime
* @return
*/
public List<HoliDay> calLeaveDays(Date startTime, Date endTime) {
List<HoliDay> holiDays = new ArrayList<>();
//从startTime开始循环
//设置循环开始日期
Date flag = startTime;
Calendar cal = Calendar.getInstance();
//循环遍历每个日期
while (flag.compareTo(endTime) <=0) {
cal.setTime(flag);
//判断是否为周六日
int week = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (week == 0 || week == 6) {
HoliDay holiDay = new HoliDay();
holiDay.setIsOffDay(true);
holiDay.setDate(new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
// holiDay.setName("周末");
holiDays.add(holiDay);
//0为周日6为周六
}
cal.add(Calendar.DAY_OF_MONTH, +1);
flag = cal.getTime();
}
return holiDays;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
public List<HoliDay> Getholidays(Date startTime, Date endTime){
TableJsonRead tableJsonRead = new TableJsonRead();
String content = tableJsonRead.ReadContent("dataformat","holiday");
List<HoliDay> holiDays= JSONArray.parseArray(content,HoliDay.class);
String startdate = DateUtils.toString(startTime,DateUtils.DEFAULT_DATE_FORMAT);
String enddate = DateUtils.toString(endTime,DateUtils.DEFAULT_DATE_FORMAT);
List<HoliDay> reutnholiDays=new ArrayList<>();
if(null==holiDays||holiDays.size()<=0){
return reutnholiDays;
}
holiDays.sort(Comparator.comparing(t->t.getDate()));
for (HoliDay o: holiDays){
if(o.getDate().compareTo(startdate)>0 && o.getDate().compareTo(enddate)<=0){
reutnholiDays.add(o);
}
}
return reutnholiDays;
}
}

@ -0,0 +1,55 @@
package com.docus.server.collect.web.utils;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @Author : JCccc
* @CreateTime : 2018-11-23
* @Description :
* @Point: Keep a good mood
**/
public class IpUtil {
public static String getIpAddr(HttpServletRequest request) {
String ipAddress = null;
try {
ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1")) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
// 对于通过多个代理的情况第一个IP为客户端真实IP,多个IP按照','分割
if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
// = 15
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
} catch (Exception e) {
ipAddress="";
}
// ipAddress = this.getRequest().getRemoteAddr();
return ipAddress;
}
}

@ -0,0 +1,167 @@
package com.docus.server.collect.web.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
public class MapObjUtil {
/**
* Map
*
* @param obj
* @return
*/
public static Map<String, Object> object2Map(Object obj) {
Map<String, Object> map = new HashMap<String, Object>();
if (obj == null) {
return map;
}
Class clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
} catch (Exception e) {
log.error(e.getMessage());
}
return map;
}
/**
* Map
*
* @param map map
* @param clazz
* @return
*/
public static <T> T map2Object(Map<String, Object> map, Class<T> clazz) {
if (map == null) {
return null;
}
T obj = null;
try {
obj = clazz.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
field.setAccessible(true);
String filedTypeName = field.getType().getName();
String fieldName =field.getName().toLowerCase();
if (filedTypeName.equalsIgnoreCase("java.util.date")) {
if (map.containsKey(field.getName().toLowerCase())) {
String datetimestamp = String.valueOf(map.get(fieldName));
if (datetimestamp.equalsIgnoreCase("null")) {
field.set(obj, null);
} else {
field.set(obj, new Date(Long.parseLong(datetimestamp)));
}
}
}
else {
if (map.containsKey(field.getName().toLowerCase())&& (!String.valueOf(map.get(fieldName)).equals("null")) ) {
field.set(obj, map.get(fieldName));
}
}
}
} catch (Exception e) {
log.error(e.getMessage());
}
return obj;
}
/**
* Mapmap线
* @param map map
* @param beanClass
* @param <T>
* @return
*/
public static <T> T map2ObjectUnderlined(Map<String, Object> map, Class<T> beanClass) {
if (map == null) {
return null;
}
Map<String, Object> data=toReplaceKeyLow(map);
return map2Object(data,beanClass);
}
private static String underlineToCamel2(String param){
param = param.toLowerCase();//此处为全部转小写方便根据_判定后一位转驼峰
if (param==null||"".equals(param.trim())){
return "";
}
//使用正则表达式
StringBuilder sb=new StringBuilder(param);
Matcher mc= Pattern.compile("_").matcher(param);
int i=0;
while (mc.find()){
int position=mc.end()-(i++);
//String.valueOf(Character.toUpperCase(sb.charAt(position)));
sb.replace(position-1,position+1,sb.substring(position,position+1).toUpperCase());
}
return sb.toString();
}
/**
* mapmap key线
* @param map map
* @return
*/
private static Map<String, Object> toReplaceKeyLow(Map<String, Object> map) {
Map re_map = new HashMap();
if(re_map != null) {
// Iterator var2 = map.entrySet().iterator();
for (Map.Entry<String, Object> entry : map.entrySet()) {
re_map.put(underlineToCamel2(entry.getKey().trim()), entry.getValue());
}
// while(var2.hasNext()) {
// Entry<String, Object> entry = (Entry)var2.next();
// re_map.put(underlineToCamel2((String)entry.getKey()), map.get(entry.getKey()));
// }
map.clear();
}
return re_map;
}
/**
* Mapkey
* @param map
* @param excludeKeys
* @param <K>
* @param <V>
* @return
*/
public static <K, V> Map removeEntries(Map<K, V> map, K[] excludeKeys) {
Iterator<K> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
K k = iterator.next();
// 如果k刚好在要排除的key的范围中
if (ArrayUtils.contains(excludeKeys, k)) {
iterator.remove();
map.remove(k);
}
}
return map;
}
}

@ -0,0 +1,23 @@
package com.docus.server.collect.web.utils;
import com.docus.server.common.bean.MqQueue;
import com.docus.server.common.declare.AmQueueDeclare;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MqQueueUtils {
@Autowired
AmQueueDeclare amQueueDeclare;
public void DeclareQueue(String mqKey) {
MqQueue mqQueue = new MqQueue();
mqQueue.setName(mqKey);
mqQueue.setExclusive(false);
mqQueue.setAutoDelete(false);
mqQueue.setDurable(false);
if (!this.amQueueDeclare.isQueueExist(mqKey)) {
this.amQueueDeclare.declareQueue(mqQueue);
}
}
}

@ -0,0 +1,82 @@
package com.docus.server.collect.web.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class RedisMq {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
/**
*
*
* @param message
*/
public void push(String messageKey, String message) {
String Key = messageKey;
stringRedisTemplate.opsForList().leftPush(Key, message);
}
public void deleteKey(String Key)
{
try {
redisTemplate.delete(Key);
} catch (Exception e) {
return;
}
}
public void deleteAllKey(List<String> ids)
{
try {
redisTemplate.delete(ids);
} catch (Exception e) {
return;
}
}
public void pushAll(String messageKey, List<String> messages) {
String Key = messageKey;
stringRedisTemplate.opsForList().leftPushAll(Key, messages);
}
/**
* ,null
* rightPop1.key,2.3.
*
* @return
*/
public String pop(String messageKey) {
String Key = messageKey;
try {
return stringRedisTemplate.opsForList().rightPop(Key);
} catch (Exception e) {
return null;
}
}
/**
* key
* @param messageKey
* @return
*/
public boolean IsExist(String messageKey){
return stringRedisTemplate.hasKey(messageKey);
}
//向通道发送消息的方法
public void sendChannelMess(String channel, String message) {
redisTemplate.convertAndSend(channel, message);
}
}

@ -0,0 +1,244 @@
package com.docus.server.collect.web.utils;
import com.alibaba.fastjson.JSON;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.Base64;
import java.util.Hashtable;
import java.util.Map;
public class SpringRestTemplateUtils {
private RestTemplate restTemplate;
private static SpringRestTemplateUtils instant = null;
public synchronized static SpringRestTemplateUtils getInstance() {
if (instant == null) {
instant = new SpringRestTemplateUtils();
}
return instant.init();
}
private SpringRestTemplateUtils() {
}
private SpringRestTemplateUtils init() {
if (restTemplate == null) {
restTemplate = new RestTemplate();
}
return this;
}
/**
* http post form,
*/
public String sendPost(String url, Map<String, Object> map) {
return this.sendPost(url, map, true, false);
}
/**
* http post body-application/json ,
*/
public String sendPostWithBodyRawJson(String url, Map<String, Object> map) {
return this.sendPost(url, map, true, false);
}
public String sendPost(String url, Map<String, Object> map, boolean mediaTypeIsForm, boolean httpAuthIsBasicAtuh) {
//测试post
/**
* contentType : json (application/x-www-form-urlencoded\application/json;charset=UTF-8)
* accept:
*/
//最近使用RestTemplate发送post请求遇到了很多问题如转换httpMessage失败、中文乱码等调了好久才找到下面较为简便的方法
// ContentType 设置请求方式
HttpHeaders headers = new HttpHeaders();
// 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
if (mediaTypeIsForm) {
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
} else {
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
}
headers.add("Accept", MediaType.APPLICATION_JSON_UTF8.toString());
if (httpAuthIsBasicAtuh) {
headers.putAll(getHeaders());
}
HttpEntity<String> formEntity = null;
String jsonObj = "";
if (mediaTypeIsForm) {
// 封装参数千万不要替换为Map与HashMap否则参数无法传递
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
// 也支持中文
if (map != null) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
String value = String.valueOf(entry.getValue());
params.add(key, value);
}
}
jsonObj = JSON.toJSONString(params);
formEntity = new HttpEntity<>(jsonObj, headers);
} else {
jsonObj = JSON.toJSONString(map == null ? new Hashtable<>() : map);
formEntity = new HttpEntity<>(jsonObj, headers);
}
String json = restTemplate.postForEntity(url, formEntity, String.class).getBody();
return json;
}
/**
* @param url
* @param requstParam
* @param mediaType
* @return
*/
public String sendPost(String url, String requstParam, MediaType mediaType) {
//测试post
/**
* contentType : json (application/x-www-form-urlencoded\application/json;charset=UTF-8)
* accept:
*/
//最近使用RestTemplate发送post请求遇到了很多问题如转换httpMessage失败、中文乱码等调了好久才找到下面较为简便的方法
// ContentType 设置请求方式
HttpHeaders headers = new HttpHeaders();
// 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
headers.setContentType(mediaType);
headers.add("Accept", mediaType.toString());
HttpEntity<String> formEntity = null;
formEntity = new HttpEntity<>(requstParam, headers);
String json = restTemplate.postForEntity(url, formEntity, String.class).getBody();
return json;
}
/**
* @param url
* @param requstParam
* @param mediaType
* @return
*/
public String sendPost(String url, String requstParam, MediaType mediaType, Map<String, Object> headerlist, boolean httpAuthIsBasicAtuh) {
//测试post
/**
* contentType : json (application/x-www-form-urlencoded\application/json;charset=UTF-8)
* accept:
*/
//最近使用RestTemplate发送post请求遇到了很多问题如转换httpMessage失败、中文乱码等调了好久才找到下面较为简便的方法
// ContentType 设置请求方式
HttpHeaders headers = new HttpHeaders();
if (headerlist != null && headerlist.size() > 0) {
for (String key : headerlist.keySet()) {
headers.add(key, headerlist.get(key).toString());
}
}
// 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
headers.setContentType(mediaType);
headers.add("Accept", mediaType.toString());
// if (httpAuthIsBasicAtuh) {
// try {
// SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, (X509Certificate[] x509Certificates, String s) -> true).build();
// SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, new String[]{"SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
//
// HttpClient httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslSocketFactory).build();
// HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
// requestFactory.setHttpClient(httpClient);
// restTemplate = new RestTemplate(requestFactory);
// }
// catch (Exception ex)
// {
//
// }
// /* headers.putAll(getHeaders());*/
// }
HttpEntity<String> formEntity = null;
formEntity = new HttpEntity<>(requstParam, headers);
String json = restTemplate.postForEntity(url, formEntity, String.class).getBody();
restTemplate = null;
return json;
}
/**
* http get form,
*/
public String sendGet(String url, Map<String, Object> map) {
return this.sendGet(url, map, false);
}
public String sendGet(String url, Map<String, Object> map, boolean httpAuthIsBasicAtuh) {
//Get
/**
* contentType : json (application/x-www-form-urlencoded\application/json;charset=UTF-8)
* accept:
*/
//最近使用RestTemplate发送post请求遇到了很多问题如转换httpMessage失败、中文乱码等调了好久才找到下面较为简便的方法
// ContentType 设置请求方式
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
// 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
if (httpAuthIsBasicAtuh) {
// try {
// SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(null, (X509Certificate[] x509Certificates, String s) -> true).build();
// SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, new String[]{"SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
//
// HttpClient httpClient = HttpClientBuilder.create().setSSLSocketFactory(sslSocketFactory).build();
// HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
// requestFactory.setHttpClient(httpClient);
// restTemplate = new RestTemplate(requestFactory);
// }
// catch (Exception ex)
// {
//
// }
/* headers.putAll(getHeaders());*/
}
// 封装参数千万不要替换为Map与HashMap否则参数无法传递
// 也支持中文
if (map != null && !map.isEmpty()) {
String paramUrl = UrlEncode.getUrlParams(map, true);
if (!url.contains("?")) {
url = url + "?" + paramUrl;
} else {
url = url + (url.endsWith("&") ? "" : "&" + paramUrl);
}
}
String json = restTemplate.getForEntity(url, String.class).getBody();
restTemplate = null;
return json;
}
/**
* Spring Rest 使
* <p>
* base auth
* HTTP Basic Authentication https://segmentfault.com/a/1190000004362731
* https://www.cnblogs.com/alex-13/p/4845658.html
* header:Authorization: "Basic 用户名和密码的base64加密字符串"
* <p>
* Authorization
* Authorization: "Basic 用户名和密码的base64加密字符串", "username:password"
* <p>
* url
* http://userName:password@api.minicloud.com.cn/statuses/friends_timeline.xml
*/
private static HttpHeaders getHeaders() {
String plainCredentials = "6S40WSzHgzlgDZXv:ATbuvlxLmFRGxM7rOI9zjucLH0odvoIXbg9dCuJ6RzyTMFRz7wAuHHLWP8JknTpG";
String base64Credentials = Base64.getEncoder().encodeToString(plainCredentials.getBytes());
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Credentials);
return headers;
}
}

@ -0,0 +1,137 @@
package com.docus.server.collect.web.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Slf4j
public class UrlEncode {
public static final boolean JDK_VERSION_IS_8 = true;
/**
* String map
*
* eg:sex=man&name=zhangsan&age=20
* @param queryStr
* aa=11&bb=22&cc=33
* @return
*/
public static Map<String, String> getUrlParams(String queryStr) {
if (JDK_VERSION_IS_8) {
return Stream.of(queryStr.split("&")).map(str -> str.split("=")).collect(Collectors.toMap(arr -> arr[0], arr -> (arr.length>1 ? arr[1] : "")));
} else {
Map<String, String> map = new HashMap<>(20);
if ("".equals(queryStr) || null == queryStr) {
return map;
}
String[] params = queryStr.split("&");
for (int i = 0; i < params.length; i++) {
String[] p = params[i].split("=");
if (p.length == 2) {
map.put(p[0], p[1]);
}
}
return map;
}
}
/**
*
* @RequestParam -Content-Type: application/x-www-form-urlencodedrequest.getParameter()
* @RequestBody -Content-Type: application/json,request.getInputStream
*/
public static Map<String, String> getUrlParams(HttpServletRequest request) {
try {
String params = IOUtils.toString(request.getInputStream(), "UTF-8");
try {
//url 解码
params = URLDecoder.decode(params, "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error(e.getMessage());
}
if (params != null && params.trim().length() != 0) {
return getUrlParams(params);
} else {
//可能就不是使用的application/json请求的接口换成使用application/x-www-form-urlencoded方式
return getRequestParameterMap(request);
}
} catch (IOException e) {
log.error(e.getMessage());
}
return new HashMap<>();
}
/**
* map string
* Mapkey1=value1&key2=value2 signature
*
* @see
*
* @param map
* @return
*/
public static String getUrlParams(Map<String, Object> map,
boolean isSort) {
if (map == null) {
return "";
}
StringBuffer sb = new StringBuffer();
List<String> keys = new ArrayList<>(map.keySet());
if (isSort) {
Collections.sort(keys);
}
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
Object value = map.get(key);
if (XaUtils.isArray(value)) {
String[] arr = (String[]) value;
sb.append(key + "=" + (arr.length == 1 ? arr[0] : (arr.length > 1 ? Arrays.toString(arr) : "")));
} else {
sb.append(key + "=" + XaUtils.getNutNullStr(value, ""));
}
sb.append("&");
}
String s = sb.toString();
if (s.endsWith("&")) {
s = s.substring(0, s.lastIndexOf("&"));
}
return s;
}
/**
*
*
* @see
*
* @param request
* @return
*/
public static Map<String, String> getRequestParameterMap(final HttpServletRequest request) {
Map<String, String> res = new HashMap<String, String>();
Enumeration<?> temp = request.getParameterNames();
if (null != temp) {
while (temp.hasMoreElements()) {
String en = (String) temp.nextElement();
String value = request.getParameter(en);
res.put(en, value);
//在报文上送时,如果字段的值为空,则不上送<下面的处理为在获取所有参数数据时,判断若值为空,则删除这个字段>
if (null == res.get(en) || "".equals(res.get(en))) {
res.remove(en);
}
}
}
return res;
}
}

@ -10,6 +10,15 @@
<name>Archetype - docus-archivefile</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.docus</groupId>
<artifactId>docus-common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>

@ -0,0 +1,15 @@
package com.docus.server.archivefile.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.docus.server.archivefile.pojo.entity.AfViewCollectionLog;
import org.apache.ibatis.annotations.Mapper;
/**
* @author linrf
* @date 2023/6/13 17:05
*/
@Mapper
public interface AfViewCollectionLogMapper extends BaseMapper<AfViewCollectionLog> {
}

@ -0,0 +1,51 @@
package com.docus.server.archivefile.pojo.entity;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author zengdl
* @website https://el-admin.vip
* @description /
* @date 2022-03-28
**/
@Data
@TableName("af_view_collection_log")
public class AfViewCollectionLog implements Serializable {
@TableId("id")
@ApiModelProperty(value = "id")
private Long id;
@TableField("jzh")
@ApiModelProperty(value = "记帐号")
private String jzh;
@TableField("sys_code")
@ApiModelProperty(value = "采集器分类")
private String sysCode;
@TableField("file_id")
@ApiModelProperty(value = "文件id")
private String fileId;
@TableField("file_modify_time")
@ApiModelProperty(value = "文件最后修改时间")
private String fileModifyTime;
@TableField("create_time")
@ApiModelProperty(value = "创建时间")
private Date createTime;
public void copy(AfViewCollectionLog source) {
BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));
}
}

@ -0,0 +1,33 @@
package com.docus.server.archivefile.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author zengdl
* @website https://el-admin.vip
* @description /
* @date 2022-09-02
**/
@Data
@TableName("af_collectsys_dictionary")
public class CollectsysDictionary implements Serializable {
@TableId("id")
@ApiModelProperty(value = "id 雪花算法")
private Long id;
@TableField("sys_code")
@ApiModelProperty(value = "采集来源系统编号")
private String sysCode;
@TableField("sys_name")
@ApiModelProperty(value = "采集来源系统名称")
private String sysName;
}

@ -1,4 +0,0 @@
package com.docus.server.archivefile.service;
public interface B {
}

@ -0,0 +1,11 @@
package com.docus.server.archivefile.service;
import com.docus.server.archivefile.pojo.entity.AfViewCollectionLog;
import com.docus.server.common.service.IBaseService;
/**
* @author linrf
* @date 2023/6/13 17:05
*/
public interface IAfViewCollectionLogService extends IBaseService<AfViewCollectionLog> {
}

@ -1,4 +0,0 @@
package com.docus.server.archivefile.service.impl;
public class A {
}

@ -0,0 +1,17 @@
package com.docus.server.archivefile.service.impl;
import com.docus.server.archivefile.mapper.AfViewCollectionLogMapper;
import com.docus.server.archivefile.pojo.entity.AfViewCollectionLog;
import com.docus.server.archivefile.service.IAfViewCollectionLogService;
import com.docus.server.common.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
/**
* @author linrf
* @date 2023/6/13 17:06
*/
@Service
public class AfViewCollectionLogServiceImpl extends BaseServiceImpl<AfViewCollectionLogMapper, AfViewCollectionLog> implements IAfViewCollectionLogService {
}

@ -0,0 +1,22 @@
package com.docus.server.common;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: CommonApplication
* @Package: com.amos.consumer
* @author: amos
* @Description:
* @date: 2019/6/28 0028 11:50
* @Version: V1.0
*/
@SpringBootApplication(scanBasePackages = {"com.docus.server.common.thread"})
public class CommonApplication {
public static void main(String[] args) {
SpringApplication.run(CommonApplication.class, args);
}
}

@ -0,0 +1,94 @@
package com.docus.server.common.bean;
import com.docus.server.common.type.ExchangeTypeEnum;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Map;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: MqExchange
* @Package: com.docus.viewtaskcollect.common.bean
* @author: amos
* @Description:
* @date: 2019/6/28 0028 15:23
* @Version: V1.0
*/
@Data
public class MqExchange {
/**
* DIRECT
*/
public static final String DEFAULT_DIRECT_EXCHANGE = "amq.direct";
/**
* TOPIC
*/
public static final String DEFAULT_TOPIC_EXCHANGE = "amq.topic";
/**
* HEADERS
*/
public static final String DEFAULT_HEADERS_EXCHANGE = "amq.headers";
/**
* FANOUT
*/
public static final String DEFAULT_FANOUT_EXCHANGE = "amq.fanout";
/**
*
*/
@NotNull(message = "交换机名称不能为空")
private String name;
/**
*
*/
@NotNull(message = "交换机类型不能为空")
private ExchangeTypeEnum type;
/**
*
*
*
*/
private boolean durable = Boolean.TRUE;
/**
*
*
*/
private boolean autoDelete;
public MqExchange name(String name) {
this.name = name;
return this;
}
public MqExchange type(ExchangeTypeEnum type) {
this.type = type;
return this;
}
public MqExchange durable(boolean durable) {
this.durable = durable;
return this;
}
public MqExchange autoDelete(boolean autoDelete) {
this.autoDelete = autoDelete;
return this;
}
public MqExchange arguments(Map<String, Object> arguments) {
this.arguments = arguments;
return this;
}
/**
*
* alternate-exchange
*/
private Map<String, Object> arguments;
}

@ -0,0 +1,77 @@
package com.docus.server.common.bean;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Map;
/**
* Copyright (C)
*
* @Package com.docus.viewtaskcollect.common.bean
* @ClassName MqQueue
* @Description
* @Author Amos
* @Modifier
* @Date 2019/6/29 20:10
* @Version 1.0
**/
@Data
public class MqQueue {
/**
*
*/
@NotNull(message = "队列名称不能为空")
private String name;
/**
*
*
*/
private boolean durable;
/**
*
*
*
* 1. Channel
* 2.
*
*/
private boolean exclusive;
/**
*
*
*/
private boolean autoDelete;
/**
*
* x-message-ttlx-expires
*/
private Map<String, Object> arguments;
public MqQueue name(String name) {
this.name = name;
return this;
}
public MqQueue durable(boolean durable) {
this.durable = durable;
return this;
}
public MqQueue exclusive(boolean exclusive) {
this.exclusive = exclusive;
return this;
}
public MqQueue autoDelete(boolean autoDelete) {
this.autoDelete = autoDelete;
return this;
}
public MqQueue arguments(Map<String, Object> arguments) {
this.arguments = arguments;
return this;
}
}

@ -0,0 +1,40 @@
package com.docus.server.common.bean;
import lombok.Data;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: Result
* @Package: com.docus.viewtaskcollect.common.bean
* @author: amos
* @Description:
* @date: 2019/6/28 0028 9:51
* @Version: V1.0
*/
@Data
public class Result {
/**
*
*/
private Integer code;
/**
*
*/
private String msg;
/**
*
*/
private Object data;
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Result() {
}
}

@ -0,0 +1,105 @@
package com.docus.server.common.config;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: RabbitMQConfig
* @Package: com.amos.producer.config
* @author: amos
* @Description: rabbitMQ
* @date: 2019/6/28 0028 9:11
* @Version: V1.0
*/
@Configuration
public class RabbitMQConfig {
/**
* rabbitMQ
*/
@Value("${spring.rabbitmq.addresses:192.168.56.105:5672}")
private String addresses;
/**
* rabbitMQ
*/
@Value("${spring.rabbitmq.username:root}")
private String username;
/**
* rabbitMQ
*/
@Value("${spring.rabbitmq.password:root}")
private String password;
/**
* rabbitMQ /
*/
@Value("${spring.rabbitmq.virtual-host:/}")
private String virtualHost;
/**
*
*/
@Value("${spring.rabbitmq.template.mandatory:false}")
private Boolean mandatory;
/**
*
*/
@Value("${spring.rabbitmq.publisher-confirms:false}")
private Boolean publisherConfirms;
/**
* mandatorystrue true
*/
@Value("${spring.rabbitmq.publisher-returns:false}")
private Boolean publisherReturns;
/**
* rabbitMQConnection
*
* @return
*/
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setAddresses(this.addresses);
cachingConnectionFactory.setUsername(this.username);
cachingConnectionFactory.setPassword(this.password);
cachingConnectionFactory.setVirtualHost(this.virtualHost);
// 如果消息要设置成回调则以下的配置必须要设置成true
cachingConnectionFactory.setPublisherConfirms(this.publisherConfirms);
cachingConnectionFactory.setPublisherReturns(this.publisherReturns);
return cachingConnectionFactory;
}
/**
* prototypesingleton
*
*
* @return
*/
@Bean(name = "rabbitTemplate")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(this.connectionFactory());
template.setMessageConverter(new Jackson2JsonMessageConverter());
return template;
}
/**
* rabbitAdmin 便
*
* @param connectionFactory
* @return
*/
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
}

@ -0,0 +1,35 @@
package com.docus.server.common.config;
import com.docus.server.common.listen.InitThreadLocalPoolListen;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Copyright © 2018 . All rights reserved.
*
* @Package com.docus.viewtaskcollect.common.config
* @ClassName ServletListenerRegistrationConfig
* @Description Listener
* 1. 线
* @Author Amos
* @Modifier
* @Date 2019/7/14 16:41
* @Version 1.0
**/
@Configuration
public class ServletListenerRegistrationConfig {
/**
* Bean
* 线
*
* @return
*/
@Bean
public ServletListenerRegistrationBean registrationBean() {
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new InitThreadLocalPoolListen());
return servletListenerRegistrationBean;
}
}

@ -1,4 +1,4 @@
package com.docus.server.common;
package com.docus.server.common.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;

@ -0,0 +1,19 @@
package com.docus.server.common.constants;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: Constants
* @Package: com.docus.viewtaskcollect.common.constants
* @author: amos
* @Description:
* @date: 2019/6/28 0028 15:59
* @Version: V1.0
*/
public class Constants {
/**
*
*/
public static final String PARAMETER_DEFAULT_NOT_NULL_EXCEPTION_MSG = "the parameter object could not be null";
}

@ -0,0 +1,33 @@
package com.docus.server.common.constants;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: ExchangeProperty
* @Package: com.docus.viewtaskcollect.common.constants
* @author: amos
* @Description:
* @date: 2019/6/28 0028 15:18
* @Version: V1.0
*/
public interface RabbitMQProperty {
/**
*
*/
public interface QueueProperty {
}
/**
*
*/
public interface ExchangeProperty {
/**
*
*/
public static final String ALTERNATE_EXCHANGE = "alternate-exchange";
}
}

@ -0,0 +1,50 @@
package com.docus.server.common.declare;
import com.docus.server.common.bean.Result;
import com.docus.server.common.exception.RabbitMQExceptionUtils;
import com.docus.server.common.type.ResultEnum;
import com.docus.server.common.util.ValidateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Copyright (C)
*
* @Package com.docus.viewtaskcollect.common.declare
* @ClassName AbstractDeclare
* @Description TODO
* @Author Amos
* @Modifier
* @Date 2019/6/29 20:28
* @Version 1.0
**/
public abstract class AbstractDeclare {
public final Log logger = LogFactory.getLog(this.getClass());
@Autowired
RabbitAdmin rabbitAdmin;
/**
*
*
* @param object
*/
public abstract void DefinedValidate(Object object);
/**
*
* 1.
*
* @param object
*/
public void validate(Object object) {
Result result = ValidateUtils.validate(object);
if (!ResultEnum.success().equals(result.getCode())) {
RabbitMQExceptionUtils.throwRabbitMQException(result.getMsg());
}
this.DefinedValidate(object);
}
}

@ -0,0 +1,98 @@
package com.docus.server.common.declare;
import com.alibaba.fastjson.JSONObject;
import com.docus.server.common.bean.MqExchange;
import com.docus.server.common.exception.RabbitMQExceptionUtils;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* Copyright © 2018 . All rights reserved.
*
* @Package com.docus.viewtaskcollect.common.declare
* @ClassName AmBindDeclare
* @Description
* @Author Amos
* @Modifier
* @Date 2019/6/29 22:57
* @Version 1.0
**/
@Component
public class AmBindDeclare extends AbstractDeclare {
@Autowired
RabbitAdmin rabbitAdmin;
/**
*
*
* @param queueName
* @param exchangeName
* @param routingKey
* @return
*/
public boolean queueBind(String queueName, String exchangeName, String routingKey) {
return this.bind(queueName, Binding.DestinationType.QUEUE, exchangeName, routingKey, null);
}
/**
*
* amq.direct , direct
*
*
* @param queueName
* @return
*/
public boolean queueBind(String queueName) {
return this.queueBind(queueName, MqExchange.DEFAULT_DIRECT_EXCHANGE, queueName);
}
/**
*
*
* @param destExchangeName
* @param exchangeName
* @param routingKey
* @return
*/
public boolean exchangeBind(String destExchangeName, String exchangeName, String routingKey) {
return this.bind(destExchangeName, Binding.DestinationType.EXCHANGE, exchangeName, routingKey, null);
}
/**
* bind
*
* @param destName
* @param type /
* @param exchangeName
* @param routingKey
* @param map
* @return
*/
public boolean bind(String destName, Binding.DestinationType type, String exchangeName, String routingKey, Map<String, Object> map) {
this.logger.info("bind parameter is destName: " + destName + ", type: " + type.name()
+ ", exchangeName: " + exchangeName + ", routingKey: " + routingKey + ", map: " + JSONObject.toJSONString(map));
Binding binding = new Binding(destName, Binding.DestinationType.QUEUE, exchangeName, routingKey, map);
try {
this.rabbitAdmin.declareBinding(binding);
} catch (Exception e) {
if (this.logger.isDebugEnabled()) {
RabbitMQExceptionUtils.throwRabbitMQException(e.getMessage());
}
return Boolean.FALSE;
}
return Boolean.TRUE;
}
@Override
public void DefinedValidate(Object object) {
}
}

@ -0,0 +1,100 @@
package com.docus.server.common.declare;
import com.docus.server.common.bean.MqExchange;
import com.docus.server.common.exception.RabbitMQException;
import com.docus.server.common.type.ExchangeTypeEnum;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.HeadersExchange;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: AmExchangeDeclare
* @Package: com.docus.viewtaskcollect.common.declare
* @author: amos
* @Description:
* @date: 2019/6/28 0028 14:10
* @Version: V1.0
*/
@Component
public class AmExchangeDeclare extends AbstractDeclare {
@Autowired
RabbitAdmin rabbitAdmin;
/**
* rabbitMQ
*
* @param mqExchage
* @return
*/
public Exchange declareExchange(MqExchange mqExchage) {
this.logger.info("declare exchange is :" + mqExchage.toString());
Exchange exchange = null;
super.validate(mqExchage);
exchange = this.initExchange(mqExchage);
this.rabbitAdmin.declareExchange(exchange);
this.logger.info("declare exchange success");
return exchange;
}
/**
* RabbitMQ
*
* @param exchangeName
* @return
*/
public boolean deleteExchange(String exchangeName) {
this.logger.info("delete exchange is : " + exchangeName);
if (StringUtils.isEmpty(exchangeName)) {
throw new RabbitMQException("the parameter exchangeName couldn't not be null");
}
return this.rabbitAdmin.deleteExchange(exchangeName);
}
/**
*
*
* @param mqExchage
* @return
*/
private Exchange initExchange(MqExchange mqExchage) {
ExchangeTypeEnum exchangeTypeEnum = mqExchage.getType();
switch (exchangeTypeEnum) {
case DIRECT:
return new DirectExchange(mqExchage.getName(), mqExchage.isDurable(), mqExchage.isAutoDelete(), mqExchage.getArguments());
case TOPIC:
return new TopicExchange(mqExchage.getName(), mqExchage.isDurable(), mqExchage.isAutoDelete(), mqExchage.getArguments());
case FANOUT:
return new FanoutExchange(mqExchage.getName(), mqExchage.isDurable(), mqExchage.isAutoDelete(), mqExchage.getArguments());
case HEADERS:
return new HeadersExchange(mqExchage.getName(), mqExchage.isDurable(), mqExchage.isAutoDelete(), mqExchage.getArguments());
default:
return null;
}
}
/**
*
*
* @param object
*/
@Override
public void DefinedValidate(Object object) {
}
}

@ -0,0 +1,136 @@
package com.docus.server.common.declare;
import com.docus.server.common.bean.MqQueue;
import com.docus.server.common.exception.RabbitMQExceptionUtils;
import com.rabbitmq.client.AMQP;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
/**
* Copyright (C)
*
* @Package com.docus.viewtaskcollect.common.declare
* @ClassName AmQueueDeclare
* @Description
* @Author Amos
* @Modifier
* @Date 2019/6/29 20:23
* @Version 1.0
**/
@Component
public class AmQueueDeclare extends AbstractDeclare {
/**
*
* rabbitMQ
*
* @param mqQueue
* @return
*/
public Queue declareQueue(MqQueue mqQueue) {
// this.logger.info("the parameter queue is : " + mqQueue.toString());
super.validate(mqQueue);
Queue queue = new Queue(mqQueue.getName());
BeanUtils.copyProperties(mqQueue, queue);
// this.logger.info("declare queue is : " + queue.toString());
super.rabbitAdmin.declareQueue(queue);
// this.logger.info("declare queue success");
return queue;
}
/**
*
*
* @param queueName
* @return
*/
public int purgeQueue(String queueName) {
if (StringUtils.isEmpty(queueName)) {
RabbitMQExceptionUtils.throwRabbitMQException();
}
this.logger.info("purge queue is : " + queueName);
return super.rabbitAdmin.purgeQueue(queueName);
}
/**
*
* 1.
* 2. null
*
* @param queueName
* @return true false
*/
public boolean isQueueExist(String queueName) {
if (StringUtils.isEmpty(queueName)) {
RabbitMQExceptionUtils.throwRabbitMQException();
}
// this.logger.info("isQueueExist queue is : " + queueName);
String isExist = super.rabbitAdmin.getRabbitTemplate().execute((channel -> {
try {
AMQP.Queue.DeclareOk declareOk = channel.queueDeclarePassive(queueName);
return declareOk.getQueue();
} catch (Exception e) {
if (this.logger.isDebugEnabled()) {
RabbitMQExceptionUtils.throwRabbitMQException(e.getMessage());
}
return null;
}
}));
// this.logger.info("the queue " + queueName + " is exist : " + isExist);
return StringUtils.isEmpty(isExist) ? Boolean.FALSE : Boolean.TRUE;
}
/**
* rabbitMQ
*
* @param queueName
* @return
*/
public boolean deleteQueue(String queueName) {
this.logger.info("delete queue is :" + queueName);
if (StringUtils.isEmpty(queueName)) {
RabbitMQExceptionUtils.throwRabbitMQException();
}
return super.rabbitAdmin.deleteQueue(queueName);
}
/**
* rabbitMQ
*
* @param queueName
* @param unused 使true使
* @param empty true
*/
public void deleteQueue(String queueName, boolean unused, boolean empty) {
this.logger.info("delete queue is : { queueName : '" + queueName
+ "' , unused: '" + unused + "' , empty:'" + empty + "'}");
if (StringUtils.isEmpty(queueName)) {
RabbitMQExceptionUtils.throwRabbitMQException();
}
super.rabbitAdmin.deleteQueue(queueName, unused, empty);
}
/**
*
*
* @param object
*/
@Override
public void DefinedValidate(Object object) {
}
}

@ -1,4 +1,4 @@
package com.docus.server.collect.web.enums;
package com.docus.server.common.enums;
public class EnumItemView {

@ -1,4 +1,4 @@
package com.docus.server.collect.web.enums;
package com.docus.server.common.enums;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.EnumTypeHandler;

@ -1,4 +1,4 @@
package com.docus.server.collect.web.enums;
package com.docus.server.common.enums;
public enum FlagEnum implements IIntegerEnum {
INSERT(1, "新增"),

@ -1,4 +1,4 @@
package com.docus.server.collect.web.enums;
package com.docus.server.common.enums;
import com.baomidou.mybatisplus.annotation.IEnum;

@ -1,4 +1,4 @@
package com.docus.server.collect.web.enums;
package com.docus.server.common.enums;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

@ -1,6 +1,4 @@
package com.docus.server.collect.web.enums;
import com.docus.server.collect.web.enums.IIntegerEnum;
package com.docus.server.common.enums;
public enum StateEnum implements IIntegerEnum {
OK(0, "成功"),

@ -0,0 +1,58 @@
package com.docus.server.common.exception;
import org.springframework.util.StringUtils;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: Assert
* @Package: com.docus.viewtaskcollect.common.exception
* @author: zhuqb
* @Description: Assert
* <p/>
* default
* @date: 2019/7/9 0009 8:14
* @Version: V1.0
*/
public interface Assert {
/**
*
*
* @param args
* @return
*/
BaseException newException(Object... args);
/**
*
*
* @param throwable
* @param args
* @return
*/
BaseException newException(Throwable throwable, Object... args);
/**
*
*
* @param obj
*/
default void assertNotEmpty(Object obj) {
if (StringUtils.isEmpty(obj)) {
throw this.newException(obj);
}
}
/**
* ,
*
* @param object
* @param args
*/
default void assertNotEmpty(Object object, Object... args) {
if (StringUtils.isEmpty(object)) {
throw this.newException(args);
}
}
}

@ -0,0 +1,58 @@
package com.docus.server.common.exception;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: BaseException
* @Package: com.docus.viewtaskcollect.common.exception
* @author: zhuqb
* @Description:
* <p/>
* RuntimeException
* @date: 2019/7/9 0009 8:15
* @Version: V1.0
*/
public class BaseException extends RuntimeException {
private static final long serialVersionUID = 1702524362131670363L;
/**
*
*/
protected IResult result;
/**
*
*/
protected Object[] args;
public BaseException(IResult result) {
super(result.getMsg());
this.result = result;
}
public BaseException(int code, String msg) {
super(msg);
this.result = new IResult() {
@Override
public int getCode() {
return code;
}
@Override
public String getMsg() {
return msg;
}
};
}
public BaseException(IResult result, Object[] args, String msg) {
super(msg);
this.result = result;
this.args = args;
}
public BaseException(IResult result, Object[] args, String message, Throwable cause) {
super(message, cause);
this.result = result;
this.args = args;
}
}

@ -0,0 +1,201 @@
package com.docus.server.common.exception;
import com.docus.server.common.bean.Result;
import com.docus.server.common.type.ResultEnum;
import com.docus.server.common.util.ValidatorResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.util.Set;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: GlobalExceptionHandler
* @Package: com.docus.viewtaskcollect.common.exception
* @author: zhuqb
* @Description:
* @date: 2019/7/10 0010 17:19
* @Version: V1.0
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
/**
* 400 - Bad Request
*/
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
public Result handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("parameter type error :" + e.getMessage());
return result;
}
/**
* 400 - Bad Request
*/
@ExceptionHandler(MissingServletRequestParameterException.class)
public Result handleMissingServletRequestParameterException(MissingServletRequestParameterException e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("required parameter is not present");
return result;
}
/**
* 400 - Bad Request
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
public Result handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("could not read json");
return result;
}
/**
* 400 - Bad Request
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMsg = ValidatorResultUtil.getMessage(bindingResult);
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg(errorMsg);
return result;
}
/**
* 400 - Bad Request
*/
@ExceptionHandler(BindException.class)
public Result handleBindException(BindException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMsg = ValidatorResultUtil.getMessage(bindingResult);
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg(errorMsg);
return result;
}
/**
* 400 - Bad Request
*/
@ExceptionHandler(ConstraintViolationException.class)
public Result handleServiceException(ConstraintViolationException e) {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
ConstraintViolation<?> violation = violations.iterator().next();
String errorMsg = violation.getMessage();
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("parameter:" + errorMsg);
return result;
}
/**
* 400 - Bad Request
*/
@ExceptionHandler(ValidationException.class)
public Result handleValidationException(ValidationException e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("validation exception");
return result;
}
/**
* 405 - Method Not Allowed
*/
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public Result handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("request method not supported");
return result;
}
/**
* 415 - Unsupported Media Type
*/
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
public Result handleHttpMediaTypeNotSupportedException(Exception e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("content type not supported");
return result;
}
/**
* :
*/
@ExceptionHandler(DataIntegrityViolationException.class)
public Result handleException(DataIntegrityViolationException e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg("operating database exception");
return result;
}
/**
* 500 - Internal Server Error
*/
@ExceptionHandler(Exception.class)
public Result handleException(Exception e) {
Result result = new Result();
result.setCode(ResultEnum.error());
log.error(e.getMessage(), e);
if (e instanceof NullPointerException) {
result.setMsg(String.valueOf(e));
} else {
result.setMsg(e.getMessage());
}
return result;
}
/**
*
*/
@ExceptionHandler(RabbitMQException.class)
public Result handleException(RabbitMQException e) {
Result result = new Result();
result.setCode(e.getCode());
result.setMsg(e.getMessage());
return result;
}
/**
*
*/
@ExceptionHandler(AssertionError.class)
public Result handleException(AssertionError e) {
Result result = new Result();
result.setCode(ResultEnum.error());
result.setMsg(e.getMessage());
return result;
}
}

@ -0,0 +1,19 @@
package com.docus.server.common.exception;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: IResult
* @Package: com.docus.viewtaskcollect.common.exception
* @author: zhuqb
* @Description:
* @date: 2019/7/9 0009 8:28
* @Version: V1.0
*/
public interface IResult {
int getCode();
String getMsg();
}

@ -0,0 +1,58 @@
package com.docus.server.common.exception;
import com.docus.server.common.type.ResultEnum;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: RabbitMQException
* @Package: com.amos.producer
* @author: amos
* @Description:
* @date: 2019/6/28 0028 9:23
* @Version: V1.0
*/
public class RabbitMQException extends BaseException {
private static final long serialVersionUID = 284587800137211341L;
private int code;
private String msg;
public RabbitMQException(int code, String msg) {
super(code, msg);
}
public RabbitMQException(String msg) {
super(ResultEnum.error(), msg);
}
public RabbitMQException(IResult result) {
super(result);
}
public RabbitMQException(IResult result, Object[] args, String message) {
super(result, args, message);
}
public RabbitMQException(IResult result, Object[] args, String message, Throwable cause) {
super(result, args, message, cause);
}
public int getCode() {
return this.code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return this.msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}

@ -0,0 +1,31 @@
package com.docus.server.common.exception;
import java.text.MessageFormat;
/**
* Copyright © 2018 . All rights reserved.
*
* @Project: rabbitmq
* @ClassName: RabbitMQExceptionAssert
* @Package: com.docus.viewtaskcollect.common.exception
* @author: zhuqb
* @Description:
* @date: 2019/7/10 0010 14:52
* @Version: V1.0
*/
public interface RabbitMQExceptionAssert extends IResult, Assert {
@Override
default BaseException newException(Object... args) {
String msg = MessageFormat.format(this.getMsg(), args);
return new RabbitMQException(this, args, msg);
}
@Override
default BaseException newException(Throwable t, Object... args) {
String msg = MessageFormat.format(this.getMsg(), args);
return new RabbitMQException(this, args, msg, t);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save