From 2662b4a31c994939c21200bb248d80c479577bb8 Mon Sep 17 00:00:00 2001 From: han0 Date: Thu, 16 Nov 2023 17:38:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(material-task):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=87=87=E9=9B=86=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 24 ++-- .../main/constant/HttpErrorResponseEnum.java | 1 + .../main/constant/MaterialTaskStatus.java | 18 +++ .../xinke/main/constant/MaterialTaskType.java | 45 +++++++ .../main/controller/MaterialController.java | 5 +- .../controller/MaterialTaskController.java | 105 ++++++++++++++++ .../xinke/main/dao/MaterialTaskMapper.java | 16 +++ .../xinke/main/model/db/MaterialTask.java | 114 ++++++++++++++++++ .../model/vo/MaterialTaskCreateRequest.java | 22 ++++ .../main/service/MaterialTaskService.java | 12 ++ 10 files changed, 347 insertions(+), 15 deletions(-) create mode 100644 src/main/java/mjkf/xinke/main/constant/MaterialTaskStatus.java create mode 100644 src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java create mode 100644 src/main/java/mjkf/xinke/main/controller/MaterialTaskController.java create mode 100644 src/main/java/mjkf/xinke/main/dao/MaterialTaskMapper.java create mode 100644 src/main/java/mjkf/xinke/main/model/db/MaterialTask.java create mode 100644 src/main/java/mjkf/xinke/main/model/vo/MaterialTaskCreateRequest.java create mode 100644 src/main/java/mjkf/xinke/main/service/MaterialTaskService.java 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> { + +} +