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;
}