diff --git a/pom.xml b/pom.xml
index ba1dc4b..c45f546 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
mjkf.xinke
mjkf-xinke-boot
- 1.0.0-SNAPSHOT
+ 1.0.2-SNAPSHOT
material-manage-service
@@ -39,12 +39,12 @@
${dep.xxs-common-core.version}
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
+
+
+
+
+
+
@@ -102,12 +102,12 @@
-
-
-
-
-
-
+
+
+ mjkf.xinke
+ mjkf-xinke-plugin-mobile
+ ${mjkf-xinke.version}
+
diff --git a/src/main/java/mjkf/xinke/main/common/api/DataToolApi.java b/src/main/java/mjkf/xinke/main/common/api/DataToolApi.java
new file mode 100644
index 0000000..6961861
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/common/api/DataToolApi.java
@@ -0,0 +1,48 @@
+package mjkf.xinke.main.common.api;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
+import com.jgy.xxs.core.http.resp.NcHttpResponse;
+import okhttp3.MultipartBody;
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.http.*;
+
+import java.util.List;
+
+
+public interface DataToolApi {
+
+ @GET("/data/by-task")
+ Call>> listDataByTask(
+ @Query("type") Integer type, @Query("id") String id,
+ @Query("limit") Integer limit, @Query("page") Integer page
+ );
+
+// @POST("/split/remote-sensing-image/single/sync")
+// Call splitRemoteSensingImageSingleSync(@Body PointRangeMsg jsonObject);
+
+ @POST("/split/remote-sensing-image/multi/sync")
+ Call splitRemoteSensingImageMultiSync(@Body JSONArray points);
+
+ @Multipart
+ @POST("/tools/parse-point-range/kml")
+ Call toolsParsePointRangeKml(@Part() MultipartBody.Part files);
+
+ @Multipart
+ @POST("/tools/convert")
+ Call convert(@Part() MultipartBody.Part files, @Query("to_crs") String toCRS, @Query("format") String format);
+
+ @POST("/tools/create-shape/fe-data")
+ Call createShapeByFeData(@Body JSONObject feData);
+
+ @Multipart
+ @POST("/landuse/import-data/async")
+ Call importLanduseDataAsync(
+ @Part() MultipartBody.Part files, @Query("cm") Double cm, @Query("project_id") Long projectId,
+ @Query("project_no") String projectNo, @Query("project_name") String projectName,
+ @Query("creator_id") String creatorId, @Query("creator_name") String creatorName,
+ @Query("building_tolerance") Double buildingTolerance
+ );
+}
diff --git a/src/main/java/mjkf/xinke/main/common/generator/DataDbMpGenerator.java b/src/main/java/mjkf/xinke/main/common/generator/DataDbMpGenerator.java
index b9b127a..459828e 100644
--- a/src/main/java/mjkf/xinke/main/common/generator/DataDbMpGenerator.java
+++ b/src/main/java/mjkf/xinke/main/common/generator/DataDbMpGenerator.java
@@ -21,17 +21,7 @@ public class DataDbMpGenerator {
private static String password = "Xxs123456";
private static String schema = "material_manage";
private static String[] tableList = {
- "OIL",
- "CEMENT",
- "ASPHALT_DOMESTIC",
- "ASPHALT_IMPORTED",
- "STEEL_PLATE",
- "STEEL_REBAR",
- "STEEL_STRAND",
- "MATERIAL",
- "MATERIAL_TASK",
- "PRICE_PUBLISH",
- "PRICE_RESULT",
+ "SANMING_STEEL",
};
diff --git a/src/main/java/mjkf/xinke/main/common/property/ApiHostProperty.java b/src/main/java/mjkf/xinke/main/common/property/ApiHostProperty.java
new file mode 100644
index 0000000..8520520
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/common/property/ApiHostProperty.java
@@ -0,0 +1,12 @@
+package mjkf.xinke.main.common.property;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@ConfigurationProperties(prefix = "api.host")
+@Component
+public class ApiHostProperty {
+ private String dataTool;
+}
diff --git a/src/main/java/mjkf/xinke/main/common/serializer/DotTupleFieldSerializer.java b/src/main/java/mjkf/xinke/main/common/serializer/DotTupleFieldSerializer.java
new file mode 100644
index 0000000..a8b988b
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/common/serializer/DotTupleFieldSerializer.java
@@ -0,0 +1,22 @@
+package mjkf.xinke.main.common.serializer;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+
+@Deprecated
+public class DotTupleFieldSerializer extends JsonSerializer {
+ @Override
+ public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ if (s == null || ObjectUtil.isEmpty(s)) {
+ jsonGenerator.writeNull();
+ } else {
+ String[] data = s.split(",");
+ jsonGenerator.writeArray(data, 0, data.length);
+ }
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/config/SolrProxyServletConfig.java b/src/main/java/mjkf/xinke/main/config/SolrProxyServletConfig.java
new file mode 100644
index 0000000..49cf1c8
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/config/SolrProxyServletConfig.java
@@ -0,0 +1,38 @@
+package mjkf.xinke.main.config;
+
+import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.mitre.dsmiley.httpproxy.ProxyServlet;
+import org.springframework.boot.context.properties.bind.BindResult;
+import org.springframework.boot.context.properties.bind.Binder;
+import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.core.env.Environment;
+
+import java.util.Properties;
+
+@Configuration
+public class SolrProxyServletConfig implements EnvironmentAware {
+
+ @Bean
+ public ServletRegistrationBean servletRegistrationBean() {
+ Properties properties = (Properties) bindResult.get();
+ ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), properties.getProperty("servlet_url"));
+ servletRegistrationBean.addInitParameter(ProxyServlet.P_TARGET_URI, properties.getProperty("target_url"));
+ servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, properties.getProperty("logging_enabled", "false"));
+ return servletRegistrationBean;
+ }
+
+ private BindResult bindResult;
+
+ @Override
+ public void setEnvironment(Environment environment) {
+ Iterable sources = ConfigurationPropertySources.get(environment);
+ Binder binder = new Binder(sources);
+ BindResult bindResult = binder.bind("proxy.solr", Properties.class);
+ this.bindResult = bindResult;
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java b/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java
index 2cdb4c6..954df93 100644
--- a/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java
+++ b/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java
@@ -3,30 +3,34 @@ package mjkf.xinke.main.constant;
import java.util.List;
public class MaterialTaskType {
- public static final Integer MY_STEEL_REBAR = 101; // 钢筋网_钢筋
- // public static final Integer MY_STEEL_ = ""; // 钢筋网_钢绞线
- public static final Integer MY_STEEL_STRAND = 103; // 钢筋网_型钢
- public static final Integer MY_STEEL_PLATE = 104; // 钢筋网_中厚板
-
- public static final Integer BAIINFO_ASPHALT_DOMESTIC = 201; // 百川网_国产沥青
- public static final Integer BAIINFO_ASPHALT_IMPORTED = 202; // 百川网_进口沥青
- public static final Integer BAIINFO_CEMENT = 203; // 百川网_水泥
-
- public static final Integer SANMING_STEEL = 301; // 三明钢铁
-
+ // 钢筋网
+ public static final Integer MY_STEEL_REBAR = 101; // 钢筋
+ public static final Integer MY_STEEL_SECTION = 102; // 型钢
+ public static final Integer MY_STEEL_STRAND = 103; // 钢绞线
+ public static final Integer MY_STEEL_PLATE = 104; // 中厚板
+ // 百川网
+ public static final Integer BAIINFO_ASPHALT_DOMESTIC = 201; // 国产沥青
+ public static final Integer BAIINFO_ASPHALT_IMPORTED = 202; // 进口沥青
+ public static final Integer BAIINFO_CEMENT = 203; // 水泥
+ // 三明钢铁
+ public static final Integer SANMING_STEEL = 301;
+ // 材料信息
public static final Integer FUZHOU_TRANSPORTATION_BUREAU = 401; // 福州交通局
public static final Integer FUZHOU_HIGHWAY_BUREAU = 402; // 福州公路局
-
- public static final Integer FUJIAN_SURVEY = 501; // 福建省交通工程材料调查表
-
- public static final Integer OTHER_ZHEJIANG = 601; // 其他省份_浙江
- public static final Integer OTHER_GIANLZHOU = 602; // 其他省份_广州
- public static final Integer OTHER_YUNNAN = 603; // 其他省份_云南
-
- public static final Integer FUJIAN_DEPARTMENT = 701; // 住建厅
+ // 福建省交通工程材料调查表
+ public static final Integer FUJIAN_SURVEY = 501;
+ // 其他省份
+ public static final Integer OTHER_ZHEJIANG = 601; // 浙江
+ public static final Integer OTHER_GIANLZHOU = 602; // 广州
+ public static final Integer OTHER_YUNNAN = 603; // 云南
+ // 住建厅
+ public static final Integer FUJIAN_DEPARTMENT = 701;
+ // 发改委
+ public static final Integer OIL = 801; // 汽柴油
public static final List list = List.of(
MY_STEEL_REBAR,
+ MY_STEEL_SECTION,
MY_STEEL_STRAND,
MY_STEEL_PLATE,
BAIINFO_ASPHALT_DOMESTIC,
@@ -39,7 +43,19 @@ public class MaterialTaskType {
OTHER_ZHEJIANG,
OTHER_GIANLZHOU,
OTHER_YUNNAN,
- FUJIAN_DEPARTMENT
+ FUJIAN_DEPARTMENT,
+ OIL
);
+
+ public static boolean isFromSpider(Integer type) {
+ var dataFromSpiderTypes = List.of(
+ OIL,
+ OTHER_ZHEJIANG,
+ OTHER_GIANLZHOU,
+ OTHER_YUNNAN,
+ FUJIAN_DEPARTMENT
+ );
+ return dataFromSpiderTypes.contains(type);
+ }
}
diff --git a/src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java b/src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java
index 65e8674..277de39 100644
--- a/src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java
+++ b/src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java
@@ -2,8 +2,10 @@ package mjkf.xinke.main.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.gson.JsonObject;
import com.jgy.xxs.core.http.exp.NcHttpException;
import com.jgy.xxs.core.http.resp.HttpResponse;
+import com.jgy.xxs.core.http.resp.NcHttpResponse;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import mjkf.xinke.auth.core.util.StpLoginUserUtil;
@@ -11,10 +13,12 @@ import mjkf.xinke.main.common.http.FuHttpResponse;
import mjkf.xinke.main.constant.HttpErrorResponseEnum;
import mjkf.xinke.main.model.db.MaterialTask;
import mjkf.xinke.main.model.vo.MaterialTaskCreateRequest;
+import mjkf.xinke.main.service.DataToolService;
import mjkf.xinke.main.service.MaterialTaskService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import java.util.List;
/**
@@ -48,6 +52,7 @@ public class MaterialTaskController {
query.like(MaterialTask::getName, keyWord);
}
var result = materialTaskService.page(new Page<>(page, limit), query);
+
return FuHttpResponse.Builder().pageResponse(result).build();
}
@@ -62,44 +67,6 @@ public class MaterialTaskController {
var data = new MaterialTask(params, user);
materialTaskService.save(data);
- // todo 解析
- // todo 写入数据
- // try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
- // Sheet sheet = workbook.getSheetAt(0); // 假设文件中只有一个表格
- //
- // Iterator rowIterator = sheet.iterator();
- // rowIterator.next(); // 跳过标题行
- //
- // while (rowIterator.hasNext()) {
- // Row row = rowIterator.next();
- // // 从每一行中获取数据并调用 MyBatis-Plus 的方法写入数据库
- // yourService.saveData(row.getCell(0).getStringCellValue(), row.getCell(1).getNumericCellValue());
- // }
- // } catch (IOException e) {
- // e.printStackTrace();
- // }
return FuHttpResponse.Builder().dataResponse(data).build();
}
-
-
- @ApiOperation("获取采集任务数据")
- @GetMapping("/{id}/data")
- public HttpResponse getData(
- @ApiParam("每页数量") @RequestParam(name = "limit", defaultValue = "10") Integer limit,
- @ApiParam("页码") @RequestParam(name = "page", defaultValue = "1") Integer page,
- @PathVariable String id
- ) throws Exception {
- // 获取类型
- var data = materialTaskService.getById(id);
- if (data == null) {
- throw new NcHttpException(HttpErrorResponseEnum.MATERIAL_TASK_NOT_FOUND);
- }
- var type = data.getType();
- // todo 根据类型定位数据表
- // todo 按任务id作为过滤条件查找数据(分页)
-
- return FuHttpResponse.Builder().dataResponse().build();
- }
-
-
}
diff --git a/src/main/java/mjkf/xinke/main/model/db/AsphaltDomestic.java b/src/main/java/mjkf/xinke/main/model/db/AsphaltDomestic.java
new file mode 100644
index 0000000..5715b70
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/AsphaltDomestic.java
@@ -0,0 +1,73 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 国产沥青
+ *
+ *
+ * @author han0
+ * @since 2023-11-08
+ */
+@Getter
+@Setter
+@TableName("ASPHALT_DOMESTIC")
+@ApiModel(value = "AsphaltDomestic对象", description = "国产沥青")
+public class AsphaltDomestic extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @ApiModelProperty("数据来源")
+ @TableField("`FROM`")
+ private String from;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public AsphaltDomestic () {}
+
+ public AsphaltDomestic (Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(1).getNumericCellValue()));
+ this.setDate(row.getCell(2).getLocalDateTimeCellValue().toLocalDate());
+ this.setFrom(row.getCell(3).getStringCellValue());
+ }
+
+ public AsphaltDomestic update(AsphaltDomestic item) {
+ this.setName(item.getName());
+ this.setPrice(item.getPrice());
+ this.setDate(item.getDate());
+ this.setFrom(item.getFrom());
+ return this;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/AsphaltImported.java b/src/main/java/mjkf/xinke/main/model/db/AsphaltImported.java
new file mode 100644
index 0000000..bd68400
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/AsphaltImported.java
@@ -0,0 +1,67 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 进口沥青
+ *
+ *
+ * @author han0
+ * @since 2023-11-08
+ */
+@Getter
+@Setter
+@TableName("ASPHALT_IMPORTED")
+@ApiModel(value = "AsphaltImported对象", description = "进口沥青")
+public class AsphaltImported extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public AsphaltImported () {}
+
+ public AsphaltImported (Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(1).getNumericCellValue()));
+ this.setDate(row.getCell(2).getLocalDateTimeCellValue().toLocalDate());
+ }
+
+ public AsphaltImported update(AsphaltImported item) {
+ this.setName(item.getName());
+ this.setPrice(item.getPrice());
+ this.setDate(item.getDate());
+ return this;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/Cement.java b/src/main/java/mjkf/xinke/main/model/db/Cement.java
new file mode 100644
index 0000000..086f3f7
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/Cement.java
@@ -0,0 +1,91 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 水泥
+ *
+ *
+ * @author han0
+ * @since 2023-11-08
+ */
+@Getter
+@Setter
+@TableName("CEMENT")
+@ApiModel(value = "Cement对象", description = "水泥")
+public class Cement extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("包装")
+ @TableField("PACK")
+ private String pack;
+
+ @ApiModelProperty("产地")
+ @TableField("`SOURCE`")
+ private String source;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("浮动")
+ @TableField("FLUCTUATING")
+ private BigDecimal fluctuating;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public Cement () {}
+
+ public Cement (Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setSpec(row.getCell(1).getStringCellValue());
+ this.setPack(row.getCell(2).getStringCellValue());
+ this.setSource(row.getCell(3).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(4).getNumericCellValue()));
+ this.setFluctuating(BigDecimal.valueOf(row.getCell(5).getNumericCellValue()));
+ this.setDate(row.getCell(6).getLocalDateTimeCellValue().toLocalDate());
+ }
+
+ public Cement update(Cement item) {
+ this.setName(item.getName());
+ this.setSpec(item.getSpec());
+ this.setPack(item.getPack());
+ this.setSource(item.getSource());
+ this.setPrice(item.getPrice());
+ this.setFluctuating(item.getFluctuating());
+ this.setDate(item.getDate());
+ return this;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/FujianSurvey.java b/src/main/java/mjkf/xinke/main/model/db/FujianSurvey.java
new file mode 100644
index 0000000..ad039a6
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/FujianSurvey.java
@@ -0,0 +1,73 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 福建省交通工程材料调查表
+ *
+ *
+ * @author han0
+ * @since 2023-11-22
+ */
+@Getter
+@Setter
+@TableName("FUJIAN_SURVEY")
+@ApiModel(value = "FujianSurvey对象", description = "福建省交通工程材料调查表")
+public class FujianSurvey extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public FujianSurvey () {}
+
+ public FujianSurvey (Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setSpec(row.getCell(1).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(2).getNumericCellValue()));
+ this.setDate(row.getCell(3).getLocalDateTimeCellValue().toLocalDate());
+ }
+
+ public FujianSurvey update(FujianSurvey item) {
+ this.setName(item.getName());
+ this.setSpec(item.getSpec());
+ this.setPrice(item.getPrice());
+ this.setDate(item.getDate());
+ return this;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/FuzhouHighwayBureau.java b/src/main/java/mjkf/xinke/main/model/db/FuzhouHighwayBureau.java
new file mode 100644
index 0000000..670c87f
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/FuzhouHighwayBureau.java
@@ -0,0 +1,73 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 福州公路局
+ *
+ *
+ * @author han0
+ * @since 2023-11-22
+ */
+@Getter
+@Setter
+@TableName("FUZHOU_HIGHWAY_BUREAU")
+@ApiModel(value = "FuzhouHighwayBureau对象", description = "福州公路局")
+public class FuzhouHighwayBureau extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public FuzhouHighwayBureau () {}
+
+ public FuzhouHighwayBureau (Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setSpec(row.getCell(1).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(2).getNumericCellValue()));
+ this.setDate(row.getCell(3).getLocalDateTimeCellValue().toLocalDate());
+ }
+
+ public FuzhouHighwayBureau update(FuzhouHighwayBureau item) {
+ this.setName(item.getName());
+ this.setSpec(item.getSpec());
+ this.setPrice(item.getPrice());
+ this.setDate(item.getDate());
+ return this;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/FuzhouTransportationBureau.java b/src/main/java/mjkf/xinke/main/model/db/FuzhouTransportationBureau.java
new file mode 100644
index 0000000..0dc8563
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/FuzhouTransportationBureau.java
@@ -0,0 +1,73 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 福州交通局
+ *
+ *
+ * @author han0
+ * @since 2023-11-22
+ */
+@Getter
+@Setter
+@TableName("FUZHOU_TRANSPORTATION_BUREAU")
+@ApiModel(value = "FuzhouTransportationBureau对象", description = "福州交通局")
+public class FuzhouTransportationBureau extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public FuzhouTransportationBureau () {}
+
+ public FuzhouTransportationBureau (Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setSpec(row.getCell(1).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(2).getNumericCellValue()));
+ this.setDate(row.getCell(3).getLocalDateTimeCellValue().toLocalDate());
+ }
+
+ public FuzhouTransportationBureau update(FuzhouTransportationBureau item) {
+ this.setName(item.getName());
+ this.setSpec(item.getSpec());
+ this.setPrice(item.getPrice());
+ this.setDate(item.getDate());
+ return this;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/MaterialTask.java b/src/main/java/mjkf/xinke/main/model/db/MaterialTask.java
index 9fae181..34c948c 100644
--- a/src/main/java/mjkf/xinke/main/model/db/MaterialTask.java
+++ b/src/main/java/mjkf/xinke/main/model/db/MaterialTask.java
@@ -15,6 +15,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import mjkf.xinke.auth.core.pojo.SaBaseLoginUser;
+import mjkf.xinke.main.common.serializer.FastjsonArrayHandler;
import mjkf.xinke.main.constant.MaterialTaskStatus;
import mjkf.xinke.main.model.vo.MaterialTaskCreateRequest;
@@ -29,7 +30,7 @@ import mjkf.xinke.main.model.vo.MaterialTaskCreateRequest;
@Getter
@Setter
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
-@TableName("MATERIAL_TASK")
+@TableName(value="MATERIAL_TASK", autoResultMap=true)
@ApiModel(value = "MaterialTask对象", description = "采集任务")
public class MaterialTask extends Model {
@@ -90,10 +91,18 @@ public class MaterialTask extends Model {
@TableField("`TYPE`")
private Integer type;
+ @ApiModelProperty("采集年份")
+ @TableField("`YEAR`")
+ private Integer year;
+
@ApiModelProperty("采集月份")
@TableField("`MONTH`")
private Integer month;
+ @ApiModelProperty("数据")
+ @TableField(value="`CONTENT`", typeHandler = FastjsonArrayHandler.class)
+ private Object content;
+
@Override
public Serializable pkVal() {
return this.id;
diff --git a/src/main/java/mjkf/xinke/main/model/db/SanmingSteel.java b/src/main/java/mjkf/xinke/main/model/db/SanmingSteel.java
new file mode 100644
index 0000000..c8949a6
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/SanmingSteel.java
@@ -0,0 +1,85 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 三明钢铁
+ *
+ *
+ * @author han0
+ * @since 2023-11-22
+ */
+@Getter
+@Setter
+@TableName("SANMING_STEEL")
+@ApiModel(value = "SanmingSteel对象", description = "三明钢铁")
+public class SanmingSteel extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("材质")
+ @TableField("MATERIAL")
+ private String material;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("浮动")
+ @TableField("FLUCTUATING")
+ private BigDecimal fluctuating;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public SanmingSteel () {}
+
+ public SanmingSteel (Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setSpec(row.getCell(1).getStringCellValue());
+ this.setMaterial(row.getCell(2).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(3).getNumericCellValue()));
+ this.setFluctuating(BigDecimal.valueOf(row.getCell(4).getNumericCellValue()));
+ this.setDate(row.getCell(5).getLocalDateTimeCellValue().toLocalDate());
+ }
+
+ public SanmingSteel update(SanmingSteel item) {
+ this.setName(item.getName());
+ this.setSpec(item.getSpec());
+ this.setMaterial(item.getMaterial());
+ this.setPrice(item.getPrice());
+ this.setFluctuating(item.getFluctuating());
+ this.setDate(item.getDate());
+ return this;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/SteelEntity.java b/src/main/java/mjkf/xinke/main/model/db/SteelEntity.java
new file mode 100644
index 0000000..bfafc7c
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/SteelEntity.java
@@ -0,0 +1,47 @@
+package mjkf.xinke.main.model.db;
+
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Data
+public class SteelEntity> extends Model {
+ private String name;
+ private String spec;
+ private String material;
+ private String source;
+ private BigDecimal price;
+ private BigDecimal fluctuating;
+ private LocalDate date;
+
+ public SteelEntity update(SteelEntity item) {
+ this.setName(item.getName());
+ this.setSpec(item.getSpec());
+ this.setMaterial(item.getMaterial());
+ this.setSource(item.getSource());
+ this.setPrice(item.getPrice());
+ this.setFluctuating(item.getFluctuating());
+ this.setDate(item.getDate());
+ return this;
+ }
+
+ public void fromRow(Row row) {
+ this.setName(row.getCell(0).getStringCellValue());
+ this.setSpec(row.getCell(1).getStringCellValue());
+ this.setMaterial(row.getCell(2).getStringCellValue());
+ this.setSource(row.getCell(3).getStringCellValue());
+ this.setPrice(BigDecimal.valueOf(row.getCell(4).getNumericCellValue()));
+ this.setFluctuating(BigDecimal.valueOf(row.getCell(5).getNumericCellValue()));
+ this.setDate(row.getCell(6).getLocalDateTimeCellValue().toLocalDate());
+ }
+
+ public SteelEntity() {}
+
+ public SteelEntity(Row row) {
+ this.fromRow(row);
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/SteelPlate.java b/src/main/java/mjkf/xinke/main/model/db/SteelPlate.java
new file mode 100644
index 0000000..5bbefbe
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/SteelPlate.java
@@ -0,0 +1,74 @@
+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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 中厚板
+ *
+ *
+ * @author han0
+ * @since 2023-11-08
+ */
+@Getter
+@Setter
+@TableName("STEEL_PLATE")
+@ApiModel(value = "SteelPlate对象", description = "中厚板")
+public class SteelPlate extends SteelEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("材质")
+ @TableField("MATERIAL")
+ private String material;
+
+ @ApiModelProperty("产地")
+ @TableField("`SOURCE`")
+ private String source;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("浮动")
+ @TableField("FLUCTUATING")
+ private BigDecimal fluctuating;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public SteelPlate() {}
+
+ public SteelPlate(Row row) {
+ this.fromRow(row);
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/SteelRebar.java b/src/main/java/mjkf/xinke/main/model/db/SteelRebar.java
new file mode 100644
index 0000000..e69caf9
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/SteelRebar.java
@@ -0,0 +1,73 @@
+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 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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 钢筋
+ *
+ *
+ * @author han0
+ * @since 2023-11-08
+ */
+@Getter
+@Setter
+@TableName("STEEL_REBAR")
+@ApiModel(value = "SteelRebar对象", description = "钢筋")
+public class SteelRebar extends SteelEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("材质")
+ @TableField("MATERIAL")
+ private String material;
+
+ @ApiModelProperty("产地")
+ @TableField("`SOURCE`")
+ private String source;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("浮动")
+ @TableField("FLUCTUATING")
+ private BigDecimal fluctuating;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public SteelRebar() {}
+
+ public SteelRebar(Row row) {
+ this.fromRow(row);
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/SteelSection.java b/src/main/java/mjkf/xinke/main/model/db/SteelSection.java
new file mode 100644
index 0000000..337d32e
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/SteelSection.java
@@ -0,0 +1,73 @@
+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 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;
+import org.apache.poi.ss.usermodel.Row;
+
+/**
+ *
+ * 型钢
+ *
+ *
+ * @author han0
+ * @since 2023-11-21
+ */
+@Getter
+@Setter
+@TableName("STEEL_SECTION")
+@ApiModel(value = "SteelSection对象", description = "型钢")
+public class SteelSection extends SteelEntity{
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("规格")
+ @TableField("SPEC")
+ private String spec;
+
+ @ApiModelProperty("材质")
+ @TableField("MATERIAL")
+ private String material;
+
+ @ApiModelProperty("产地")
+ @TableField("`SOURCE`")
+ private String source;
+
+ @ApiModelProperty("价格")
+ @TableField("PRICE")
+ private BigDecimal price;
+
+ @ApiModelProperty("浮动")
+ @TableField("FLUCTUATING")
+ private BigDecimal fluctuating;
+
+ @ApiModelProperty("日期")
+ @TableField("`DATE`")
+ private LocalDate date;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public SteelSection() {}
+
+ public SteelSection(Row row) {
+ this.fromRow(row);
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/service/ApiService.java b/src/main/java/mjkf/xinke/main/service/ApiService.java
new file mode 100644
index 0000000..01b08c4
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/ApiService.java
@@ -0,0 +1,77 @@
+package mjkf.xinke.main.service;
+
+import com.jgy.xxs.core.http.exp.NcHttpException;
+import mjkf.xinke.main.constant.HttpErrorResponseEnum;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.RequestBody;
+import okhttp3.logging.HttpLoggingInterceptor;
+import org.apache.http.HttpStatus;
+import retrofit2.Call;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+import java.lang.reflect.ParameterizedType;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+public interface ApiService {
+ Integer timeout = 60;
+
+ default Response getResponse(Call call) throws Exception {
+ Response response = call.execute();
+ if (!response.isSuccessful()) {
+ var isBodyEmpty = response.errorBody() == null;
+ if (isBodyEmpty) {
+ throw new NcHttpException(HttpErrorResponseEnum.SYSTEM_ERROR);
+ }
+ var isContentTypeJson = response.errorBody().contentType().toString().equals("application/json");
+ if (isContentTypeJson) {
+ throw new NcHttpException(response.errorBody().string(), 500, HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
+ throw new NcHttpException(HttpErrorResponseEnum.SYSTEM_ERROR);
+ }
+ return response;
+ }
+
+ default Map buildRequestBodyParams(Map rawParams) {
+ Map params = new HashMap<>();
+ params.put("f", RequestBody.create(null, "json"));
+ rawParams.forEach((key, value) -> params.put(key, RequestBody.create(null, String.valueOf(value))));
+ return params;
+ }
+
+ default V initApi(String host) {
+ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
+ loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
+ OkHttpClient client = new OkHttpClient.Builder()
+ .connectTimeout(timeout, TimeUnit.MINUTES)
+ .readTimeout(timeout, TimeUnit.MINUTES)
+ .addInterceptor(loggingInterceptor)
+ .build();
+ return initApi(host, client);
+ }
+
+ default V initApi(String host, Integer timeout) {
+ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
+ loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+ OkHttpClient client = new OkHttpClient.Builder()
+ .connectTimeout(timeout, TimeUnit.SECONDS)
+ .readTimeout(timeout, TimeUnit.SECONDS)
+ .addInterceptor(loggingInterceptor)
+ .build();
+ return initApi(host, client);
+ }
+
+ default V initApi(String host, OkHttpClient client) {
+ var apiClass = (Class) ((ParameterizedType) this.getClass().getAnnotatedInterfaces()[0].getType()).getActualTypeArguments()[0];
+ V retrofit = new Retrofit.Builder()
+ .baseUrl(host)
+ .client(client)
+ .addConverterFactory(GsonConverterFactory.create())
+ .build().create(apiClass);
+ return retrofit;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/service/AsphaltDomesticService.java b/src/main/java/mjkf/xinke/main/service/AsphaltDomesticService.java
new file mode 100644
index 0000000..d33b806
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/AsphaltDomesticService.java
@@ -0,0 +1,40 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.AsphaltDomestic;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class AsphaltDomesticService extends ServiceImpl, AsphaltDomestic> {
+ public boolean saveOrUpdateByIndex(AsphaltDomestic data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new AsphaltDomestic(item)).collect(Collectors.toList());
+ for (AsphaltDomestic item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(AsphaltDomestic data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(AsphaltDomestic::getName, data.getName());
+ query.eq(AsphaltDomestic::getDate, data.getDate());
+ return query;
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/AsphaltImportedService.java b/src/main/java/mjkf/xinke/main/service/AsphaltImportedService.java
new file mode 100644
index 0000000..c10d389
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/AsphaltImportedService.java
@@ -0,0 +1,40 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.AsphaltImported;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class AsphaltImportedService extends ServiceImpl, AsphaltImported> {
+ public boolean saveOrUpdateByIndex(AsphaltImported data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new AsphaltImported(item)).collect(Collectors.toList());
+ for (AsphaltImported item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(AsphaltImported data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(AsphaltImported::getName, data.getName());
+ query.eq(AsphaltImported::getDate, data.getDate());
+ return query;
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/CementService.java b/src/main/java/mjkf/xinke/main/service/CementService.java
new file mode 100644
index 0000000..12283b8
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/CementService.java
@@ -0,0 +1,43 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.Cement;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class CementService extends ServiceImpl, Cement> {
+ public boolean saveOrUpdateByIndex(Cement data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new Cement(item)).collect(Collectors.toList());
+ for (Cement item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(Cement data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(Cement::getName, data.getName());
+ query.eq(Cement::getSpec, data.getSpec());
+ query.eq(Cement::getPack, data.getPack());
+ query.eq(Cement::getSource, data.getSource());
+ query.eq(Cement::getDate, data.getDate());
+ return query;
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/DataToolService.java b/src/main/java/mjkf/xinke/main/service/DataToolService.java
new file mode 100644
index 0000000..a9a8697
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/DataToolService.java
@@ -0,0 +1,32 @@
+package mjkf.xinke.main.service;
+
+import com.google.gson.JsonObject;
+import com.jgy.xxs.core.http.resp.NcHttpResponse;
+import mjkf.xinke.main.common.api.DataToolApi;
+import mjkf.xinke.main.common.property.ApiHostProperty;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class DataToolService implements ApiService {
+ @Resource
+ ApiHostProperty apiHostProperty;
+
+ private DataToolApi api;
+
+ @PostConstruct
+ private void init() {
+ this.api = this.initApi(apiHostProperty.getDataTool());
+ }
+
+ public NcHttpResponse> listDataByTask (Integer type, String id, Integer limit, Integer page) throws Exception {
+ var call = this.api.listDataByTask(type, id, limit, page);
+ var response = this.getResponse(call).body();
+ return response;
+ }
+
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/FujianSurveyService.java b/src/main/java/mjkf/xinke/main/service/FujianSurveyService.java
new file mode 100644
index 0000000..3cc0cb6
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/FujianSurveyService.java
@@ -0,0 +1,41 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.FujianSurvey;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class FujianSurveyService extends ServiceImpl, FujianSurvey> {
+ public boolean saveOrUpdateByIndex(FujianSurvey data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new FujianSurvey(item)).collect(Collectors.toList());
+ for (FujianSurvey item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(FujianSurvey data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(FujianSurvey::getName, data.getName());
+ query.eq(FujianSurvey::getSpec, data.getSpec());
+ query.eq(FujianSurvey::getDate, data.getDate());
+ return query;
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/FuzhouHighwayBureauService.java b/src/main/java/mjkf/xinke/main/service/FuzhouHighwayBureauService.java
new file mode 100644
index 0000000..ee57607
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/FuzhouHighwayBureauService.java
@@ -0,0 +1,41 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.FuzhouHighwayBureau;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class FuzhouHighwayBureauService extends ServiceImpl, FuzhouHighwayBureau> {
+ public boolean saveOrUpdateByIndex(FuzhouHighwayBureau data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new FuzhouHighwayBureau(item)).collect(Collectors.toList());
+ for (FuzhouHighwayBureau item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(FuzhouHighwayBureau data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(FuzhouHighwayBureau::getName, data.getName());
+ query.eq(FuzhouHighwayBureau::getSpec, data.getSpec());
+ query.eq(FuzhouHighwayBureau::getDate, data.getDate());
+ return query;
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/FuzhouTransportationBureauService.java b/src/main/java/mjkf/xinke/main/service/FuzhouTransportationBureauService.java
new file mode 100644
index 0000000..b01b511
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/FuzhouTransportationBureauService.java
@@ -0,0 +1,42 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.FuzhouTransportationBureau;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class FuzhouTransportationBureauService extends ServiceImpl, FuzhouTransportationBureau> {
+ public boolean saveOrUpdateByIndex(FuzhouTransportationBureau data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new FuzhouTransportationBureau(item)).collect(Collectors.toList());
+ for (FuzhouTransportationBureau item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(FuzhouTransportationBureau data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(FuzhouTransportationBureau::getName, data.getName());
+ query.eq(FuzhouTransportationBureau::getSpec, data.getSpec());
+ query.eq(FuzhouTransportationBureau::getDate, data.getDate());
+ return query;
+ }
+
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java b/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java
index e595f99..c1e18f9 100644
--- a/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java
+++ b/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java
@@ -1,12 +1,139 @@
package mjkf.xinke.main.service;
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSON;
+import mjkf.xinke.dev.modular.file.entity.DevFile;
+import mjkf.xinke.dev.modular.file.service.DevFileService;
+import mjkf.xinke.main.constant.MaterialTaskStatus;
+import mjkf.xinke.main.constant.MaterialTaskType;
import mjkf.xinke.main.model.db.MaterialTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
@Service
public class MaterialTaskService extends ServiceImpl, MaterialTask> {
+ @Resource
+ DevFileService devFileService;
+ @Resource
+ SteelRebarService steelRebarService;
+ @Resource
+ SteelSectionService steelSectionService;
+ @Resource
+ SteelStrandService steelStrandService;
+ @Resource
+ SteelPlateService steelPlateService;
+ @Resource
+ AsphaltDomesticService asphaltDomesticService;
+ @Resource
+ AsphaltImportedService asphaltImportedService;
+ @Resource
+ CementService cementService;
+ @Resource
+ SanmingSteelService sanmingSteelService;
+ @Resource
+ FuzhouTransportationBureauService fuzhouTransportationBureauService;
+ @Resource
+ FuzhouHighwayBureauService fuzhouHighwayBureauService;
+ @Resource
+ FujianSurveyService fujianSurveyService;
+
+ @Override
+ public boolean save(MaterialTask data) {
+ var result = super.save(data);
+ try {
+ // 根据类型判断
+ if (MaterialTaskType.isFromSpider(data.getType())) {
+ // 2.启动爬虫任务
+ this.runSpider(data);
+ data.setStatus(MaterialTaskStatus.DOING);
+ super.updateById(data);
+ } else {
+ // 1.直接表格导入数据
+ this.importData(data);
+ data.setStatus(MaterialTaskStatus.DONE);
+ super.updateById(data);
+ }
+ } catch (Exception e) {
+ data.setStatus(MaterialTaskStatus.FAILED);
+ super.updateById(data);
+ e.printStackTrace();
+ return false;
+ }
+ return result;
+ }
+
+ private boolean importData(MaterialTask data) throws Exception {
+ // 获取文件
+ DevFile devFile = devFileService.queryEntity(data.getFile());
+ File file = FileUtil.file(devFile.getStoragePath());
+ // 解析
+ List rows = this.getTableRows(file);
+ // 导入
+ List list;
+ if (data.getType().equals(MaterialTaskType.MY_STEEL_REBAR)) {
+ list = steelRebarService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.MY_STEEL_SECTION)) {
+ list = steelSectionService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.MY_STEEL_STRAND)) {
+ list = steelStrandService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.MY_STEEL_PLATE)) {
+ list = steelPlateService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.BAIINFO_ASPHALT_DOMESTIC)) {
+ list = asphaltDomesticService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.BAIINFO_ASPHALT_IMPORTED)) {
+ list = asphaltImportedService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.BAIINFO_CEMENT)) {
+ list = cementService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.SANMING_STEEL)) {
+ list = sanmingSteelService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.FUZHOU_TRANSPORTATION_BUREAU)) {
+ list = fuzhouTransportationBureauService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.FUZHOU_HIGHWAY_BUREAU)) {
+ list = fuzhouHighwayBureauService.saveOrUpdateByIndexBatch(rows);
+ } else if (data.getType().equals(MaterialTaskType.FUJIAN_SURVEY)) {
+ list = fujianSurveyService.saveOrUpdateByIndexBatch(rows);
+ } else {
+ // todo 异常处理:未识别的类型
+ return false;
+ }
+ // 保存数据副本
+ data.setContent(JSON.toJSON(list));
+ super.updateById(data);
+ return true;
+ }
+
+ private void runSpider(MaterialTask data) {
+ // todo
+ }
+
+ private List getTableRows(File file) throws IOException {
+ List result = new ArrayList<>();
+ try (Workbook workbook = WorkbookFactory.create(file)) {
+ Sheet sheet = workbook.getSheetAt(0); // 假设文件中只有一个表格
+ Iterator rowIterator = sheet.iterator();
+ rowIterator.next( ); // 跳过标题行
+ while (rowIterator.hasNext()) {
+ Row row = rowIterator.next();
+ result.add(row);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw e;
+ }
+ return result;
+ }
}
diff --git a/src/main/java/mjkf/xinke/main/service/SanmingSteelService.java b/src/main/java/mjkf/xinke/main/service/SanmingSteelService.java
new file mode 100644
index 0000000..e8fd329
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/SanmingSteelService.java
@@ -0,0 +1,43 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.SanmingSteel;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class SanmingSteelService extends ServiceImpl, SanmingSteel> {
+ public boolean saveOrUpdateByIndex(SanmingSteel data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new SanmingSteel(item)).collect(Collectors.toList());
+ for (SanmingSteel item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(SanmingSteel data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(SanmingSteel::getName, data.getName());
+ query.eq(SanmingSteel::getSpec, data.getSpec());
+ query.eq(SanmingSteel::getMaterial, data.getMaterial());
+ query.eq(SanmingSteel::getDate, data.getDate());
+ return query;
+ }
+
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/SteelPlateService.java b/src/main/java/mjkf/xinke/main/service/SteelPlateService.java
new file mode 100644
index 0000000..9c22629
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/SteelPlateService.java
@@ -0,0 +1,44 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.SteelPlate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class SteelPlateService extends ServiceImpl, SteelPlate> {
+ public boolean saveOrUpdateByIndex(SteelPlate data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new SteelPlate(item)).collect(Collectors.toList());
+ for (SteelPlate item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(SteelPlate data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(SteelPlate::getName, data.getName());
+ query.eq(SteelPlate::getSpec, data.getSpec());
+ query.eq(SteelPlate::getMaterial, data.getMaterial());
+ query.eq(SteelPlate::getSource, data.getSource());
+ query.eq(SteelPlate::getDate, data.getDate());
+ return query;
+ }
+
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/SteelRebarService.java b/src/main/java/mjkf/xinke/main/service/SteelRebarService.java
new file mode 100644
index 0000000..d875a9e
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/SteelRebarService.java
@@ -0,0 +1,45 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.SteelRebar;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class SteelRebarService extends ServiceImpl, SteelRebar> {
+
+ public boolean saveOrUpdateByIndex(SteelRebar data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new SteelRebar(item)).collect(Collectors.toList());
+ for (SteelRebar item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(SteelRebar data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(SteelRebar::getName, data.getName());
+ query.eq(SteelRebar::getSpec, data.getSpec());
+ query.eq(SteelRebar::getMaterial, data.getMaterial());
+ query.eq(SteelRebar::getSource, data.getSource());
+ query.eq(SteelRebar::getDate, data.getDate());
+ return query;
+ }
+
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/SteelSectionService.java b/src/main/java/mjkf/xinke/main/service/SteelSectionService.java
new file mode 100644
index 0000000..71be5f2
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/SteelSectionService.java
@@ -0,0 +1,43 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.SteelSection;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class SteelSectionService extends ServiceImpl, SteelSection> {
+ public boolean saveOrUpdateByIndex(SteelSection data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new SteelSection(item)).collect(Collectors.toList());
+ for (SteelSection item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(SteelSection data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(SteelSection::getName, data.getName());
+ query.eq(SteelSection::getSpec, data.getSpec());
+ query.eq(SteelSection::getMaterial, data.getMaterial());
+ query.eq(SteelSection::getSource, data.getSource());
+ query.eq(SteelSection::getDate, data.getDate());
+ return query;
+ }
+}
+
diff --git a/src/main/java/mjkf/xinke/main/service/SteelStrandService.java b/src/main/java/mjkf/xinke/main/service/SteelStrandService.java
new file mode 100644
index 0000000..2e9a62b
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/SteelStrandService.java
@@ -0,0 +1,44 @@
+package mjkf.xinke.main.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import mjkf.xinke.main.model.db.SteelStrand;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.poi.ss.usermodel.Row;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class SteelStrandService extends ServiceImpl, SteelStrand> {
+ public boolean saveOrUpdateByIndex(SteelStrand data) {
+ var result = this.getOne(this.indexQuery(data));
+ if (result == null) {
+ return this.save(data);
+ } else {
+ result.update(data);
+ return this.updateById(result);
+ }
+ }
+
+ public List saveOrUpdateByIndexBatch(List rows) {
+ var list = rows.stream().map(item -> new SteelStrand(item)).collect(Collectors.toList());
+ for (SteelStrand item : list) {
+ this.saveOrUpdateByIndex(item);
+ }
+ return list;
+ }
+
+ private LambdaQueryWrapper indexQuery(SteelStrand data) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(SteelStrand::getName, data.getName());
+ query.eq(SteelStrand::getSpec, data.getSpec());
+ query.eq(SteelStrand::getMaterial, data.getMaterial());
+ query.eq(SteelStrand::getSource, data.getSource());
+ query.eq(SteelStrand::getDate, data.getDate());
+ return query;
+ }
+
+}
+
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index f9f41bd..995f7cf 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -16,3 +16,7 @@ spring:
main:
supervise:
dispatcher-role-id: 1677946127227682818,0
+
+api:
+ host:
+ data-tool: http://localhost:50000
\ No newline at end of file
diff --git a/src/test/java/mjkf/xinke/MainTest.java b/src/test/java/mjkf/xinke/MainTest.java
index 44e7a21..bb43fea 100644
--- a/src/test/java/mjkf/xinke/MainTest.java
+++ b/src/test/java/mjkf/xinke/MainTest.java
@@ -1,23 +1,23 @@
-
-package mjkf.xinke;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-/**
- * 主测试类
- *
- *
- * @date 2022/9/17 17:09
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Application.class)
-public class MainTest {
-
- @Test
- public void test() {
-
- }
-}
+//
+//package mjkf.xinke;
+//
+//import org.junit.Test;
+//import org.junit.runner.RunWith;
+//import org.springframework.boot.test.context.SpringBootTest;
+//import org.springframework.test.context.junit4.SpringRunner;
+//
+///**
+// * 主测试类
+// *
+// *
+// * @date 2022/9/17 17:09
+// */
+//@RunWith(SpringRunner.class)
+//@SpringBootTest(classes = Application.class)
+//public class MainTest {
+//
+// @Test
+// public void test() {
+//
+// }
+//}