diff --git a/src/main/java/mjkf/xinke/main/dao/DataFujianMapper.java b/src/main/java/mjkf/xinke/main/dao/DataFujianMapper.java
new file mode 100644
index 0000000..ca3d219
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/dao/DataFujianMapper.java
@@ -0,0 +1,16 @@
+package mjkf.xinke.main.dao;
+
+import mjkf.xinke.main.model.db.DataFujian;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 福建数据 Mapper 接口
+ *
+ *
+ * @author han0
+ * @since 2023-12-28
+ */
+public interface DataFujianMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/mjkf/xinke/main/dao/DataGuangdongMapper.java b/src/main/java/mjkf/xinke/main/dao/DataGuangdongMapper.java
new file mode 100644
index 0000000..69964db
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/dao/DataGuangdongMapper.java
@@ -0,0 +1,16 @@
+package mjkf.xinke.main.dao;
+
+import mjkf.xinke.main.model.db.DataGuangdong;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 广东数据 Mapper 接口
+ *
+ *
+ * @author han0
+ * @since 2023-12-28
+ */
+public interface DataGuangdongMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/mjkf/xinke/main/dao/DataZhejiangMapper.java b/src/main/java/mjkf/xinke/main/dao/DataZhejiangMapper.java
new file mode 100644
index 0000000..fee6079
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/dao/DataZhejiangMapper.java
@@ -0,0 +1,16 @@
+package mjkf.xinke.main.dao;
+
+import mjkf.xinke.main.model.db.DataZhejiang;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 浙江数据 Mapper 接口
+ *
+ *
+ * @author han0
+ * @since 2023-12-28
+ */
+public interface DataZhejiangMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/DataFujian.java b/src/main/java/mjkf/xinke/main/model/db/DataFujian.java
new file mode 100644
index 0000000..fdcbcbe
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/DataFujian.java
@@ -0,0 +1,83 @@
+package mjkf.xinke.main.model.db;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 福建数据
+ *
+ *
+ * @author han0
+ * @since 2023-12-28
+ */
+@Getter
+@Setter
+@TableName("DATA_FUJIAN")
+@ApiModel(value = "DataFujian对象", description = "福建数据")
+public class DataFujian extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("编码")
+ @TableField("`NUMBER`")
+ private String number;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("单位")
+ @TableField("UNIT")
+ private String unit;
+
+ @ApiModelProperty("除价格")
+ @TableField("PRICE_WITHOUT_TAX")
+ private BigDecimal priceWithoutTax;
+
+ @ApiModelProperty("含税价")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("分类")
+ @TableField("CATEGORY")
+ private String category;
+
+ @ApiModelProperty("年份")
+ @TableField("`YEAR`")
+ private Integer year;
+
+ @ApiModelProperty("月份")
+ @TableField("`MONTH`")
+ private Integer month;
+
+ @ApiModelProperty("地市")
+ @TableField("CITY")
+ private String city;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/DataGuangdong.java b/src/main/java/mjkf/xinke/main/model/db/DataGuangdong.java
new file mode 100644
index 0000000..edd4d99
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/DataGuangdong.java
@@ -0,0 +1,54 @@
+package mjkf.xinke.main.model.db;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+import java.time.LocalDate;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 广东数据
+ *
+ *
+ * @author han0
+ * @since 2023-12-28
+ */
+@Getter
+@Setter
+@TableName("DATA_GUANGDONG")
+@ApiModel(value = "DataGuangdong对象", description = "广东数据")
+public class DataGuangdong extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("下载地址")
+ @TableField("URL")
+ private String url;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("来源")
+ @TableField("`SOURCE`")
+ private String source;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/DataZhejiang.java b/src/main/java/mjkf/xinke/main/model/db/DataZhejiang.java
new file mode 100644
index 0000000..c3cc4e2
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/DataZhejiang.java
@@ -0,0 +1,54 @@
+package mjkf.xinke.main.model.db;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+import java.time.LocalDate;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * 浙江数据
+ *
+ *
+ * @author han0
+ * @since 2023-12-28
+ */
+@Getter
+@Setter
+@TableName("DATA_ZHEJIANG")
+@ApiModel(value = "DataZhejiang对象", description = "浙江数据")
+public class DataZhejiang extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("下载地址")
+ @TableField("URL")
+ private String url;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("来源")
+ @TableField("`SOURCE`")
+ private String source;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/service/DataFujianService.java b/src/main/java/mjkf/xinke/main/service/DataFujianService.java
new file mode 100644
index 0000000..f358c31
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/DataFujianService.java
@@ -0,0 +1,70 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.DataFujian;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.Map;
+
+
+@Service
+public class DataFujianService extends DataService, DataFujian> {
+
+ public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ if (keyWord != null) {
+ query.and(e -> e.like(DataFujian::getName, keyWord));
+ }
+ if (year != null) {
+ query.eq(DataFujian::getYear, year);
+ }
+ if (month != null) {
+ query.eq(DataFujian::getMonth, month);
+ }
+ if (name != null) {
+ query.like(DataFujian::getName, name);
+ }
+ if (materialId != null) {
+ // todo
+ // query.eq(SteelSection::getMaterialId, materialId);
+ }
+ return query;
+ }
+
+ public LambdaQueryWrapper indexQuery(DataFujian data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(DataFujian::getYear, data.getYear());
+ query.eq(DataFujian::getMonth, data.getMonth());
+ query.eq(DataFujian::getCity, data.getCity());
+ query.eq(DataFujian::getName, data.getName());
+ query.eq(DataFujian::getSpec, data.getSpec());
+ return query;
+ }
+
+ public LambdaQueryWrapper filterQuery(LambdaQueryWrapper query) {
+ return query;
+ }
+
+ public DataFujian getMapGroupingBy(Map item) {
+ var o = new DataFujian();
+ o.setYear(Integer.valueOf(item.get("year").toString()));
+ o.setMonth(Integer.valueOf(item.get("month").toString()));
+ o.setCity(item.get("city").toString());
+ o.setName(item.get("name").toString());
+ o.setSpec(item.get("spec").toString());
+ return o;
+ }
+
+ public LambdaQueryWrapper trendQuery(Object obj, Integer year, Integer month) {
+ var data = (DataFujian) obj;
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(DataFujian::getName, data.getName());
+ var date = LocalDate.of(year, month, 1);
+ query.between(DataFujian::getDate, date, date.plusMonths(1));
+ return query;
+ }
+
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/DataGuangdongService.java b/src/main/java/mjkf/xinke/main/service/DataGuangdongService.java
new file mode 100644
index 0000000..b8eaafe
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/DataGuangdongService.java
@@ -0,0 +1,68 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.DataGuangdong;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class DataGuangdongService extends DataService, DataGuangdong> {
+ public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ if (keyWord != null) {
+ query.and(e -> e.like(DataGuangdong::getName, keyWord));
+ }
+ if (year != null) {
+ var date = LocalDate.of(year, month, 1);
+ query.between(DataGuangdong::getDate, date, date.plusYears(1));
+ }
+ if (month != null) {
+ var date = LocalDate.of(year, month, 1);
+ query.between(DataGuangdong::getDate, date, date.plusMonths(1));
+ }
+ if (name != null) {
+ query.like(DataGuangdong::getName, name);
+ }
+ if (materialId != null) {
+ // todo
+ // query.eq(SteelSection::getMaterialId, materialId);
+ }
+ return query;
+ }
+
+ public LambdaQueryWrapper indexQuery(DataGuangdong data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(DataGuangdong::getName, data.getName());
+ query.eq(DataGuangdong::getDate, data.getDate());
+ return query;
+ }
+
+ public LambdaQueryWrapper filterQuery(LambdaQueryWrapper query) {
+ return query;
+ }
+
+ public DataGuangdong getMapGroupingBy(Map item) {
+ var o = new DataGuangdong();
+ o.setName(item.get("name").toString());
+ return o;
+ }
+
+ public LambdaQueryWrapper trendQuery(Object obj, Integer year, Integer month) {
+ var data = (DataGuangdong) obj;
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(DataGuangdong::getName, data.getName());
+ var date = LocalDate.of(year, month, 1);
+ query.between(DataGuangdong::getDate, date, date.plusMonths(1));
+ return query;
+ }
+
+ public List