diff --git a/pom.xml b/pom.xml
index 7a4223e..ba1dc4b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,19 +95,19 @@
${mjkf-xinke.version}
-
-
- mjkf.xinke
- mjkf-xinke-plugin-gen
- ${mjkf-xinke.version}
-
+
+
+
+
+
+
-
-
- mjkf.xinke
- mjkf-xinke-plugin-mobile
- ${mjkf-xinke.version}
-
+
+
+
+
+
+
diff --git a/src/main/java/mjkf/xinke/main/constant/HttpErrorResponseEnum.java b/src/main/java/mjkf/xinke/main/constant/HttpErrorResponseEnum.java
index 74d030e..71c7b90 100644
--- a/src/main/java/mjkf/xinke/main/constant/HttpErrorResponseEnum.java
+++ b/src/main/java/mjkf/xinke/main/constant/HttpErrorResponseEnum.java
@@ -21,6 +21,7 @@ public enum HttpErrorResponseEnum implements NcHttpErrorResponseInterface {
MATERIAL_ID_REPEAT("材料 id 重复", 400, HttpStatus.SC_NOT_FOUND),
MATERIAL_ID_INVALID("材料 id 无效", 400, HttpStatus.SC_NOT_FOUND),
MATERIAL_PARENT_ID_INVALID("材料 parent_id 无效", 400, HttpStatus.SC_NOT_FOUND),
+ MATERIAL_TASK_NOT_FOUND("找不到指定材料采集任务", 400, HttpStatus.SC_NOT_FOUND),
;
private String message;
diff --git a/src/main/java/mjkf/xinke/main/constant/MaterialTaskStatus.java b/src/main/java/mjkf/xinke/main/constant/MaterialTaskStatus.java
new file mode 100644
index 0000000..2896d89
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/constant/MaterialTaskStatus.java
@@ -0,0 +1,18 @@
+package mjkf.xinke.main.constant;
+
+import java.util.List;
+
+public class MaterialTaskStatus {
+ public static final Integer WAITING = 0;
+ public static final Integer DOING = 1;
+ public static final Integer DONE = 2;
+ public static final Integer FAILED = -1;
+
+ public static final List list = List.of(
+ FAILED,
+ WAITING,
+ DOING,
+ DONE
+ );
+}
+
diff --git a/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java b/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java
new file mode 100644
index 0000000..2cdb4c6
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java
@@ -0,0 +1,45 @@
+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 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 List list = List.of(
+ MY_STEEL_REBAR,
+ MY_STEEL_STRAND,
+ MY_STEEL_PLATE,
+ BAIINFO_ASPHALT_DOMESTIC,
+ BAIINFO_ASPHALT_IMPORTED,
+ BAIINFO_CEMENT,
+ SANMING_STEEL,
+ FUZHOU_TRANSPORTATION_BUREAU,
+ FUZHOU_HIGHWAY_BUREAU,
+ FUJIAN_SURVEY,
+ OTHER_ZHEJIANG,
+ OTHER_GIANLZHOU,
+ OTHER_YUNNAN,
+ FUJIAN_DEPARTMENT
+ );
+}
+
diff --git a/src/main/java/mjkf/xinke/main/controller/MaterialController.java b/src/main/java/mjkf/xinke/main/controller/MaterialController.java
index 3c2d94d..ee8fa44 100644
--- a/src/main/java/mjkf/xinke/main/controller/MaterialController.java
+++ b/src/main/java/mjkf/xinke/main/controller/MaterialController.java
@@ -8,7 +8,6 @@ import com.jgy.xxs.core.http.exp.NcHttpException;
import com.jgy.xxs.core.http.resp.HttpResponse;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import mjkf.xinke.auth.core.pojo.SaBaseLoginUser;
import mjkf.xinke.auth.core.util.StpLoginUserUtil;
import mjkf.xinke.main.common.http.FuHttpResponse;
import mjkf.xinke.main.constant.HttpErrorResponseEnum;
@@ -62,8 +61,8 @@ public class MaterialController {
@ApiOperation("获取材料列表")
@GetMapping("/")
public HttpResponse list (
- @ApiParam(value = "关键字") String keyWord,
- @ApiParam(value = "父节点id") String parentId
+ @ApiParam(value = "关键字") @RequestParam(value="key_word", required=false) String keyWord,
+ @ApiParam(value = "父节点id") @RequestParam("parent_id") String parentId
) {
LambdaQueryWrapper query = new LambdaQueryWrapper<>();
if (parentId != null){
diff --git a/src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java b/src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java
new file mode 100644
index 0000000..65e8674
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java
@@ -0,0 +1,105 @@
+package mjkf.xinke.main.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jgy.xxs.core.http.exp.NcHttpException;
+import com.jgy.xxs.core.http.resp.HttpResponse;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import mjkf.xinke.auth.core.util.StpLoginUserUtil;
+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.MaterialTaskService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+
+/**
+ *
+ * 采集任务 前端控制器
+ *
+ *
+ * @author han0
+ * @since 2023-11-09
+ */
+@RestController
+@RequestMapping("/material-task")
+public class MaterialTaskController {
+
+ @Resource
+ MaterialTaskService materialTaskService;
+
+ @ApiOperation("获取采集任务列表")
+ @GetMapping("/")
+ public HttpResponse list(
+ @ApiParam("每页数量") @RequestParam(name = "limit", defaultValue = "10") Integer limit,
+ @ApiParam("页码") @RequestParam(name = "page", defaultValue = "1") Integer page,
+ @ApiParam("任务类型") Integer type,
+ @ApiParam("关键字") @RequestParam(name = "key_word", required = false) String keyWord,
+ @ApiParam("月份") Integer month
+ ) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(MaterialTask::getType, type);
+ query.eq(MaterialTask::getMonth, month);
+ if (keyWord != null) {
+ query.like(MaterialTask::getName, keyWord);
+ }
+ var result = materialTaskService.page(new Page<>(page, limit), query);
+ return FuHttpResponse.Builder().pageResponse(result).build();
+ }
+
+ @ApiOperation("创建采集任务列表")
+ @PostMapping("/")
+ public HttpResponse create(
+ @ApiParam("参数") @RequestBody MaterialTaskCreateRequest params
+ ) throws Exception {
+ // 创建任务
+ params.check();
+ var user = StpLoginUserUtil.getLoginUser();
+ 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/dao/MaterialTaskMapper.java b/src/main/java/mjkf/xinke/main/dao/MaterialTaskMapper.java
new file mode 100644
index 0000000..92afbec
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/dao/MaterialTaskMapper.java
@@ -0,0 +1,16 @@
+package mjkf.xinke.main.dao;
+
+import mjkf.xinke.main.model.db.MaterialTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 采集任务 Mapper 接口
+ *
+ *
+ * @author han0
+ * @since 2023-11-10
+ */
+public interface MaterialTaskMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/mjkf/xinke/main/model/db/MaterialTask.java b/src/main/java/mjkf/xinke/main/model/db/MaterialTask.java
new file mode 100644
index 0000000..9fae181
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/db/MaterialTask.java
@@ -0,0 +1,114 @@
+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.LocalDateTime;
+
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import mjkf.xinke.auth.core.pojo.SaBaseLoginUser;
+import mjkf.xinke.main.constant.MaterialTaskStatus;
+import mjkf.xinke.main.model.vo.MaterialTaskCreateRequest;
+
+/**
+ *
+ * 采集任务
+ *
+ *
+ * @author han0
+ * @since 2023-11-10
+ */
+@Getter
+@Setter
+@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
+@TableName("MATERIAL_TASK")
+@ApiModel(value = "MaterialTask对象", description = "采集任务")
+public class MaterialTask extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("最后更新人id")
+ @TableField("UPDATE_USER_ID")
+ private String updateUserId;
+
+ @ApiModelProperty("最后更新人名称")
+ @TableField("UPDATE_USER_NAME")
+ private String updateUserName;
+
+ @ApiModelProperty("最后更新时间")
+ @TableField("UPDATE_TIME")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("创建人id")
+ @TableField("CREATE_USER_ID")
+ private String createUserId;
+
+ @ApiModelProperty("创建人名称")
+ @TableField("CREATE_USER_NAME")
+ private String createUserName;
+
+ @ApiModelProperty("创建时间")
+ @TableField("CREATE_TIME")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("删除人id")
+ @TableField("DELETE_USER_ID")
+ private String deleteUserId;
+
+ @ApiModelProperty("删除人名称")
+ @TableField("DELETE_USER_NAME")
+ private String deleteUserName;
+
+ @ApiModelProperty("删除时间")
+ @TableField("DELETE_TIME")
+ private LocalDateTime deleteTime;
+
+ @TableId(value = "ID", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("任务名称")
+ @TableField("`NAME`")
+ private String name;
+
+ @ApiModelProperty("状态(待采集、已采集、采集中)")
+ @TableField("`STATUS`")
+ private Integer status;
+
+ @ApiModelProperty("文件路径")
+ @TableField("`FILE`")
+ private String file;
+
+ @ApiModelProperty("类型(网络爬取、文件上传)")
+ @TableField("`TYPE`")
+ private Integer type;
+
+ @ApiModelProperty("采集月份")
+ @TableField("`MONTH`")
+ private Integer month;
+
+ @Override
+ public Serializable pkVal() {
+ return this.id;
+ }
+
+ public MaterialTask() {}
+
+ public MaterialTask(MaterialTaskCreateRequest params, SaBaseLoginUser user) {
+ this.type = params.getType();
+ this.month = params.getMonth();
+ this.file = params.getFile();
+
+ this.createUserId = user.getId();
+ this.createUserName = user.getName();
+ this.createTime = LocalDateTime.now();
+ this.status = MaterialTaskStatus.WAITING;
+ }
+}
diff --git a/src/main/java/mjkf/xinke/main/model/vo/MaterialTaskCreateRequest.java b/src/main/java/mjkf/xinke/main/model/vo/MaterialTaskCreateRequest.java
new file mode 100644
index 0000000..16570fb
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/model/vo/MaterialTaskCreateRequest.java
@@ -0,0 +1,22 @@
+package mjkf.xinke.main.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MaterialTaskCreateRequest {
+
+ @ApiModelProperty("任务类型")
+ private Integer type;
+
+ @ApiModelProperty("月份")
+ private Integer month;
+
+ @ApiModelProperty("文件id")
+ private String file;
+
+ public void check() throws Exception{
+
+ }
+
+}
diff --git a/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java b/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java
new file mode 100644
index 0000000..e595f99
--- /dev/null
+++ b/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java
@@ -0,0 +1,12 @@
+package mjkf.xinke.main.service;
+
+import mjkf.xinke.main.model.db.MaterialTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MaterialTaskService extends ServiceImpl, MaterialTask> {
+
+}
+