Commit fdc10cb4 authored by huangjie's avatar huangjie

Merge branch 'zuhuduan' of http://192.168.60.201/root/dsk-operate-sys into zuhuduan

parents 9d91a9fe e7ac6f01
package com.dsk.common.annotation;
import com.dsk.common.utils.poi.ExcelHandlerAdapter;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
/**
* 自定义导出Excel数据注解
*
* @author dsk
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel
{
/**
* 导出时在excel中排序
*/
public int sort() default Integer.MAX_VALUE;
/**
* 导出到Excel中的名字.
*/
public String name() default "";
/**
* 日期格式, 如: yyyy-MM-dd
*/
public String dateFormat() default "";
/**
* 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
*/
public String dictType() default "";
/**
* 读取内容转表达式 (如: 0=男,1=女,2=未知)
*/
public String readConverterExp() default "";
/**
* 分隔符,读取字符串组内容
*/
public String separator() default ",";
/**
* BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
*/
public int scale() default -1;
/**
* BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
*/
public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
/**
* 导出时在excel中每个列的高度 单位为字符
*/
public double height() default 14;
/**
* 导出时在excel中每个列的宽 单位为字符
*/
public double width() default 16;
/**
* 文字后缀,如% 90 变成90%
*/
public String suffix() default "";
/**
* 当值为空时,字段的默认值
*/
public String defaultValue() default "";
/**
* 提示信息
*/
public String prompt() default "";
/**
* 设置只能选择不能输入的列内容.
*/
public String[] combo() default {};
/**
* 是否需要纵向合并单元格,应对需求:含有list集合单元格)
*/
public boolean needMerge() default false;
/**
* 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
*/
public boolean isExport() default true;
/**
* 另一个类中的属性名称,支持多级获取,以小数点隔开
*/
public String targetAttr() default "";
/**
* 是否自动统计数据,在最后追加一行统计数据总和
*/
public boolean isStatistics() default false;
/**
* 导出类型(0数字 1字符串 2图片)
*/
public ColumnType cellType() default ColumnType.STRING;
/**
* 导出列头背景色
*/
public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT;
/**
* 导出列头字体颜色
*/
public IndexedColors headerColor() default IndexedColors.WHITE;
/**
* 导出单元格背景色
*/
public IndexedColors backgroundColor() default IndexedColors.WHITE;
/**
* 导出单元格字体颜色
*/
public IndexedColors color() default IndexedColors.BLACK;
/**
* 导出字段对齐方式
*/
public HorizontalAlignment align() default HorizontalAlignment.CENTER;
/**
* 自定义数据处理器
*/
public Class<?> handler() default ExcelHandlerAdapter.class;
/**
* 自定义数据处理器参数
*/
public String[] args() default {};
/**
* 字段类型(0:导出导入;1:仅导出;2:仅导入)
*/
Type type() default Type.ALL;
public enum Type
{
ALL(0), EXPORT(1), IMPORT(2);
private final int value;
Type(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
public enum ColumnType
{
NUMERIC(0), STRING(1), IMAGE(2);
private final int value;
ColumnType(int value)
{
this.value = value;
}
public int value()
{
return this.value;
}
}
}
package com.dsk.common.utils;
import com.dsk.common.constant.CacheConstants;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.utils.redis.RedisUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.util.Collection;
import java.util.List;
/**
* 字典工具类
*
* @author dsk
*/
public class DictUtils
{
/**
* 分隔符
*/
public static final String SEPARATOR = ",";
/**
* 设置字典缓存
*
* @param key 参数键
* @param dictDatas 字典数据列表
*/
public static void setDictCache(String key, List<SysDictData> dictDatas)
{
RedisUtils.setCacheObject(getCacheKey(key), dictDatas);
}
/**
* 获取字典缓存
*
* @param key 参数键
* @return dictDatas 字典数据列表
*/
public static List<SysDictData> getDictCache(String key)
{
Object arrayCache = RedisUtils.getCacheObject(getCacheKey(key));
if (!ObjectUtils.isEmpty(arrayCache))
{
return (List<SysDictData>)arrayCache;
}
return null;
}
/**
* 根据字典类型和字典值获取字典标签
*
* @param dictType 字典类型
* @param dictValue 字典值
* @return 字典标签
*/
public static String getDictLabel(String dictType, String dictValue)
{
return getDictLabel(dictType, dictValue, SEPARATOR);
}
/**
* 根据字典类型和字典标签获取字典值
*
* @param dictType 字典类型
* @param dictLabel 字典标签
* @return 字典值
*/
public static String getDictValue(String dictType, String dictLabel)
{
return getDictValue(dictType, dictLabel, SEPARATOR);
}
/**
* 根据字典类型和字典值获取字典标签
*
* @param dictType 字典类型
* @param dictValue 字典值
* @param separator 分隔符
* @return 字典标签
*/
public static String getDictLabel(String dictType, String dictValue, String separator)
{
StringBuilder propertyString = new StringBuilder();
List<SysDictData> datas = getDictCache(dictType);
if (!ObjectUtils.isEmpty(datas))
{
if (StringUtils.containsAny(separator, dictValue))
{
for (SysDictData dict : datas)
{
for (String value : dictValue.split(separator))
{
if (value.equals(dict.getDictValue()))
{
propertyString.append(dict.getDictLabel()).append(separator);
break;
}
}
}
}
else
{
for (SysDictData dict : datas)
{
if (dictValue.equals(dict.getDictValue()))
{
return dict.getDictLabel();
}
}
}
}
return StringUtils.stripEnd(propertyString.toString(), separator);
}
/**
* 根据字典类型和字典标签获取字典值
*
* @param dictType 字典类型
* @param dictLabel 字典标签
* @param separator 分隔符
* @return 字典值
*/
public static String getDictValue(String dictType, String dictLabel, String separator)
{
StringBuilder propertyString = new StringBuilder();
List<SysDictData> datas = getDictCache(dictType);
if (StringUtils.containsAny(separator, dictLabel) && CollectionUtils.isNotEmpty(datas))
{
for (SysDictData dict : datas)
{
for (String label : dictLabel.split(separator))
{
if (label.equals(dict.getDictLabel()))
{
propertyString.append(dict.getDictValue()).append(separator);
break;
}
}
}
}
else
{
for (SysDictData dict : datas)
{
if (dictLabel.equals(dict.getDictLabel()))
{
return dict.getDictValue();
}
}
}
return StringUtils.stripEnd(propertyString.toString(), separator);
}
/**
* 删除指定字典缓存
*
* @param key 字典键
*/
public static void removeDictCache(String key)
{
RedisUtils.deleteObject(getCacheKey(key));
}
/**
* 清空字典缓存
*/
public static void clearDictCache()
{
Collection<String> keys = RedisUtils.keys(CacheConstants.SYS_DICT_KEY + "*");
RedisUtils.deleteObject(keys);
}
/**
* 设置cache key
*
* @param configKey 参数键
* @return 缓存键key
*/
public static String getCacheKey(String configKey)
{
return CacheConstants.SYS_DICT_KEY + configKey;
}
}
......@@ -5,7 +5,6 @@ import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -39,7 +38,7 @@ public class DingTalkUtil {
* @param content 通知内容
*/
public static void sendDingTalkMsg(String content) {
sendDingTalkMsg(true, null, content);
sendDingTalkMsg(false, null, content);
}
/**
......@@ -77,9 +76,4 @@ public class DingTalkUtil {
log.error("发送钉钉消息异常", e);
}
}
public static void main(String[] args) {
// sendDingTalkMsg("服务通知:测试消息");
sendDingTalkMsg(Collections.singletonList("4008123123"), "央企数字化经营系统如期上线::xxxxxx");
}
}
package com.dsk.common.utils.file;
import com.dsk.common.utils.StringUtils;
import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
/**
* 图片处理工具类
*
* @author dsk
*/
public class ImageUtils
{
private static final Logger log = LoggerFactory.getLogger(ImageUtils.class);
public static byte[] getImage(String imagePath)
{
InputStream is = getFile(imagePath);
try
{
return IOUtils.toByteArray(is);
}
catch (Exception e)
{
log.error("图片加载异常 {}", e);
return null;
}
finally
{
IOUtils.closeQuietly(is);
}
}
public static InputStream getFile(String imagePath)
{
try
{
byte[] result = readFile(imagePath);
result = Arrays.copyOf(result, result.length);
return new ByteArrayInputStream(result);
}
catch (Exception e)
{
log.error("获取图片异常 {}", e);
}
return null;
}
/**
* 读取文件为字节数据
*
* @param url 地址
* @return 字节数据
*/
public static byte[] readFile(String url)
{
InputStream in = null;
try
{
if (url.startsWith("http"))
{
// 网络地址
URL urlObj = new URL(url);
URLConnection urlConnection = urlObj.openConnection();
urlConnection.setConnectTimeout(30 * 1000);
urlConnection.setReadTimeout(60 * 1000);
urlConnection.setDoInput(true);
in = urlConnection.getInputStream();
}
else
{
// 本机地址
String localPath = FileUploadUtils.getDefaultBaseDir();
String downloadPath = localPath + StringUtils.substringAfter(url, "/profile");
in = new FileInputStream(downloadPath);
}
return IOUtils.toByteArray(in);
}
catch (Exception e)
{
log.error("获取文件路径异常 {}", e);
return null;
}
finally
{
IOUtils.closeQuietly(in);
}
}
}
package com.dsk.common.utils.poi;
/**
* Excel数据格式处理适配器
*
* @author dsk
*/
public interface ExcelHandlerAdapter
{
/**
* 格式化
*
* @param value 单元格数据值
* @param args excel注解args参数组
*
* @return 处理后的值
*/
Object format(Object value, String[] args);
}
......@@ -3,7 +3,6 @@ package com.dsk.biz.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
......@@ -16,12 +15,12 @@ import java.util.Date;
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("customer")
public class Customer implements Serializable {
private static final long serialVersionUID = 824383302173350532L;
@TableId(value = "customer_id",type = IdType.ASSIGN_UUID)
@TableId(value = "customer_id", type = IdType.ASSIGN_UUID)
private String customerId;
/**
* jsk企业id
......@@ -128,14 +127,16 @@ public class Customer implements Serializable {
*/
private String tenantId;
@TableField(fill = FieldFill.INSERT)
private Long createId;
@TableField(fill = FieldFill.INSERT)
@TableField(exist = false)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateId;
@TableField(fill = FieldFill.INSERT_UPDATE)
@TableField(exist = false)
private Date updateTime;
......
package com.dsk.biz.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
......@@ -38,10 +39,12 @@ public class CustomerFollowRecord implements Serializable {
/**
* 拜访时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date visitTime;
/**
* 下次拜访时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date nextVisitTime;
/**
* 拜访对象姓名
......@@ -56,7 +59,7 @@ public class CustomerFollowRecord implements Serializable {
*/
private String content;
@TableField(fill = FieldFill.INSERT)
@TableField(exist = false)
private Date createTime;
......
......@@ -37,12 +37,12 @@ public class CustomerUser implements Serializable {
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@TableField(exist = false)
private Date createTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@TableField(exist = false)
private Date updateTime;
public CustomerUser(String customerId, Long userId) {
......
......@@ -15,7 +15,7 @@ import java.util.List;
* @author lxl
* @date 2023-05-17
*/
public interface BusinessRelateCompanyMapper extends BaseMapperPlus<BusinessRelateCompany,BusinessRelateCompany,BusinessRelateCompany>
public interface BusinessRelateCompanyMapper extends BaseMapperPlus<BusinessRelateCompanyMapper,BusinessRelateCompany,BusinessRelateCompany>
{
/**
* 查询项目关联单位
......
......@@ -19,7 +19,7 @@ import java.util.List;
* @since 2023-07-25 17:18:05
*/
@Mapper
public interface ContactInfoMapper extends BaseMapperPlus<ContactInfo,ContactInfo,ContactInfo> {
public interface ContactInfoMapper extends BaseMapperPlus<ContactInfoMapper,ContactInfo,ContactInfo> {
Page<ContactInfoListVo> selectPageList(IPage<ContactInfoSearchDto> page , @Param("dto") ContactInfoSearchDto dto);
......
......@@ -22,13 +22,13 @@ import java.util.List;
* @since 2023-05-18 15:07:59
*/
@Mapper
public interface CustomerFollowRecordMapper extends BaseMapperPlus<CustomerFollowRecord,CustomerFollowRecord,CustomerFollowRecord> {
public interface CustomerFollowRecordMapper extends BaseMapperPlus<CustomerFollowRecordMapper, CustomerFollowRecord, CustomerFollowRecord> {
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
List<CustomerFollowRecordListVo> selectAuthList(@Param("page") IPage<CustomerFollowRecordSearchDto> page, @Param("dto")CustomerFollowRecordSearchDto dto);
List<CustomerFollowRecordListVo> selectAuthList(@Param("page") IPage<CustomerFollowRecordSearchDto> page, @Param("dto") CustomerFollowRecordSearchDto dto);
}
package com.dsk.biz.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.biz.domain.Customer;
......@@ -22,7 +23,7 @@ import java.util.Map;
* @since 2023-05-16 09:28:00
*/
@Mapper
public interface CustomerMapper extends BaseMapperPlus<Customer,Customer,Customer> {
public interface CustomerMapper extends BaseMapper<Customer> {
Page<CustomerListVo> selectList(IPage<CustomerSearchDto> page, @Param("dto") CustomerSearchDto dto);
......
package com.dsk.biz.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.biz.domain.CustomerUser;
import com.dsk.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Mapper;
......@@ -13,7 +14,7 @@ import org.apache.ibatis.annotations.Param;
* @since 2023-05-16 09:28:00
*/
@Mapper
public interface CustomerUserMapper extends BaseMapperPlus<CustomerUser,CustomerUser,CustomerUser> {
public interface CustomerUserMapper extends BaseMapper<CustomerUser> {
CustomerUser selectByCustomerIdAndUserId(@Param("customerId") String customerId, @Param("userId") Long userId);
......
package com.dsk.biz.utils;
import cn.hutool.core.convert.Convert;
import com.dsk.common.annotation.Excel;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.exception.UtilException;
import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.DictUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.file.FileTypeUtils;
import com.dsk.common.utils.file.FileUploadUtils;
import com.dsk.common.utils.file.ImageUtils;
import com.dsk.common.utils.poi.ExcelHandlerAdapter;
import com.dsk.common.utils.poi.ExcelUtil;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* Excel相关处理
*
* @author dsk
*/
public class ExcelUtils<T> {
private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class);
public static final String FORMULA_REGEX_STR = "=|-|\\+|@";
public static final String[] FORMULA_STR = {"=", "-", "+", "@"};
/**
* 用于dictType属性数据存储,避免重复查缓存
*/
public Map<String, String> sysDictMap = new HashMap<String, String>();
/**
* Excel sheet最大行数,默认65536
*/
public static final int sheetSize = 65536;
/**
* 工作表名称
*/
private String sheetName;
/**
* 导出类型(EXPORT:导出数据;IMPORT:导入模板)
*/
private Excel.Type type;
/**
* 工作薄对象
*/
private Workbook wb;
/**
* 工作表对象
*/
private Sheet sheet;
/**
* 样式列表
*/
private Map<String, CellStyle> styles;
/**
* 导入导出数据列表
*/
private List<T> list;
/**
* 注解列表
*/
private List<Object[]> fields;
/**
* 当前行号
*/
private int rownum;
/**
* 标题
*/
private String title;
/**
* 导出时间 (是否添加导出时间)
*/
private boolean dateStatus;
/**
* 最大高度
*/
private short maxHeight;
/**
* 合并后最后行数
*/
private int subMergedLastRowNum = 0;
/**
* 合并后开始行数
*/
private int subMergedFirstRowNum = 1;
/**
* 对象的子列表方法
*/
private Method subMethod;
/**
* 对象的子列表属性
*/
private List<Field> subFields;
/**
* 统计列表
*/
private Map<Integer, Double> statistics = new HashMap<Integer, Double>();
/**
* 数字格式
*/
private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00");
/**
* 实体对象
*/
public Class<T> clazz;
/**
* 需要排除列属性
*/
public String[] excludeFields;
public ExcelUtils(Class<T> clazz) {
this.clazz = clazz;
}
/**
* 隐藏Excel中列属性
*
* @param fields 列属性名 示例[单个"name"/多个"id","name"]
* @throws Exception
*/
public void hideColumn(String... fields) {
this.excludeFields = fields;
}
public void init(List<T> list, String sheetName, String title, Excel.Type type, boolean dateStatus) {
if (list == null) {
list = new ArrayList<T>();
}
this.list = list;
this.sheetName = sheetName;
this.type = type;
this.title = title;
this.dateStatus = dateStatus;
createExcelField();
createWorkbook();
createTitle();
createExportDate();
createSubHead();
}
/**
* 创建excel第一行标题
*/
public void createTitle() {
if (StringUtils.isNotEmpty(title)) {
subMergedFirstRowNum++;
subMergedLastRowNum++;
int titleLastCol = this.fields.size() - 1;
if (isSubList()) {
titleLastCol = titleLastCol + subFields.size() - 1;
}
Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0);
titleRow.setHeightInPoints(30);
Cell titleCell = titleRow.createCell(0);
titleCell.setCellStyle(styles.get("title"));
titleCell.setCellValue(title);
sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(), titleLastCol));
}
}
public void createExportDate() {
if (dateStatus) {
subMergedFirstRowNum++;
subMergedLastRowNum++;
int dateLastCol = this.fields.size() - 1;
if (isSubList()) {
dateLastCol = dateLastCol + subFields.size() - 1;
}
Row dateRow = sheet.createRow(rownum);
dateRow.setHeightInPoints(15);
Cell dateCell = dateRow.createCell(0);
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
dateCell.setCellStyle(cellStyle);
dateCell.setCellValue("导出时间:".concat(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS)));
sheet.addMergedRegion(new CellRangeAddress(dateRow.getRowNum(), dateRow.getRowNum(), 0, dateLastCol));
rownum++;
}
}
/**
* 创建对象的子列表名称
*/
public void createSubHead() {
if (isSubList()) {
subMergedFirstRowNum++;
subMergedLastRowNum++;
Row subRow = sheet.createRow(rownum);
int excelNum = 0;
for (Object[] objects : fields) {
Excel attr = (Excel) objects[1];
Cell headCell1 = subRow.createCell(excelNum);
headCell1.setCellValue(attr.name());
headCell1.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor())));
excelNum++;
}
int headFirstRow = excelNum - 1;
int headLastRow = headFirstRow + subFields.size() - 1;
if (headLastRow > headFirstRow) {
sheet.addMergedRegion(new CellRangeAddress(rownum, rownum, headFirstRow, headLastRow));
}
rownum++;
}
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @return 结果
*/
public AjaxResult exportExcel(List<T> list, String sheetName) {
return exportExcel(list, sheetName, StringUtils.EMPTY);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
*/
public AjaxResult exportExcel(List<T> list, String sheetName, String title) {
this.init(list, sheetName, title, Excel.Type.EXPORT, false);
return exportExcel();
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param response 返回数据
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @return 结果
*/
public void exportExcel(HttpServletResponse response, List<T> list, String sheetName) {
exportExcel(response, list, sheetName, StringUtils.EMPTY);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param response 返回数据
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
*/
public void exportExcel(HttpServletResponse response, List<T> list, String sheetName, String title) {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
this.init(list, sheetName, title, Excel.Type.EXPORT, false);
exportExcel(response);
}
public void exportExcel(HttpServletResponse response, List<T> list, String sheetName, String title, boolean dateStatus) {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
this.init(list, sheetName, title, Excel.Type.EXPORT, dateStatus);
exportExcel(response);
}
private static final String FILE_PATH = "D://";
/**
* 本地初始化
*
* @param list 数据列表
* @param sheetName sheet名称
* @param title 标题
* @param dateStatus 是否添加导出时间
* @return
*/
public String localInit( List<T> list, String sheetName, String title, boolean dateStatus) {
String fileName = title + "-" + System.currentTimeMillis() + ".xlsx";
this.init(list, sheetName, title, Excel.Type.EXPORT, dateStatus);
writeSheet();
try (FileOutputStream fileOutputStream = new FileOutputStream(FILE_PATH.concat(fileName))){
wb.write(fileOutputStream);
return fileName;
} catch (Exception e) {
log.error("导出Excel异常{}", e.getMessage());
} finally {
IOUtils.closeQuietly(wb);
}
return null;
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @return 结果
*/
public AjaxResult importTemplateExcel(String sheetName) {
return importTemplateExcel(sheetName, StringUtils.EMPTY);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
*/
public AjaxResult importTemplateExcel(String sheetName, String title) {
this.init(null, sheetName, title, Excel.Type.IMPORT, false);
return exportExcel();
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @return 结果
*/
public void importTemplateExcel(HttpServletResponse response, String sheetName) {
importTemplateExcel(response, sheetName, StringUtils.EMPTY);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @param title 标题
* @return 结果
*/
public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
this.init(null, sheetName, title, Excel.Type.IMPORT, false);
exportExcel(response);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @return 结果
*/
public void exportExcel(HttpServletResponse response) {
try {
writeSheet();
wb.write(response.getOutputStream());
} catch (Exception e) {
log.error("导出Excel异常{}", e.getMessage());
} finally {
IOUtils.closeQuietly(wb);
}
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @return 结果
*/
public AjaxResult exportExcel() {
OutputStream out = null;
try {
writeSheet();
String filename = encodingFilename(sheetName);
out = new FileOutputStream(getAbsoluteFile(filename));
wb.write(out);
return AjaxResult.success(filename);
} catch (Exception e) {
log.error("导出Excel异常{}", e.getMessage());
throw new UtilException("导出Excel失败,请联系网站管理员!");
} finally {
IOUtils.closeQuietly(wb);
IOUtils.closeQuietly(out);
}
}
/**
* 创建写入数据到Sheet
*/
public void writeSheet() {
// 取出一共有多少个sheet.
int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize));
for (int index = 0; index < sheetNo; index++) {
createSheet(sheetNo, index);
// 产生一行
Row row = sheet.createRow(rownum);
int column = 0;
// 写入各个字段的列头名称
for (Object[] os : fields) {
Field field = (Field) os[0];
Excel excel = (Excel) os[1];
if (Collection.class.isAssignableFrom(field.getType())) {
for (Field subField : subFields) {
Excel subExcel = subField.getAnnotation(Excel.class);
this.createHeadCell(subExcel, row, column++);
}
} else {
this.createHeadCell(excel, row, column++);
}
}
if (Excel.Type.EXPORT.equals(type)) {
fillExcelData(index, row);
addStatisticsRow();
}
}
}
/**
* 填充excel数据
*
* @param index 序号
* @param row 单元格行
*/
@SuppressWarnings("unchecked")
public void fillExcelData(int index, Row row) {
int startNo = index * sheetSize;
int endNo = Math.min(startNo + sheetSize, list.size());
int rowNo = (1 + rownum) - startNo;
for (int i = startNo; i < endNo; i++) {
rowNo = isSubList() ? (i > 1 ? rowNo + 1 : rowNo + i) : i + 1 + rownum - startNo;
row = sheet.createRow(rowNo);
// 得到导出对象.
T vo = (T) list.get(i);
Collection<?> subList = null;
if (isSubList()) {
if (isSubListValue(vo)) {
subList = getListCellValue(vo);
subMergedLastRowNum = subMergedLastRowNum + subList.size();
} else {
subMergedFirstRowNum++;
subMergedLastRowNum++;
}
}
int column = 0;
for (Object[] os : fields) {
Field field = (Field) os[0];
Excel excel = (Excel) os[1];
if (Collection.class.isAssignableFrom(field.getType()) && !ObjectUtils.isEmpty(subList)) {
boolean subFirst = false;
for (Object obj : subList) {
if (subFirst) {
rowNo++;
row = sheet.createRow(rowNo);
}
List<Field> subFields = FieldUtils.getFieldsListWithAnnotation(obj.getClass(), Excel.class);
int subIndex = 0;
for (Field subField : subFields) {
if (subField.isAnnotationPresent(Excel.class)) {
subField.setAccessible(true);
Excel attr = subField.getAnnotation(Excel.class);
this.addCell(attr, row, (T) obj, subField, column + subIndex);
}
subIndex++;
}
subFirst = true;
}
this.subMergedFirstRowNum = this.subMergedFirstRowNum + subList.size();
} else {
this.addCell(excel, row, vo, field, column++);
}
}
}
}
/**
* 创建表格样式
*
* @param wb 工作薄对象
* @return 样式列表
*/
private Map<String, CellStyle> createStyles(Workbook wb) {
// 写入各条记录,每条记录对应excel表中的一行
Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
CellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
Font titleFont = wb.createFont();
titleFont.setFontName("Arial");
titleFont.setFontHeightInPoints((short) 16);
titleFont.setBold(true);
style.setFont(titleFont);
styles.put("title", style);
style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setBorderRight(BorderStyle.THIN);
style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderLeft(BorderStyle.THIN);
style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderTop(BorderStyle.THIN);
style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderBottom(BorderStyle.THIN);
style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
Font dataFont = wb.createFont();
dataFont.setFontName("Arial");
dataFont.setFontHeightInPoints((short) 10);
style.setFont(dataFont);
styles.put("data", style);
style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
Font totalFont = wb.createFont();
totalFont.setFontName("Arial");
totalFont.setFontHeightInPoints((short) 10);
style.setFont(totalFont);
styles.put("total", style);
styles.putAll(annotationHeaderStyles(wb, styles));
styles.putAll(annotationDataStyles(wb));
return styles;
}
/**
* 根据Excel注解创建表格头样式
*
* @param wb 工作薄对象
* @return 自定义样式列表
*/
private Map<String, CellStyle> annotationHeaderStyles(Workbook wb, Map<String, CellStyle> styles) {
Map<String, CellStyle> headerStyles = new HashMap<String, CellStyle>();
for (Object[] os : fields) {
Excel excel = (Excel) os[1];
String key = StringUtils.format("header_{}_{}", excel.headerColor(), excel.headerBackgroundColor());
if (!headerStyles.containsKey(key)) {
CellStyle style = wb.createCellStyle();
style.cloneStyleFrom(styles.get("data"));
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setFillForegroundColor(excel.headerBackgroundColor().index);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Font headerFont = wb.createFont();
headerFont.setFontName("Arial");
headerFont.setFontHeightInPoints((short) 10);
headerFont.setBold(true);
headerFont.setColor(excel.headerColor().index);
style.setFont(headerFont);
headerStyles.put(key, style);
}
}
return headerStyles;
}
/**
* 根据Excel注解创建表格列样式
*
* @param wb 工作薄对象
* @return 自定义样式列表
*/
private Map<String, CellStyle> annotationDataStyles(Workbook wb) {
Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
for (Object[] os : fields) {
Excel excel = (Excel) os[1];
String key = StringUtils.format("data_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor());
if (!styles.containsKey(key)) {
CellStyle style = wb.createCellStyle();
style.setAlignment(excel.align());
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setBorderRight(BorderStyle.THIN);
style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderLeft(BorderStyle.THIN);
style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderTop(BorderStyle.THIN);
style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderBottom(BorderStyle.THIN);
style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setFillForegroundColor(excel.backgroundColor().getIndex());
Font dataFont = wb.createFont();
dataFont.setFontName("Arial");
dataFont.setFontHeightInPoints((short) 10);
dataFont.setColor(excel.color().index);
style.setFont(dataFont);
styles.put(key, style);
}
}
return styles;
}
/**
* 创建单元格
*/
public Cell createHeadCell(Excel attr, Row row, int column) {
// 创建列
Cell cell = row.createCell(column);
// 写入列信息
cell.setCellValue(attr.name());
setDataValidation(attr, row, column);
cell.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor())));
if (isSubList()) {
// 填充默认样式,防止合并单元格样式失效
sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor())));
if (attr.needMerge()) {
sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column));
}
}
return cell;
}
/**
* 设置单元格信息
*
* @param value 单元格值
* @param attr 注解相关
* @param cell 单元格信息
*/
public void setCellVo(Object value, Excel attr, Cell cell) {
if (Excel.ColumnType.STRING == attr.cellType()) {
String cellValue = Convert.toStr(value);
// 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
if (StringUtils.startsWithAny(cellValue, FORMULA_STR)) {
cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0");
}
if (value instanceof Collection && StringUtils.equals("[]", cellValue)) {
cellValue = StringUtils.EMPTY;
}
cell.setCellValue(ObjectUtils.isEmpty(cellValue) ? attr.defaultValue() : cellValue + attr.suffix());
} else if (Excel.ColumnType.NUMERIC == attr.cellType()) {
if (!ObjectUtils.isEmpty(value)) {
cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value));
}
} else if (Excel.ColumnType.IMAGE == attr.cellType()) {
ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1);
String imagePath = Convert.toStr(value);
if (StringUtils.isNotEmpty(imagePath)) {
byte[] data = ImageUtils.getImage(imagePath);
getDrawingPatriarch(cell.getSheet()).createPicture(anchor,
cell.getSheet().getWorkbook().addPicture(data, getImageType(data)));
}
}
}
/**
* 获取画布
*/
public static Drawing<?> getDrawingPatriarch(Sheet sheet) {
if (sheet.getDrawingPatriarch() == null) {
sheet.createDrawingPatriarch();
}
return sheet.getDrawingPatriarch();
}
/**
* 获取图片类型,设置图片插入类型
*/
public int getImageType(byte[] value) {
String type = FileTypeUtils.getFileExtendName(value);
if ("JPG".equalsIgnoreCase(type)) {
return Workbook.PICTURE_TYPE_JPEG;
} else if ("PNG".equalsIgnoreCase(type)) {
return Workbook.PICTURE_TYPE_PNG;
}
return Workbook.PICTURE_TYPE_JPEG;
}
/**
* 创建表格样式
*/
public void setDataValidation(Excel attr, Row row, int column) {
if (attr.name().indexOf("注:") >= 0) {
sheet.setColumnWidth(column, 6000);
} else {
// 设置列宽
sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256));
}
if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0) {
if (attr.combo().length > 15 || StringUtils.join(attr.combo()).length() > 255) {
// 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到
setXSSFValidationWithHidden(sheet, attr.combo(), attr.prompt(), 1, 100, column, column);
} else {
// 提示信息或只能选择不能输入的列内容.
setPromptOrValidation(sheet, attr.combo(), attr.prompt(), 1, 100, column, column);
}
}
}
/**
* 添加单元格
*/
public Cell addCell(Excel attr, Row row, T vo, Field field, int column) {
Cell cell = null;
try {
// 设置行高
row.setHeight(maxHeight);
// 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.
if (attr.isExport()) {
// 创建cell
cell = row.createCell(column);
if (isSubListValue(vo) && getListCellValue(vo).size() > 1 && attr.needMerge()) {
CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column);
sheet.addMergedRegion(cellAddress);
}
cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor())));
// 用于读取对象中的属性
Object value = getTargetValue(vo, field, attr);
String dateFormat = attr.dateFormat();
String readConverterExp = attr.readConverterExp();
String separator = attr.separator();
String dictType = attr.dictType();
if (StringUtils.isNotEmpty(dateFormat) && !ObjectUtils.isEmpty(value)) {
cell.setCellValue(parseDateToStr(dateFormat, value));
} else if (StringUtils.isNotEmpty(readConverterExp) && !ObjectUtils.isEmpty(value)) {
cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
} else if (StringUtils.isNotEmpty(dictType) && !ObjectUtils.isEmpty(value)) {
if (!sysDictMap.containsKey(dictType + value)) {
String lable = convertDictByExp(Convert.toStr(value), dictType, separator);
sysDictMap.put(dictType + value, lable);
}
cell.setCellValue(sysDictMap.get(dictType + value));
} else if (value instanceof BigDecimal && -1 != attr.scale()) {
cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue());
} else if (!attr.handler().equals(ExcelHandlerAdapter.class)) {
cell.setCellValue(dataFormatHandlerAdapter(value, attr));
} else {
// 设置列类型
setCellVo(value, attr, cell);
}
addStatisticsData(column, Convert.toStr(value), attr);
}
} catch (Exception e) {
log.error("导出Excel失败{}", e);
}
return cell;
}
/**
* 设置 POI XSSFSheet 单元格提示或选择框
*
* @param sheet 表单
* @param textlist 下拉框显示的内容
* @param promptContent 提示内容
* @param firstRow 开始行
* @param endRow 结束行
* @param firstCol 开始列
* @param endCol 结束列
*/
public void setPromptOrValidation(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow,
int firstCol, int endCol) {
DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = textlist.length > 0 ? helper.createExplicitListConstraint(textlist) : helper.createCustomConstraint("DD1");
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
DataValidation dataValidation = helper.createValidation(constraint, regions);
if (StringUtils.isNotEmpty(promptContent)) {
// 如果设置了提示信息则鼠标放上去提示
dataValidation.createPromptBox("", promptContent);
dataValidation.setShowPromptBox(true);
}
// 处理Excel兼容性问题
if (dataValidation instanceof XSSFDataValidation) {
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setShowErrorBox(true);
} else {
dataValidation.setSuppressDropDownArrow(false);
}
sheet.addValidationData(dataValidation);
}
/**
* 设置某些列的值只能输入预制的数据,显示下拉框(兼容超出一定数量的下拉框).
*
* @param sheet 要设置的sheet.
* @param textlist 下拉框显示的内容
* @param promptContent 提示内容
* @param firstRow 开始行
* @param endRow 结束行
* @param firstCol 开始列
* @param endCol 结束列
*/
public void setXSSFValidationWithHidden(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, int firstCol, int endCol) {
String hideSheetName = "combo_" + firstCol + "_" + endCol;
Sheet hideSheet = wb.createSheet(hideSheetName); // 用于存储 下拉菜单数据
for (int i = 0; i < textlist.length; i++) {
hideSheet.createRow(i).createCell(0).setCellValue(textlist[i]);
}
// 创建名称,可被其他单元格引用
Name name = wb.createName();
name.setNameName(hideSheetName + "_data");
name.setRefersToFormula(hideSheetName + "!$A$1:$A$" + textlist.length);
DataValidationHelper helper = sheet.getDataValidationHelper();
// 加载下拉列表内容
DataValidationConstraint constraint = helper.createFormulaListConstraint(hideSheetName + "_data");
// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// 数据有效性对象
DataValidation dataValidation = helper.createValidation(constraint, regions);
if (StringUtils.isNotEmpty(promptContent)) {
// 如果设置了提示信息则鼠标放上去提示
dataValidation.createPromptBox("", promptContent);
dataValidation.setShowPromptBox(true);
}
// 处理Excel兼容性问题
if (dataValidation instanceof XSSFDataValidation) {
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setShowErrorBox(true);
} else {
dataValidation.setSuppressDropDownArrow(false);
}
sheet.addValidationData(dataValidation);
// 设置hiddenSheet隐藏
wb.setSheetHidden(wb.getSheetIndex(hideSheet), true);
}
/**
* 解析导出值 0=男,1=女,2=未知
*
* @param propertyValue 参数值
* @param converterExp 翻译注解
* @param separator 分隔符
* @return 解析后值
*/
public static String convertByExp(String propertyValue, String converterExp, String separator) {
StringBuilder propertyString = new StringBuilder();
String[] convertSource = converterExp.split(",");
for (String item : convertSource) {
String[] itemArray = item.split("=");
if (StringUtils.containsAny(propertyValue, separator)) {
for (String value : propertyValue.split(separator)) {
if (itemArray[0].equals(value)) {
propertyString.append(itemArray[1] + separator);
break;
}
}
} else {
if (itemArray[0].equals(propertyValue)) {
return itemArray[1];
}
}
}
return StringUtils.stripEnd(propertyString.toString(), separator);
}
/**
* 反向解析值 男=0,女=1,未知=2
*
* @param propertyValue 参数值
* @param converterExp 翻译注解
* @param separator 分隔符
* @return 解析后值
*/
public static String reverseByExp(String propertyValue, String converterExp, String separator) {
StringBuilder propertyString = new StringBuilder();
String[] convertSource = converterExp.split(",");
for (String item : convertSource) {
String[] itemArray = item.split("=");
if (StringUtils.containsAny(propertyValue, separator)) {
for (String value : propertyValue.split(separator)) {
if (itemArray[1].equals(value)) {
propertyString.append(itemArray[0] + separator);
break;
}
}
} else {
if (itemArray[1].equals(propertyValue)) {
return itemArray[0];
}
}
}
return StringUtils.stripEnd(propertyString.toString(), separator);
}
/**
* 解析字典值
*
* @param dictValue 字典值
* @param dictType 字典类型
* @param separator 分隔符
* @return 字典标签
*/
public static String convertDictByExp(String dictValue, String dictType, String separator) {
return DictUtils.getDictLabel(dictType, dictValue, separator);
}
/**
* 反向解析值字典值
*
* @param dictLabel 字典标签
* @param dictType 字典类型
* @param separator 分隔符
* @return 字典值
*/
public static String reverseDictByExp(String dictLabel, String dictType, String separator) {
return DictUtils.getDictValue(dictType, dictLabel, separator);
}
/**
* 数据处理器
*
* @param value 数据值
* @param excel 数据注解
* @return
*/
public String dataFormatHandlerAdapter(Object value, Excel excel) {
try {
Object instance = excel.handler().newInstance();
Method formatMethod = excel.handler().getMethod("format", new Class[]{Object.class, String[].class});
value = formatMethod.invoke(instance, value, excel.args());
} catch (Exception e) {
log.error("不能格式化数据 " + excel.handler(), e.getMessage());
}
return Convert.toStr(value);
}
/**
* 合计统计信息
*/
private void addStatisticsData(Integer index, String text, Excel entity) {
if (entity != null && entity.isStatistics()) {
Double temp = 0D;
if (!statistics.containsKey(index)) {
statistics.put(index, temp);
}
try {
temp = Double.valueOf(text);
} catch (NumberFormatException e) {
}
statistics.put(index, statistics.get(index) + temp);
}
}
/**
* 创建统计行
*/
public void addStatisticsRow() {
if (statistics.size() > 0) {
Row row = sheet.createRow(sheet.getLastRowNum() + 1);
Set<Integer> keys = statistics.keySet();
Cell cell = row.createCell(0);
cell.setCellStyle(styles.get("total"));
cell.setCellValue("合计");
for (Integer key : keys) {
cell = row.createCell(key);
cell.setCellStyle(styles.get("total"));
cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key)));
}
statistics.clear();
}
}
/**
* 编码文件名
*/
public String encodingFilename(String filename) {
filename = UUID.randomUUID() + "_" + filename + ".xlsx";
return filename;
}
/**
* 获取下载路径
*
* @param filename 文件名称
*/
public String getAbsoluteFile(String filename) {
String downloadPath = FileUploadUtils.getDefaultBaseDir().concat("/download/").concat(filename);
File desc = new File(downloadPath);
if (!desc.getParentFile().exists()) {
desc.getParentFile().mkdirs();
}
return downloadPath;
}
/**
* 获取bean中的属性值
*
* @param vo 实体对象
* @param field 字段
* @param excel 注解
* @return 最终的属性值
* @throws Exception
*/
private Object getTargetValue(T vo, Field field, Excel excel) throws Exception {
Object o = field.get(vo);
if (StringUtils.isNotEmpty(excel.targetAttr())) {
String target = excel.targetAttr();
if (target.contains(".")) {
String[] targets = target.split("[.]");
for (String name : targets) {
o = getValue(o, name);
}
} else {
o = getValue(o, target);
}
}
return o;
}
/**
* 以类的属性的get方法方法形式获取值
*
* @param o
* @param name
* @return value
* @throws Exception
*/
private Object getValue(Object o, String name) throws Exception {
if (!ObjectUtils.isEmpty(o) && StringUtils.isNotEmpty(name)) {
Class<?> clazz = o.getClass();
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
o = field.get(o);
}
return o;
}
/**
* 得到所有定义字段
*/
private void createExcelField() {
this.fields = getFields();
this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList());
this.maxHeight = getRowHeight();
}
/**
* 获取字段注解信息
*/
public List<Object[]> getFields() {
List<Object[]> fields = new ArrayList<Object[]>();
List<Field> tempFields = new ArrayList<>();
tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
for (Field field : tempFields) {
if (!ArrayUtils.contains(this.excludeFields, field.getName())) {
// 单注解
if (field.isAnnotationPresent(Excel.class)) {
Excel attr = field.getAnnotation(Excel.class);
if (attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type)) {
field.setAccessible(true);
fields.add(new Object[]{field, attr});
}
if (Collection.class.isAssignableFrom(field.getType())) {
subMethod = getSubMethod(field.getName(), clazz);
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Class<?> subClass = (Class<?>) pt.getActualTypeArguments()[0];
this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class);
}
}
// // 多注解
// if (field.isAnnotationPresent(Excels.class)) {
// Excels attrs = field.getAnnotation(Excels.class);
// Excel[] excels = attrs.value();
// for (Excel attr : excels) {
// if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr())
// && (attr != null && (attr.type() == Excel.Type.ALL || attr.type() == type))) {
// field.setAccessible(true);
// fields.add(new Object[]{field, attr});
// }
// }
// }
}
}
return fields;
}
/**
* 根据注解获取最大行高
*/
public short getRowHeight() {
double maxHeight = 0;
for (Object[] os : this.fields) {
Excel excel = (Excel) os[1];
maxHeight = Math.max(maxHeight, excel.height());
}
return (short) (maxHeight * 20);
}
/**
* 创建一个工作簿
*/
public void createWorkbook() {
this.wb = new SXSSFWorkbook(500);
this.sheet = wb.createSheet();
wb.setSheetName(0, sheetName);
this.styles = createStyles(wb);
}
/**
* 创建工作表
*
* @param sheetNo sheet数量
* @param index 序号
*/
public void createSheet(int sheetNo, int index) {
// 设置工作表的名称.
if (sheetNo > 1 && index > 0) {
this.sheet = wb.createSheet();
this.createTitle();
wb.setSheetName(index, sheetName + index);
}
}
/**
* 获取单元格值
*
* @param row 获取的行
* @param column 获取单元格列号
* @return 单元格值
*/
public Object getCellValue(Row row, int column) {
if (row == null) {
return row;
}
Object val = "";
try {
Cell cell = row.getCell(column);
if (!ObjectUtils.isEmpty(cell)) {
if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) {
val = cell.getNumericCellValue();
if (DateUtil.isCellDateFormatted(cell)) {
val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换
} else {
if ((Double) val % 1 != 0) {
val = new BigDecimal(val.toString());
} else {
val = new DecimalFormat("0").format(val);
}
}
} else if (cell.getCellType() == CellType.STRING) {
val = cell.getStringCellValue();
} else if (cell.getCellType() == CellType.BOOLEAN) {
val = cell.getBooleanCellValue();
} else if (cell.getCellType() == CellType.ERROR) {
val = cell.getErrorCellValue();
}
}
} catch (Exception e) {
return val;
}
return val;
}
/**
* 判断是否是空行
*
* @param row 判断的行
* @return
*/
private boolean isRowEmpty(Row row) {
if (row == null) {
return true;
}
for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) {
Cell cell = row.getCell(i);
if (cell != null && cell.getCellType() != CellType.BLANK) {
return false;
}
}
return true;
}
/**
* 获取Excel2003图片
*
* @param sheet 当前sheet对象
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
public static Map<String, PictureData> getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) {
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
List<HSSFPictureData> pictures = workbook.getAllPictures();
if (!pictures.isEmpty()) {
for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
if (shape instanceof HSSFPicture) {
HSSFPicture pic = (HSSFPicture) shape;
int pictureIndex = pic.getPictureIndex() - 1;
HSSFPictureData picData = pictures.get(pictureIndex);
String picIndex = anchor.getRow1() + "_" + anchor.getCol1();
sheetIndexPicMap.put(picIndex, picData);
}
}
return sheetIndexPicMap;
} else {
return sheetIndexPicMap;
}
}
/**
* 获取Excel2007图片
*
* @param sheet 当前sheet对象
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
public static Map<String, PictureData> getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) {
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
for (POIXMLDocumentPart dr : sheet.getRelations()) {
if (dr instanceof XSSFDrawing) {
XSSFDrawing drawing = (XSSFDrawing) dr;
List<XSSFShape> shapes = drawing.getShapes();
for (XSSFShape shape : shapes) {
if (shape instanceof XSSFPicture) {
XSSFPicture pic = (XSSFPicture) shape;
XSSFClientAnchor anchor = pic.getPreferredSize();
CTMarker ctMarker = anchor.getFrom();
String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol();
sheetIndexPicMap.put(picIndex, pic.getPictureData());
}
}
}
}
return sheetIndexPicMap;
}
/**
* 格式化不同类型的日期对象
*
* @param dateFormat 日期格式
* @param val 被格式化的日期对象
* @return 格式化后的日期字符
*/
public String parseDateToStr(String dateFormat, Object val) {
if (val == null) {
return "";
}
String str;
if (val instanceof Date) {
str = DateUtils.parseDateToStr(dateFormat, (Date) val);
} else if (val instanceof LocalDateTime) {
str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val));
} else if (val instanceof LocalDate) {
str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val));
} else {
str = val.toString();
}
return str;
}
/**
* 是否有对象的子列表
*/
public boolean isSubList() {
return !ObjectUtils.isEmpty(subFields) && subFields.size() > 0;
}
/**
* 是否有对象的子列表,集合不为空
*/
public boolean isSubListValue(T vo) {
return !ObjectUtils.isEmpty(subFields) && subFields.size() > 0 && !ObjectUtils.isEmpty(getListCellValue(vo)) && getListCellValue(vo).size() > 0;
}
/**
* 获取集合的值
*/
public Collection<?> getListCellValue(Object obj) {
Object value;
try {
value = subMethod.invoke(obj, new Object[]{});
} catch (Exception e) {
return new ArrayList<Object>();
}
return (Collection<?>) value;
}
/**
* 获取对象的子列表方法
*
* @param name 名称
* @param pojoClass 类对象
* @return 子列表方法
*/
public Method getSubMethod(String name, Class<?> pojoClass) {
StringBuffer getMethodName = new StringBuffer("get");
getMethodName.append(name.substring(0, 1).toUpperCase());
getMethodName.append(name.substring(1));
Method method = null;
try {
method = pojoClass.getMethod(getMethodName.toString(), new Class[]{});
} catch (Exception e) {
log.error("获取对象异常{}", e.getMessage());
}
return method;
}
}
package com.dsk.jsk.controller;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.jsk.domain.PageQueryLimit;
import com.dsk.jsk.domain.bo.ComposeQueryDto;
import com.dsk.jsk.service.BusinessOpportunityRadarService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* 查企业
* @author Administrator
*
*/
@RequestMapping("/enterprise")
@RestController
public class CompanySearchController {
@Resource
BusinessOpportunityRadarService opportunityRadarService;
/*
* 模糊查询企业名称
*/
@PostMapping("/index")
public AjaxResult landMarketPage(@RequestBody ComposeQueryDto dto) {
if (PageQueryLimit.pageLimit(dto.getPage())){
return AjaxResult.error("翻页已达到上限");
}
return opportunityRadarService.enterpriseIndex(dto);
}
/*
* 完全匹配企业名称
*/
@GetMapping("/findByName/{keyword}")
public AjaxResult findByName(@PathVariable String keyword) {
return opportunityRadarService.enterpriseByName(keyword);
}
/*
* 完全匹配企业名称
*/
@PostMapping("/page")
public AjaxResult page(@RequestBody ComposeQueryDto dto) {
if (PageQueryLimit.pageLimit(dto.getPage())){
return AjaxResult.error("翻页已达到上限");
}
return opportunityRadarService.enterprisePage(dto);
}
}
package com.dsk.jsk.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.dsk.biz.utils.ExcelUtils;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.jsk.domain.JskCombineBidPageDto;
import com.dsk.jsk.domain.JskCombineCertificateDto;
import com.dsk.jsk.domain.JskCombineSearchDto;
import com.dsk.jsk.domain.vo.JskCombineBidProjectExportVo;
import com.dsk.jsk.domain.vo.JskCombineWinBidProjectExportVo;
import com.dsk.jsk.service.JskCombineInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* 集团户相关信息
*
* @author lcl
* @create 2023/8/7
*/
@Slf4j
@RestController
@RequestMapping(value = "/combine/info")
public class JskCombineInfoController extends BaseController {
@Autowired
private JskCombineInfoService baseService;
/**
* 集团成员列表
*/
@PostMapping("/memberList")
public TableDataInfo memberList(@RequestBody JskCombineSearchDto dto) throws Exception {
return baseService.memberList(dto);
}
/**
* 分组成员数量
*/
@PostMapping("/group/memberCount")
public R groupMemberCount(@RequestBody JskCombineSearchDto dto) {
return baseService.groupMemberCount(dto);
}
/**
* 集团业绩列表
*/
@PostMapping("/businessList")
public TableDataInfo businessList(@RequestBody JskCombineSearchDto dto) throws Exception {
return baseService.businessList(dto);
}
/**
* 集团资质列表
*/
@PostMapping("/certificateList")
public TableDataInfo certificateList(@RequestBody JskCombineSearchDto dto) throws Exception {
return baseService.certificateList(dto);
}
/**
* 集团成员资质列表
*/
@PostMapping("/member/certificateList")
public TableDataInfo menberCertificateList(@RequestBody JskCombineCertificateDto dto) throws Exception {
return baseService.menberCertificateList(dto);
}
/**
* 集团资质分组统计
*/
@PostMapping("/group/certificateCount")
public R groupCertificateCount(@RequestBody JskCombineSearchDto dto) throws Exception {
return baseService.groupCertificateCount(dto);
}
/**
* 集团户搜索
*/
@PostMapping("/index")
public AjaxResult index(@RequestBody Map<String,Object> object) {
return baseService.index(object);
}
/**
* 查央企
*/
@PostMapping("/centralEnterprse")
public AjaxResult centralEnterprse() {
return baseService.centralEnterprse();
}
/**
* 查央企子公司
*/
@PostMapping("/centralEnterprse/child")
public AjaxResult centralEnterprseChild() {
return baseService.centralEnterprseChild();
}
/**
* 查央企子公司 翻页
*/
@PostMapping("/centralEnterprse/child/page")
public AjaxResult centralEnterprseChildPage(@RequestBody Map<String,Object> object) {
return baseService.centralEnterprseChildPage(object);
}
/**
* 查地方国企
*/
@PostMapping("/centralEnterprse/local")
public AjaxResult centralEnterprseLocal(@RequestBody Map<String,Object> object) {
return baseService.centralEnterprseLocal(object);
}
/**
* 查地方国企 翻页
*/
@PostMapping("/centralEnterprse/local/page")
public AjaxResult centralEnterprseLocalPage(@RequestBody Map<String,Object> object) {
return baseService.centralEnterprseLocalPage(object);
}
/**
* 民营企业
*/
@PostMapping("/centralEnterprse/social")
public AjaxResult centralEnterprseSocial() {
return baseService.centralEnterprseSocial();
}
/**
* 民营企业 翻页
*/
@PostMapping("/centralEnterprse/social/page")
public AjaxResult centralEnterprseSocialPage(@RequestBody Map<String,Object> object) {
return baseService.centralEnterprseSocialPage(object);
}
/**
* 导出中标业绩
*/
@PostMapping("/export/win/bid")
@SaCheckPermission("combine:info:export:win:bid")
public void exportWinBid(@RequestBody JskCombineSearchDto dto, HttpServletResponse response) {
List<JskCombineWinBidProjectExportVo> list = baseService.exportWinBid(dto);
ExcelUtils<JskCombineWinBidProjectExportVo> util = new ExcelUtils<>(JskCombineWinBidProjectExportVo.class);
util.exportExcel(response, list, "集团中标", dto.getCombineName().concat("中标业绩清单"), true);
// String fileName = util.localInit(list, "集团中标", dto.getCombineName().concat("中标业绩清单"), true);
}
/**
* 导出招标业绩
*/
@PostMapping("/export/bid")
@SaCheckPermission("combine:info:export:bid")
public void exportBid(@RequestBody JskCombineBidPageDto dto, HttpServletResponse response) {
List<JskCombineBidProjectExportVo> list = baseService.exportBid(dto);
ExcelUtils<JskCombineBidProjectExportVo> util = new ExcelUtils<>(JskCombineBidProjectExportVo.class);
util.exportExcel(response, list, "集团招标", dto.getCombineName().concat("招标公告清单"), true);
}
/**
* 集团招标分页列表
*/
@PostMapping("/bidPage")
public TableDataInfo bidPage(@RequestBody JskCombineBidPageDto dto) throws Exception {
return baseService.bidPage(dto);
}
}
package com.dsk.jsk.domain;
import com.dsk.jsk.domain.bo.Page;
/**
* @author lc
* @date 2023/6/20 17:48
*/
public class PageQueryLimit {
public static boolean pageLimit(Page page){
if (null == page) {
return true;
}
if (null==page.getLimit()||null==page.getPage()){
return true;
}
if ( page.getPage()*page.getLimit()>10000){
return true;
}
return false;
}
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class AchievementQueryDto {
/**
* 业绩所需参数
*/
// //中标面积
// Double tenderArea;
// //许可面积
// Double licenceArea;
// //竣工面积
// Double completionArea;
//招投标面积
Double startTenderArea;
Double endTenderArea;
//施工许可面积
Double startLicenceArea;
Double endLicenceArea;
//竣工验收面积
Double startCheckArea;
Double endCheckArea;
//竣工验收备案面积
Double startCompletionArea;
Double endCompletionArea;
//总面积
Double startTotalArea;
Double endTotalArea;
//面积体现节点
String areaStr;
//项目面积同时具备、任意均可 and/or
String areaQueryType;
//许可金额
Double licenceMoney;
//中标金额
Double startTenderMoney;
Double endTenderMoney;
//合同金额
Double startContractMoney;
Double endContractMoney;
//施工许可金额
Double startLicenceMoney;
Double endLicenceMoney;
//竣工验收实际造价
Double startCompletionMoney;
Double endCompletionMoney;
//竣工备案实际造价
Double startCheckMoney;
Double endCheckMoney;
//总投资
Double startInvest;
Double endInvest;
//项目金额同时具备、任意均可
String moneyQueryType;
//金额和面积同时具备、任意均可
String moneyAndAreaQueryType;
//业绩时间同时具备、任意均可
String timeQueryType;
String eid;
String buildCorpName;
String personName;
String ename;
// 项目来源 0=本地 1=四库一平台
Integer source;
Double startMoney;
Double endMoney;
//金额体现节点
String moneyStr;
// 关键词(包含)
List<KeywordDto> keywords;
// 关键词(不包含)
String keywordNot;
// 关键词(不包含)查询类型 project项目名称 scale建设规模 projectOrScale项目名称或建设规模
String keywordNotType;
// 业绩类型
String achievementType;
//单项查询 关键词包含
String singleKeywordIn;
//单项查询 关键词不包含
String singleKeywordOut;
//单项查询 关键词包含体现节点
String singleKeywordInNode;
//单项查询 关键词不包含体现节点
String singleKeywordOutNode;
//是否截图体现公司和规模 yes no
Boolean isSingleReflect;
//建设性质
String nature;
// 项目属地
String divisionStr;
//项目所在城市
String cityStr;
String province;
Integer provinceId;
String city;
Integer cityId;
String county;
Integer countyId;
Double startArea;
Double endArea;
//项目类别
String projectType;
// 工程用途
String purposeStr;
// 中标开始时间
Date startTenderTime;
// 中标结束时间
Date endTenderTime;
// 实际竣工开始日期
Date startCheckDate;
// 实际竣工结束日期
Date endCheckDate;
//竣工备案时间未公示
String hasCheckDate;
//实际开工开始日期
Date startWorkDate;
//实际开工结束日期
Date endWorkDate;
//合同日期开始
Date startContractDate;
//合同日期结束
Date endContractDate;
//施工许可开始日期
Date startLicenceDate;
//施工许可结束日期
Date endLicenceDate;
//施工图审开始日期
Date startCensorDate;
//施工图审结束日期
Date endCensorDate;
//竣工验收开始日期
Date startCheckCheckDate;
//竣工验收结束日期
Date endCheckCheckDate;
//竣工验收时间未公示
String hasCheckCheckDate;
// 业绩属性
String attributeStr;
// 业绩属性
String attributeQueryType;
// 项目经理
String pmStr;
// 项目经理同时具备、任意均可
String pmQueryType;
// 结构体系
String structure;
// 数据等级
String dataLevel;
//招投标数据等级
String tenderDataLevel;
//合同登记
String contractDataLevel;
//施工许可
String licenceDataLevel;
//竣工验收备案
String completionDataLevel;
//项目主体
String projectDataLevel;
//施工图审
String censorDataLevel;
//竣工验收
String checkDataLevel;
// 数据等级查询节点
String dataLevelStr;
// 数据等级查询方式 同时具备 任意均可
String dataLevelQueryType;
// 资金来源
String fundSource;
Double startLength;
Double endLength;
//施工许可
Double startLicenceLength;
Double endLicenceLength;
//竣工验收
Double startCheckCompletionLength;
Double endCheckCompletionLength;
//竣工验收备案
Double startCompletionLength;
Double endCompletionLength;
//长度体现节点
String lengthNode;
//长度筛选类型 or/and
String lengthType;
Double startSpan;
Double endSpan;
//施工许可
Double startLicenceSpan;
Double endLicenceSpan;
//竣工验收
Double startCheckCompletionSpan;
Double endCheckCompletionSpan;
//竣工验收备案
Double startCompletionSpan;
Double endCompletionSpan;
//跨度体现节点
String spanNode;
//跨度筛选类型 or/and
String spanType;
Integer achievementCount;
String type;
String tenderWay;
String md5Company;
// 企业业绩关键词
String keyword;
// 企业项目详情的中标开始时间 时间戳
Long startTenderDetailTime;
// 企业项目详情的中标结束时间 时间戳
Long endTenderDetailTime;
List<SkyProjectIndexDto> indexDtos;
//指标筛选类型 or/and
String indexQueryType;
//指标体现节点
String indexPoint;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* @author liuchang
* @date 2020/7/24 13:47
*/
@Data
public class AptitudeDetailDto {
Integer categoryCode;
Integer typeCode;
Integer majorCode;
String levelCode;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.List;
/**
* @author liuchang
* @date 2020/7/24 13:47
*/
@Data
public class AptitudeDto {
//资质条件
String nameStr;
String codeStr;
//资质同时具备任意均可 and/or
String queryType;
//资质查询类型 qualification 按资质项 level 按等级
String aptitudeType;
//存放处理完后的资质条件
List<String> names;
Integer namesCount;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import java.util.List;
@Getter
@Setter
public class AptitudeQueryDto {
String ename;
String resultEname;
String businessScopeQueryType;
//资质查询范围 old 旧表 new 新表
String aptitudeSource;
//任意均可or 同时具备and 有且仅有only
String aptitudeQueryType;
List<AptitudeDto> aptitudeDtoList;
//资质排除
String outCodeStr;
//资质排除类型 任意均可or 同时具备and
String outQueryType;
//行业code
String industryCode;
Double registeredCapital;
Double leftRegisteredCapital;
Double rightRegisteredCapital;
Double leftActualCapi;
Double rightActualCapi;
String queryType;
//三体系查询方式 同时具备、任意均可
String systemQueryType;
//体系类型
List<Integer> systemType;
String systemTypeStr;
//参保人数 起
Integer startInsuredNum;
//参保人数 止
Integer endInsuredNum;
//是否有电话 0无 1有 2有手机号码 3有固定号码 4 有手机和固定号码
Integer hasPhone;
//是否高新技术企业 0否 1是
Integer isHighTech;
//税务登记 1:A级
Integer taxLvl;
String taxYear;
//企业类型
// 1 国有企业
// 2 集体企业
// 3 股份有限公司
// 4 有限责任公司
// 5 联营企业
// 6 港、澳、台商投资企业
// 7 私营企业
// 8 外商投资企业
// 9 个体工商户
// 10 股份制企业
// 11 事业单位
// 12 其他
String companyType;
//安许证到期日期参数
@JsonFormat(pattern = "yyyy-MM-dd")
Date startLiceValidityDate;
@JsonFormat(pattern = "yyyy-MM-dd")
Date endLiceValidityDate;
//资质编号
String aptitudeCertNo;
//安许证编号
String liceCertNo;
//资质到期日期参数
@JsonFormat(pattern = "yyyy-MM-dd")
Date startAptitudeValidityDate;
@JsonFormat(pattern = "yyyy-MM-dd")
Date endAptitudeValidityDate;
//成立日期
Date startRegisteredDate;
Date endRegisteredDate;
Integer hasAptitude;
Integer hasLiceCert;
Integer no;
Double rate;
String isLocalC;
String isISO;
String isEMS;
String isOHSMS;
String certData;
String nameSimple;
String logoUrl;
String registeredDate;
String liceValidityDate;
Integer liceValidDay;
String url;
String registeredCapitalStr;
String id;
String companyId;
Integer jskEid;
String regionId;
String source;
String name;
String businessStatus;
String formerName;
String creditCode;
String legalPerson;
String registrationType;
Double actualCapi;
String domicile;
String domicileNum;
String domicileCity;
String domicileCounty;
String registerProvince;
String registerCity;
String registerCounty;
Integer isCountryCredit;
String businessAddress;
String businessScope;
Integer isLocal;
String attn;
String phone;
String other;
String regionInfo;
@JsonFormat(pattern = "yyyy-MM-dd")
Date rateTime;
// 资质数
Integer aptitudeCount;
// 项目数
Integer projectCount;
// 人数
Integer persionCount;
//最新中标个数
Integer recentlyCount;
Integer numPunish;
Integer badCreditChinaCount;
Integer zzZfcgsxCount;
Integer seriousIllegalCount;
Integer zzSxbzxCount;
Integer zzJdcgsxCount;
Integer zzRiskBidCount;
// -------------注册地与备案地 重构版----------------
String filePlaceCode;//备案地code
public Integer filePlaceType;//备案地类型 1 本省企业或外地备案 2 外地备案 3 本省企业
String province;//注册地 省级code 多个逗号隔开
String city;//注册地 市级code 多个逗号隔开
String county;//注册地 区级code 多个逗号隔开
String regionWeb;//企业备案网站
String tagCode;//企业标签
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
/**
* @author 刘昌
* @date 2020/9/4 9:08
*/
@Data
public class AwardDto {
String id;
//建安宝企业id
String eid;
//奖项类型(建安标品汇)
String type;
//建设库公司id
Integer companyId;
//公司名称
String ename;
//奖项名称
String name;
String staffName;
//企业角色
String companyRole;
//项目名称
String projectName;
//项目类型
String projectType;
//验收等级
String grade;
String gradeStr;
//颁发机构 JSON数组
String organization;
//奖项级别
String level;
//奖项小类
String sectionType;
//行业类型
String industryType;
String industryTypeStr;
//省份
String province;
//省份ID
Integer provinceId;
//市
String city;
//城市ID
Integer cityId;
String area;
Integer areaId;
//格式化后的发布时间
Date publishDate;
//获奖年度
String year;
//获奖起始年度
Integer yearBegin;
//获奖截止年度
Integer yearOver;
//原文链接
String href;
//快照截图地址, 存相对路径
String pathSnapshot;
//符合荣誉条件的数量
Integer awardNum;
//省份列表
String provinceStr;
//市区列表
String cityStr;
//荣誉名称列表
String nameStr;
//颁发单位
String organizationStr;
//开始发布时间
String startPublishDate;
//结束时间
String endPublishDate;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.List;
/**
* @author 刘昌
* @date 2020/9/8 16:01
*/
@Data
public class AwardQueryDto {
List<AwardDto> awardDtos;
String awardDtoType;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
//批量查询dto
@Data
public class BatchQueryDto {
String region;
String fileUrl;
String userId;
String exportExeclName;
String exportBackUrl;
String exportUniqueCode;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 北京一体化查询参数
* @author Administrator
*
*/
@Data
public class BeijingQueryDto {
String id;
String achievementType;
String province;
String city;
String county;
//中标金额
Double startTenderMoney;
Double endTenderMoney;
//合同金额
Double startContractMoney;
Double endContractMoney;
//金额查询类型 and/or 默认任意均可
String moneyQueryType;
// 中标开始时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date startTenderDate;
// 中标结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date endTenderDate;
// 合同开始时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date startContractDate;
// 合同结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date endContractDate;
//时间查询类型 and/or 默认任意均可
String timeQueryType;
//建设单位
String buildCorpName;
//中标单位
String tenderCompany;
//招标代理
String agency;
//单项查询 关键词包含
String singleKeywordIn;
//单项查询 关键词不包含
String singleKeywordOut;
//单项查询 关键词包含体现节点
String singleKeywordInNode;
//单项查询 关键词不包含体现节点
String singleKeywordOutNode;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class BusinessInfoDto {
String ename;
String resultEname;
String businessScopeQueryType;
Double registeredCapital;
Double leftRegisteredCapital;
Double rightRegisteredCapital;
Double leftActualCapi;
Double rightActualCapi;
String queryType;
//参保人数 起
Integer startInsuredNum;
//参保人数 止
Integer endInsuredNum;
//是否有电话 0否 1是
Integer hasPhone;
//是否高新技术企业 0否 1是
Integer isHighTech;
//税务登记 1:A级
Integer taxLvl;
String taxYear;
//企业类型
// 1 国有企业
// 2 集体企业
// 3 股份有限公司
// 4 有限责任公司
// 5 联营企业
// 6 港、澳、台商投资企业
// 7 私营企业
// 8 外商投资企业
// 9 个体工商户
// 10 股份制企业
// 11 事业单位
// 12 其他
String companyType;
//成立日期
Date startRegisteredDate;
Date endRegisteredDate;
Integer hasAptitude;
Integer hasLiceCert;
Integer no;
Double rate;
String isLocalC;
String isISO;
String isEMS;
String isOHSMS;
String certData;
String nameSimple;
String logoUrl;
String registeredDate;
String liceValidityDate;
Integer liceValidDay;
String url;
String registeredCapitalStr;
String id;
String companyId;
Integer jskEid;
String regionId;
String source;
String name;
//中文经营状态(枚举:在业、清算、迁入、迁出、停业、撤销、吊销、注销、不详)
String businessStatus;
String formerName;
String creditCode;
String legalPerson;
String registrationType;
Double actualCapi;
String domicile;
String domicileNum;
String domicileCity;
String domicileCounty;
String registerProvince;
String registerCity;
String registerCounty;
Integer isCountryCredit;
String businessAddress;
String businessScope;
Integer isLocal;
String attn;
String phone;
String other;
String regionInfo;
@JsonFormat(pattern = "yyyy-MM-dd")
Date rateTime;
// 资质数
Integer aptitudeCount;
// 项目数
Integer projectCount;
// 人数
Integer persionCount;
//最新中标个数
Integer recentlyCount;
Integer numPunish;
Integer badCreditChinaCount;
Integer zzZfcgsxCount;
Integer seriousIllegalCount;
Integer zzSxbzxCount;
Integer zzJdcgsxCount;
Integer zzRiskBidCount;
// -------------注册地与备案地 重构版----------------
String filePlaceCode;//备案地code
public Integer filePlaceType;//备案地类型 1 本省企业或外地备案 2 外地备案 3 本省企业
String province;//注册地 省级code 多个逗号隔开
String city;//注册地 市级code 多个逗号隔开
String county;//注册地 区级code 多个逗号隔开
String regionWeb;//企业备案网站
String tagCode;//企业标签
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 人员查询实体类
* @author Administrator
*
*/
@Data
public class ComposePersonnelQueryDto {
// 人员姓名
String personName;
// 人员id
String staffId;
// 企业名称
String ename;
//yes有业绩 no没业绩
String mance;
//企业注册地
String domicile;
String domicileNum;
String domicileCity;
String domicileCounty;
//市
String registerCity;
//省份
String registerProvince;
//区
String registerCounty;
String cardNumber;
//证书and/or
String registerQueryType;
// 注册类型 只有一人多证and
List<RegisterTypeDto> registers;
//人员荣誉
List<AwardQueryDto> awardQueryDtos;
//人员荣誉同时具备任意均可
String personAwardQueryType;
//人员业绩同时具备任意均可
String achievementQueryType;
//四库业绩
List<AchievementQueryDto> achievementQueryDto;
//四库业绩完整版
List<AchievementQueryDto> achievementFullQueryDto;
//最新中标业绩
List<RecentlyBidQueryDto> recentlyBidQueryDto;
//一体化项目业绩
List<YitihuaAchievementQueryDto> yitihuaAchievements;
//一体化业绩精简版
List<YitihuaAchievementQueryDto> ythAchievements;
//一体化业绩完整版
List<YitihuaAchievementQueryDto> ythFullAchievements;
//全平台业绩
List<JabBasicEnterpriseProjectDto> basicAchievements;
//江西中标业绩
List<JiangxiBidQueryDto> jiangxiBidQueryDto;
//水利业绩
List<ShuiliAchievementQueryDto> shuiliAchievements;
//人员业绩条件是否与企业业绩条件相同
Boolean isSame;
//人员业绩企业一致
Integer achievementCount;
//一体化来源
String yitihuaSource;
//资质到期日期参数
@JsonFormat(pattern = "yyyy-MM-dd")
Date startCertValidityDate;
@JsonFormat(pattern = "yyyy-MM-dd")
Date endCertValidityDate;
String filePlaceCode;//备案地code
Integer filePlaceType;//备案地类型 1 本省企业或外地备案 2 外地备案 3 本省企业
String province;//注册地 省级code 多个逗号隔开
String city;//注册地 市级code 多个逗号隔开
String county;//注册地 区级code 多个逗号隔开
//是否有电话 0否 1是
Integer hasPhone;
//关键词
String keyword;
}
package com.dsk.jsk.domain.bo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
import java.util.List;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class ComposeQueryDto extends BasePage {
String region;
String keyword;
String keywordNot;
Page page;
AptitudeQueryDto aptitudeQueryDto;
//工商信息
BusinessInfoDto businessInfoDto;
List<AchievementQueryDto> enterpriseAchievementQueryDto;
//完整版四库业绩
List<AchievementQueryDto> enterpriseAchievementFullQueryDto;
List<JiangxiBidQueryDto> jiangxiBidQueryDto;
BeijingQueryDto beijingQueryDto;
List<RecentlyBidQueryDto> recentlyBidQueryDto;
List<AwardQueryDto> awardQueryDtos;
String awardEname;
//人员证书专查
PersonnelCertificateQueryDto personnelCertificateQueryDto;
PersonnelCertificateQueryDto companyPersonnelCertQueryDto;
//项目负责人 (施工/监理/设计/勘察)
ComposePersonnelQueryDto composePersonnelQueryDto;
//项目负责人 (施工)
ComposePersonnelQueryDto composePersonnelQueryDtoV2;
// PersonnelQueryDto personnelQueryDto;
JskBidQueryDto jskBidQueryDto;
//标讯pro 招标
JskBidNewsDto jskBidNewsDto;
//标讯pro 中标候选人
JskBidCandidateDto jskBidCandidateDto;
//中标公示
JskBidWinListDto jskBidWinListDto;
//专项债项目
SpecialBondProjectDto specialBondProjectDto;
//投标计划
JskBidPlanDto jskBidPlanDto;
String achievementQueryType;
String awardQueryType;
Boolean isHighLightKeyword;
String eid;
String personId;
String md5Company;
List<String> exportHeader ;
//符合条件的荣誉类别 0 1 2 3
String awardType;
String badBehaviorEname;
//不良行为
List<CreditBehaviorDto> badBehaviors;
//信用评价
List<CreditEvaluateDto> creditEvaluates;
//良好行为
GoodBehaviorDto goodBehaviorDto;
String creditEvaluateType;
//全平台业绩
List<JabBasicEnterpriseProjectDto> basicAchievements;
//江西住建项目业绩
List<YitihuaAchievementQueryDto> yitihuaAchievements;
//一体化业绩精简版
List<YitihuaAchievementQueryDto> ythAchievements;
//一体化业绩完整版
List<YitihuaAchievementQueryDto> ythFullAchievements;
//水利业绩
List<ShuiliAchievementQueryDto> shuiliAchievements;
//土地招拍挂
LandMarketDto landMarketDto;
//拟建
EstablishmentDto establishmentDto;
EstablishmentDto bidPro;
String yitihuaSource;
String exportSource;
Integer exportCount;
String exportExeclName;
String exportBackUrl;
String exportUniqueCode;
String orderSn;
public Page getPage() {
if (page == null) {
page = new Page();
page.setPage(1);
page.setLimit(10);
}
return page;
}
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.List;
@Data
public class ComposeRegisterDto {
// 注册类型
List<RegisterTypeDto> registerTypes;
// and/or
String registerQueryType;
// 注册人数
Integer registerCount;
// 个数类型 1 大于等于 2 等于 3小于等于
Integer countType;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
/**
* @author 刘昌
* @date 2020/9/4 9:08
*/
@Data
public class CreditBehaviorDto {
String category;
String type;
String subclass;
String org;
String dataSource;
String contentInfo;
String punishType;
Date startTime;
String behaviorTime;
String behaviorExportTime;
Date endTime;
Integer jskEid;
String ename;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
/**
* @author 刘昌
* @date 2020/9/4 9:08
*/
@Data
public class CreditEvaluateDto {
String keyword;
String no;
String ename;
String province;
String city;
String dataSource;
//企业类型
String type;
// 是否是及以上
Boolean attrComp;
//评价类型
String attribute;
//排名、评分
String rankOrLevel;
//等级
Integer startYear;
Integer endYear;
String jskEid;
String publishTime;
String timeSpan;
Date startTime;
Date endTime;
String quarter;
String issuteTime;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 时间筛选对象
*
* @author lcl
* @create 2021/9/6
*/
@Data
public class DateQueryDto implements Serializable {
//类型
private String type;
//筛选类型 and/or
private String queryType;
//开始时间
private Date startDate;
//结束时间
private Date endDate;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.Date;
/**
* 企业
* @author Administrator
*
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Enterprise {
String id;
String companyId;
Integer jskEid;
String regionId;
String source;
String name;
String businessStatus;
String formerName;
String creditCode;
String legalPerson;
String registrationType;
Double registeredCapital;
Double actualCapi;
String registeredCapitalStr;
String domicile;
String domicileNum;
String domicileCity;
String registerProvince;
String registerCity;
Integer isCountryCredit;
String businessAddress;
String businessScope;
Integer isLocal;
String attn;
String phone;
String other;
String regionInfo;
Double rate;
Date rateTime;
// 资质数
Integer aptitudeCount;
// 项目数
Integer projectCount;
// 人数
Integer persionCount;
//最新中标个数
Integer recentlyCount;
Integer numPunish;
Integer badCreditChinaCount;
Integer zzZfcgsxCount;
Integer seriousIllegalCount;
Integer zzSxbzxCount;
Integer zzJdcgsxCount;
Integer zzRiskBidCount;
// -------------注册地与备案地 重构版----------------
String filePlaceCode;//备案地code
public Integer filePlaceType;//备案地类型 1 本省企业或外地备案 2 外地备案 3 本省企业
String province;//注册地 省级code 多个逗号隔开
String city;//注册地 市级code 多个逗号隔开
String county;//注册地 区级code 多个逗号隔开
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class EnterpriseDto{
Integer no;
Double rate;
String isLocalC;
String labels;
String isISO;
String isEMS;
String isOHSMS;
String certData;
String nameSimple;
String logoUrl;
String registeredDate;
String liceValidityDate;
//安许证-证书生效时间
String liceIssueDate;
String liceCertNo;
Integer liceValidDay;
String url;
String registeredCapitalStr;
String id;
String companyId;
Integer jskEid;
String regionId;
String source;
String name;
String businessStatus;
String formerName;
String creditCode;
String legalPerson;
String registrationType;
Double registeredCapital;
Double actualCapi;
String domicile;
String domicileNum;
String domicileCity;
String registerProvince;
String registerCity;
Integer isCountryCredit;
String businessAddress;
String businessScope;
Integer isLocal;
String attn;
String phone;
String companyType;
String other;
String regionInfo;
Date rateTime;
// 资质数
Integer aptitudeCount;
Integer aptitudeCountNew;
// 项目数
Integer projectCount;
// 人数
Integer persionCount;
//最新中标个数
Integer recentlyCount;
Integer skyCount;
Integer registeredPersonnelCount;
Integer jskBidCount;
Integer supplierCount;
Integer customerCount;
Integer threePersonnelCount;
Integer numPunish;
Integer badCreditChinaCount;
Integer zzZfcgsxCount;
Integer seriousIllegalCount;
Integer zzSxbzxCount;
Integer zzJdcgsxCount;
Integer zzRiskBidCount;
// -------------注册地与备案地 重构版----------------
String filePlaceCode;//备案地code
public Integer filePlaceType;//备案地类型 1 本省企业或外地备案 2 外地备案 3 本省企业
String province;//注册地 省级code 多个逗号隔开
String city;//注册地 市级code 多个逗号隔开
String county;//注册地 区级code 多个逗号隔开
//企业备案地
List<String> regionList;
}
package com.dsk.jsk.domain.bo;
import java.io.*;
/**
* <pre>
* <b>.</b>
* <b>Description:实体类基类</b>
*
* <b>Author:</b> vip@chennxu.com
* <b>Date:</b> 2016年9月3日 上午11:49:20
* <b>Copyright:</b> Copyright &copy;2006-2015 chennxu.com Co., Ltd. All rights reserved.
* <b>Changelog:</b>
* Ver Date Author Detail
* ----------------------------------------------------------------------
* 1.0 2016年9月3日 上午11:49:20 vip@chennxu.com new file.
* </pre>
*/
public class Entity implements Serializable, Cloneable, Comparable<Entity> {
/**
* 序列化版本标示
*/
private static final long serialVersionUID = 1L;
/**
* 深度克隆
*
* @return 克隆后得到的对象
* @throws IOException
* @throws ClassNotFoundException
*/
public final Object deepClone() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
return new ObjectInputStream(bis).readObject();
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
public int compareTo(Entity o) {
return 0;
}
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 项目立项数据(JskProjectEstablishment)实体类
*
* @author pig4cloud
* @since 2022-04-09 17:06:01
*/
@Data
public class EstablishmentDto {
private String keyword;
private String keywordNot;
private String id;
/**
* 项目名称
*/
private String projectName;
/**
* 申请单位
*/
private String companyName;
private Integer companyId;
/**
* 立项阶段
*/
private String stage;
/**
* 审批部门
*/
private String examineOffice;
/**
* 项目类型
*/
private String projectType;
/**
* 事项名称
*/
private String examineContent;
/**
* 审批结果
*/
private String examineStatus;
/**
* 审批文号
*/
private String licenseNum;
/**
* 计划开工时间
*/
private String planStartTime;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date planStartTimeStart;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date planStartTimeEnd;
/**
* 建成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private String planEndTime;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date planEndTimeStart;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date planEndTimeEnd;
/**
* 审批文件链接
*/
private String licenseUrl;
/**
* 复核通过时间
*/
private String reviewTime;
/**
* 办结时间
*/
private String handleTime;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date handleTimeStart;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date handleTimeEnd;
/**
* 项目代码
*/
private String projectCode;
/**
* 国家代码
*/
private String countryCode;
/**
* 省
*/
private Integer provinceId;
/**
* 市
*/
private Integer cityId;
/**
* 区
*/
private Integer districtId;
private String domicile;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 区
*/
private String district;
/**
* 总投资
*/
private Double money;
private Double startMoney;
private Double endMoney;
/**
* 资金来源
*/
private String sourceMoney;
/**
* 项目所属行业
*/
private String industry;
/**
* 建设性质
*/
private String buildNature;
/**
* 建设地点
*/
private String buildAddre;
/**
* 建设规模和内容
*/
private String buildScale;
/**
* 来源网站名称
*/
private String sourceName;
/**
* 详情页url
*/
private String sourceUrl;
private String personTel;
/**
* 是否为民介
*/
private Integer isProject;
private String isProjectStr;
private String approvalInfo;
private String marketingInfo;
/**
* 创建时间 设置为mysql自动创建
*/
private Date createTime;
private String updateTime;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.List;
/**
* @author lc
* @date 2023/1/16 16:08
*/
@Data
public class GoodBehaviorDto {
//三体系查询方式 同时具备、任意均可
String systemQueryType;
//体系类型
List<Integer> systemType;
String systemTypeStr;
//A级纳税人
String taxYear;
String taxYearQueryType;
//是否高新技术企业 0否 1是
Integer isHighTech;
String ename;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* 头部查询参数
*
* @author lcl
* @create 2021/10/22
*/
@Data
public class HeaderDto{
private String queryStr;
private String sourceName;
private Page page;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 全平台企业基本业绩信息(筛选条件)
*
* @author lcl
* @create 2021/9/6
*/
@Data
public class JabBasicEnterpriseProjectDto implements Serializable {
//参建单位
private String ename;
//建设单位
private String buildCorpName;
//业绩来源 多个空格隔开
private String achievementSource;
//业绩类型 多个空格隔开
private String achievementType;
//项目金额 最小值
private Double projectMoney;
private Double startMoney;
private Double endMoney;
//包含金额未公示 0:不包含 1:包含
private Integer isMoney;
//时间条件
private List<DateQueryDto> dateDtos;
//时间查询类型 and/or 默认任意均可
private String timeQueryType;
//关键词(包含) 单个空格隔开
private List<KeywordDto> keywords;
//关键词(不包含)
private String keywordNot;
private String keywordNotType;
//单项查询 关键词包含
String singleKeywordIn;
//单项查询 关键词不包含
String singleKeywordOut;
//单项查询 关键词包含体现节点
String singleKeywordInNode;
//单项查询 关键词不包含体现节点
String singleKeywordOutNode;
//是否截图体现公司和规模 yes no
Boolean isSingleReflect;
//省 多个空格隔开
private String divisionStr;
//市 多个空格隔开
private String cityStr;
//区 多个空格隔开
private String countyStr;
String province;
Integer provinceId;
String city;
Integer cityId;
String county;
Integer countyId;
//业绩数量
private Integer achievementCount;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class JiangxiBidQueryDto {
//参建单位 施工单位
String ename;
//建设单位
String buildCorpName;
//中标金额
Double startMoney;
Double endMoney;
//包含金额未公示
String hasMoney;
// 中标开始时间
Date startTenderTime;
// 中标结束时间
Date endTenderTime;
//开工日期开始
Date startWorkDate;
//开工日期结束
Date endWorkDate;
//竣工日期开始
Date startCheckDate;
//竣工日期结束
Date endCheckDate;
// 实际竣工开始日期
Date startCheckCheckDate;
// 实际竣工结束日期
Date endCheckCheckDate;
//实际开工开始日期
Date startCheckWorkDate;
//实际开工结束日期
Date endCheckWorkDate;
//业绩时间同时具备、任意均可
String timeQueryType;
// 关键词(包含)
List<KeywordDto> keywords;
// 关键词(不包含)
String keywordNot;
// 关键词(不包含)查询类型 project项目名称 scale建设规模 projectOrScale项目名称或建设规模
String keywordNotType;
//单项查询 关键词包含
String singleKeywordIn;
//单项查询 关键词不包含
String singleKeywordOut;
//单项查询 关键词体现节点
String singleKeywordInNode;
//单项查询 关键词体现节点
String singleKeywordOutNode;
// // 项目属地
// String divisionStr;
//项目所在城市
String cityStr;
//所在区
String countyStr;
// 业绩数量
Integer achievementCount;
String city;
String county;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class JskBidCandidateDto {
String id;
//省
String province;
//市
String city;
//区
String county;
//项目名称
String projectName;
//项目类型
String projectType;
// 发布开始时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date startPubdate;
// 发布结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date endPubdate;
//中标金额开始
Double startProjectAmount;
//中标金额结束
Double endProjectAmount;
//最高限价开始
Double startMaxAmount;
//最高限价结束
Double endMaxAmount;
//下浮率开始
Double startLowerRate;
//下浮率结束
Double endLowerRate;
//中标候选人
String bidWinCompany;
//中标候选人id
String bidWinCompanyId;
//招标人
String tenderee;
//代理机构
String agency;
//最高限价
String maxAmount;
//中标金额
String projectAmount;
//下浮率
String lowerRate;
//名次
String rank;
//发布时间
String pubdate;
String tendereeId;
String tendereeTel;
String agencyId;
String agencyTel;
List<Map<String,String>> mapList;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class JskBidNewsDto {
String id;
//省
String province;
//市
String city;
//区
String county;
//项目名称
String projectName;
//项目类型
String projectType;
//工程用途
String projectPurposes;
//工程用途
String projectLevel;
//评标办法
String bidAssessmentWay;
//评标委员会-有无业主代表,0为未知,1为无,2为有
String bidMettingHasProjectUnit;
//有无预付款,0为未知,1为无,2为有
String hasAdvanceAmount;
//保证金缴纳
String projectEnsureAmountPayType;
// 发布开始时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date startPubdate;
// 发布结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date endPubdate;
// 开标截至时间开始
@JsonFormat(pattern = "yyyy-MM-dd")
Date startEndTimeDate;
// 开标截至时间结束
@JsonFormat(pattern = "yyyy-MM-dd")
Date endEndTimeDate;
//项目金额开始
Double startProjectAmount;
//项目金额结束
Double endProjectAmount;
//项目投资额开始
Double startProjectInvestmentAmount;
//项目投资额结束
Double endProjectInvestmentAmount;
//合同估算价开始
Double startProjectContractAmount;
//合同估算价结束
Double endProjectContractAmount;
//建安费开始
Double startProjectSafeAmount;
//建安费结束
Double endProjectSafeAmount;
//勘察费开始
Double startProjectSurveyAmount;
//勘察费结束
Double endProjectSurveyAmount;
//设计费开始
Double startProjectDesignAmount;
//设计费结束
Double endProjectDesignAmount;
//投标保证金开始
Double startProjectEnsureAmount;
//投标保证金结束
Double endProjectEnsureAmount;
//资质要求
String qualiLimit;
//业绩要求
String projectLimit;
//人员要求
String personLimit;
//招标人
String tenderee;
//代理机构
String agency;
//时间
String dateStr;
//金额
String moneyStr;
String tendereeId;
String tendereeTel;
String agencyId;
String agencyTel;
String eligibleEnterprisesUrl;
String pubdate;
String endTimeDate;
String projectAmount;
//项目投资额
String projectInvestmentAmount;
//合同估算价
String projectContractAmount;
//建安费
String projectSafeAmount;
//综合单价
String projectComprehensiveAmount;
//勘察费
String projectSurveyAmount;
//设计费
String projectDesignAmount;
//投标保证金
String projectEnsureAmount;
//是否有文档
String hasFile;
//项目特点解析
String projectCharacteristics;
//市场分析及报价策略
String marketAnalysis;
//成本分析
String costAnalysis;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class JskBidPlanDto {
String id;
String uuid;
String title;
String projectName;
String projectNumber;
//招标人
String tenderee;
String tendereeId;
String projectScale;
String province;
String city;
String area;
String domicile;
//标的物类型
String objectType;
//项目类型
String projectType;
//招标方式
String tenderWay;
//合同预估金额
Double planTenderAmount;
Double startPlanTenderAmount;
Double endPlanTenderAmount;
//资金来源
String projectCapitalSource;
//发布时间
String issueTime;
//发布时间开始
Date startIssueTime;
//发布时间结束
Date endIssueTime;
//计划发布开始时间
String planTenderDateStart;
//计划发布截止时间
String planTenderDateEnd;
//来源网站
String sourceName;
/**
* 修改时间
*/
String updateTime;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class JskBidQueryDto {
String id;
String title;
//查找范围
String queryScope;
//"询价", "比选", "邀请", "竞争性谈判", "竞争性磋商", "单一来源", "竞价", "直接发包", "公开招标",其他',
String tenderingManner;
//招标金额
Double bidMoney;
String hasMoney;
Double startBidMoney;
Double endBidMoney;
String domicile;
String tenderStage;
String projectType;
String companyName;
String projectName;
String contentInfo;
Integer jskEid;
String tenderTime;
@JsonFormat(pattern = "yyyy-MM-dd")
Date startTenderTime;
// 发布结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date endTenderTime;
String punishDate;
// 发布开始时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date startPunishDate;
// 发布结束时间
@JsonFormat(pattern = "yyyy-MM-dd")
Date endPunishDate;
//行业
String industry;
// 标的物类型:工程/货物/服务/其他
String subjectMatter;
//中标标金额
Double startTenderMoney;
Double endTenderMoney;
String overTime;
String phonePoint;
String contact;
String contactTel;
String source;
String agency;
Integer agencyId;
String agencyContact;
String agencyContactTel;
String province;
String city;
String county;
/**
* 修改时间
*/
private String updateTime;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* 中标公示查询参数
* @author Administrator
*
*/
@Data
public class JskBidWinListDto {
String winListUuid;
//招标单位
String tenderee;
//招标单位id
String tendereeId;
//省
String province;
String provinceId;
//市
String city;
String cityId;
//区
String area;
String areaId;
//中标项目编号
String bidWinProjectNo;
//项目名称
String projectName;
//项目id
String projectId;
//中标单位
String bidWinCompany;
//正文id
String contentId;
//下浮率
Double downfloatRate;
//其他来源
String otherSource;
//处理后的工期(天)
Integer dealProjectDuration;
//建造师名称
String constructor;
//建造师注册号
String constructorNo;
//处理后的中标金额(万元)
Double dealBidWinAmount;
//主来源网站名称
String sourceName;
//主来源详情页链接
String url;
//建设工程项目类型
String buildingProjectType;
//中标时间/发布时间
String issueTime;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
@Data
public class JskDataScreenDto {
@JsonInclude(JsonInclude.Include.NON_NULL)
public Integer provinceId;
@JsonInclude(JsonInclude.Include.NON_NULL)
public String certType;
public String subclass;
public String certLevel;
public String label;
public Integer count;
public String newProjectCount;
public String toDayBidAmount;
public String toDayBidCount;
public Page page;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
@Data
public class KeywordDto {
// 关键词(包含)
private String keyword;
// 关键词(包含)查询类型 project项目名称 scale建设规模 projectOrScale项目名称或建设规模
private String keywordType;
//是否截图体现公司和规模 yes no
private Boolean isReflect;
//体现节点
private String keywordStr;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class LandMarketDto {
private Integer id;
/**
* 关键词
*/
private String keyword;
private String keywordNot;
/**
* 项目名称
*/
private String projectName;
/**
* 受让人
*/
private String companyName;
/**
* 企业ID
*/
private Integer companyId;
/**
* 出让面积
*/
private Double acreage;
private Double startAcreage;
private Double endAcreage;
/**
* 加价幅度
*/
private String addMoneyRange;
/**
* 招拍挂起始时间
*/
private Date auctionBeginTime;
/**
* 招拍挂截止时间
*/
private Date auctionEndTime;
/**
* 批准单位
*/
private String authority;
/**
* 保证金
*/
private Double bondmoney;
/**
* 建筑面积
*/
private Double buildArea;
private Double startBuildArea;
private Double endBuildArea;
/**
* 建筑密度
*/
private String buildingDensity;
/**
* 建筑限高
*/
private String buildingHeight;
private String domicile;
/**
* 省
*/
private String province;
/**
* 省ID
*/
private Integer provinceId;
/**
* 市
*/
private String city;
/**
* 市ID
*/
private Integer cityId;
/**
* 区
*/
private String area;
/**
* 区ID
*/
private Integer areaId;
/**
* 合同编号
*/
private String contractNum;
/**
* 合同签订日期
*/
private String contractSignTime;
/**
* 合同签订日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date contractSignTimeStart;
/**
* 合同签订日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date contractSignTimeEnd;
/**
* 约定开工时间
*/
private Date conventionBeginTime;
/**
* 约定竣工时间
*/
private Date conventionEndTime;
/**
* 约定交地时间
*/
private Date conventionLandTime;
/**
* 约定容积率
*/
private String conventionVolumeRate;
/**
* 结果详情url
*/
private String detailUrl;
/**
* 电子监管号
*/
private String electronicNumber;
private String gdgid;
/**
* 绿化率
*/
private String greeningRate;
/**
* 行业分类
*/
private String industry;
/**
* 投资强度
*/
private String investmentIntensity;
/**
* 报名起始时间
*/
private Date joinBeginTime;
/**
* 报名截止时间
*/
private Date joinEndTime;
/**
* 土地坐落
*/
private String landAddr;
/**
* 土地级别
*/
private String landLevel;
/**
* 地块名称
*/
private String landName;
/**
* 地块公示url
*/
private String landNoticeUrl;
/**
* 土地来源
*/
private String landSource;
/**
* 土地用途
*/
private String landUse;
/**
* 土地使用权人cid
*/
private Integer landUseCompanyId;
/**
* 土地使用权人
*/
private String landUseCompany;
/**
* 出让年限
*/
private String landUseYear;
/**
* 起始价
*/
private String moneyBegin;
/**
* 分期支付约定
*/
private String paymentAgreement;
/**
* 实际开工时间
*/
private Date realBeginTime;
/**
* 实际竣工时间
*/
private Date realEndTime;
/**
* 出让公告url
*/
private String sellNoticeUrl;
/**
* 供地方式/供应方式
*/
private String supplyLandWay;
/**
* 成交价格
*/
private Double transactionPrice;
/**
* 成交价格-起
*/
private Double startTransactionPrice;
/**
* 成交价格-止
*/
private Double endTransactionPrice;
/**
* 成交公示日期
*/
private String transactionPublicityTime;
/**
* 容积率
*/
private String volumeRate;
/**
* 约定容积率上限
*/
private Double volumeRateHigh;
/**
* 约定容积率下限
*/
private Double volumeRateLow;
/**
* 来源
*/
private String dataSource;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private String updateTime;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @ClassName OpRegionalEconomicDataV1Dto
* @Description 区域经济大全-详情
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataDetailsDto {
/**
* id
*/
@NotNull(message = "id 不能为空")
private Integer id;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @ClassName OpRegionalEconomicDataV1Dto
* @Description 专项债-项目类别统计
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataRegionalListDto {
/**
* id
*/
@NotNull(message = "id 不能为空")
private Integer id;
/**
* 省Id
*/
@NotNull(message = "provinceId 不能为空")
private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区Id
*/
private Integer areaId;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @ClassName OpRegionalEconomicDataV1Dto
* @Description 地区经济
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataStatisticsRegionalDto {
/**
* id
*/
@NotNull(message = "id 不能为空")
private Integer id;
/**
* 年份
*/
private Integer year;
/**
* 省Id
*/
private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区Id
*/
private Integer areaId;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* @ClassName OpRegionalEconomicDataV1Dto
* @Description 专项债-项目类别统计
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataV1Dto {
/**
* id
*/
private Integer id;
/**
* 年份
*/
private Integer year;
/**
* 省Id
*/
private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区Id
*/
private Integer areaId;
/**
* 城市类型 1:直辖市
*/
private Integer cityType;
/**
* 城市类型 1:直辖市
*/
private Integer provinceType;
}
package com.dsk.jsk.domain.bo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
import java.util.List;
/**
* @ClassName OpRegionalEconomicDataV1PageDto
* @Description 专项债-项目类别统计
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataV1PageDto extends BasePage {
/**
* 年份
*/
private Integer year;
/**
* 省
*/
private List<Integer> provinceIds;
/**
* 市
*/
private List<Integer> cityIds;
/**
* 区
*/
private List<Integer> areaIds;
/**
* 全国宏观经济:1 / 辖区经济:2 / 地区对比:3
*/
private Integer type;
/**
* 排序字段 默认gdp
*/
private String field = "gdp";
/**
* 排序 (降序desc 升序asc)
*/
private String order = "desc";
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* @ClassName OpRegionalEconomicDataYearsListDto
* @Description 获取年份
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataYearsListDto {
private Integer year;
}
package com.dsk.jsk.domain.bo;
import cn.hutool.core.util.ObjectUtil;
import java.util.List;
/**
* @ClassName OpRegionalEconomicRegionalCompareDto
* @Description 地区经济-对比
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
public class OpRegionalEconomicRegionalCompareDto {
/**
* 年份
*/
private Integer year;
private List<OpRegionalEconomicDataStatisticsRegionalDto> compareList;
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
public List<OpRegionalEconomicDataStatisticsRegionalDto> getCompareList() {
if (ObjectUtil.isNotEmpty(compareList)) {
for (OpRegionalEconomicDataStatisticsRegionalDto dataStatisticsRegionalDto : compareList) {
dataStatisticsRegionalDto.setYear(year);
}
}
return compareList;
}
public void setCompareList(List<OpRegionalEconomicDataStatisticsRegionalDto> compareList) {
this.compareList = compareList;
}
@Override
public String toString() {
return "OpRegionalEconomicRegionalCompareDto{" +
"year=" + year +
", compareList=" + compareList +
'}';
}
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* @ClassName OpRegionalLocalDto
* @Description 获取当前地区
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalLocalDto {
/**
* 省Id
*/
private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区 Id
*/
private Integer areaId;
private String ip;
}
package com.dsk.jsk.domain.bo;
import cn.hutool.core.bean.BeanException;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Getter
@Setter
@FieldDefaults(level= AccessLevel.PRIVATE)
public class Page extends Entity {
public Page(){
}
public Page(Integer page, Integer limit) {
this.page = page;
this.limit = limit;
}
public Page(List<Map<String, Object>> list, Long total, Integer limit, Integer page){
this.list = list;
this.total = total;
this.page = page;
this.limit = limit;
}
/**
* 序列化版本标示
*/
private static final long serialVersionUID = 1L;
// 页码数
Integer page;
// 单页最大行数
Integer limit;
List<?> list;
String field;
String order;
Long total=0L;
// @SuppressWarnings("rawtypes")
// private void validateOrderField(boolean isPage, Class cls) {
// if (isPage) {
// PageHelper.startPage(page == null ? 1 : page, limit == null ? 10: limit);
// }
// if (!StringUtils.isEmpty(order) && cls != null&&!StringUtils.isEmpty(field)) {
// String[] orders = this.order.split(",");
// String[] fieldArray = this.field.split(",");
// if (orders.length == fieldArray.length) {
// List<Field> fields = ReflectionUtils.getDeclaredField(cls);
// for (String sort : fieldArray) {
// boolean isExsit = false;
// for (Field field : fields) {
// if (field.getName().equals(sort)) {
// isExsit = true;
// break;
// }
// }
// if (!isExsit) {
// throw new BeanException("排序字段'{}'异常", sort);
// }
// }
// StringBuilder orderBy = new StringBuilder();
// for (int i = 0; i < fieldArray.length; i++) {
// if (i!=0) {
// orderBy.append(",");
// }
// orderBy.append(humpToLine(fieldArray[i])).append(orders[i].equalsIgnoreCase("desc")?" desc":" asc");
// }
// PageHelper.orderBy(orderBy.toString());
// }
// }
// }
// public void initPagingData(Class<?> cls){
// this.validateOrderField(true, cls);
// }
//
// public void initAllData(Class<?> cls){
// this.validateOrderField(false, cls);
// }
// public Page setResult(List<?> result){
// com.github.pagehelper.Page<?> page = (com.github.pagehelper.Page<?>) result;
// this.total = page.getTotal();
// this.list = page.getResult();
// return this;
// }
public void setData(List<?> data) {
this.list = data;
}
public static String humpToLine(String str) {
return str.replaceAll("[A-Z]", "_$0").toLowerCase();
}
public List<?> getList() {
if(CollectionUtils.isEmpty(this.list)){
this.list = new ArrayList<>();
}
return list;
}
@Override
public String toString() {
return "com.md.common.entity.Page{" +
"serialVersionUID=" + serialVersionUID +
", page=" + page +
", limit=" + limit +
", list=" + list +
", field='" + field + '\'' +
", order='" + order + '\'' +
", total=" + total +
'}';
}
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Personnel {
String id;
String eid;
Integer jskEid;
String md5Company;
String name;
String sex;
String cardType;
String cardNo;
String ename;
String phone;
String registerCount;
String blaCount;
String changeCount;
String manceCount;
String noHaviorCount;
String haviorCount;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.List;
/**
* 人员查询实体类
* @author Administrator
*
*/
@Data
public class PersonnelCertificateQueryDto {
// 注册类型
List<ComposeRegisterDto> registers;
String queryType;
String queryCategory;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
@Data
public class PersonnelExeclDto {
String id;
String name;
String registerType;
String specialty;
String ename;
String cardNumber;
Date validDate;
String phone;
String pids;
String projectCount;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.List;
/**
* 人员查询实体类
* @author Administrator
*
*/
@Data
public class PersonnelQueryDto {
// 注册类型
List<RegisterTypeDto> registers;
// 人员姓名
String personName;
// 项目名称
String projectName;
// 业绩
Double startMoney;
Double endMoney;
// 企业名称
String ename;
// comp有竣工 yes有业绩 no没业绩
String mance;
String cardNumber;
String queryType;
String queryCategory;
//企业注册地
String domicile;
String domicileNum;
String domicileCity;
String registerProvince;
String registerCity;
//人员唯一标识
String md5Company;
//人员id
String staffId;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class RecentlyBidQueryDto {
// 项目属地
String divisionStr;
Integer companyProvinceId;
// 项目属地
String cityStr;
String province;
Integer provinceId;
String city;
Integer cityId;
String county;
Integer countyId;
String eid;
String ename;
String pname;
String buildCorpName;
Double startMoney;
Double endMoney;
// 关键词(包含)
List<KeywordDto> keywords;
// 关键词(不包含)
String keywordNot;
//单项查询 关键词包含
String singleKeywordIn;
//单项查询 关键词不包含
String singleKeywordOut;
// 中标开始时间
Date startTenderTime;
// 中标结束时间
Date endTenderTime;
Integer achievementCount;
String projectName;
String tenderType;
String sourceName;
String projectType;
String projectTypeNew;
String hasMoney;
Double startLowerRate;
Double endLowerRate;
String hasLowerRate;
//业绩列表类型 lowerRate 下浮率业绩
String listType;
//是否有电话 0否 1是
Integer hasPhone;
}
package com.dsk.jsk.domain.bo;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class ReflectionUtils {
/**
* 获取全部属性 (追溯到所有顶级类)但不包括常量
*
* @param object
* @return
*/
public static List<Field> getDeclaredField(Object object) {
Class<?> clazz = object.getClass();
return getDeclaredField(clazz);
}
public static List<Field> getDeclaredField(Class<?> clazz) {
List<Field> fields = new ArrayList<Field>();
for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
for (Field field : clazz.getDeclaredFields()) {
switch (field.getModifiers()) {
case 24:
case 25:
case 26:
case 28:
continue;
default:
fields.add(field);
break;
}
}
}
return fields;
}
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
@Data
public class RegisterTypeDto {
//来源
String personType;
// 注册专业
String registerSpecialty;
// 类型名称
String registerName;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 水利业绩筛选实体
*
* @author lcl
* @create 2021/8/30
*/
@Data
public class ShuiliAchievementQueryDto implements Serializable {
//参建单位
private String ename;
//建设单位
private String buildCorpName;
//项目负责人
private String projectPrincipal;
//业绩类型 单个
private String achievementType;
//工程类型
private String projectType;
//项目状态
private String projectStatus;
//工程等别
private String grade;
//工程级别
private String level;
//工程规模
private String projectScale;
//省
private String divisionStr;
//市
private String cityStr;
private String province;//注册地 省级code 多个逗号隔开
private String city;//注册地 市级code 多个逗号隔开
private String county;//注册地 区级code 多个逗号隔开
//关键词(包含) 多个空格分隔
private List<KeywordDto> keywords;
//关键词(不包含) 多个空格分隔
private String keywordNot;
private String keywordNotType;
//单项查询 关键词包含
private String singleKeywordIn;
//单项查询 关键词不包含
private String singleKeywordOut;
//单项查询 关键词包含体现节点
private String singleKeywordInNode;
//单项查询 关键词不包含体现节点
private String singleKeywordOutNode;
//项目金额(最大)
private Double endMoney;
//项目金额(最小)
private Double startMoney;
//项目金额体现 多个空格分隔
private String moneyStr;
//项目金额类型 and/or
private String moneyQueryType;
//实际开工时间(开始)
private Date startTimeFactBegin;
//实际开工时间(结束)
private Date startTimeFactEnd;
//实际竣工时间(开始)
private Date overTimeFactBegin;
//实际竣工时间(结束)
private Date overTimeFactEnd;
//开工日期(开始)
private Date startTimeBegin;
//开工日期(结束)
private Date startTimeEnd;
//完工日期(开始)
private Date overTimeBegin;
//完工日期(结束)
private Date overTimeEnd;
//合同签订日期(开始)
private Date contractDateBegin;
//合同签订日期(结束)
private Date contractDateEnd;
//报告提交日期(开始)
private Date reportCommitDateBegin;
//报告提交日期(结束)
private Date reportCommitDateEnd;
//时间类型 and/or
private String timeQueryType;
//截图体现节点
private String screenshotShowNode;
//截图体现类型 and/or
private String screenshotShowType;
//业绩数量
private Integer achievementCount;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
@Data
public class SkyProjectIndexDto {
String descriptionType;
Double indexData;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @ClassName SpecialBondInformationDetailsDto
* @Description 专项债-详情
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class SpecialBondInformationDetailsDto {
/**
* 专项债券唯一标识
*/
@NotNull(message = "id 不能为空")
private Integer id;
}
package com.dsk.jsk.domain.bo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
/**
* @ClassName SpecialBondInformationPageDto
* @Description 专项债-详情分页
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class SpecialBondInformationPageDto extends BasePage {
/**
* 专项债券唯一标识
*/
private String specialBondUuid;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class SpecialBondProjectDto {
Long id;
String uuid;
String projectName;
//match精确 like模糊
String nameType;
String projectType;
//项目总投资
String projectTotalInvestment;
//项目资本金
String projectCapital;
//专项债金额
String specialCapital;
//项目主体
String projectEntity;
//项目主体id
Long projectEntityId;
//主管部门
String chargeDepartment;
//实施单位
String piu;
Long piuId;
String domicile;
String province;
String city;
String area;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
/**
* @ClassName SpecialPurposeBonds
* @Description 专项债-项目类别统计
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class SpecialPurposeBondsDto {
/**
* 省Id
*/
private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区Id
*/
private Integer areaId;
/**
* 项目类型
*/
private String specialBondProjectType;
/**
* 项目个数
*/
private Integer count;
/**
* 投资金额
*/
private Double projectTotalInvestment;
/**
* 比例(%)
*/
private Double proportion;
/**
* 排序字段
*/
private String field;
/**
* 排序 (降序desc 升序asc)
*/
private String order;
/**
* 是否为历史(1是,0否)
*/
private Integer isHistory;
}
package com.dsk.jsk.domain.bo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
/**
* @ClassName SpecialPurposeBonds
* @Description 专项债-项目分页列表
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class SpecialPurposeBondsPageDto extends BasePage {
/**
* 省Id
*/
private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区Id
*/
private Integer areaId;
/**
* 排序字段 默认-投资金额
*/
private String field;
/**
* 排序 (降序desc 升序asc)
*/
private String order;
/**
* 是否为历史(1是,0否)
*/
private Integer isHistory;
}
package com.dsk.jsk.domain.bo;
import com.dsk.jsk.domain.BasePage;
import lombok.Data;
import java.util.List;
/**
* @ClassName UrbanInvestmentPlatformDto
* @Description 城投平台参数对象
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class UrbanInvestmentPlatformDto extends BasePage {
/**
* 行政级别
*/
private String uipExecutiveLevel;
/**
* 城投业务类型
*/
private List<String> uipBusinessType;
/**
* 主体评级
*/
private List<String> bratingSubjectLevel;
/**
* 股东背景
*/
private List<String> shareholderBg;
/**
* 股权关系
*/
private List<String> equityRelationship;
/**
* 平台重要性
*/
private List<String> platformImportance;
/**
* 所属开发区
*/
private List<String> developmentZone;
/**
* 省
*/
private List<Integer> provinceIds;
/**
* 市
*/
private List<Integer> cityIds;
/**
* 区
*/
private List<Integer> areaIds;
/**
* 关键词
*/
private String keyword;
/**
* 排序字段
*/
private String field;
/**
* 字段 desc asc
*/
private String order;
/**
* 含下属区:1 本级:2
*/
private Integer type =1;
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.util.Objects;
/**
* @ClassName UrbanInvestmentPlatformSubjectLevelDto
* @Description 信用评级
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class UrbanInvestmentPlatformSubjectLevelDto {
/**
* 企业Id
*/
private Long companyId;
/**
* 主体评级
*/
private String bratingSubjectLevel;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
UrbanInvestmentPlatformSubjectLevelDto that = (UrbanInvestmentPlatformSubjectLevelDto) o;
return Objects.equals(companyId, that.companyId);
}
@Override
public int hashCode() {
return Objects.hash(companyId);
}
}
package com.dsk.jsk.domain.bo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 江西住建筛选实体
*
* @author lcl
* @create 2021/8/30
*/
@Data
public class YitihuaAchievementQueryDto implements Serializable {
//参建单位
private String ename;
//建设单位
private String buildCorpName;
//业绩类型 多个空格分隔
private String achievementType;
//项目分类 多个空格分隔
private String projectType;
//工程用途 多个空格分隔
private String purposeStr;
//建设性质 多个空格分隔
private String nature;
//招标方式 多个空格分隔
private String tenderWay;
//关键词(包含) 多个空格分隔
private List<KeywordDto> keywords;
//关键词(不包含) 多个空格分隔
private String keywordNot;
private String keywordNotType;
//单项查询 关键词包含
String singleKeywordIn;
//单项查询 关键词不包含
String singleKeywordOut;
//单项查询 关键词包含体现节点
String singleKeywordInNode;
//单项查询 关键词不包含体现节点
String singleKeywordOutNode;
//是否截图体现公司和规模 yes no
Boolean isSingleReflect;
//项目节点
private String attributeStr;
//项目节点类型 and/or
private String attributeQueryType;
//项目金额(最大)
private Double endMoney;
//项目金额(最小)
private Double startMoney;
//项目金额体现 多个空格分隔
private String moneyStr;
//中标金额
private Double startTenderMoney;
private Double endTenderMoney;
//合同金额
private Double startContractMoney;
private Double endContractMoney;
//施工许可金额
private Double startLicenceMoney;
private Double endLicenceMoney;
//竣工验收实际造价
private Double startCompletionMoney;
private Double endCompletionMoney;
//竣工备案实际造价
private Double startCheckMoney;
private Double endCheckMoney;
//总投资
private Double startInvest;
private Double endInvest;
//项目金额类型 and/or
private String moneyQueryType;
//项目面积(最大)
private Double endArea;
//项目面积(最小)
private Double startArea;
//项目面积体现 多个空格分隔
private String areaStr;
//招投标面积
private Double startTenderArea;
private Double endTenderArea;
//施工许可面积
private Double startLicenceArea;
private Double endLicenceArea;
//竣工验收面积
private Double startCheckArea;
private Double endCheckArea;
//竣工验收备案面积
private Double startCompletionArea;
private Double endCompletionArea;
//总面积
private Double startTotalArea;
private Double endTotalArea;
//项目面积类型 and/or
private String areaQueryType;
//金额和面积类型 and/or
private String moneyAndAreaQueryType;
//项目经理节点 多个空格分隔
private String pmStr;
//项目经理类型 and/or
private String pmQueryType;
//中标时间(开始-结束)
private Date startTenderTime;
private Date endTenderTime;
//合同签订时间(开始-结束)
private Date startContractDate;
private Date endContractDate;
//许可时间(开始-结束)
private Date startLicenceDate;
private Date endLicenceDate;
//备案开工时间(开始-结束)
private Date startWorkDate;
private Date endWorkDate;
//竣工备案时间(开始-结束)
private Date startCheckDate;
private Date endCheckDate;
//竣工备案时间未公示
private String hasCheckDate;
//实际开工时间(开始-结束)
private Date startCheckWorkDate;
private Date endCheckWorkDate;
//竣工验收时间(开始-结束)
private Date startCheckCheckDate;
private Date endCheckCheckDate;
//竣工验收时间未公示
private String hasCheckCheckDate;
//图审完成时间(开始-结束)
private Date startCensorDate;
private Date endCensorDate;
//时间类型 and/or
private String timeQueryType;
//省
private String divisionStr;
//市
private String cityStr;
//区
private String countyStr;
private String province;//注册地 省级code 多个逗号隔开
private String city;//注册地 市级code 多个逗号隔开
private String county;//注册地 区级code 多个逗号隔开
//业绩数量
private Integer achievementCount;
// 数据等级
private String dataLevel;
//招投标数据等级
private String tenderDataLevel;
//合同登记
private String contractDataLevel;
//施工许可
private String licenceDataLevel;
//竣工验收备案
private String completionDataLevel;
//项目主体
private String projectDataLevel;
//施工图审
private String censorDataLevel;
//竣工验收
private String checkDataLevel;
// 数据等级查询节点
private String dataLevelStr;
// 数据等级查询方式 同时具备 任意均可
private String dataLevelQueryType;
// 结构体系
private String structure;
//长度
private Double startLength;
//长度
private Double endLength;
//施工许可
private Double startLicenceLength;
private Double endLicenceLength;
//竣工验收
private Double startCheckCompletionLength;
private Double endCheckCompletionLength;
//竣工验收备案
private Double startCompletionLength;
private Double endCompletionLength;
//长度体现节点
private String lengthNode;
//长度筛选类型 or/and
private String lengthType;
//跨度
private Double startSpan;
//跨度
private Double endSpan;
//施工许可
private Double startLicenceSpan;
private Double endLicenceSpan;
//竣工验收
private Double startCheckCompletionSpan;
private Double endCheckCompletionSpan;
//竣工验收备案
private Double startCompletionSpan;
private Double endCompletionSpan;
//跨度体现节点
private String spanNode;
//跨度筛选类型 or/and
private String spanType;
}
package com.dsk.jsk.domain.bo;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
//在建导出参数接收
@Getter
@Setter
public class ZaiJianListDto {
List<String> md5CompanyList;
List<ZaiJianPersonnelDto> nullDataList;
}
package com.dsk.jsk.domain.bo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.Date;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ZaiJianPersonnelDto extends Personnel {
Integer no;
String id;
String registerType;
String cardNumber;
String sealNumber;
Date validDate;
String pid;
String eid;
Integer jskEid;
String specialty;
String ename;
String projectName;
String province;
Long tenderDate;
//中标时间
String tenderTime;
Double tenderMoney;
Integer period;
String registerInfo;
String otherRegisterInfo;
//项目状态
String status;
//人员角色
String personRole;
//业绩来源
String source;
String sourceName;
//业绩来源类型 1四库一平台 2最新中标 3全国公路
String sourceType;
//信息快照
String sourceUrl;
//合同金额
Double contractMoney;
//许可金额
Double licenceMoney;
//实际造价(竣工金额)
Double overMoney;
//结算金额
Double settlementMoney;
//金额信息
String totalMoney;
//合同时间
String contractDate;
//许可时间
String licenceDate;
//计划竣工时间
String planCompletionDate;
//实际竣工时间
String completionDate;
//计划开工时间
String planStartDate;
//实际开工时间
String startDate;
//计划交工时间
String planHandoverDate;
//实际交工时间
String handoverDate;
//时间信息
String totalDate;
//业绩个数
Long achievementCount;
//各自系统的人员id
String personId;
//快照
String snapshootPic;
//人员id
String staffId;
}
package com.dsk.jsk.domain.vo;
import com.dsk.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 集团中标业绩
* @author lcl
* @create 2023/8/28
*/
@Data
public class JskCombineBidProjectExportVo implements Serializable {
@Excel(name = "序号", width = 6)
private Integer id;
@Excel(name = "招标发布时间", width = 15, dateFormat = "yyyy/MM/dd")
private Date issueTime;
@Excel(name = "招标成员", width = 30)
private String tenderee;
@Excel(name = "持股比例", suffix = "%" , width = 15)
private Double stockPercent;
@Excel(name = "成员等级", width = 15)
private String memberLevel;
@Excel(name = "项目名称", width = 50)
private String projectName;
@Excel(name = "预算金额" , suffix = "万元")
private Double bidAmount;
@Excel(name = "项目地区", width = 20)
private String address;
@Excel(name = "招标采购分类", width = 15)
private String subjectMatter;
@Excel(name = "项目类型", width = 15)
private String projectType;
@Excel(name = "代理单位", width = 30)
private String agency;
}
package com.dsk.jsk.domain.vo;
import com.dsk.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 集团中标业绩
* @author lcl
* @create 2023/8/28
*/
@Data
public class JskCombineWinBidProjectExportVo implements Serializable {
@Excel(name = "序号", width = 6)
private Integer id;
@Excel(name = "中标时间", width = 15, dateFormat = "yyyy/MM/dd")
private Date bidTime;
@Excel(name = "成员名称", width = 30)
private String companyName;
@Excel(name = "持股比例", suffix = "%" , width = 15)
private Double stockPercent;
@Excel(name = "成员等级", width = 15)
private String memberLevel;
@Excel(name = "项目名称", width = 50)
private String projectName;
@Excel(name = "中标金额" , suffix = "万元")
private Double bidAmount;
@Excel(name = "中标地区", width = 20)
private String address;
@Excel(name = "业绩类型", width = 15)
private String boundType;
@Excel(name = "项目类型", width = 15)
private String projectType;
@Excel(name = "业主单位", width = 30)
private String projectUnit;
}
......@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONObject;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.jsk.domain.bo.ComposeQueryDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -51,13 +52,13 @@ public class BusinessOpportunityRadarService {
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult enterpriseIndex(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/index", object);
public AjaxResult enterpriseIndex(ComposeQueryDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/index", BeanUtil.beanToMap(dto,false,false));
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult enterprisePage(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/page", object);
public AjaxResult enterprisePage(ComposeQueryDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/page", BeanUtil.beanToMap(dto,false,false));
return BeanUtil.toBean(map, AjaxResult.class);
}
......
......@@ -385,7 +385,7 @@ public class EnterpriseService {
}
public R remark(EnterpriseRemarkBody vo) throws Exception {
return R.ok(EncodeIdUtil.avDecode(EncodeIdUtil.binaryToUnicode(vo.mark)));
return R.ok("操作成功", EncodeIdUtil.avDecode(EncodeIdUtil.binaryToUnicode(vo.mark)));
}
public R bondCreditRating(EnterpriseBondCreditRatingBody body) throws Exception {
......
package com.dsk.jsk.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.jsk.domain.JskCombineBidPageDto;
import com.dsk.jsk.domain.JskCombineCertificateDto;
import com.dsk.jsk.domain.JskCombineSearchDto;
import com.dsk.jsk.domain.vo.JskCombineBidProjectExportVo;
import com.dsk.jsk.domain.vo.JskCombineWinBidProjectExportVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author lcl
* @create 2023/8/7
*/
@Slf4j
@Service
public class JskCombineInfoService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Autowired
private EnterpriseService enterpriseService;
public TableDataInfo memberList(JskCombineSearchDto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/memberList", BeanUtil.beanToMap(dto, false, false));
return dskOpenApiUtil.responsePage(map);
}
public R groupMemberCount(JskCombineSearchDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/group/memberCount", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, R.class);
}
public TableDataInfo businessList(JskCombineSearchDto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/project/combine/projectList", BeanUtil.beanToMap(dto, false, false));
if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (!ObjectUtils.isEmpty(data.get("list"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "companyId");
String companyName = MapUtils.getString(res, "companyName");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
Integer projectUnitId = MapUtils.getInteger(res, "projectUnitId");
String projectUnit = MapUtils.getString(res, "projectUnit");
res.put("projectUnitUipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(projectUnit, projectUnitId));
});
}
}
return dskOpenApiUtil.responsePage(map);
}
public TableDataInfo certificateList(JskCombineSearchDto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/certificateList", BeanUtil.beanToMap(dto, false, false));
return dskOpenApiUtil.responsePage(map);
}
public TableDataInfo menberCertificateList(JskCombineCertificateDto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/member/certificateList", BeanUtil.beanToMap(dto, false, false));
return dskOpenApiUtil.responsePage(map);
}
public R groupCertificateCount(JskCombineSearchDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/group/certificateCount", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, R.class);
}
public AjaxResult index(Map<String,Object> object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/groupCompany", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult centralEnterprse() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/centralEnterprse", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult centralEnterprseChild() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/centralEnterprse/child", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult centralEnterprseChildPage(Map<String,Object> object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/centralEnterprse/child/page", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult centralEnterprseLocal(Map<String,Object> object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/centralEnterprse/local", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult centralEnterprseLocalPage(Map<String,Object> object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/centralEnterprse/local/page", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult centralEnterprseSocial() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/centralEnterprse/social", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult centralEnterprseSocialPage(Map<String,Object> object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/centralEnterprse/social/page", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public List<JskCombineWinBidProjectExportVo> exportWinBid(JskCombineSearchDto dto) {
if (ObjectUtils.isEmpty(dto.getPageSize())) throw new ServiceException("导出条数不能为空!");
if (dto.getPageSize() > 2000) dto.setPageSize(2000);
dto.setPageNum(1);
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/project/combine/projectList", BeanUtil.beanToMap(dto, false, false));
if (ObjectUtils.isEmpty(map.get("data"))) throw new ServiceException("导出失败,系统错误!");
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (ObjectUtils.isEmpty(data.get("list"))) throw new ServiceException("导出失败,系统错误!");
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
if (ObjectUtils.isEmpty(list)) throw new ServiceException("导出失败,无数据导出!");
List<JskCombineWinBidProjectExportVo> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
JskCombineWinBidProjectExportVo vo = new JskCombineWinBidProjectExportVo();
vo.setId(i + 1);
vo.setBidTime(MapUtil.getDate(list.get(i),"bidTime"));
vo.setCompanyName(MapUtil.getStr(list.get(i),"companyName"));
vo.setStockPercent(MapUtil.getDouble(list.get(i),"stockPercent"));
vo.setMemberLevel(MapUtil.getStr(list.get(i),"memberLevel"));
vo.setProjectName(MapUtil.getStr(list.get(i),"projectName"));
vo.setBidAmount(MapUtil.getDouble(list.get(i),"bidAmount"));
vo.setAddress(MapUtil.getStr(list.get(i),"address"));
vo.setBoundType(MapUtil.getStr(list.get(i),"boundType"));
vo.setProjectType(MapUtil.getStr(list.get(i),"projectType"));
vo.setProjectUnit(MapUtil.getStr(list.get(i),"projectUnit"));
result.add(vo);
}
return result;
}
public List<JskCombineBidProjectExportVo> exportBid(JskCombineBidPageDto dto) {
if (ObjectUtils.isEmpty(dto.getPageSize())) throw new ServiceException("导出条数不能为空!");
if (dto.getPageSize() > 2000) dto.setPageSize(2000);
dto.setPageNum(1);
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/bidPage", BeanUtil.beanToMap(dto, false, false));
if (ObjectUtils.isEmpty(map.get("data"))) throw new ServiceException("导出失败,系统错误!");
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (ObjectUtils.isEmpty(data.get("list"))) throw new ServiceException("导出失败,系统错误!");
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
if (ObjectUtils.isEmpty(list)) throw new ServiceException("导出失败,无数据导出!");
List<JskCombineBidProjectExportVo> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
JskCombineBidProjectExportVo vo = new JskCombineBidProjectExportVo();
vo.setId(i + 1);
vo.setIssueTime(MapUtil.getDate(list.get(i),"issueTime"));
vo.setTenderee(MapUtil.getStr(list.get(i),"tenderee"));
vo.setStockPercent(MapUtil.getDouble(list.get(i),"stockPercent"));
vo.setMemberLevel(MapUtil.getStr(list.get(i),"memberLevel"));
vo.setProjectName(MapUtil.getStr(list.get(i),"projectName"));
vo.setBidAmount(MapUtil.getDouble(list.get(i),"bidAmount"));
vo.setAddress(MapUtil.getStr(list.get(i),"address"));
vo.setSubjectMatter(MapUtil.getStr(list.get(i),"subjectMatter"));
vo.setProjectType(MapUtil.getStr(list.get(i),"projectType"));
vo.setAgency(MapUtil.getStr(list.get(i),"agency"));
result.add(vo);
}
return result;
}
public TableDataInfo bidPage(JskCombineBidPageDto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/combine/bidPage", BeanUtil.beanToMap(dto, false, false));
if (ObjectUtil.isNotEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
if (!ObjectUtils.isEmpty(data.get("list"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) data.get("list");
list.parallelStream().forEach(res -> {
//招标企业
Integer tendereeId = MapUtils.getInteger(res, "tendereeId");
String tenderee = MapUtils.getString(res, "tenderee");
// 代理机构名称
Integer agencyId = MapUtils.getInteger(res, "agencyId");
String agency = MapUtils.getString(res, "agency");
res.put("tendereeUipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(tenderee, tendereeId));
res.put("agencyUipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(agency, agencyId));
});
}
}
return dskOpenApiUtil.responsePage(map);
}
}
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