Commit 029a6a7b authored by 廖鑫's avatar 廖鑫

厅局办件推送一体化,一阶段开发完成

parent c76be06d
...@@ -16,12 +16,14 @@ ...@@ -16,12 +16,14 @@
<groupId>com.mortals.xhx</groupId> <groupId>com.mortals.xhx</groupId>
<artifactId>xhx-base</artifactId> <artifactId>xhx-base</artifactId>
<version>1.0.0-SNAPSHOT</version> <version>1.0.0-SNAPSHOT</version>
</parent> </parent>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.mortals.framework</groupId> <groupId>com.mortals.framework</groupId>
<artifactId>mortals-framework-springcloud</artifactId> <artifactId>mortals-framework-springcloud</artifactId>
</dependency> </dependency>
......
...@@ -59,6 +59,17 @@ ...@@ -59,6 +59,17 @@
<version>2.0.5</version> <version>2.0.5</version>
</dependency> </dependency>
<!--处理身份证格式-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
package com.mortals.xhx.common.code;
/**
* @Title:
* @Package: com.atm.affair
* @Description: (用一句话描述该文件做什么)
* @Author: tinker
* @Date: 4/9/21
* @Version: V1.0
*/
public enum ApplicantTypeEnums {
/*
* "申请人属性 1.法人 2.自然人"
* */
LEGAL("1", "法人"),
PERSON("2", "自然人");
private String code;
private String value;
ApplicantTypeEnums(String code, String value) {
this.value = value;
this.code = code;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.mortals.xhx.common.code;
import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.common.IBaseEnum;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 区域级别
*
* @author yiqimin
* @create 2018/09/26
*/
public enum NodeTypeEnum {
受理("BusiType_1","11"),
审查("BusiType_13","21"),
决定("BusiType_8","41"),
办结("end","81");
private String code;
private String desc;
NodeTypeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setValue(String desc) {
this.desc = desc;
}
}
package com.mortals.xhx.common.code;
import org.springframework.beans.factory.annotation.Value;
/**
* @author: coder wxy
* @date: 2020-12-21
* @description: 系统常量
*/
public class SystemConstant {
public static final String SUCCESS_CODE = "0";
//这里为动态,根据接口和编码来指定
/**
* 比如:成都申请了统一平台:编码未1111
* 接口为3个:http://59,http://59,http://59
* 可用5101 -》1111 和三个接口
*/
@Value("#{interface.sysInterface.openCode}")
public static final String SYS_CODE = "XXXXX";
public static final int DAYS = 10; //天数
public static boolean BEOR = true; //是否前后,true 只往前 false 前后days天
}
package com.mortals.xhx.common.excel.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ExcelAttribute {
/**
* 导出到Excel中的名字.
*/
String name();
/**
* 配置列的名称,对应A,B,C,D....
*/
String column();
/**
* 提示信息
*/
String prompt() default "";
/**
* 列宽
*/
String colWidth() default "4000";
/**
* 设置只能选择不能输入的列内容.
*/
String[] combo() default {};
/**
* 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
*/
boolean isExport() default true;
}
\ No newline at end of file
package com.mortals.xhx.common.excel.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ExcelElement {
/**
*
* 默认属性
* @return String 返回类型
* @throws
*/
String value() default "";
}
package com.mortals.xhx.common.excel.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ExcelID {
/**
*
* 默认属性
* @return String 返回类型
* @throws
*/
String value() default "";
}
package com.mortals.xhx.common.excel.config;
/**
* @描述
* @创建人 zxfei
* @创建时间 2021/3/4
* @修改人和其它信息
*/
public enum ElementTypePath {
SET("java.util.Set"),MAP("java.util.Map"),LIST("java.util.List");
private String path;
private ElementTypePath(String path){
this.path = path;
}
/**
*
* 获取元素
* @param path
* @return ElementTypePath 返回类型
* @throws
*/
public static ElementTypePath getElementTypePath(String path){
for(ElementTypePath elementTypePath:ElementTypePath.values()){
if(elementTypePath.path.equals(path)){
return elementTypePath;
}
}
return null;
}
@SuppressWarnings("static-access")
@Override
public String toString() {
return this.valueOf(path).getPath();
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
package com.mortals.xhx.common.excel.core;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import java.util.List;
import java.util.Map;
/**
*
* 定义需要重写的细节
* @author 神盾局
* @date 2016年8月9日 下午3:26:55
*
* @param <T>
*/
public abstract class AbstractExcelUtil<T> implements IExcelUtil<T>{
public abstract void createHeader(HSSFWorkbook wb, HSSFSheet sheet, Map<String, String> configFieldMap);
public abstract void createHeaderFlat(HSSFWorkbook wb, HSSFSheet sheet, Map<String, String> configFieldMap);
public abstract void createRow(HSSFWorkbook wb,Object t,HSSFSheet sheet);
/**
* 填充定制化数据
* @param wb
* @param t
* @param sheet
*/
public abstract void createRowFlat(HSSFWorkbook wb,Object t,HSSFSheet sheet);
public abstract int mergedRegio(Object t,HSSFSheet sheet,int rowStart);
public abstract List<T> dispatch(Sheet sheet);
}
package com.mortals.xhx.common.excel.core;
import lombok.SneakyThrows;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @描述
* @创建人 zxfei
* @创建时间 2021/3/4
* @修改人和其它信息
*/
public abstract class AbstractExcelUtils<T> extends AbstractExcelUtil<T> {
@SneakyThrows
@Override
public List<T> importExcel(String sheetName, String fileName, InputStream input) {
List<T> list = null;
try {
Workbook workbook = WorkbookFactory.create(input);
Sheet sheet = workbook.getSheetAt(0);
list = dispatch(sheet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@SuppressWarnings("unchecked")
@Override
public boolean exportExcel(List<T> list, String sheetName, OutputStream output, Map<String, String> configFieldMap) {
//此处 对类型进行转换
List<T> ilist = new ArrayList<>();
for (T t : list) {
ilist.add(t);
}
List<T>[] lists = new ArrayList[1];
lists[0] = ilist;
String[] sheetNames = new String[1];
sheetNames[0] = sheetName;
return exportExcel(lists, sheetNames, output, configFieldMap);
}
@Override
public boolean exportExcel(List<T>[] lists, String[] sheetNames, OutputStream output, Map<String, String> configFieldMap) {
if (lists.length != sheetNames.length) {
System.out.println("数组长度不一致");
return false;
}
// 创建excel工作簿
HSSFWorkbook wb = ExcelTool.createWorkbook();
// 创建第一个sheet(页),命名为 new sheet
for (int i = 0; i < lists.length; i++) {
List<T> list = lists[i];
ExcelTool.setNum(0);
// 产生工作表对象
HSSFSheet sheet = ExcelTool.createSheet(i, sheetNames[i]);
// 创建表头
createHeader(wb, sheet, configFieldMap);
// 写入数据
int rowStart = 1;
for (T t : list) {
createRow(wb, t, sheet);
ExcelTool.setNum(ExcelTool.getNum() + 1);
// rowStart = mergedRegio(t, sheet, rowStart);
}
}
try {
output.flush();
wb.write(output);
output.close();
return true;
} catch (IOException e) {
e.printStackTrace();
System.out.println("Output is closed ");
return false;
}
}
@SuppressWarnings("unchecked")
@Override
public boolean exportExcelFlat(List<T> list, String sheetName, OutputStream output, Map<String, String> configFieldMap) {
//此处 对类型进行转换
List<T> ilist = new ArrayList<>();
for (T t : list) {
ilist.add(t);
}
List<T>[] lists = new ArrayList[1];
lists[0] = ilist;
String[] sheetNames = new String[1];
sheetNames[0] = sheetName;
return exportExcelFlat(lists, sheetNames, output, configFieldMap);
}
@Override
public boolean exportExcelFlat(List<T>[] lists, String[] sheetNames, OutputStream output, Map<String, String> configFieldMap) {
if (lists.length != sheetNames.length) {
System.out.println("数组长度不一致");
return false;
}
//这里创建工作簿和sheet 构建初始化的模板
// 创建excel工作簿
HSSFWorkbook wb = ExcelTool.createWorkbook();
List<T> list = lists[0];
// 产生工作表对象及其表名
HSSFSheet sheet = ExcelTool.createSheet(0, sheetNames[0]);
ExcelTool.setNum(0);
// 创建第一行与第二行相关模板数据
createHeaderFlat(wb, sheet, configFieldMap);
//创建第三行表调数据
ExcelTool.setNum(2);
// 创建表头
createHeader(wb, sheet, configFieldMap);
// 填充写入数据
for (T t : list) {
//填充第一行与第二行数据
createRowFlat(wb, t, sheet);
//填充第三行以后数据
createRow(wb, t, sheet);
ExcelTool.setNum(ExcelTool.getNum() + 1);
}
//
// // 创建excel工作簿
// HSSFWorkbook wb = ExcelTool.createWorkbook();
// // 创建第一个sheet(页),命名为 new sheet
// for (int i = 0; i < lists.length; i++) {
// List<T> list = lists[i];
// ExcelTool.setNum(2);
// // 产生工作表对象
// HSSFSheet sheet = ExcelTool.createSheet(i, sheetNames[i]);
// // 创建表头
// createHeader(wb, sheet, configFieldMap);
// // 写入数据
// for (T t : list) {
// createRow(wb, t, sheet);
// ExcelTool.setNum(ExcelTool.getNum() + 1);
//
// }
//
// }
try {
output.flush();
wb.write(output);
output.close();
return true;
} catch (IOException e) {
e.printStackTrace();
System.out.println("Output is closed ");
return false;
}
}
}
package com.mortals.xhx.common.excel.core;
import com.mortals.xhx.common.excel.annotation.ExcelAttribute;
import com.mortals.xhx.common.excel.annotation.ExcelElement;
import com.mortals.xhx.common.excel.config.ElementTypePath;
import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.util.CellRangeAddressList;
import java.lang.reflect.*;
import java.util.ArrayList;
import java.util.List;
/**
* @描述
* @创建人 zxfei
* @创建时间 2021/3/4
* @修改人和其它信息
*/
public abstract class AbstractExcelUtilss<T> extends AbstractExcelUtils<T> {
/**
*
* 获取所有字段
* @param clazz
* @param listField
* @return List<Field> 返回类型
* @throws
*/
protected List<Field> getAllField(Class<?> clazz, List<Field> listField) {
if (listField == null) {
listField = new ArrayList<>();
}
// 获取所有属性
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
Type fieldType = field.getType();
if (field.isAnnotationPresent(ExcelAttribute.class)) {
listField.add(field);
// 类名,属性名
} else if (field.isAnnotationPresent(ExcelElement.class)) {
switch (ElementTypePath.getElementTypePath(fieldType.getTypeName())) {
case SET:
case LIST:
Type genericFieldType = field.getGenericType();
getAllField(getClass(genericFieldType, 0), listField);
break;
case MAP:
listField.add(field);
break;
default:
getAllField(field.getClass(), null);
break;
}
}
}
return listField;
}
/**
*
* 得到泛型类对象 @param type @param i @return Class 返回类型 @throws
*/
@SuppressWarnings("rawtypes")
protected static Class getClass(Type type, int i) {
if (type instanceof ParameterizedType) { // 处理泛型类型
return getGenericClass((ParameterizedType) type, i);
} else if (type instanceof TypeVariable) {
return (Class) getClass(((TypeVariable) type).getBounds()[0], 0); // 处理泛型擦拭对象
} else {// class本身也是type,强制转型
return (Class) type;
}
}
@SuppressWarnings("rawtypes")
private static Class getGenericClass(ParameterizedType parameterizedType, int i) {
Object genericClass = parameterizedType.getActualTypeArguments()[i];
if (genericClass instanceof ParameterizedType) { // 处理多级泛型
return (Class) ((ParameterizedType) genericClass).getRawType();
} else if (genericClass instanceof GenericArrayType) { // 处理数组泛型
return (Class) ((GenericArrayType) genericClass).getGenericComponentType();
} else if (genericClass instanceof TypeVariable) { // 处理泛型擦拭对象
return (Class) getClass(((TypeVariable) genericClass).getBounds()[0], 0);
} else {
return (Class) genericClass;
}
}
/**
* 将EXCEL中A,B,C,D,E列映射成0,1,2,3
*
* @param col
*/
protected static int getExcelCol(String col) {
col = col.toUpperCase();
// 从-1开始计算,字母重1开始运算。这种总数下来算数正好相同。
int count = -1;
char[] cs = col.toCharArray();
for (int i = 0; i < cs.length; i++) {
count += (cs[i] - 64) * Math.pow(26, cs.length - 1 - i);
}
return count;
}
/**
* 设置单元格上提示
*
* @param sheet
* 要设置的sheet.
* @param promptTitle
* 标题
* @param promptContent
* 内容
* @param firstRow
* 开始行
* @param endRow
* 结束行
* @param firstCol
* 开始列
* @param endCol
* 结束列
* @return 设置好的sheet.
*/
protected static HSSFSheet setHSSFPrompt(HSSFSheet sheet, String promptTitle, String promptContent, int firstRow,
int endRow, int firstCol, int endCol) {
// 构造constraint对象
DVConstraint constraint = DVConstraint.createCustomFormulaConstraint("DD1");
// 四个参数分别是:起始行、终止行、起始列、终止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// 数据有效性对象
HSSFDataValidation data_validation_view = new HSSFDataValidation(regions, constraint);
data_validation_view.createPromptBox(promptTitle, promptContent);
sheet.addValidationData(data_validation_view);
return sheet;
}
/**
* 设置某些列的值只能输入预制的数据,显示下拉框.
*
* @param sheet
* 要设置的sheet.
* @param textlist
* 下拉框显示的内容
* @param firstRow
* 开始行
* @param endRow
* 结束行
* @param firstCol
* 开始列
* @param endCol
* 结束列
* @return 设置好的sheet.
*/
protected static HSSFSheet setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow,
int firstCol, int endCol) {
// 加载下拉列表内容
DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);
// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// 数据有效性对象
HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);
sheet.addValidationData(data_validation_list);
return sheet;
}
}
package com.mortals.xhx.common.excel.core;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
/**
* @描述
* @创建人 zxfei
* @创建时间 2021/3/4
* @修改人和其它信息
*/
public class ExcelTool {
//当前行数
private static int num = 0;
private static HSSFWorkbook wb;
private static HSSFCell cell;
private static HSSFRow row;
public static HSSFWorkbook createWorkbook() {
wb = new HSSFWorkbook();
return wb;
}
/**
* 创建一个sheet
*
* @param sheetname
* @return HSSFSheet 返回类型
* @throws
*/
public static HSSFSheet createSheet(int ii, String sheetname) {
// 创建excel工作簿
HSSFSheet sheet = wb.createSheet();
wb.setSheetName(ii, sheetname);
return sheet;
}
/**
* 创建一行
*
* @param sheet
* @return HSSFRow 返回类型
* @throws
*/
public static HSSFRow createRow(HSSFSheet sheet) {
row = sheet.createRow(num);
num++;
return row;
}
/**
* 创建一格
*
* @param row
* @param col
* @return HSSFCell 返回类型
* @throws
*/
public static HSSFCell createCell(HSSFRow row, int col) {
cell = row.createCell(col);// 创建cell
return cell;
}
/**
* 获取合并单元格的值
*
* @param sheet
* @param row
* @param column
* @return
*/
public static String getMergedRegionValue(Sheet sheet, int row, int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress ca = sheet.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if (row >= firstRow && row <= lastRow) {
if (column >= firstColumn && column <= lastColumn) {
Row fRow = sheet.getRow(firstRow);
Cell fCell = fRow.getCell(firstColumn);
return getCellValue(fCell);
}
}
}
return null;
}
/**
* 判断指定的单元格是否是合并单元格
*
* @param sheet
* @param row
* @param column
* @return
*/
public static boolean isMergedRegion(Sheet sheet, int row, int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress ca = sheet.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if (row >= firstRow && row <= lastRow) {
if (column >= firstColumn && column <= lastColumn) {
return true;
}
}
}
return false;
}
/**
* 获取单元格的值
*
* @param cell
* @return
*/
public static String getCellValue(Cell cell) {
if (cell == null)
return "";
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
return cell.getStringCellValue();
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
return cell.getCellFormula();
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return String.valueOf(cell.getNumericCellValue());
}
return "";
}
public static int getNum() {
return num;
}
public static void setNum(int num) {
ExcelTool.num = num;
}
public static HSSFWorkbook getWb() {
return wb;
}
public static void setWb(HSSFWorkbook wb) {
ExcelTool.wb = wb;
}
public static HSSFCell getCell() {
return cell;
}
public static void setCell(HSSFCell cell) {
ExcelTool.cell = cell;
}
public static HSSFRow getRow() {
return row;
}
public static void setRow(HSSFRow row) {
ExcelTool.row = row;
}
}
package com.mortals.xhx.common.excel.core;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
/**
* @描述
* @创建人 zxfei
* @创建时间 2021/3/4
* @修改人和其它信息
*/
public interface IExcelUtil<T> {
/**
*
* 构建一个导入导出工具
* @param clazz 一个类类型
* @return IExcelUtil<T> 返回类型
*/
IExcelUtil<T> build(Class<T> clazz);
/**
*
* 数据导出
* @param sheetName
* @param input
* @return List<T> 导出数据
*/
List<T> importExcel(String sheetName,String fileName, InputStream input);
/**
*
* 导出到一个 sheet中
* @param list
* @param sheetName
* @param output
* @return boolean
*/
boolean exportExcel(List<T> list, String sheetName, OutputStream output, Map<String, String> configFieldMap);
/**
*
* 导出到多个 sheet中
* @param lists
* @param sheetNames
* @param output
* @return boolean
*/
boolean exportExcel(List<T> lists[], String sheetNames[], OutputStream output,Map<String, String> configFieldMap);
/**
*
* 导出到一个 sheet中
* @param list
* @param sheetName
* @param output
* @return boolean
*/
boolean exportExcelFlat(List<T> list, String sheetName, OutputStream output, Map<String, String> configFieldMap);
/**
*
* 导出到多个 sheet中
* @param lists
* @param sheetNames
* @param output
* @return boolean
*/
boolean exportExcelFlat(List<T> lists[], String sheetNames[], OutputStream output,Map<String, String> configFieldMap);
}
package com.mortals.xhx.common.excel.util;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
/**
* @描述
* @创建人 zxfei
* @创建时间 2021/3/4
* @修改人和其它信息
*/
@Deprecated
public class ExceMergedRegion {
/**
* 获取合并单元格的值
*
* @param sheet
* @param row
* @param column
* @return
*/
public String getMergedRegionValue(Sheet sheet, int row, int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress ca = sheet.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if (row >= firstRow && row <= lastRow) {
if (column >= firstColumn && column <= lastColumn) {
Row fRow = sheet.getRow(firstRow);
Cell fCell = fRow.getCell(firstColumn);
return getCellValue(fCell);
}
}
}
return null;
}
/**
* 判断指定的单元格是否是合并单元格
*
* @param sheet
* @param row
* @param column
* @return
*/
public boolean isMergedRegion(Sheet sheet, int row, int column) {
int sheetMergeCount = sheet.getNumMergedRegions();
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress ca = sheet.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if (row >= firstRow && row <= lastRow) {
if (column >= firstColumn && column <= lastColumn) {
return true;
}
}
}
return false;
}
/**
* 获取单元格的值
*
* @param cell
* @return
*/
public String getCellValue(Cell cell) {
if (cell == null)
return "";
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
return cell.getStringCellValue();
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
return cell.getCellFormula();
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return String.valueOf(cell.getNumericCellValue());
}
return "";
}
}
package com.mortals.xhx.common.utils;
import lombok.extern.slf4j.Slf4j;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
/**
* @author Wz
* @Date: 2021-08-2021/8/2-10:01
* @Description:
*/
@Slf4j
public class DateByAffairUtils {
public static final String P_yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss";
/**
* 指定日期获取工作随机时间
*
* @param begin
* @param end
* @return
*/
public static Date getDayWorkingTimeByRandom(Date date, Integer begin, Integer end) {
if (begin == null) {
begin = 9;
}
if (end == null) {
end = 17;
}
if (date == null) {
date = new Date();
}
Calendar calStart = Calendar.getInstance();
calStart.clear();
calStart.setTime(date);
calStart.set(Calendar.HOUR_OF_DAY, begin);
calStart.set(Calendar.SECOND, 0);
calStart.set(Calendar.MINUTE, 0);
calStart.set(Calendar.MILLISECOND, 0);
Calendar calEnd = Calendar.getInstance();
calEnd.clear();
calEnd.setTime(date);
calEnd.set(Calendar.HOUR_OF_DAY, end);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.MILLISECOND, 0);
long dateTime = randomTime(calStart.getTimeInMillis(), calEnd.getTimeInMillis());
DateFormat df = new SimpleDateFormat(P_yyyy_MM_dd_HH_mm_ss);//定义格式
return StrToDateTime(df.format(dateTime), P_yyyy_MM_dd_HH_mm_ss);
}
private static long randomTime(long begin, long end) {
long rtn = begin + (long) (Math.random() * (end - begin));
// 如果返回的是开始时间和结束时间,则递归调用本函数查找随机值
if (rtn < begin || rtn > end) {
return randomTime(begin, end);
}
return rtn;
}
/**
* 字符串转换为日期(包含小时分)
*
* @param str 日期字符串
* @param pattern 时间模式 为null时默认为“yyy-MM-dd HH:mm:ss”
* @return Date 返回 pattern形式的日期
*/
public final static Date StrToDateTime(String str, String pattern) {
Date returnDate = null;
if (pattern == null) {
pattern = P_yyyy_MM_dd_HH_mm_ss;
}
if (str == null || str.trim().length() == 0) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
returnDate = sdf.parse(str);
} catch (Exception e) {
log.debug("时间格式化异常-->" + str + "-->" + pattern + "-->" + e.getMessage());
return returnDate;
}
return returnDate;
}
/**
* 在指定时间的基础随机增加时间
*
* @param date
* @param maxhousr 随机最大时间
* @return
*/
public static Date getTimeByAddRandom(Date date, Integer maxhousr) {
if (null == maxhousr) {
maxhousr = 4;
}
long time = date.getTime();
time += Math.random() * maxhousr * 60 * 60 * 1000;// 要加上的小时转换成毫秒数
return new Date(time); // 将毫秒数转换成日期
}
/**
* 在当天基础上随机前几天至今天
* @param day
* @return
*/
public static String randomDate(int day) {
Calendar cal = Calendar.getInstance();
try {
int num = (int) (Math.random() * day - 1);
cal.add(Calendar.DATE, -num);
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
}
/**
* 在当天基础上随机前后几天
* @param day
* @return
*/
public static String randomBetweenDate(int day) {
Calendar cal = Calendar.getInstance();
try {
int num = (int) (Math.random() * day - 1);
if(getRandomBoolean()){
cal.add(Calendar.DATE, -num);
}else{
cal.add(Calendar.DATE, num);
}
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
}
private static boolean getRandomBoolean() {
Random random = new Random();
return random.nextBoolean();
}
/**
* 指定日期获取工作随机时间
*
* @param begin
* @param end
* @return
*/
public static Date getDayRadomWorkingTime(Date date, Integer begin, Integer end) {
if (begin == null) {
begin = 9;
}
if (end == null) {
end = 17;
}
if (date == null) {
date = new Date();
}
Calendar calStart = Calendar.getInstance();
calStart.clear();
calStart.setTime(date);
calStart.set(Calendar.HOUR_OF_DAY, begin);
calStart.set(Calendar.SECOND, 0);
calStart.set(Calendar.MINUTE, 0);
calStart.set(Calendar.MILLISECOND, 0);
Calendar calEnd = Calendar.getInstance();
calEnd.clear();
calEnd.setTime(date);
calEnd.set(Calendar.HOUR_OF_DAY, end);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.MILLISECOND, 0);
long dateTime = randomTime(calStart.getTimeInMillis(), calEnd.getTimeInMillis());
DateFormat df = new SimpleDateFormat(P_yyyy_MM_dd_HH_mm_ss);//定义格式
//
//
// String dateString = df.format(dateTime);//进行转换
return StrToDateTime(df.format(dateTime), P_yyyy_MM_dd_HH_mm_ss);
}
/**
* 获取当日工作随机时间(早上9点,下午5点)
*
* @param begin 开始 9
* @param end 结束 17
* @return
*/
public static Date getTodayRadomWorkingTime(Integer begin, Integer end) {
if (begin == null) {
begin = 9;
}
if (end == null) {
end = 17;
}
Calendar calStart = Calendar.getInstance();
calStart.set(Calendar.HOUR_OF_DAY, begin);
calStart.set(Calendar.SECOND, 0);
calStart.set(Calendar.MINUTE, 0);
calStart.set(Calendar.MILLISECOND, 0);
Calendar calEnd = Calendar.getInstance();
calEnd.set(Calendar.HOUR_OF_DAY, end);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.MILLISECOND, 0);
long dateTime = randomTime(calStart.getTimeInMillis(), calEnd.getTimeInMillis());
return new Date(dateTime);
}
}
package com.mortals.xhx.common.utils;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.mortals.xhx.common.code.ApplicantTypeEnums;
import java.text.ParseException;
/**
* @Title: 申请人类型转换
* @Package: com.atm.affair.util
* @Description: (用一句话描述该文件做什么)
* @Author: tinker
* @Date: 4/9/21
* @Version: V1.0
*/
public class ExcelConvertApplication implements Converter<String> {
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws ParseException {
// "申请人属性 1.法人 2.自然人"
if (cellData.getStringValue() == null) {
return null;
} else if (ApplicantTypeEnums.LEGAL.getValue().equals(cellData.getStringValue())) {
return ApplicantTypeEnums.LEGAL.getCode();
} else {
return ApplicantTypeEnums.PERSON.getCode();
}
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
}
package com.mortals.xhx.common.utils;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.text.ParseException;
/**
* @Title: 证件类型转换
* @Package: com.atm.affair.util
* @Description: (用一句话描述该文件做什么)
* @Author: tinker
* @Date: 4/9/21
* @Version: V1.0
*/
public class ExcelConvertCardType implements Converter<String> {
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws ParseException {
// 001 统一社会信用代码证件
// 099 其他法人或其他组织有效证件
// 111 居民身份证
// 112 临时居民身份证
// 113 户口簿
if (cellData.getStringValue() == null) {
return "";
} else if (cellData.getStringValue().indexOf("统一社会信用代码")>=0) {
return "001";
} else if ("其他法人或其他组织有效证件".equals(cellData.getStringValue())) {
return "099";
} else if ("居民身份证".equals(cellData.getStringValue())) {
return "111";
} else if ("临时居民身份证".equals(cellData.getStringValue())) {
return "112";
} else if ("护照".equals(cellData.getStringValue())) {
return "414";
}
else{
return "111";
}
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
}
package com.mortals.xhx.common.utils;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.mortals.xhx.common.code.SystemConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Title: 申请日期转化
* @Package: com.atm.affair.util
* @Description: (用一句话描述该文件做什么)
* @Author: tinker
* @Date: 4/9/21
* @Version: V1.0
*/
@Slf4j
public class ExcelConvertDateProperty implements Converter<Date> {
private static final String DEFAULT_PATTERN = "yyyy-MM-dd";
@Override
public Class supportJavaTypeKey() {
return null;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return null;
}
@Override
public Date convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
Date date = new Date();
try {
if (StringUtils.isEmpty(cellData.getStringValue())) {
String dateTime = "" ;
if(SystemConstant.BEOR){
dateTime = DateByAffairUtils.randomDate(SystemConstant.DAYS);
}else {
dateTime = DateByAffairUtils.randomBetweenDate(SystemConstant.DAYS);
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT_PATTERN);
date = DateByAffairUtils.getDayRadomWorkingTime(simpleDateFormat.parse(dateTime),null, null);
} else {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT_PATTERN);
Date dateNew = simpleDateFormat.parse(cellData.getStringValue());
date = DateByAffairUtils.getDayRadomWorkingTime(dateNew, null, null);
}
} catch (Exception e) {
log.error("转换日期失败:"+e.getMessage());
String dateTime = "" ;
if(SystemConstant.BEOR){
dateTime = DateByAffairUtils.randomDate(SystemConstant.DAYS);
}else {
dateTime = DateByAffairUtils.randomBetweenDate(SystemConstant.DAYS);
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT_PATTERN);
date = DateByAffairUtils.getDayRadomWorkingTime(simpleDateFormat.parse(dateTime),null, null);
return date;
}
return date;
}
@Override
public CellData convertToExcelData(Date date, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
public static void main(String[] args) {
Date date = new Date();
try {
if (StringUtils.isEmpty("2021-04-07") ){
date = DateByAffairUtils.getTodayRadomWorkingTime(null, null);
} else {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DEFAULT_PATTERN);
Date dateNew = simpleDateFormat.parse("2021-04-07");
date = DateByAffairUtils.getDayRadomWorkingTime(dateNew, null, null);
String dateTime = DateByAffairUtils.randomBetweenDate(2);
date = DateByAffairUtils.getDayRadomWorkingTime(simpleDateFormat.parse(dateTime),null, null);
System.out.println("====="+date);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(date);
}
}
package com.mortals.xhx.common.utils;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.text.ParseException;
/**
* @Title: 机构类型转换
* @Package: com.atm.affair.util
* @Description: (用一句话描述该文件做什么)
* @Author: tinker
* @Date: 4/9/21
* @Version: V1.0
*/
public class ExcelConvertMainProperty implements Converter<String> {
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) throws ParseException {
// 1 国家行政机关
// 2 事业单位
// 3 企业
// 4 其他
if (cellData.getStringValue() == null) {
return "";
} else if ("国家行政机关".equals(cellData.getStringValue())) {
return "1";
} else if ("事业单位".equals(cellData.getStringValue())) {
return "2";
} else if ("企业".equals(cellData.getStringValue())) {
return "3";
} else if ("其他".equals(cellData.getStringValue())) {
return "4";
} else {
return "4";
}
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
}
package com.mortals.xhx.common.utils;
import cn.hutool.core.util.IdcardUtil;
import com.mortals.xhx.common.code.ApplicantTypeEnums;
import com.mortals.xhx.modules.supplement.model.SupplementEntity;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @Title:
* @Package: com.atm.affair.util
* @Description: (用一句话描述该文件做什么)
* @Author: tinker
* @Date: 4/10/21
* @Version: V1.0
*/
public class FilterSuppDataUtils {
public static boolean isCorrectSupp(SupplementEntity supplement) {
StringBuffer resonMsg = new StringBuffer();
boolean flag = true;
//判断对象基本情况,直接在supplement对象中加入成功失败
//判断人员属性
if (null==supplement.getApplicationType()|| StringUtils.isEmpty(supplement.getApplicationType())) {
flag = false;
resonMsg.append("Err1:申请人属性为空 ");
}
//实施清单编码* 申请人属性* 申请人证件类型* 申请人姓名* 申请人证件号码* 申请人手机号码*
if (StringUtils.isEmpty(supplement.getImplCode())) {
flag = false;
resonMsg.append("Err2:实施清单编码为空 ");
}
if (StringUtils.isEmpty(supplement.getApplicationCardType())) {
flag = false;
resonMsg.append("Err3:证件类型为空 ");
}
if(!StringUtils.isEmpty(supplement.getApplicationCardType())){
if(supplement.getApplicationCardType().equals("414")){
if (StringUtils.isEmpty(supplement.getApplicationId())) {
flag = false;
resonMsg.append("Err4:护照为空或者证件号码不正确 ");
}
}
if(supplement.getApplicationCardType().equals("111")){
if (StringUtils.isEmpty(supplement.getApplicationId()) || !IdcardUtil.isValidCard(supplement.getApplicationId().trim())) {
flag = false;
resonMsg.append("Err4:证件号码为空或者证件号码不正确 ");
}
}
}
if(StringUtils.isEmpty(supplement.getApplicationCardType())){
flag = false;
resonMsg.append("Err00:证件类型为空");
}
if (StringUtils.isEmpty(supplement.getApplicationPhone()) || supplement.getApplicationPhone().trim().length() != 11 ) {
flag = false;
resonMsg.append("Err5:手机号码为空或者手机号码不正确 ");
}
if (null==supplement.getApplicationName()|| StringUtils.isEmpty(supplement.getApplicationName())) {
flag = false;
resonMsg.append("Err6:申请人姓名为空 ");
}
if (ApplicantTypeEnums.LEGAL.getCode().equals(supplement.getApplicationType())) {
//如果是法人,还需要在校验下
//机构名称* 机构地址 机构性质* 证件类型* 机构编码* 法人姓名*
if (StringUtils.isEmpty(supplement.getMechanismName())) {
flag = false;
resonMsg.append("Err21:机构名称为空 ");
}
if (StringUtils.isEmpty(supplement.getMechanismType())) {
flag = false;
resonMsg.append("Err22:机构性质为空 ");
}
if (StringUtils.isEmpty(supplement.getMechanismIdType())) {
flag = false;
resonMsg.append("Err23:机构证件类型为空 ");
}
if (StringUtils.isEmpty(supplement.getMechanismId())) {
flag = false;
resonMsg.append("Err24:机构编码为空 ");
}
if (StringUtils.isEmpty(supplement.getLegalPerson())) {
flag = false;
resonMsg.append("Err25:法人姓名为空 ");
}
}
supplement.setFailReason(resonMsg.toString());
return flag;
}
public static String parseGender(String cid) {
String gender = null;
char c = cid.charAt(cid.length() - 2);
int sex = Integer.parseInt(String.valueOf(c));
if (sex % 2 == 0) {
gender = "2";
} else {
gender = "1";
}
return gender;
}
/**
* List数据拆分
*
* @param sourceList
* @param size 指定大小
* @return
*/
public static List<List<SupplementEntity>> splitList(List<SupplementEntity> sourceList, int size) {
List<List<SupplementEntity>> listArr = new ArrayList<List<SupplementEntity>>();
//获取被拆分的数组个数
int arrSize = sourceList.size() % size == 0 ? sourceList.size() / size : sourceList.size() / size + 1;
for (int i = 0; i < arrSize; i++) {
List<SupplementEntity> sub = new ArrayList<SupplementEntity>();
//把指定索引数据放入到list中
for (int j = i * size; j <= size * (i + 1) - 1; j++) {
if (j <= sourceList.size() - 1) {
sub.add(sourceList.get(j));
}
}
listArr.add(sub);
}
return listArr;
}
public static void main(String[] args) {
List<SupplementEntity> supplementList = new ArrayList<>();
for (int i = 0; i < 9878; i++) {
SupplementEntity supplement = new SupplementEntity();
supplement.setImplName(String.valueOf("Test-" + i));
supplementList.add(supplement);
}
Long a = System.currentTimeMillis();
List<List<SupplementEntity>> aar = splitList(supplementList, 1000);
System.out.println(System.currentTimeMillis() - a);
System.out.println(aar);
}
}
package com.mortals.xhx.common.utils;
/**
* @author wxy
*/
public class SnowFlakeUtil {
private long workerId;
private long dataCenterId;
private long sequence = 0L;
private long workerIdBits = 5L;
private long dataCenterIdBits = 5L;
private long sequenceBits = 12L;
private long workerIdShift = sequenceBits;
private long dataCenterIdShift = sequenceBits + workerIdBits;
private long timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits;
private long sequenceMask = ~(-1L << sequenceBits);
private long lastTimestamp = -1L;
private static SnowFlakeUtil snowFlakeInstance=null;
public SnowFlakeUtil() {
this(0L, 0L);
}
public SnowFlakeUtil(long workerId, long dataCenterId) {
long maxWorkerId = ~(-1L << workerIdBits);
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
}
long maxDatacenterId = ~(-1L << dataCenterIdBits);
if (dataCenterId > maxDatacenterId || dataCenterId < 0) {
throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
}
this.workerId = workerId;
this.dataCenterId = dataCenterId;
}
// private static class IdGenHolder {
// private static final SnowFlakeUtil INSTANCE = new SnowFlakeUtil();
// }
public static SnowFlakeUtil get() {
// //避免单例模式在懒汉模式使用,造成ID重复
if(snowFlakeInstance == null){
synchronized (SnowFlakeUtil.class){
if(snowFlakeInstance == null){
snowFlakeInstance = new SnowFlakeUtil();
}
}
}
return snowFlakeInstance;
}
/**
* 获取全局唯一编码
*/
public static String getId() {
long id = SnowFlakeUtil.get().nextId();
return Long.toString(id);
}
//线程安全的id生成方法
@SuppressWarnings("all")
public synchronized long nextId() {
//获取当前毫秒数
long timestamp = timeGen();
//如果服务器时间有问题(时钟后退) 报错。
if (timestamp < lastTimestamp) {
throw new RuntimeException(String.format(
"Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
}
//如果上次生成时间和当前时间相同,在同一毫秒内
if (lastTimestamp == timestamp) {
//sequence自增,因为sequence只有12bit,所以和sequenceMask相与一下,去掉高位
sequence = (sequence + 1) & sequenceMask;
//判断是否溢出,也就是每毫秒内超过4095,当为4096时,与sequenceMask相与,sequence就等于0
if (sequence == 0) {
//自旋等待到下一毫秒
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = timestamp;
long twepoch = 1111166465631L;
return ((timestamp - twepoch) << timestampLeftShift)
| (dataCenterId << dataCenterIdShift)
| (workerId << workerIdShift)
| sequence;
}
protected long tilNextMillis(long lastTimestamp) {
long timestamp = timeGen();
while (timestamp <= lastTimestamp) {
timestamp = timeGen();
}
return timestamp;
}
protected long timeGen() {
return System.currentTimeMillis();
}
}
package com.mortals.xhx.modules.implementlist.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.modules.implementlist.model.ImplementlistEntity;
/**
* <p>Title: 实施清单主表</p>
* <p>Description: ImplementlistDao DAO接口 </p>
* @author
* @version 1.0.0
*/
public interface ImplementlistDao extends ICRUDDao<ImplementlistEntity,Long> {
}
package com.mortals.xhx.modules.implementlist.dao.ibatis;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import com.mortals.xhx.modules.implementlist.dao.ImplementlistDao;
import com.mortals.xhx.modules.implementlist.model.ImplementlistEntity;
import org.springframework.stereotype.Repository;
/**
* <p>Title: 实施清单主表</p>
* <p>Description: ImplementlistDaoImpl DAO接口 </p>
* @author
* @version 1.0.0
*/
@Repository("implementlistDao")
public class ImplementlistDaoImpl extends BaseCRUDDaoMybatis<ImplementlistEntity,Long> implements ImplementlistDao {
}
package com.mortals.xhx.modules.implementlist.service;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.modules.implementlist.model.ImplementlistEntity;
/**
* <p>Title: 实施清单主表</p>
* <p>Description: ImplementlistService service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* @version 1.0.0
*/
public interface ImplementlistService extends ICRUDService<ImplementlistEntity,Long> {
}
\ No newline at end of file
package com.mortals.xhx.modules.implementlist.service.impl;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.xhx.modules.implementlist.dao.ImplementlistDao;
import com.mortals.xhx.modules.implementlist.model.ImplementlistEntity;
import com.mortals.xhx.modules.implementlist.service.ImplementlistService;
import org.springframework.stereotype.Service;
/**
* <p>Title: 实施清单主表</p>
* <p>Description: ImplementlistService service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* @version 1.0.0
*/
@Service("implementlistService")
public class ImplementlistServiceImpl extends AbstractCRUDServiceImpl<ImplementlistDao, ImplementlistEntity, Long> implements ImplementlistService {
}
\ No newline at end of file
package com.mortals.xhx.modules.implementlist.web;
import com.mortals.xhx.modules.implementlist.model.ImplementlistEntity;
import com.mortals.xhx.modules.implementlist.service.ImplementlistService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
/**
* <p>Title: 实施清单主表</p>
* <p>Description: ImplementlistController </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author zxfei
* @version 1.0.0
*/
@RestController
@RequestMapping("implementlist")
public class ImplementlistController extends BaseCRUDJsonMappingController<ImplementlistService,ImplementlistForm, ImplementlistEntity,Long> {
public ImplementlistController(){
super.setFormClass(ImplementlistForm.class);
super.setModuleDesc("实施清单主表");
}
}
\ No newline at end of file
package com.mortals.xhx.modules.implementlist.web;
import com.mortals.framework.web.BaseCRUDFormLong;
import com.mortals.xhx.modules.implementlist.model.ImplementlistEntity;
import com.mortals.xhx.modules.implementlist.model.ImplementlistQuery;
/**
* <p>Title: 实施清单主表</p>
* <p>Description: ImplementlistForm </p>
* @author
* @version 1.0.0
*/
public class ImplementlistForm extends BaseCRUDFormLong<ImplementlistEntity> {
private ImplementlistEntity implementlist = new ImplementlistEntity();
private ImplementlistQuery query = new ImplementlistQuery();
public ImplementlistForm(){
}
@Override
public ImplementlistEntity getEntity() {
return implementlist;
}
public ImplementlistEntity getImplementlist() {
return implementlist;
}
public void setImplementlist(ImplementlistEntity implementlist) {
this.implementlist = implementlist;
}
@Override
public ImplementlistQuery getQuery() {
return query;
}
public void setQuery(ImplementlistQuery query) {
this.query = query;
}
}
\ No newline at end of file
package com.mortals.xhx.office.dao; package com.mortals.xhx.modules.information.dao;
import com.mortals.framework.dao.ICRUDSubmeterDao; import com.mortals.framework.dao.ICRUDSubmeterDao;
import com.mortals.xhx.office.model.InformationEntity; import com.mortals.xhx.modules.information.model.InformationEntity;
import com.mortals.xhx.modules.supplement.model.SupplementEntity;
import java.util.List;
/** /**
* <p>Title: 办件信息</p> * <p>Title: 办件信息</p>
...@@ -10,5 +13,5 @@ import com.mortals.xhx.office.model.InformationEntity; ...@@ -10,5 +13,5 @@ import com.mortals.xhx.office.model.InformationEntity;
* @version 1.0.0 * @version 1.0.0
*/ */
public interface InformationDao extends ICRUDSubmeterDao<InformationEntity,Long>{ public interface InformationDao extends ICRUDSubmeterDao<InformationEntity,Long>{
List<SupplementEntity> queryListForSupplementEntityList();
} }
package com.mortals.xhx.office.dao.ibatis; package com.mortals.xhx.modules.information.dao.ibatis;
import com.mortals.xhx.office.dao.InformationDao; import com.mortals.xhx.modules.information.dao.InformationDao;
import com.mortals.xhx.office.model.InformationEntity; import com.mortals.xhx.modules.information.model.InformationEntity;
import com.mortals.xhx.modules.supplement.model.SupplementEntity;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.mortals.framework.dao.ibatis.SubmeterDaoImpl; import com.mortals.framework.dao.ibatis.SubmeterDaoImpl;
import com.mortals.framework.model.TableParam; import com.mortals.framework.model.TableParam;
import com.mortals.framework.model.TableStrategy; import com.mortals.framework.model.TableStrategy;
import java.util.List;
/** /**
* <p>Title: 办件信息</p> * <p>Title: 办件信息</p>
* <p>Description: InformationDaoImpl DAO接口 </p> * <p>Description: InformationDaoImpl DAO接口 </p>
* @author *
* @version 1.0.0 * @author
*/ * @version 1.0.0
*/
@Repository("informationDao") @Repository("informationDao")
public class InformationDaoImpl extends SubmeterDaoImpl<InformationEntity,Long> implements InformationDao { public class InformationDaoImpl extends SubmeterDaoImpl<InformationEntity, Long> implements InformationDao {
@Override @Override
protected TableStrategy getTableStrategy() protected TableStrategy getTableStrategy() {
{
return new TableStrategy("mortals_iot_zd_information_${unionTime}", TableStrategy.STRATEGY_BY_MONTH); return new TableStrategy("mortals_iot_zd_information_${unionTime}", TableStrategy.STRATEGY_BY_MONTH);
} }
@Override @Override
public TableParam getTableParam(InformationEntity entity) public TableParam getTableParam(InformationEntity entity) {
{
TableParam param = new TableParam(); TableParam param = new TableParam();
return param; return param;
} }
@Override
public List<SupplementEntity> queryListForSupplementEntityList() {
return getSqlSession().selectList(getSqlId("queryList"), null);
}
} }
package com.mortals.xhx.modules.information.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.mortals.xhx.common.utils.SnowFlakeUtil;
import com.mortals.xhx.modules.supplement.dao.SupplementDao;
import com.mortals.xhx.modules.supplement.model.SupplementEntity;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* @author Wz
* @Date: 2021-07-2021/7/30-15:06
* @Description:
*/
@Slf4j
public class InformationDataConversionListener extends AnalysisEventListener<SupplementEntity> {
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 3000;
/**
* 这个集合用于接收 读取Excel文件得到的数据
*/
List<SupplementEntity> entityList=new ArrayList<SupplementEntity>();
private SupplementDao supplementDao;
public InformationDataConversionListener(SupplementDao supplementDao){
this.supplementDao=supplementDao;
}
@Override
public void invoke(SupplementEntity supplementEntity, AnalysisContext analysisContext) {
//调用方法生成临时表,在数据清洗后删除临时表
supplementEntity.setId(SnowFlakeUtil.get().nextId());
entityList.add(supplementEntity);
//达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (entityList.size() >= BATCH_COUNT) {
supplementDao.insertBatch(entityList);
//存储完成清理list
entityList.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
supplementDao.insertBatch(entityList);
log.info("=======Excel文件<<>>导入成功===========");
}
}
package com.mortals.xhx.modules.information.model;
import lombok.Data;
/**
* @author Wz
* @Date: 2021-08-2021/8/3-16:50
* @Description:省能力平台接口调用返回统一格式
*/
@Data
public class EgIfResult {
private String ifResult;
private String ifResultInfo;
private String code;
}
package com.mortals.xhx.office.service; package com.mortals.xhx.modules.information.service;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.office.model.InformationEntity; import com.mortals.xhx.modules.information.model.InformationEntity;
/** /**
* <p>Title: 办件信息</p> * <p>Title: 办件信息</p>
......
package com.mortals.xhx.office.service.impl; package com.mortals.xhx.modules.information.service.impl;
import com.mortals.xhx.office.dao.InformationDao;
import com.mortals.xhx.office.model.InformationEntity;
import com.mortals.xhx.office.service.InformationService;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.xhx.modules.information.dao.InformationDao;
import com.mortals.xhx.modules.information.model.InformationEntity;
import com.mortals.xhx.modules.information.service.InformationService;
import org.springframework.stereotype.Service;
/** /**
* <p>Title: 办件信息</p> * <p>Title: 办件信息</p>
......
package com.mortals.xhx.modules.information.task;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService;
import com.mortals.xhx.common.code.NodeTypeEnum;
import com.mortals.xhx.modules.information.model.EgIfResult;
import com.mortals.xhx.modules.information.model.InformationEntity;
import com.mortals.xhx.modules.information.service.InformationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Wz
* @Date: 2021-08-2021/8/3-16:28
* @Description:办件数据推送省一体化平台(申请并受理)
*/
@Slf4j
@Component("applyAndAcceptInformationTaskImpl")
public class ApplyAndAcceptInformationTaskImpl implements ITaskExcuteService {
@Autowired
private InformationService informationService;
@Override
public void excuteTask(ITask task) throws AppException {
//组装申请并受理数据推送一体化平台
this.applyAndAccept();
}
@Override
public void stopTask(ITask task) throws AppException {
}
private void applyAndAccept(){
InformationEntity informationEntity = new InformationEntity();
informationEntity.setNodeType(NodeTypeEnum.受理.getCode());
//查询转化表的数据
List<InformationEntity> informationEntities = informationService.find(informationEntity, null);
if (informationEntities.size() > 0){
informationEntities.forEach(e->{
Map<String, Object> dataMap = new HashMap<>(16);
dataMap.put("operateType", "1");
HashMap<String, Object> targetConditionDefMap = new HashMap<>(16);
targetConditionDefMap.put("provinceAreaCode", "510000000000");
targetConditionDefMap.put("deptCode", e.getDeptCode());
targetConditionDefMap.put("areaCode", e.getAreaCode());
dataMap.put("targetConditionDef", targetConditionDefMap);
HashMap<String, Object> baseInfoMap = new HashMap<>(16);
baseInfoMap.put("reCode", e.getEventCode());
baseInfoMap.put("bizStatus", e.getBizStatus());
baseInfoMap.put("sysCode", e.getBizStatus());
dataMap.put("baseInfo", baseInfoMap);
HashMap<String, Object> valueMap = new HashMap<>(16);
HashMap<String, Object> infoMap = new HashMap<>(16);
infoMap.put("affairName", e.getAffairName());
infoMap.put("eventCode", e.getEventCode());
infoMap.put("applyType", e.getApplyType());
infoMap.put("bizStatus", e.getBizStatus());
infoMap.put("doThingProperty", e.getDoThingProperty());
infoMap.put("isCharge", e.getIsCharge());
infoMap.put("applyNum", e.getApplyNum());
infoMap.put("applicantType", e.getApplicantAttributes());
infoMap.put("cardType", e.getApplicantCardType());
infoMap.put("applicantIdCard", e.getApplicantCardNumbe());
infoMap.put("applicantName", e.getApplicantName());
infoMap.put("applicantAddress", "地址不详,未提供");
infoMap.put("applicantPhone", e.getApplicantPhoneNumber());
infoMap.put("applicantSex", e.getApplicantSex());
infoMap.put("contactName", e.getContactName());
infoMap.put("contactSex", e.getApplicantSex());
infoMap.put("contactIdCard", e.getContactIdCard());
infoMap.put("contactCardType", e.getContactCardType());
infoMap.put("contactPhone", e.getContactPhone());
HashMap<String, Object> rlogisticsinfoMap = new HashMap<>(16);
rlogisticsinfoMap.put("pickupType", e.getPickupType());
infoMap.put("rlogisticsinfo", rlogisticsinfoMap);
HashMap<String, Object> rprojectruntaskMap = new HashMap<>(16);
rprojectruntaskMap.put("nodeType", e.getNodeType());
rprojectruntaskMap.put("addUserId", e.getAddUserId());
rprojectruntaskMap.put("curHandlerName", StringUtils.isEmpty(e.getCurHandlerName())?"公安厅":e.getCurHandlerName());
rprojectruntaskMap.put("auditAdvice", e.getAuditAdvice());
rprojectruntaskMap.put("auditRemark", e.getAuditRemark());
rprojectruntaskMap.put("genTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getGenTime()));
rprojectruntaskMap.put("completeTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getCompleteTime()));
valueMap.put("rprojectsl", infoMap);
valueMap.put("rprojectruntask", rprojectruntaskMap);
dataMap.put("value", valueMap);
try {
String post = HttpUtil.post("", dataMap);
EgIfResult egIfResult = JSON.parseObject(post, EgIfResult.class);
if ("200".equals(egIfResult.getCode())){
e.setIsReport("1");
e.setIsSuccess("1");
e.setOfficeCode(egIfResult.getIfResultInfo());
e.setBizStatus(NodeTypeEnum.审查.getDesc());
e.setNodeType(NodeTypeEnum.审查.getCode());
e.setProcessStatusName("审查");
informationService.update(e,null);
log.info("推送一体化成功,办件编码:"+egIfResult.getIfResultInfo());
}else {
e.setFailTimes(e.getFailTimes() + 1);
e.setFailReason(egIfResult.getIfResultInfo());
informationService.update(e,null);
log.info("省一体化数据推送失败:" + egIfResult.getIfResultInfo());
}
}catch (Exception ex){
log.info("省一体化数据推送失败:连接异常");
}
});
}else {
log.info("没有从办件表中获取到特定数据");
}
}
}
package com.mortals.xhx.modules.information.task;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService;
import com.mortals.xhx.common.code.NodeTypeEnum;
import com.mortals.xhx.modules.information.model.EgIfResult;
import com.mortals.xhx.modules.information.model.InformationEntity;
import com.mortals.xhx.modules.information.service.InformationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Wz
* @Date: 2021-08-2021/8/3-16:28
* @Description:办件数据推送省一体化平台(决定)
*/
@Slf4j
@Component("decideInformationTaskImpl")
public class DecideInformationTaskImpl implements ITaskExcuteService {
@Autowired
private InformationService informationService;
@Override
public void excuteTask(ITask task) throws AppException {
//组装决定数据推送一体化平台
this.decideData();
}
@Override
public void stopTask(ITask task) throws AppException {
}
private void decideData(){
InformationEntity informationEntity = new InformationEntity();
informationEntity.setNodeType(NodeTypeEnum.决定.getCode());
//查询转化表的数据
List<InformationEntity> informationEntities = informationService.find(informationEntity, null);
if (informationEntities.size() > 0){
informationEntities.forEach(e->{
HashMap<String, Object> dataMap = new HashMap<>(16);
dataMap.put("operateType", "1");
HashMap<String, Object> targetConditionDefMap = new HashMap<>(16);
targetConditionDefMap.put("provinceAreaCode", "510000000000");
targetConditionDefMap.put("deptCode", e.getDeptCode());
targetConditionDefMap.put("areaCode", e.getAreaCode());
dataMap.put("targetConditionDef", targetConditionDefMap);
HashMap<String, Object> baseInfoMap = new HashMap<>(16);
baseInfoMap.put("reCode", e.getEventCode());
baseInfoMap.put("code", e.getOfficeCode());
baseInfoMap.put("sysCode", "000L");
baseInfoMap.put("bizStatus", e.getBizStatus());
dataMap.put("baseInfo", baseInfoMap);
HashMap<String, Object> valueMap = new HashMap<>(16);
HashMap<String, Object> rlogisticsinfoMap = new HashMap<>(16);
rlogisticsinfoMap.put("nodeType", e.getNodeType());
rlogisticsinfoMap.put("addUserId", "-1");
rlogisticsinfoMap.put("curHandlerName", e.getCurHandlerName());
rlogisticsinfoMap.put("auditAdvice", "1");
rlogisticsinfoMap.put("auditRemark", "同意");
rlogisticsinfoMap.put("genTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getGenTime()));
rlogisticsinfoMap.put("completeTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getCompleteTime()));
valueMap.put("rprojectruntask", rlogisticsinfoMap);
dataMap.put("value", valueMap);
try {
String post = HttpUtil.post("", dataMap);
EgIfResult egIfResult = JSON.parseObject(post, EgIfResult.class);
if ("200".equals(egIfResult.getCode())){
e.setBizStatus(NodeTypeEnum.办结.getDesc());
e.setNodeType(NodeTypeEnum.办结.getCode());
e.setProcessStatusName("办结");
informationService.update(e,null);
log.info("推送一体化成功,办件编码:"+egIfResult.getIfResultInfo());
}else {
e.setFailTimes(e.getFailTimes() + 1);
e.setFailReason(egIfResult.getIfResultInfo());
informationService.update(e,null);
log.info("省一体化数据推送失败:" + egIfResult.getIfResultInfo());
}
}catch (Exception ex){
log.info("省一体化数据推送失败:连接异常");
}
});
}else {
log.info("没有从办件表中获取到特定数据");
}
}
}
package com.mortals.xhx.office.web; package com.mortals.xhx.modules.information.web;
import com.mortals.framework.web.BaseCRUDFormLong; import com.mortals.framework.web.BaseCRUDFormLong;
import com.mortals.xhx.office.model.InformationEntity; import com.mortals.xhx.modules.information.model.InformationEntity;
import com.mortals.xhx.office.model.InformationQuery; import com.mortals.xhx.modules.information.model.InformationQuery;
/** /**
* <p>Title: 办件信息</p> * <p>Title: 办件信息</p>
......
package com.mortals.xhx.records.dao; package com.mortals.xhx.modules.records.dao;
import com.mortals.framework.dao.ICRUDSubmeterDao; import com.mortals.framework.dao.ICRUDSubmeterDao;
import com.mortals.xhx.records.model.RecordEntity; import com.mortals.xhx.modules.records.model.RecordEntity;
/** /**
* <p>Title: 接口调用记录</p> * <p>Title: 接口调用记录</p>
......
package com.mortals.xhx.records.dao.ibatis; package com.mortals.xhx.modules.records.dao.ibatis;
import com.mortals.xhx.records.dao.RecordDao; import com.mortals.xhx.modules.records.dao.RecordDao;
import com.mortals.xhx.records.model.RecordEntity; import com.mortals.xhx.modules.records.model.RecordEntity;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.mortals.framework.dao.ibatis.SubmeterDaoImpl; import com.mortals.framework.dao.ibatis.SubmeterDaoImpl;
import com.mortals.framework.model.TableParam; import com.mortals.framework.model.TableParam;
......
package com.mortals.xhx.records.model; package com.mortals.xhx.modules.records.model;
import java.util.Date; import java.util.Date;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
......
package com.mortals.xhx.records.model; package com.mortals.xhx.modules.records.model;
import java.util.List; import java.util.List;
import java.util.Date;
/** /**
* *
......
package com.mortals.xhx.records.service; package com.mortals.xhx.modules.records.service;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.records.model.RecordEntity; import com.mortals.xhx.modules.records.model.RecordEntity;
/** /**
* <p>Title: 接口调用记录</p> * <p>Title: 接口调用记录</p>
......
...@@ -18,7 +18,7 @@ spring: ...@@ -18,7 +18,7 @@ spring:
discovery: discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址 server-addr: 127.0.0.1:8848 # Nacos 服务器地址
group: DEFAULT_GROUP group: DEFAULT_GROUP
namespace: 342d427e-a226-4ade-8963-b38353acecc7 namespace: 00d2fea1-874c-42cf-bf70-df75db75800a
config: config:
server-addr: ${spring.cloud.nacos.discovery.server-addr} # Nacos 服务器地址 server-addr: ${spring.cloud.nacos.discovery.server-addr} # Nacos 服务器地址
group: ${spring.cloud.nacos.discovery.group} group: ${spring.cloud.nacos.discovery.group}
......
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