From 8553f013614210c10234ef415e103226fe464446 Mon Sep 17 00:00:00 2001 From: han0 Date: Thu, 14 Dec 2023 17:10:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(local-material):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=9C=B0=E6=9D=90=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LocalMaterialController.java | 66 +++++++++++++++++++ .../main/dao/LocalMaterialCityAggrMapper.java | 16 +++++ .../xinke/main/model/db/LocalMaterial.java | 8 +++ .../main/model/vo/LocalMaterialCityAggr.java | 21 ++++++ .../main/model/vo/LocalMaterialSummary.java | 29 ++++++++ .../main/service/LocalMaterialService.java | 16 +++++ 6 files changed, 156 insertions(+) create mode 100644 src/main/java/mjkf/xinke/main/dao/LocalMaterialCityAggrMapper.java create mode 100644 src/main/java/mjkf/xinke/main/model/vo/LocalMaterialCityAggr.java create mode 100644 src/main/java/mjkf/xinke/main/model/vo/LocalMaterialSummary.java diff --git a/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java b/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java index a5e583f..4c42a8b 100644 --- a/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java +++ b/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java @@ -1,8 +1,27 @@ package mjkf.xinke.main.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jgy.xxs.core.http.resp.HttpResponse; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import mjkf.xinke.main.common.http.FuHttpResponse; +import mjkf.xinke.main.dao.LocalMaterialCityAggrMapper; +import mjkf.xinke.main.model.db.LocalMaterial; +import mjkf.xinke.main.model.vo.LocalMaterialCityAggr; +import mjkf.xinke.main.model.vo.LocalMaterialSummary; +import mjkf.xinke.main.service.LocalMaterialService; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** *

* 地材 前端控制器 @@ -14,5 +33,52 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/local-material") public class LocalMaterialController { + @Resource + LocalMaterialService localMaterialService; + @Resource + LocalMaterialCityAggrMapper localMaterialCityAggrMapper; + @ApiOperation("获取地材列表") + @GetMapping("/") + public HttpResponse list ( + @ApiParam(value = "年") @RequestParam(value="year") Integer year, + @ApiParam(value = "月") @RequestParam(value="month") Integer month, + @ApiParam(value = "地市") @RequestParam(value="city") String city, + @ApiParam(value = "区县") @RequestParam(value="county", required=false) String county, + @ApiParam(value = "规格") @RequestParam(value="spec", required=false) String spec, + @ApiParam(value = "名称") @RequestParam(value="name", required=false) String name + ) { + var query = localMaterialService.getQuery(year, month, city, county, spec, name); + query.orderByDesc(LocalMaterial::getName); + List data = localMaterialService.list(query); + + var groupMap = data.stream().collect(Collectors.groupingBy(item->item.getName(), Collectors.toList())); + var result = new ArrayList(); + for (String key: groupMap.keySet()) { + result.add(new LocalMaterialSummary(groupMap.get(key))); + } + return FuHttpResponse.Builder().dataResponse(result).build(); + } + + @ApiOperation("获取地材概览") + @GetMapping("/summary") + public HttpResponse summary ( + @ApiParam(value = "年") @RequestParam(value="year") Integer year, + @ApiParam(value = "月") @RequestParam(value="month") Integer month + ) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + if (year != null) { + var date = LocalDate.of(year, month, 1); + query.between(LocalMaterialCityAggr::getDate, date, date.plusYears(1)); + } + if (month != null) { + var date = LocalDate.of(year, month, 1); + query.between(LocalMaterialCityAggr::getDate, date, date.plusMonths(1)); + } + query.select(LocalMaterialCityAggr::getCity, LocalMaterialCityAggr::getCount); + query.groupBy(LocalMaterialCityAggr::getCity); + var result = localMaterialCityAggrMapper.selectList(query); + + return FuHttpResponse.Builder().dataResponse(result).build(); + } } diff --git a/src/main/java/mjkf/xinke/main/dao/LocalMaterialCityAggrMapper.java b/src/main/java/mjkf/xinke/main/dao/LocalMaterialCityAggrMapper.java new file mode 100644 index 0000000..b0a6764 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/dao/LocalMaterialCityAggrMapper.java @@ -0,0 +1,16 @@ +package mjkf.xinke.main.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import mjkf.xinke.main.model.vo.LocalMaterialCityAggr; + +/** + *

+ * 地材 Mapper 接口 + *

+ * + * @author han0 + * @since 2023-12-14 + */ +public interface LocalMaterialCityAggrMapper extends BaseMapper { + +} diff --git a/src/main/java/mjkf/xinke/main/model/db/LocalMaterial.java b/src/main/java/mjkf/xinke/main/model/db/LocalMaterial.java index bc09eae..03e651d 100644 --- a/src/main/java/mjkf/xinke/main/model/db/LocalMaterial.java +++ b/src/main/java/mjkf/xinke/main/model/db/LocalMaterial.java @@ -45,6 +45,10 @@ public class LocalMaterial extends Model { @TableField("SPEC") private String spec; + @ApiModelProperty("单位") + @TableField("UNIT") + private String unit; + @ApiModelProperty("地市") @TableField("CITY") private String city; @@ -74,6 +78,8 @@ public class LocalMaterial extends Model { this.setCounty(row.getCell(2).getStringCellValue()); this.setPrice(BigDecimal.valueOf(row.getCell(3).getNumericCellValue())); this.setDate(row.getCell(4).getLocalDateTimeCellValue().toLocalDate()); + this.setSpec(row.getCell(5).getStringCellValue()); + this.setUnit(row.getCell(6).getStringCellValue()); } public LocalMaterial update(LocalMaterial item) { @@ -82,6 +88,8 @@ public class LocalMaterial extends Model { this.setCounty(item.getCounty()); this.setPrice(item.getPrice()); this.setDate(item.getDate()); + this.setSpec(item.getSpec()); + this.setUnit(item.getUnit()); return this; } } diff --git a/src/main/java/mjkf/xinke/main/model/vo/LocalMaterialCityAggr.java b/src/main/java/mjkf/xinke/main/model/vo/LocalMaterialCityAggr.java new file mode 100644 index 0000000..cc1a349 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/model/vo/LocalMaterialCityAggr.java @@ -0,0 +1,21 @@ +package mjkf.xinke.main.model.vo; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.time.LocalDate; + +@Data +@TableName("LOCAL_MATERIAL") +public class LocalMaterialCityAggr{ + private String city; + + @JsonIgnore + private LocalDate date; + + @TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER) + private Long count; +} diff --git a/src/main/java/mjkf/xinke/main/model/vo/LocalMaterialSummary.java b/src/main/java/mjkf/xinke/main/model/vo/LocalMaterialSummary.java new file mode 100644 index 0000000..b0656d7 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/model/vo/LocalMaterialSummary.java @@ -0,0 +1,29 @@ +package mjkf.xinke.main.model.vo; + +import mjkf.xinke.main.model.db.LocalMaterial; + +import java.math.BigDecimal; +import java.util.List; + +public class LocalMaterialSummary { + private String name; + private String spec; + private String unit; + private List data; + + public LocalMaterialSummary() {} + + public LocalMaterialSummary(List list) { + this.name = list.get(0).getName(); + this.spec = list.get(0).getSpec(); + this.unit = list.get(0).getUnit(); + this.data = list; + LocalMaterial avg_item = new LocalMaterial(); + avg_item.setName(list.get(0).getName()); + avg_item.setSpec(list.get(0).getSpec()); + avg_item.setUnit(list.get(0).getUnit()); + avg_item.setCounty("城区"); + avg_item.setPrice(BigDecimal.valueOf(list.stream().mapToDouble(item->item.getPrice().doubleValue()).average().orElse(0D))); + this.data.add(avg_item); + } +} diff --git a/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java b/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java index a032893..2e4acf6 100644 --- a/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java +++ b/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java @@ -53,6 +53,22 @@ public class LocalMaterialService extends DataService, return query; } + + public LambdaQueryWrapper getQuery(Integer year, Integer month, String city, String county, String spec, String name) { + var query = this.getQuery(null, year, month, null, name); + if (city != null) { + query.like(LocalMaterial::getCity, city); + } + if(county != null) { + query.like(LocalMaterial::getCounty, county); + } + if(spec!= null) { + query.like(LocalMaterial::getSpec, spec); + } + + return query; + } + public LambdaQueryWrapper filterQuery(LambdaQueryWrapper query) { return query; }