Commit 05021607 authored by data爬虫-冯 军凯's avatar data爬虫-冯 军凯

存量历史black_type_list_new (手机号黑名单) black_type_idcard_new (身份证号黑名单) 关联三要素+uuid...

存量历史black_type_list_new (手机号黑名单)  black_type_idcard_new (身份证号黑名单) 关联三要素+uuid 导入black_list_new  去重按照phone_no/name/id_no/type 唯一索引
parent 030b725d
......@@ -8,7 +8,9 @@ public class Constant {
public static class SQL{
public static final String BATCH_INSERT_BLACK_PHONE_LIST_SQL = "insert ignore into black_list_new (`uuid`, `name`, `phone_no`, `id_no`, `major_type`, `type`, `first_overdue_days`, `max_overdue_days`, `black_level`, `created_at`, `updated_at`) values(?,?,?,?,?,?,?,?,?,?,?)";
public static final String BATCH_INSERT_BLACK_THREE_ELE_LIST_SQL = "insert ignore into black_list_new (`uuid`, `name`, `phone_no`, `id_no`, `major_type`, `type`, `first_overdue_days`, `max_overdue_days`, `black_level`, `created_at`, `updated_at`) values(?,?,?,?,?,?,?,?,?,?,?)";
public static final String BATCH_INSERT_BLACK_PHONE_LIST_SQL = "insert ignore into phone_black_list_new (`uuid`, `name`, `phone_no`, `id_no`, `major_type`, `type`, `first_overdue_days`, `max_overdue_days`, `black_level`, `created_at`, `updated_at`) values(?,?,?,?,?,?,?,?,?,?,?)";
public static final String QUERY_BLACKLIST_SQL = "select * from black_list_new where phone_no = '%s';";
public static final String BATCH_INSERT_BLACK_IDCARD_LIST_SQL = "";
......
......@@ -20,11 +20,18 @@ public class BlackListImportManagerController {
@Autowired
private IBlackListImportService iBlackListImportManagerService;
@RequestMapping("/black_list_import_by_month")
public GlobalResponse blackListImportByMonth(String startTime, String endTime) {
@RequestMapping("/phone_black_list_import_by_month")
public GlobalResponse phoneBlackListImportByMonth(String startTime, String endTime) {
return iBlackListImportManagerService.blackListPhoneImport(startTime, endTime);
}
@RequestMapping("/id_no_black_list_import_by_month")
public GlobalResponse idNoBlackListImportByMonth(String startTime, String endTime){
return iBlackListImportManagerService.blackListIdCardImport(startTime, endTime);
}
}
......@@ -26,9 +26,9 @@ public class BlackListImportManagerJob {
String startTime = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE);
String endTime = LocalDateTime.now().minusDays(1).format(DateTimeFormatter.ISO_DATE);
iBlackListManagerService.blackListPhoneManager(startTime, endTime);
iBlackListManagerService.blackListPhoneManagerByMonth(startTime, endTime);
iBlackListManagerService.blackListIdCardManager(startTime, endTime);
iBlackListManagerService.blackListIdCardManagerByMonth(startTime, endTime);
}
......
package cn.quantgroup.qgblservice.repository.mybatis.entity;
import cn.quantgroup.qgblservice.utils.CommonBeanUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.jdbc.core.RowMapper;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @Author fengjunkai
* @Date 2019-08-07 18:40
*/
public class BaseEntity<T> implements RowMapper<T>, Comparable<T>, Serializable {
public static final long serialVersionUID = 1L;
@Override
public int compareTo(T o) {
return 0;
}
@SuppressWarnings("unchecked")
@Override
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
Class<T> tClass=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
T mappedObject = BeanUtils.instantiate(tClass);
T rsToBean = CommonBeanUtils.rsToBean(mappedObject, rs);
return rsToBean;
}
private boolean isLimit = false;
public boolean limit() {
return isLimit;
}
public void assignmentLimit(boolean isLimit) {
this.isLimit = isLimit;
}
}
package cn.quantgroup.qgblservice.repository.mybatis.entity.tidb;
import cn.quantgroup.qgblservice.repository.mybatis.entity.BaseEntity;
import lombok.Data;
import java.io.Serializable;
......@@ -10,7 +11,7 @@ import java.sql.Timestamp;
* @Date 2019-07-31 19:36
*/
@Data
public class BlackListQueryTidbVo0 implements Serializable {
public class BlackListQueryTidbVo0 extends BaseEntity<BlackListQueryTidbVo0> implements Serializable {
private static final long serialVersionUID = -3763596487278973104L;
......
package cn.quantgroup.qgblservice.repository.mybatis.mapper.blacklist;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author fengjunkai
* @Date 2019-08-07 16:04
*/
@Repository
public interface BlackListQueryMapper {
List<BlackListQueryTidbVo0> findBlackListByPhone(BlackListQueryByThreeEleParam0 blackListQueryByThreeEleParam0);
List<BlackListQueryTidbVo0> findBlackListByIdcard(BlackListQueryByThreeEleParam0 blackListQueryByThreeEleParam0);
void updateThreeElementsById(BlackListQueryTidbVo0 blackListQueryTidbVo0);
}
package cn.quantgroup.qgblservice.repository.mybatis.mapper.tidb;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbParam0;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0;
import org.springframework.stereotype.Repository;
......@@ -18,13 +17,4 @@ public interface BlackListQueryTidbMapper {
List<BlackListQueryTidbVo0> findBlackListIdCardByTime(BlackListQueryTidbParam0 blackListQueryTidbParam0);
BlackListQueryTidbVo0 findBlackListByPhoneOrNameOrIdcardAndChannelType(BlackListQueryByThreeEleParam0 blackListQueryByThreeEleParam0);
List<BlackListQueryTidbVo0> findBlackListByPhone(BlackListQueryByThreeEleParam0 blackListQueryByThreeEleParam0);
List<BlackListQueryTidbVo0> findBlackListByIdcard(BlackListQueryByThreeEleParam0 blackListQueryByThreeEleParam0);
void updateThreeElementsById(BlackListQueryTidbVo0 blackListQueryTidbVo0);
void insertBatch(List<BlackListQueryTidbVo0> blackListQueryTidbVo0s);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.quantgroup.qgblservice.repository.mybatis.mapper.blacklist.BlackListQueryMapper">
<resultMap id="BaseResultMap" type="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="uuid" jdbcType="VARCHAR" property="uuid"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<result column="phoneNo" jdbcType="VARCHAR" property="phone_no"/>
<result column="idNo" jdbcType="VARCHAR" property="id_no"/>
<result column="majorType" jdbcType="VARCHAR" property="major_type"/>
<result column="type" jdbcType="VARCHAR" property="type"/>
<result column="firstOverdueDays" jdbcType="VARCHAR" property="first_overdue_days"/>
<result column="maxOverdueDays" jdbcType="VARCHAR" property="max_overdue_days"/>
<result column="blackLevel" jdbcType="VARCHAR" property="black_level"/>
<result column="status" jdbcType="VARCHAR" property="status"/>
<result column="createdAt" jdbcType="TIMESTAMP" property="created_at"/>
<result column="updatedAt" jdbcType="TIMESTAMP" property="updated_at"/>
</resultMap>
<insert id="insertBatch"
parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0">
insert into black_list_new (`uuid`, `name`, `phone_no`, `id_no`, `major_type`, `type`, `first_overdue_days`,
`max_overdue_days`, `black_level`)
values
<foreach collection="list" item="item" separator=",">
(#{uuid, jdbcType=VARCHAR},
#{name, jdbcType=VARCHAR},
#{phone_no, jdbcType=VARCHAR},
#{id_no, jdbcType=VARCHAR},
#{major_type, jdbcType=VARCHAR},
#{type, jdbcType=VARCHAR},
#{first_overdue_days, jdbcType=VARCHAR},
#{max_overdue_days, jdbcType=VARCHAR},
#{black_level, jdbcType=VARCHAR})
</foreach>
</insert>
<select id="findBlackListByPhoneOrNameOrIdcardAndChannelType" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0" resultMap="BaseResultMap">
select * from black_list_new
<trim prefix="where" prefixOverrides="and">
<if test="phone != null">
and phone_no = #{phone,jdbcType=VARCHAR}
</if>
<if test="name != null">
and name = #{name,jdbcType=VARCHAR}
</if>
<if test="idCard != null">
and id_no = #{idCard,jdbcType=VARCHAR}
</if>
<if test="type != null">
and type = #{type,jdbcType=VARCHAR}
</if>
</trim>
limit 1;
</select>
<select id="findBlackListByPhone" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0" resultMap="BaseResultMap">
select * from black_list_new where phone_no = #{phone, jdbcType=VARCHAR}
</select>
<select id="findBlackListByIdcard" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0" resultMap="BaseResultMap">
select * from black_list_new where phone_no = #{id_no, jdbcType=VARCHAR}
</select>
<update id="updateThreeElementsById" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0">
update black_list_new
<set>
<if test="uuid!=null">uuid = #{uuid,jdbcType=VARCHAR},</if>
<if test="name!=null">name = #{name,jdbcType=VARCHAR},</if>
<if test="phoneNo!=null">phone_no = #{phoneNo,jdbcType=VARCHAR},</if>
<if test="idNo!=null">id_no = #{idNo,jdbcType=VARCHAR},</if>
where id = #{id}
</set>
</update>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.quantgroup.qgblservice.repository.mybatis.mapper.blacklist.test">
</mapper>
\ No newline at end of file
package cn.quantgroup.qgblservice.repository.mybatis.xml.blacklist;
/**
* @Author fengjunkai
* @Date 2019-07-02 14:51
*/
public class test {
}
......@@ -91,66 +91,7 @@
left join xyqb_user_i_user_detail b on a.idcard=b.id_no
left join xyqb_user_i_user c on b.user_id=c.id
where a.createDate>=#{startTime,jdbcType=VARCHAR}
and a.createDate&lt;#{endTime, jdbcType=VARCHAR};;
</select>
<insert id="insertBatch"
parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0">
insert into black_list_new (`uuid`, `name`, `phone_no`, `id_no`, `major_type`, `type`, `first_overdue_days`,
`max_overdue_days`, `black_level`)
values
<foreach collection="list" item="item" separator=",">
(#{uuid, jdbcType=VARCHAR},
#{name, jdbcType=VARCHAR},
#{phone_no, jdbcType=VARCHAR},
#{id_no, jdbcType=VARCHAR},
#{major_type, jdbcType=VARCHAR},
#{type, jdbcType=VARCHAR},
#{first_overdue_days, jdbcType=VARCHAR},
#{max_overdue_days, jdbcType=VARCHAR},
#{black_level, jdbcType=VARCHAR})
</foreach>
</insert>
<select id="findBlackListByPhoneOrNameOrIdcardAndChannelType" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0" resultMap="BaseResultMap">
select * from black_list_new
<trim prefix="where" prefixOverrides="and">
<if test="phone != null">
and phone_no = #{phone,jdbcType=VARCHAR}
</if>
<if test="name != null">
and name = #{name,jdbcType=VARCHAR}
</if>
<if test="idCard != null">
and id_no = #{idCard,jdbcType=VARCHAR}
</if>
<if test="type != null">
and type = #{type,jdbcType=VARCHAR}
</if>
</trim>
limit 1;
</select>
<select id="findBlackListByPhone" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0" resultMap="BaseResultMap">
select * from black_list_new where phone_no = #{phone, jdbcType=VARCHAR}
</select>
<select id="findBlackListByIdcard" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0" resultMap="BaseResultMap">
select * from black_list_new where phone_no = #{id_no, jdbcType=VARCHAR}
and a.createDate&lt;#{endTime, jdbcType=VARCHAR};
</select>
<update id="updateThreeElementsById" parameterType="cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0">
update black_list_new bln
<set>
<if test="uuid!=null">bln.uuid = #{uuid,jdbcType=VARCHAR},</if>
<if test="name!=null">bln.name = #{name,jdbcType=VARCHAR},</if>
<if test="phoneNo!=null">bln.phone_no = #{phoneNo,jdbcType=VARCHAR},</if>
<if test="idNo!=null">bln.id_no = #{idNo,jdbcType=VARCHAR},</if>
<if test="createdAt!=null">bln.created_at = #{createdAt,jdbcType=TIMESTAMP},</if>
<if test="updatedAt!=null">bln.updated_at = #{updatedAt,jdbcType=TIMESTAMP},</if>
where bln.id = #{id}
</set>
</update>
</mapper>
\ No newline at end of file
......@@ -8,7 +8,7 @@ import cn.quantgroup.qgblservice.response.GlobalResponse;
*/
public interface IBlackListManagerService {
public void blackListPhoneManager(String startTime, String endTime);
public void blackListIdCardManager(String startTime, String endTime);
public void blackListPhoneManagerByMonth(String startTime, String endTime);
public void blackListIdCardManagerByMonth(String startTime, String endTime);
}
......@@ -49,14 +49,14 @@ public class BlackListImportServiceImpl implements IBlackListImportService {
try {
startTime = StringUtils.isBlank(startTime) ? erlyDate.plusMonths(i).format(DateTimeFormatter.ISO_DATE) : startTime;
endTime = StringUtils.isBlank(endTime) ? erlyDate.plusMonths(i + 1).format(DateTimeFormatter.ISO_DATE) : endTime;
startTime = erlyDate.plusMonths(i).format(DateTimeFormatter.ISO_DATE);
endTime = erlyDate.plusMonths(i + 1).format(DateTimeFormatter.ISO_DATE) ;
if (phoneBreakDate.equalsIgnoreCase(startTime)) {
break;
}
iBlackListManagerService.blackListPhoneManager(startTime, endTime);
iBlackListManagerService.blackListPhoneManagerByMonth(startTime, endTime);
} catch (Exception e) {
log.error("手机号整合导入黑名单新表异常, startTime: {} , endTime: {} ", startTime, endTime, e);
......@@ -80,29 +80,29 @@ public class BlackListImportServiceImpl implements IBlackListImportService {
public GlobalResponse blackListIdCardImport(String startTime, String endTime) {
LocalDateTime erlyDate = LocalDateTime.parse(ERLY_DATE);
String idCardBreakDate = LocalDateTime.parse(IDCARD_BREAK_DATE).format(DateTimeFormatter.ISO_DATE);
String phoneBreakDate = LocalDateTime.parse(PHONE_BREAK_DATE).format(DateTimeFormatter.ISO_DATE);
for (int i = 0; i < 100; i++) {
try {
endTime = erlyDate.plusMonths(i + 1).format(DateTimeFormatter.ISO_DATE);
startTime = erlyDate.plusMonths(i).format(DateTimeFormatter.ISO_DATE);
endTime = erlyDate.plusMonths(i + 1).format(DateTimeFormatter.ISO_DATE) ;
if (idCardBreakDate.equalsIgnoreCase(startTime)) {
if (phoneBreakDate.equalsIgnoreCase(startTime)) {
break;
}
iBlackListManagerService.blackListIdCardManager(startTime, endTime);
iBlackListManagerService.blackListIdCardManagerByMonth(startTime, endTime);
} catch (Exception e) {
log.error("身份证黑名单导入发生异常, startTime: {} , endTime: {} ", startTime, endTime);
log.error("手机号整合导入黑名单新表异常, startTime: {} , endTime: {} ", startTime, endTime, e);
}
}
log.info("身份证黑名单整合导入新表完毕");
return GlobalResponse.success("身份真关联三要素导入黑名单新表完毕");
log.info("手机号整合导入新表完毕");
return GlobalResponse.success("手机号关联三要素导入黑名单新表完毕");
}
......
package cn.quantgroup.qgblservice.service.impl;
import cn.quantgroup.qgblservice.constant.Constant;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryByThreeEleParam0;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbParam0;
import cn.quantgroup.qgblservice.repository.mybatis.entity.tidb.BlackListQueryTidbVo0;
import cn.quantgroup.qgblservice.repository.mybatis.mapper.blacklist.BlackListQueryMapper;
import cn.quantgroup.qgblservice.repository.mybatis.mapper.tidb.BlackListQueryTidbMapper;
import cn.quantgroup.qgblservice.service.IBlackListManagerService;
import cn.quantgroup.qgblservice.utils.jdbc.JdbcExecuters;
......@@ -12,13 +12,13 @@ import com.google.common.base.Stopwatch;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
......@@ -32,71 +32,44 @@ public class BlackListManagerServiceImpl implements IBlackListManagerService {
@Autowired
private BlackListQueryTidbMapper blackListQueryTidbMapper;
@Autowired
private BlackListQueryMapper blackListQueryMapper;
@Autowired
private JdbcTemplate blackListJdbcTemplate;
/**
* 手机号黑名单black_type_list_new --> black_list_new
* @param startTime
* @param endTime
*/
@Override
public void blackListPhoneManager(String startTime, String endTime) {
public void blackListPhoneManagerByMonth(String startTime, String endTime) {
Stopwatch queryPhoneStopwatch = Stopwatch.createStarted();
List<BlackListQueryTidbVo0> blackListQueryTidbVo0s = blackListQueryTidbMapper.findBlackListPhoneByTime(BlackListQueryTidbParam0.builder().startTime(startTime).endTime(endTime).build());
log.info("手机黑名单查询 {} --- {} 结果size: {} , 耗时: {} ", startTime, endTime, blackListQueryTidbVo0s.size(), queryPhoneStopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
blackListQueryTidbVo0s.forEach(blackListQueryTidbVo0 -> {
List<BlackListQueryTidbVo0> blackListByPhone = blackListQueryTidbMapper.findBlackListByPhone(BlackListQueryByThreeEleParam0.builder().phone(blackListQueryTidbVo0.getPhoneNo()).build());
updatedThreeElementsById(blackListByPhone, blackListQueryTidbVo0);
});
Stopwatch executeInsertPhoneStopwatch = Stopwatch.createStarted();
JdbcExecuters.batchExecute(blackListQueryTidbVo0s, Constant.SQL.BATCH_INSERT_BLACK_PHONE_LIST_SQL, blackListJdbcTemplate);
log.info("手机黑名单入库 {} --- {} 入库size: {} , 耗时: {} ", startTime, endTime, blackListQueryTidbVo0s.size(), executeInsertPhoneStopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
if (CollectionUtils.isNotEmpty(blackListQueryTidbVo0s)) {
Stopwatch stopwatch = Stopwatch.createStarted();
int batchExecuteResult = JdbcExecuters.batchExecute(blackListQueryTidbVo0s, Constant.SQL.BATCH_INSERT_BLACK_THREE_ELE_LIST_SQL, blackListJdbcTemplate);
log.info("{} - {} 手机号黑名单关联三要素导入完成, 结果大小: {} , 入库大小: {} , 耗时: {} ", startTime, endTime, blackListQueryTidbVo0s.size(), batchExecuteResult, stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
}
}
/**
* 身份证黑名单 black_list_idcard_new --> black_list_new
* @param startTime
* @param endTime
*/
@Override
public void blackListIdCardManager(String startTime, String endTime) {
Stopwatch queryStopwatch = Stopwatch.createStarted();
List<BlackListQueryTidbVo0> blackListQueryTidbVo0s = blackListQueryTidbMapper.findBlackListPhoneByTime(BlackListQueryTidbParam0.builder().startTime(startTime).endTime(endTime).build());
log.info("身份证黑名单查询 {} --- {} 结果size: {} , 耗时: {} ", startTime, endTime, blackListQueryTidbVo0s.size(), queryStopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
blackListQueryTidbVo0s.forEach(blackListQueryTidbVo0 -> {
List<BlackListQueryTidbVo0> blackListByIdCard = blackListQueryTidbMapper.findBlackListByIdcard(BlackListQueryByThreeEleParam0.builder().idCard(blackListQueryTidbVo0.getIdNo()).build());
updatedThreeElementsById(blackListByIdCard, blackListQueryTidbVo0);
});
Stopwatch executeInsertStopwatch = Stopwatch.createStarted();
JdbcExecuters.batchExecute(blackListQueryTidbVo0s, Constant.SQL.BATCH_INSERT_BLACK_PHONE_LIST_SQL, blackListJdbcTemplate);
log.info("身份证黑名单入库 {} --- {} 入库size: {} , 耗时: {} ", startTime, endTime, blackListQueryTidbVo0s.size(), executeInsertStopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
}
public void updatedThreeElementsById(List<BlackListQueryTidbVo0> blackListByPhones, BlackListQueryTidbVo0 blackListQueryTidbVo0){
if (CollectionUtils.isNotEmpty(blackListByPhones)) {
for(int i=0;i<blackListByPhones.size();i++){
BlackListQueryTidbVo0 blacklist = blackListByPhones.get(i);
if(StringUtils.isAnyBlank(blacklist.getIdNo(), blacklist.getName(), blacklist.getPhoneNo())){
public void blackListIdCardManagerByMonth(String startTime, String endTime) {
if (StringUtils.isBlank(blacklist.getIdNo()) && StringUtils.isNotBlank(blackListQueryTidbVo0.getIdNo())) {
blacklist.setIdNo(blackListQueryTidbVo0.getIdNo());
}
List<BlackListQueryTidbVo0> blackListQueryTidbVo0s = blackListQueryTidbMapper.findBlackListIdCardByTime(BlackListQueryTidbParam0.builder().startTime(startTime).endTime(endTime).build());
if (StringUtils.isBlank(blacklist.getName()) && StringUtils.isNotBlank(blackListQueryTidbVo0.getName())) {
blacklist.setName(blackListQueryTidbVo0.getName());
}
if(StringUtils.isBlank(blacklist.getUuid()) && StringUtils.isNotBlank(blackListQueryTidbVo0.getUuid())){
blacklist.setUuid(blackListQueryTidbVo0.getUuid());
}
blacklist.setCreatedAt(blackListQueryTidbVo0.getCreatedAt());
blacklist.setUpdatedAt(blackListQueryTidbVo0.getUpdatedAt());
blackListQueryTidbMapper.updateThreeElementsById(blacklist);
}
}
if (CollectionUtils.isNotEmpty(blackListQueryTidbVo0s)) {
Stopwatch stopwatch = Stopwatch.createStarted();
int batchExecuteResult = JdbcExecuters.batchExecute(blackListQueryTidbVo0s, Constant.SQL.BATCH_INSERT_BLACK_THREE_ELE_LIST_SQL, blackListJdbcTemplate);
log.info("{} - {} 身份证号黑名单关联三要素导入完成, 结果大小: {} , 入库大小: {} , 耗时: {} ", startTime, endTime, blackListQueryTidbVo0s.size(), batchExecuteResult, stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
}
}
}
package cn.quantgroup.qgblservice.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Map;
/**
* @Author fengjunkai
* @Date 2019-08-07 18:40
*/
public class CommonBeanUtils {
private static final Logger logger = LoggerFactory.getLogger(CommonBeanUtils.class);
@SuppressWarnings("unchecked")
public static <T> T rsToBean(T entity, ResultSet rs){
T target =null;
try {
Class<T> tclass = (Class<T>) entity.getClass();
target = tclass.newInstance();
Field[] fields = tclass.getDeclaredFields();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
for(int i=0;i<columnCount;i++){
String columnName = metaData.getColumnName(i+1);
String columnNameT = columnName.replaceAll("_", "").toLowerCase();
for(Field field:fields){
//设置可访问私有变量。
field.setAccessible(true);
Type fieldType= field.getGenericType();
String fieldTypeStr=fieldType.toString();
String fileNameT = field.getName().replaceAll("_", "").toLowerCase();
if(fieldTypeStr.equals("class java.lang.String") && columnNameT.equals(fileNameT)){
field.set(target,rs.getString(columnName));
break;
}else if((fieldTypeStr.equals("class java.lang.Integer") ||fieldTypeStr.equals("int")) && columnNameT.equals(fileNameT)){
int num = rs.getInt(columnName);
if(num!=0){
field.set(target,rs.getInt(columnName));
}else{
field.set(target,rs.getObject(columnName));
}
break;
}else if(fieldTypeStr.equals("class java.util.Date") && columnNameT.equals(fileNameT)){
field.set(target,DateUtil.parse(rs.getString(columnName)));
break;
}else if((fieldTypeStr.equals("class java.lang.Boolean") || fieldTypeStr.equals("boolean"))&& columnNameT.equals(fileNameT)){
field.set(target,rs.getBoolean(columnName));
break;
}else if((fieldTypeStr.equals("class java.lang.Double")||fieldTypeStr.equals("double")) && columnNameT.equals(fileNameT)){
field.set(target,rs.getDouble(columnName));
break;
}else if((fieldTypeStr.equals("class java.lang.Short")||fieldTypeStr.equals("short")) && columnNameT.equals(fileNameT)){
field.set(target,rs.getShort(columnName));
break;
}else if((fieldTypeStr.equals("class java.lang.Long")||fieldTypeStr.equals("long")) && columnNameT.equals(fileNameT)){
field.set(target,rs.getLong(columnName));
break;
}else if((fieldTypeStr.equals("class java.math.BigDecimal")) && columnNameT.equals(fileNameT)){
field.set(target,rs.getBigDecimal(columnName));
break;
}else if((fieldTypeStr.equals("class java.lang.Float")||fieldTypeStr.equals("float")) && columnNameT.equals(fileNameT)){
field.set(target,rs.getFloat(columnName));
break;
}
}
}
} catch (Exception e) {
logger.error("rs cast to bean exception",e);
}
return target;
}
/**
* request2Bean
* @param request
* @return
*/
public static <T> T request2Bean(HttpServletRequest request, T t){
try {
@SuppressWarnings("unchecked")
Class<T> tclass = (Class<T>) t.getClass();
Field[] fields = tclass.getDeclaredFields();
for (Field field : fields) {
String param = request.getParameter(field.getName());
if(StringUtils.isNotEmpty(param)){
//设置可访问私有变量。
field.setAccessible(true);
field.set(t,param.replaceAll(" ","").replaceAll(" ", ""));
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return t;
}
/**
* request2Bean
* @param request
* @return
*/
public static <T> T request2BeanNew(HttpServletRequest request,T t){
try {
@SuppressWarnings("unchecked")
Class<T> tclass = (Class<T>) t.getClass();
Field[] fields = tclass.getDeclaredFields();
for (Field field : fields) {
String param = request.getParameter(field.getName());
if(StringUtils.isNotEmpty(param)){
//设置可访问私有变量。
field.setAccessible(true);
field.set(t,param);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return t;
}
/**
* bean转map
* @param o
* @return
*/
@SuppressWarnings("unchecked")
public static Map<String,Object> beanToMap(Object o){
Map<String,Object> map=null;
try{
if(o!=null){
String jsonString = JSON.toJSONString(o);
map = JSON.parseObject(jsonString, Map.class);
}else{
throw new NullPointerException("bean to map NullPointerException: bean is null");
}
}catch(Exception e){
logger.error("bean cast to map exception",e);
}
return map;
}
/**
* bean转map
* @param o
* @return
*/
@SuppressWarnings("unchecked")
public static Map<String,Object> beanToMapByDateFormat(Object o){
Map<String,Object> map=null;
if(o!=null){
String jsonString = JSON.toJSONString(o, SerializerFeature.WriteDateUseDateFormat);
map = JSON.parseObject(jsonString, Map.class);
}else{
throw new NullPointerException("bean to map NullPointerException: bean is null");
}
return map;
}
@SuppressWarnings("unchecked")
public static Map<Object,Object> beanToSaveDBMap(Object o){
Map<Object,Object> map=null;
if(o!=null){
String jsonString = JSONObject.toJSONString(o,SerializerFeature.WriteDateUseDateFormat,SerializerFeature.WriteNullNumberAsZero,SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteMapNullValue);
map = JSON.parseObject(jsonString, Map.class);
}else{
throw new NullPointerException("bean to map NullPointerException: bean is null");
}
return map;
}
public static boolean isAllFieldNull(Object obj) throws Exception{
Class stuCla = (Class) obj.getClass();// 得到类对象
Field[] fs = stuCla.getDeclaredFields();//得到属性集合
boolean flag = true;
for (Field f : fs) {//遍历属性
f.setAccessible(true); // 设置属性是可以访问的(私有的也可以)
Object val = f.get(obj);// 得到此属性的值
String name = f.getName();
if(StringUtils.isNotEmpty(name) && "serialVersionUID".equalsIgnoreCase(name)){
continue;
}
if(val!=null) {//只要有1个属性不为空,那么就不是所有的属性值都为空
flag = false;
break;
}
}
return flag;
}
}
package cn.quantgroup.qgblservice.utils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @Author fengjunkai
* @Date 2019-08-07 18:41
*/
public class DateUtil {
public static final int PERIOD_TYPE_YEAR = 0;
public static final int PERIOD_TYPE_MONTH = 1;
public static final int PERIOD_TYPE_HALFMONTH = 2;
public static final int PERIOD_TYPE_WEEK = 3;
private static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
/**
* 英文简写(默认)如:2015-12
*/
public static String yyyyMM_Bar = "yyyy-MM";
/**
* 英文简写(默认)如:2015-12-01
*/
public static String yyyyMMdd_Bar = "yyyy-MM-dd";
/**
* 英文全称 如:2015-12-01 23:15:06
*/
public static String yyyyMMddSpaceHHmmss_Bar = "yyyy-MM-dd HH:mm:ss";
/**
* 精确到毫秒的完整时间 如:yyyy-MM-dd HH:mm:ss.S
*/
public static String yyyyMMddSpaceHHmmssFull_Bar = "yyyy-MM-dd HH:mm:ss.S";
/**
* 英文简写(默认)如:2015-12-01
*/
public static String yyyyMMdd_Slash = "yyyy/MM/dd";
/**
* 20151201
*/
public static String yyyyMMdd = "yyyyMMdd";
/**
* 20151201121321
*/
public static String yyyyMMddHHmmss = "yyyyMMddHHmmss";
/**
* 精确到毫秒
* 20151201121321992
*/
public static String yyyyMMddHHmmssS = "yyyyMMddHHmmssS";
/**
* 201512
*/
public static String yyyyMM = "yyyyMM";
/**
* 获得默认的 date pattern
*/
public static String getDatePattern() {
return yyyyMMddSpaceHHmmss_Bar;
}
/**
* 根据预设格式返回当前日期
*
* @return
*/
public static String getNow() {
return format(new Date());
}
public static Date getDate() {
return new Date();
}
public static Timestamp getTimestamp() {
return new Timestamp(System.currentTimeMillis());
}
/**
* 获取当前时间串 yyyyMMddHHmmss
* @return
*/
public static String getTime() {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
return df.format(new Date());
}
/**
* 根据用户格式返回当前日期
*
* @param format
* @return
*/
public static String getNow(String format) {
return format(new Date(), format);
}
/**
* 使用预设格式格式化日期
*
* @param date
* @return
*/
public static String format(Date date) {
return format(date, getDatePattern());
}
/**
* 使用用户格式格式化日期
*
* @param date 日期
* @param pattern 日期格式
* @return
*/
public static String format(Date date, String pattern) {
String returnValue = "";
if (date != null) {
SimpleDateFormat df = new SimpleDateFormat(pattern);
returnValue = df.format(date);
}
return (returnValue);
}
/**
* 使用预设格式提取字符串日期
*
* @param strDate 日期字符串
* @return
*/
public static Date parse(String strDate) {
if(strDate == null||"".equalsIgnoreCase(strDate)){
return null;
}
if(strDate.length()<12){
return parse(strDate, "yyyy-MM-dd");
}
return parse(strDate, getDatePattern());
}
/**
*
* @param timestamp
* @return
*/
public static Date parse(long timestamp) {
try {
Date date = new Date();
date.setTime(timestamp);
return date;
} catch (Exception e) {
return null;
}
}
/**
* 使用用户格式提取字符串日期
*
* @param strDate 日期字符串
* @param pattern 日期格式
* @return
*/
public static Date parse(String strDate, String pattern) {
SimpleDateFormat df = new SimpleDateFormat(pattern);
try {
return df.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
/**
* 在日期上增加数个整月
*
* @param date 日期
* @param n 要增加的月数
* @return
*/
public static Date addMonth(Date date, int n) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, n);
return cal.getTime();
}
/**
* 在日期上增加天数
*
* @param date 日期
* @param n 要增加的天数
* @return
*/
public static Date addDay(Date date, int n) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, n);
return cal.getTime();
}
/**
* 获取日期年份
*
* @param date 日期
* @return
*/
public static String getYear(Date date) {
return format(date).substring(0, 4);
}
public static String getMonth(Date date){
return format(date).substring(5,7);
}
/**
* 按默认格式的字符串距离今天的天数
*
* @param date 日期字符串
* @return
*/
public static int countDays(String date) {
long t = Calendar.getInstance().getTime().getTime();
Calendar c = Calendar.getInstance();
c.setTime(parse(date));
long t1 = c.getTime().getTime();
return (int) (t / 1000 - t1 / 1000) / 3600 / 24;
}
/*
* 返回最近月份
* */
public static List<Date> getLastMonths(int num) {
List<Date> list = new ArrayList<Date>();
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 1);
for (int i = 0; i < num; i++) {
c.add(Calendar.MONTH, -1);
list.add(new Date(c.getTime().getTime()));
}
return list;
}
public static List<String> getLatestMonths(int num, String format) {
return getLatestMonths(num, format, true);
}
/*
* 返回最近月份,默认 201506,201505
* */
public static List<String> getLatestMonths(int num, String format, boolean isIncludeCurrentMonth) {
if (StringUtils.isBlank(format)) {
format = yyyyMM;
}
List<String> objectTmp = new ArrayList<String>();
java.text.DateFormat format2 = new SimpleDateFormat(
format);
Calendar c = Calendar.getInstance();
if (isIncludeCurrentMonth) {
c.add(Calendar.MONTH, 1);
}
for (int i = 0; i < num; i++) {
c.add(Calendar.MONTH, -1);
Date date = c.getTime();
String date2 = format2.format(date);
objectTmp.add(date2);
}
return objectTmp;
}
/**
* @param dateStr yyyy-MM-dd
* @return
*/
public static String lastDayOfMonth(String dateStr) {
return lastDayOfMonth(dateStr, yyyyMMdd_Bar, yyyyMMdd_Bar);
}
public static String lastDayOfMonth(String dateStr,String inputFormat,String outFormat){
return format((Object) dateStr, inputFormat, outFormat, false);
}
public static String lastDayOfMonth(Date date) {
return format(date,yyyyMMdd_Bar,yyyyMMdd_Bar,false);
}
public static String lastDayOfMonth(Date date,String outFormat) {
return format(date,yyyyMMdd_Bar,outFormat,false);
}
public static String lastDayOfMonth(Date date,String inputFormat,String outFormat) {
return format(date,yyyyMMdd_Bar,outFormat,false);
}
/**
* @param inputFormat 例如 yyyy-MM
* @param outFormat 例如 yyyy-MM-dd
* @return 月份的最后一天
*/
private static String format(Object da,String inputFormat,String outFormat,boolean isFirst) {
if(da!=null){
Date date = null;
try {
if(da instanceof Date){
date = (Date) da;
}else{
date = new SimpleDateFormat(inputFormat).parse(da.toString());
}
} catch (ParseException e) {
e.printStackTrace();
}
if(date!=null){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
if(!isFirst){
cal.roll(Calendar.DAY_OF_MONTH, -1);
}
Date time = cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat(outFormat);
return sdf.format(time);
}
}
return null;
}
/**
* @param dateStr yyyy-MM-dd
* @return
*/
public static String firstDayOfMonth(String dateStr) {
return firstDayOfMonth(dateStr, yyyyMMdd_Bar, yyyyMMdd_Bar);
}
public static String firstDayOfMonth(String dateStr,String inputFormat,String outFormat){
return format((Object) dateStr, inputFormat, outFormat, true);
}
public static String firstDayOfMonth(Date date) {
return format(date,yyyyMMdd_Bar,yyyyMMdd_Bar,true);
}
public static String firstDayOfMonth(Date date,String outFormat) {
return format(date,yyyyMMdd_Bar,outFormat,true);
}
public static String firstDayOfMonth(Date date,String inputFormat,String outFormat) {
return format(date, yyyyMMdd_Bar, outFormat, true);
}
public static Date getHourByDate(Calendar c,int hour){
c.set(Calendar.HOUR_OF_DAY, c.get(Calendar.HOUR_OF_DAY)+hour);
// c.set(Calendar.DAY_OF_MONTH,c.get(Calendar.DAY_OF_MONTH)+1);
return c.getTime();
}
/**
* @return 01,02月
* @throws
*/
public static String getChineseToDigitalMonth(String month){
switch (month) {
case "七月":
return "07";
case "六月":
return "06";
case "五月":
return "05";
case "四月":
return "04";
case "三月":
return "03";
case "二月":
return "02";
case "一月":
return "01";
case "十二月":
return "12";
case "十一月":
return "11";
case "十月":
return "10";
case "九月":
return "09";
case "八月":
return "08";
case "Jan":
return "01";
case "Feb":
return "02";
case "Mar":
return "03";
case "Apr":
return "04";
case "May":
return "05";
case "Jun":
return "06";
case "Jul":
return "07";
case "Aug":
return "08";
case "Sep":
return "09";
case "Oct":
return "10";
case "Nov":
return "11";
case "Dec":
return "12";
default:
break;
}
return "";
}
public static String getRegeDate(int year, int month,int day){
try{
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
try {
c.add(Calendar.YEAR, -year);
c.add(Calendar.MONTH, -month);
c.add(Calendar.DATE, -day);
} catch (Exception e) {
logger.error("转换用户入网那个时间异常",e);
}
return df.format(c.getTime());
}catch(Exception e){
e.printStackTrace();
}
return "";
}
/**
* 获取当前小时
* @return
*/
public static String getCurrentHourStr(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd/HH");
return df.format(new Date());
}
/**
* 获取分钟十位 前一个
* @return
*/
public static String getPreCurrentMinTen(){
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd/HH/mm");
String format = df.format(new Date());
String[] split = format.split("/");
int hour = Integer.parseInt(split[1]);
int min = Integer.parseInt(split[2].substring(0, 1));
if(min==0){
min=5;
if(hour==0){
hour = 23;
}else{
hour = hour-1;
}
}else{
min=min-1;
}
return split[0]+hour+min;
}
/**
* 获取当前分钟十位
* @return
*/
public static String getCurrentMinTen(){
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd/HH/mm");
String format = df.format(new Date());
String[] split = format.split("/");
int hour = Integer.parseInt(split[1]);
int min = Integer.parseInt(split[2].substring(0, 1));
return split[0]+hour+min;
}
public static int calculateMonthIn(Date nowDate, Date lastAuthDate, String userId, String phoneNo) {
try{
Calendar cal1 = Calendar.getInstance();
cal1.setTime(nowDate);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(lastAuthDate);
int cha =(cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR)) * 12 + cal1.get(Calendar.MONTH) - cal2.get(Calendar.MONTH);
if(cha>=6) {
logger.info("运营商增量抓取授权时间超过6个月, userId: {} , phoneNo: {} ", userId, phoneNo);
return 6;
}
return cha+1;
}catch(Exception e){
logger.error("运营商增量抓取授权时间计算异常, userId: {} , phoneNo: {} ", userId, phoneNo, e);
}
logger.info("运营商增量抓取授权时间正常抓取6个月, userId: {} , phoneNo: {} ", userId, phoneNo);
return 6;
}
public static String getTodayStr(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
return df.format(new Date());
}
/**
* 获取小时list
* @param num
* @return
*/
public static List<String> getHourList(int num){
List<String> list = new ArrayList<>();
for(int i =0;i<num+1;i++){
Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR_OF_DAY, -i);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/HH");
list.add(sdf.format(c.getTime()));
}
return list;
}
/**
* 获取最近7天list
* @return
*/
public static List<String> getDayList(){
List<String> list = new ArrayList<>();
for(int i =0;i<7;i++){
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -i);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
list.add(sdf.format(c.getTime()));
}
return list;
}
/**
*
* @return
*/
public static int getIntHour(){
Calendar c = Calendar.getInstance();
return c.get(Calendar.HOUR_OF_DAY);
}
/**
* 获取上个月的今天日期
* @return
*/
public static Date getNowOfLastMonth(int month){
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -month);
return c.getTime();
}
/**
* 获取上个月的指定日期
* @return
*/
public static Date getDayOfLastMonth(int day){
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, -1);
int i = c.get(Calendar.DAY_OF_MONTH);
c.add(Calendar.DAY_OF_MONTH, -i+day);
return c.getTime();
}
/**
* 获取当前月几号
* @param day
* @return
*/
public static Date getDayOfMonth(int day){
Calendar c = Calendar.getInstance();
int i = c.get(Calendar.DAY_OF_MONTH);
c.add(Calendar.DAY_OF_MONTH, -i+day);
return c.getTime();
}
/**
*
* @param time
* @return
*/
public static int timetoint(String time){
time=time.trim().replaceAll(" ", "");
int s=0;
time = time.replaceAll("钟", "").replaceAll("小时", "时");
if(time.contains("秒") || time.contains("时") || time.contains("分") || time.contains("天")){
if(time.contains("天")){
s+=Integer.parseInt(time.substring(0,time.indexOf("天")))*3600*24;
}
if(time.contains("时")){
s+=Integer.parseInt(time.substring(time.indexOf("天")+1,time.indexOf("时")))*3600;
}
if(time.contains("分")){
s+=Integer.parseInt(time.substring(time.indexOf("时")+1,time.indexOf("分")))*60;
}
if(time.contains("秒")){
s+=Integer.parseInt(time.substring(Math.max(time.indexOf("时")+1,time.indexOf("分")+1),time.indexOf("秒")));
}
}else{
String split = ":";
if (time.indexOf(split) < 0) {
split = "'";
}
String[] strs = time.split(split);
if(strs.length >= 3){
String hour = strs[0].replace(split, "");
String min = strs[1].replace(split, "");
String sencond = strs[2].replace(split, "");
s+=Integer.parseInt(hour)*3600;
s+=Integer.parseInt(min)*60;
s+=Integer.parseInt(sencond);
}
}
return s;
}
//20170215 15:55:01或"2017/02/17 10:40:03"
public static String formatOut(String dateStr){
String formatStr = "";
if(dateStr.contains("/")){
formatStr = dateStr.replace("/","-");
}else if(dateStr.length() >= 8 && !dateStr.substring(0,8).contains("-")){
formatStr = dateStr.substring(0,4)+"-"+dateStr.substring(4,6)+"-"+dateStr.substring(6,dateStr.length());
}
return formatStr;
}
/*
*String转Date
* */
public static Date StringToDate(String dateStr, String formatStr) {
DateFormat dd = new SimpleDateFormat(formatStr);
Date date = null;
if (!StringUtils.isBlank(dateStr)) {
try {
date = dd.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
}
/*
* 输出前几个月的信息,包括当前月,format可以是yyyy/MM
* */
public static List<String> getMonths(int num,String format){
List<String> objectTmp = new ArrayList<String>();
java.text.DateFormat format2 = new java.text.SimpleDateFormat(
format);
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 1);
for (int i = 0; i < num; i++) {
c.add(Calendar.MONTH, -1);
Date date = c.getTime();
String date2 = format2.format(date);
//System.out.println(date2);
objectTmp.add(date2);
}
return objectTmp;
}
/**返回传入月份的天数
* @return
*/
public static int getDaysOfMonth(String date){
int days=0;
try {
Calendar rightNow = Calendar.getInstance();
try {
rightNow.setTime(StringToDate(date,"yyyyMM")); //要计算你想要的月份,改变这里即可
} catch (Exception e) {
e.printStackTrace();
}
days = rightNow.getActualMaximum(Calendar.DAY_OF_MONTH);
} catch (Exception e) {
}
return days;
}
public static Date[] getPeriodByType(Date currentDate, int type) {
Date fromDate = currentDate;
Date toDate = currentDate;
Calendar cal;
switch (type) {
case PERIOD_TYPE_YEAR:
cal = Calendar.getInstance();
cal.setTime(currentDate);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DATE, 1);
fromDate = cal.getTime();
cal.add(Calendar.YEAR, 1);
toDate = add(cal.getTime(), Calendar.DATE, -1);
break;
case PERIOD_TYPE_MONTH:
cal = Calendar.getInstance();
cal.setTime(currentDate);
cal.set(Calendar.DATE, 1);
fromDate = cal.getTime();
cal.add(Calendar.MONTH, 1);
toDate = add(cal.getTime(), Calendar.DATE, -1);
break;
case PERIOD_TYPE_WEEK:
int dayOfWeek = getWeekDay(currentDate);
int seg = -1 * dayOfWeek;
fromDate = add(currentDate, Calendar.DATE, seg);
toDate = add(fromDate, Calendar.DATE, 6);
break;
case PERIOD_TYPE_HALFMONTH:
int dayOfMonth = getDayOfMonthByDate(currentDate);
fromDate = add(currentDate, Calendar.DATE, -1 * dayOfMonth + 1);
if (dayOfMonth > 15) {
cal = Calendar.getInstance();
cal.setTime(fromDate);
cal.add(Calendar.MONTH, 1);
toDate = add(cal.getTime(), Calendar.DATE, -1);
fromDate = add(fromDate, Calendar.DATE, 15);
} else {
toDate = add(fromDate, Calendar.DATE, 14);
}
break;
default:
break;
}
Date[] period = new Date[2];
period[0] = fromDate;
period[1] = toDate;
return period;
}
public static Date add(Date date, int field, int amount) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(field, amount);
return cal.getTime();
}
public static int getWeekDay(Date date) {
if (date == null) {
return -1;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return getWeekDay(calendar.get(Calendar.DAY_OF_WEEK));
}
public static int getWeekDay(int weekNumber) {
switch (weekNumber) {
case Calendar.MONDAY:
return 1;
case Calendar.TUESDAY:
return 2;
case Calendar.WEDNESDAY:
return 3;
case Calendar.THURSDAY:
return 4;
case Calendar.FRIDAY:
return 5;
case Calendar.SATURDAY:
return 6;
case Calendar.SUNDAY:
return 0;
default:
return -1;
}
}
public static int getDayOfMonthByDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_MONTH);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment