feat: 新增上传采集网络价格数据
This commit is contained in:
11
pom.xml
11
pom.xml
@@ -157,6 +157,17 @@
|
||||
<artifactId>jxls-jexcel</artifactId>
|
||||
<version>1.0.9</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- test -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
@@ -1,6 +1,8 @@
|
||||
package mjkf.xinke.main.constant;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class MaterialTaskType {
|
||||
// 钢筋网
|
||||
@@ -12,9 +14,11 @@ public class MaterialTaskType {
|
||||
@Deprecated public static final Integer BAIINFO_ASPHALT_DOMESTIC = 201; // 国产沥青
|
||||
@Deprecated public static final Integer BAIINFO_ASPHALT_IMPORTED = 202; // 进口沥青
|
||||
@Deprecated public static final Integer BAIINFO_CEMENT = 203; // 水泥
|
||||
// 发改委
|
||||
@Deprecated public static final Integer OIL = 801; // 汽柴油
|
||||
// 三明钢铁
|
||||
public static final Integer SANMING_STEEL = 301;
|
||||
// 材料信息
|
||||
// 交通局
|
||||
public static final Integer FUZHOU_TRANSPORTATION_BUREAU = 40101; // todo-1 福州交通局
|
||||
public static final Integer LONGYAN_TRANSPORTATION_BUREAU = 40102; // todo-1 龙岩交通局
|
||||
public static final Integer NANPING_TRANSPORTATION_BUREAU = 40103; // todo-1 南平交通局
|
||||
@@ -26,7 +30,7 @@ public class MaterialTaskType {
|
||||
public static final Integer XIAMEN_TRANSPORTATION_BUREAU = 40109; // todo-1 厦门交通局
|
||||
public static final Integer ZHANGZHOU_TRANSPORTATION_BUREAU = 40110; // todo-1 漳州交通局
|
||||
public static final Integer ZHANGZHOUKFQ_TRANSPORTATION_BUREAU = 40111; // todo-1 漳州开发区交通局
|
||||
|
||||
// 公路局
|
||||
public static final Integer FUZHOU_HIGHWAY_BUREAU = 40201; // todo-1 福州公路局
|
||||
public static final Integer LONGYAN_HIGHWAY_BUREAU = 40202; // todo-1 龙岩公路局
|
||||
public static final Integer NANPING_HIGHWAY_BUREAU = 40203; // todo-1 南平公路局
|
||||
@@ -57,8 +61,6 @@ public class MaterialTaskType {
|
||||
public static final Integer OTHER_JIANGXI = 604; // todo-2 江西
|
||||
// 住建厅
|
||||
public static final Integer FUJIAN_DEPARTMENT = 701;
|
||||
// 发改委
|
||||
@Deprecated public static final Integer OIL = 801; // 汽柴油
|
||||
// 地材(废弃)
|
||||
@Deprecated public static final Integer LOCAL_MEDIUM_COARSE_SAND = 901; // 中粗砂
|
||||
@Deprecated public static final Integer LOCAL_MECHANISM_SAND = 902; // 机制砂
|
||||
@@ -69,7 +71,6 @@ public class MaterialTaskType {
|
||||
@Deprecated public static final Integer LOCAL_CLAY = 907; // 粘土
|
||||
// 辅材
|
||||
public static final Integer ASPHALT_MODIFIER = 1001; // 改性剂
|
||||
|
||||
// 新地材
|
||||
public static final Integer LOCAL_FUZHOU = 1101; // 福州
|
||||
public static final Integer LOCAL_LONGYAN = 1102; // 龙岩
|
||||
@@ -79,12 +80,31 @@ public class MaterialTaskType {
|
||||
public static final Integer LOCAL_QUANZHOU = 1106; // 泉州
|
||||
public static final Integer LOCAL_SANMING = 1107; // 三明
|
||||
public static final Integer LOCAL_ZHANGZHOU = 1108; // 漳州
|
||||
|
||||
// 网络价格
|
||||
public static final Integer NETWORK = 1201; // todo-1 网络价格
|
||||
public static final Integer FUZHOU_NETWORK = 1201; // 福州网络价格
|
||||
public static final Integer LONGYAN_NETWORK = 1202; // 龙岩网络价格
|
||||
public static final Integer NANPING_NETWORK = 1203; // 南平网络价格
|
||||
public static final Integer NINGDE_NETWORK = 1204; // 宁德网络价格
|
||||
public static final Integer PINTAN_NETWORK = 1205; // 平潭网络价格
|
||||
public static final Integer PUTIAN_NETWORK = 1206; // 莆田网络价格
|
||||
public static final Integer QUANZHOU_NETWORK = 1207; // 泉州网络价格
|
||||
public static final Integer SANMING_NETWORK = 1208; // 三明网络价格
|
||||
public static final Integer XIAMEN_NETWORK = 1209; // 厦门网络价格
|
||||
public static final Integer ZHANGZHOU_NETWORK = 1210; // 漳州网络价格
|
||||
public static final Integer ZHANGZHOUKFQ_NETWORK = 1211; // 漳州开发区网络价格
|
||||
|
||||
public static final List<Integer> list = List.of(
|
||||
NETWORK,
|
||||
FUZHOU_NETWORK,
|
||||
LONGYAN_NETWORK,
|
||||
NANPING_NETWORK,
|
||||
NINGDE_NETWORK,
|
||||
PINTAN_NETWORK,
|
||||
PUTIAN_NETWORK,
|
||||
QUANZHOU_NETWORK,
|
||||
SANMING_NETWORK,
|
||||
XIAMEN_NETWORK,
|
||||
ZHANGZHOU_NETWORK,
|
||||
ZHANGZHOUKFQ_NETWORK,
|
||||
|
||||
SANMING_STEEL,
|
||||
|
||||
@@ -141,12 +161,29 @@ public class MaterialTaskType {
|
||||
LOCAL_ZHANGZHOU
|
||||
);
|
||||
|
||||
public static String getRegion (Integer type) {
|
||||
var map = new HashMap<Integer, String>();
|
||||
map.put(1, "福州");
|
||||
map.put(2, "龙岩");
|
||||
map.put(3, "南平");
|
||||
map.put(4, "宁德");
|
||||
map.put(5, "平潭");
|
||||
map.put(6, "莆田");
|
||||
map.put(7, "泉州");
|
||||
map.put(8, "三明");
|
||||
map.put(9, "厦门");
|
||||
map.put(10, "漳州");
|
||||
map.put(11, "漳州开发区");
|
||||
var i = type % 100;
|
||||
var region = map.get(i);
|
||||
return region;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否来源爬虫
|
||||
*/
|
||||
public static boolean isFromSpider(Integer type) {
|
||||
var dataFromSpiderTypes = List.of(
|
||||
NETWORK,
|
||||
OIL,
|
||||
OTHER_ZHEJIANG,
|
||||
OTHER_GIANLZHOU,
|
||||
@@ -173,11 +210,89 @@ public class MaterialTaskType {
|
||||
);
|
||||
return dataFromSpiderTypes.contains(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否网络价格
|
||||
*/
|
||||
public static boolean isNetworkPrice(Integer type) {
|
||||
var types = List.of(
|
||||
FUZHOU_NETWORK,
|
||||
LONGYAN_NETWORK,
|
||||
NANPING_NETWORK,
|
||||
NINGDE_NETWORK,
|
||||
PINTAN_NETWORK,
|
||||
PUTIAN_NETWORK,
|
||||
QUANZHOU_NETWORK,
|
||||
SANMING_NETWORK
|
||||
);
|
||||
return types.contains(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否交通局
|
||||
*/
|
||||
public static boolean isTransportationBureau(Integer type) {
|
||||
var types = List.of(
|
||||
FUZHOU_TRANSPORTATION_BUREAU,
|
||||
LONGYAN_TRANSPORTATION_BUREAU,
|
||||
NANPING_TRANSPORTATION_BUREAU,
|
||||
NINGDE_TRANSPORTATION_BUREAU,
|
||||
PINTAN_TRANSPORTATION_BUREAU,
|
||||
PUTIAN_TRANSPORTATION_BUREAU,
|
||||
QUANZHOU_TRANSPORTATION_BUREAU,
|
||||
SANMING_TRANSPORTATION_BUREAU,
|
||||
XIAMEN_TRANSPORTATION_BUREAU,
|
||||
ZHANGZHOU_TRANSPORTATION_BUREAU,
|
||||
ZHANGZHOUKFQ_TRANSPORTATION_BUREAU
|
||||
);
|
||||
return types.contains(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否公路局
|
||||
*/
|
||||
public static boolean isHighwayBureau(Integer type) {
|
||||
var types = List.of(
|
||||
FUZHOU_HIGHWAY_BUREAU,
|
||||
LONGYAN_HIGHWAY_BUREAU,
|
||||
NANPING_HIGHWAY_BUREAU,
|
||||
NINGDE_HIGHWAY_BUREAU,
|
||||
PINTAN_HIGHWAY_BUREAU,
|
||||
PUTIAN_HIGHWAY_BUREAU,
|
||||
QUANZHOU_HIGHWAY_BUREAU,
|
||||
SANMING_HIGHWAY_BUREAU,
|
||||
XIAMEN_HIGHWAY_BUREAU,
|
||||
ZHANGZHOU_HIGHWAY_BUREAU,
|
||||
ZHANGZHOUKFQ_HIGHWAY_BUREAU
|
||||
);
|
||||
return types.contains(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否调查表
|
||||
*/
|
||||
public static boolean isSurvey(Integer type) {
|
||||
var types = List.of(
|
||||
FUZHOU_SURVEY,
|
||||
LONGYAN_SURVEY,
|
||||
NANPING_SURVEY,
|
||||
NINGDE_SURVEY,
|
||||
PINTAN_SURVEY,
|
||||
PUTIAN_SURVEY,
|
||||
QUANZHOU_SURVEY,
|
||||
SANMING_SURVEY,
|
||||
XIAMEN_SURVEY,
|
||||
ZHANGZHOU_SURVEY,
|
||||
ZHANGZHOUKFQ_SURVEY
|
||||
);
|
||||
return types.contains(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* todo-1 数据展示模块 地市暂不切换
|
||||
* todo-1 十一个地市接口
|
||||
* todo-1 采集结果“产地”改成“品牌产商”
|
||||
* todo-1 传采集数据网络价格树变动
|
||||
* todo-0 传采集数据网络价格计算
|
||||
* todo-1 趋势图一年每月打点
|
||||
* todo-1 项目材料价格预算“最高(低)总金额”携带上价格的月份
|
||||
* todo-1 项目材料价格预算计算数值没有小数点
|
||||
|
@@ -48,7 +48,7 @@ public class LocalMaterialController {
|
||||
@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);
|
||||
var query = localMaterialService.getQuery(year, month, city, county, spec, name, null);
|
||||
query.orderByDesc(LocalMaterial::getName);
|
||||
List<LocalMaterial> data = localMaterialService.list(query);
|
||||
|
||||
|
16
src/main/java/mjkf/xinke/main/dao/DataNetworkMapper.java
Normal file
16
src/main/java/mjkf/xinke/main/dao/DataNetworkMapper.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package mjkf.xinke.main.dao;
|
||||
|
||||
import mjkf.xinke.main.model.db.DataNetwork;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 网络价格 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author han0
|
||||
* @since 2024-07-08
|
||||
*/
|
||||
public interface DataNetworkMapper extends BaseMapper<DataNetwork> {
|
||||
|
||||
}
|
112
src/main/java/mjkf/xinke/main/model/db/DataNetwork.java
Normal file
112
src/main/java/mjkf/xinke/main/model/db/DataNetwork.java
Normal file
@@ -0,0 +1,112 @@
|
||||
package mjkf.xinke.main.model.db;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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 mjkf.xinke.main.constant.MaterialTaskType;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 网络价格
|
||||
* </p>
|
||||
*
|
||||
* @author han0
|
||||
* @since 2024-07-08
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("DATA_NETWORK")
|
||||
@ApiModel(value = "DataNetwork对象", description = "网络价格")
|
||||
public class DataNetwork extends Model<DataNetwork> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "ID", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty("材料id")
|
||||
@TableField("MATERIAL_ID")
|
||||
private String materialId;
|
||||
|
||||
@ApiModelProperty("规格")
|
||||
@TableField("SPEC")
|
||||
private String spec;
|
||||
|
||||
@ApiModelProperty("单位")
|
||||
@TableField("UNIT")
|
||||
private String unit;
|
||||
|
||||
@ApiModelProperty("品牌")
|
||||
@TableField("BRAND")
|
||||
private String brand;
|
||||
|
||||
@ApiModelProperty("名称")
|
||||
@TableField("`NAME`")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("价格")
|
||||
@TableField("PRICE")
|
||||
private BigDecimal price;
|
||||
|
||||
@ApiModelProperty("信息来源")
|
||||
@TableField("`SOURCE`")
|
||||
private String source;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
@TableField("REMARK")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("日期")
|
||||
@TableField("`DATE`")
|
||||
private LocalDate date;
|
||||
|
||||
@ApiModelProperty("地区")
|
||||
@TableField("REGION")
|
||||
private String region;
|
||||
|
||||
@Override
|
||||
public Serializable pkVal() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public DataNetwork () {}
|
||||
|
||||
public DataNetwork (Row row, MaterialTask task) {
|
||||
var policy = Row.MissingCellPolicy.CREATE_NULL_AS_BLANK;
|
||||
row.getCell(0, policy).setCellType(CellType.STRING);
|
||||
this.setMaterialId(row.getCell(0, policy).getStringCellValue());
|
||||
this.setName(row.getCell(1, policy).getStringCellValue());
|
||||
this.setSpec(row.getCell(2, policy).getStringCellValue());
|
||||
this.setUnit(row.getCell(3, policy).getStringCellValue());
|
||||
this.setBrand(row.getCell(4, policy).getStringCellValue());
|
||||
this.setPrice(BigDecimal.valueOf(row.getCell(5, policy).getNumericCellValue()));
|
||||
this.setSource(row.getCell(6, policy).getStringCellValue());
|
||||
this.setRemark(row.getCell(7, policy).getStringCellValue());
|
||||
this.setDate(LocalDate.of(task.getYear(), task.getMonth(), 1)); // 日期从任务获取
|
||||
this.setRegion(MaterialTaskType.getRegion(task.getType()));
|
||||
}
|
||||
|
||||
public DataNetwork update(DataNetwork item) {
|
||||
this.setMaterialId(item.getMaterialId());
|
||||
this.setSpec(item.getSpec());
|
||||
this.setUnit(item.getUnit());
|
||||
this.setBrand(item.getBrand());
|
||||
this.setName(item.getName());
|
||||
this.setPrice(item.getPrice());
|
||||
this.setSource(item.getSource());
|
||||
this.setRemark(item.getRemark());
|
||||
return this;
|
||||
}
|
||||
}
|
@@ -28,7 +28,7 @@ public class AsphaltDomesticService extends DataService<BaseMapper<AsphaltDomest
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<AsphaltDomestic> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<AsphaltDomestic> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<AsphaltDomestic> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -28,7 +28,7 @@ public class AsphaltImportedService extends DataService<BaseMapper<AsphaltImport
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<AsphaltImported> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<AsphaltImported> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<AsphaltImported> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -27,7 +27,7 @@ public class AsphaltModifierService extends DataService<BaseMapper<AsphaltModifi
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<AsphaltModifier> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<AsphaltModifier> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<AsphaltModifier> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -34,7 +34,7 @@ public class CementService extends DataService<BaseMapper<Cement>, Cement> {
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<Cement> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<Cement> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<Cement> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -12,7 +12,7 @@ import java.util.Map;
|
||||
@Service
|
||||
public class DataFujianService extends DataService<BaseMapper<DataFujian>, DataFujian> {
|
||||
|
||||
public LambdaQueryWrapper<DataFujian> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<DataFujian> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<DataFujian> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e.like(DataFujian::getName, keyWord));
|
||||
|
@@ -11,7 +11,7 @@ import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class DataGuangdongService extends DataService<BaseMapper<DataGuangdong>, DataGuangdong> {
|
||||
public LambdaQueryWrapper<DataGuangdong> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<DataGuangdong> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<DataGuangdong> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e.like(DataGuangdong::getName, keyWord));
|
||||
|
@@ -0,0 +1,66 @@
|
||||
package mjkf.xinke.main.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import mjkf.xinke.main.constant.MaterialTaskType;
|
||||
import mjkf.xinke.main.model.db.DataNetwork;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class DataNetworkService extends DataService<BaseMapper<DataNetwork>, DataNetwork> {
|
||||
|
||||
public LambdaQueryWrapper<DataNetwork> indexQuery(DataNetwork data) {
|
||||
LambdaQueryWrapper<DataNetwork> query = new LambdaQueryWrapper<>();
|
||||
query.eq(DataNetwork::getName, data.getName());
|
||||
query.eq(DataNetwork::getSpec, data.getSpec());
|
||||
query.eq(DataNetwork::getDate, data.getDate());
|
||||
query.eq(DataNetwork::getRegion, data.getRegion());
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<DataNetwork> filterQuery(LambdaQueryWrapper<DataNetwork> query) {
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<DataNetwork> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<DataNetwork> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
.like(DataNetwork::getName, keyWord)
|
||||
);
|
||||
}
|
||||
if (month != null) {
|
||||
var date = LocalDate.of(year, month, 1);
|
||||
query.between(DataNetwork::getDate, date, date.plusMonths(1));
|
||||
}
|
||||
if (name != null) {
|
||||
query.like(DataNetwork::getName, name);
|
||||
}
|
||||
if (materialId != null) {
|
||||
query.eq(DataNetwork::getMaterialId, materialId);
|
||||
}
|
||||
if (type != null) {
|
||||
query.eq(DataNetwork::getRegion, MaterialTaskType.getRegion(type));
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
public DataNetwork getMapGroupingBy(Map item) {
|
||||
var o = new DataNetwork();
|
||||
o.setName(item.get("name").toString());
|
||||
return o;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<DataNetwork> trendQuery(Object obj, Integer year, Integer month) {
|
||||
var data = (DataNetwork) obj;
|
||||
LambdaQueryWrapper<DataNetwork> query = new LambdaQueryWrapper<>();
|
||||
query.eq(DataNetwork::getName, data.getName());
|
||||
var date = LocalDate.of(year, month, 1);
|
||||
query.between(DataNetwork::getDate, date, date.plusMonths(1));
|
||||
return query;
|
||||
}
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import mjkf.xinke.main.model.db.MaterialTask;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
@@ -24,16 +25,28 @@ public abstract class DataService<M extends BaseMapper<T>, T> extends ServiceImp
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 唯一性查询
|
||||
*/
|
||||
abstract LambdaQueryWrapper<T> indexQuery(T data);
|
||||
|
||||
/**
|
||||
* 展示展示过滤
|
||||
*/
|
||||
abstract LambdaQueryWrapper<T> filterQuery(LambdaQueryWrapper<T> query);
|
||||
|
||||
abstract LambdaQueryWrapper<T> getQuery(String keyWord, Integer year, Integer month, String materialId, String name);
|
||||
/**
|
||||
* 数据查询
|
||||
*/
|
||||
abstract LambdaQueryWrapper<T> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type);
|
||||
|
||||
public List<T> saveOrUpdateByIndexBatch(List<Row> rows) throws Exception {
|
||||
/**
|
||||
* 批量更新
|
||||
*/
|
||||
public List<T> saveOrUpdateByIndexBatch(List<Row> rows, MaterialTask task) throws Exception {
|
||||
var list = rows.stream().map(item -> {
|
||||
try {
|
||||
return (T) this.getEntityClass().getConstructor(Row.class).newInstance(item);
|
||||
return (T) this.getEntityClass().getConstructor(Row.class, MaterialTask.class).newInstance(item, task);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
@@ -47,6 +60,9 @@ public abstract class DataService<M extends BaseMapper<T>, T> extends ServiceImp
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取实体类
|
||||
*/
|
||||
public Class<T> getEntityClass() {
|
||||
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
|
||||
Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[1];
|
||||
|
@@ -13,7 +13,7 @@ import java.util.Map;
|
||||
public class DataZhejiangService extends DataService<BaseMapper<DataZhejiang>, DataZhejiang>{
|
||||
|
||||
|
||||
public LambdaQueryWrapper<DataZhejiang> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<DataZhejiang> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<DataZhejiang> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e.like(DataZhejiang::getName, keyWord));
|
||||
|
@@ -28,7 +28,7 @@ public class FujianSurveyService extends DataService<BaseMapper<FujianSurvey>, F
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<FujianSurvey> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<FujianSurvey> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<FujianSurvey> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -29,7 +29,7 @@ public class FuzhouHighwayBureauService extends DataService<BaseMapper<FuzhouHig
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<FuzhouHighwayBureau> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<FuzhouHighwayBureau> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<FuzhouHighwayBureau> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -30,7 +30,7 @@ public class FuzhouTransportationBureauService extends DataService<BaseMapper<Fu
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<FuzhouTransportationBureau> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<FuzhouTransportationBureau> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<FuzhouTransportationBureau> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -29,7 +29,7 @@ public class LocalMaterialService extends DataService<BaseMapper<LocalMaterial>,
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<LocalMaterial> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<LocalMaterial> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<LocalMaterial> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
@@ -54,8 +54,8 @@ public class LocalMaterialService extends DataService<BaseMapper<LocalMaterial>,
|
||||
}
|
||||
|
||||
|
||||
public LambdaQueryWrapper<LocalMaterial> getQuery(Integer year, Integer month, String city, String county, String spec, String name) {
|
||||
var query = this.getQuery(null, year, month, null, name);
|
||||
public LambdaQueryWrapper<LocalMaterial> getQuery(Integer year, Integer month, String city, String county, String spec, String name, Integer type) {
|
||||
var query = this.getQuery(null, year, month, null, name, type);
|
||||
if (city != null) {
|
||||
query.like(LocalMaterial::getCity, city);
|
||||
}
|
||||
|
@@ -45,6 +45,8 @@ public class MaterialResultService {
|
||||
DataGuangdongService dataGuangdongService;
|
||||
@Resource
|
||||
DataFujianService dataFujianService;
|
||||
@Resource
|
||||
DataNetworkService dataNetworkService;
|
||||
|
||||
/**
|
||||
* 基础查询
|
||||
@@ -67,9 +69,9 @@ public class MaterialResultService {
|
||||
}
|
||||
Method getQuery = service.getClass().getMethod(
|
||||
"getQuery",
|
||||
String.class, Integer.class, Integer.class, String.class, String.class
|
||||
String.class, Integer.class, Integer.class, String.class, String.class, Integer.class
|
||||
);
|
||||
query = (LambdaQueryWrapper) getQuery.invoke(service, keyWord, year, month, materialId, name);
|
||||
query = (LambdaQueryWrapper) getQuery.invoke(service, keyWord, year, month, materialId, name, type);
|
||||
|
||||
return query;
|
||||
}
|
||||
@@ -170,8 +172,10 @@ public class MaterialResultService {
|
||||
service = oilService;
|
||||
} else if (MaterialTaskType.isLocalMaterial(type)) {
|
||||
service = localMaterialService;
|
||||
} else if (MaterialTaskType.isNetworkPrice(type)) {
|
||||
service = dataNetworkService;
|
||||
} else {
|
||||
|
||||
System.out.println("MaterialResultService.getService | 未找到对应的数据处理 Service | type: " + type);
|
||||
}
|
||||
return service;
|
||||
}
|
||||
|
@@ -52,6 +52,8 @@ public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, M
|
||||
LocalMaterialService localMaterialService;
|
||||
@Resource
|
||||
AsphaltModifierService asphaltModifierService;
|
||||
@Resource
|
||||
DataNetworkService dataNetworkService;
|
||||
|
||||
@Override
|
||||
public boolean save(MaterialTask data) {
|
||||
@@ -79,6 +81,7 @@ public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, M
|
||||
}
|
||||
|
||||
private boolean importData(MaterialTask data) throws Exception {
|
||||
System.out.println("MaterialTaskService.importData | 导入数据 | task_id: " + data.getId());
|
||||
// 获取文件
|
||||
DevFile devFile = devFileService.queryEntity(data.getFile());
|
||||
File file = FileUtil.file(devFile.getStoragePath());
|
||||
@@ -87,32 +90,35 @@ public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, M
|
||||
// 导入
|
||||
List list;
|
||||
if (data.getType().equals(MaterialTaskType.MY_STEEL_REBAR)) {
|
||||
list = steelRebarService.saveOrUpdateByIndexBatch(rows);
|
||||
list = steelRebarService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.MY_STEEL_SECTION)) {
|
||||
list = steelSectionService.saveOrUpdateByIndexBatch(rows);
|
||||
list = steelSectionService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.MY_STEEL_STRAND)) {
|
||||
list = steelStrandService.saveOrUpdateByIndexBatch(rows);
|
||||
list = steelStrandService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.MY_STEEL_PLATE)) {
|
||||
list = steelPlateService.saveOrUpdateByIndexBatch(rows);
|
||||
list = steelPlateService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.BAIINFO_ASPHALT_DOMESTIC)) {
|
||||
list = asphaltDomesticService.saveOrUpdateByIndexBatch(rows);
|
||||
list = asphaltDomesticService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.BAIINFO_ASPHALT_IMPORTED)) {
|
||||
list = asphaltImportedService.saveOrUpdateByIndexBatch(rows);
|
||||
list = asphaltImportedService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.BAIINFO_CEMENT)) {
|
||||
list = cementService.saveOrUpdateByIndexBatch(rows);
|
||||
list = cementService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.SANMING_STEEL)) {
|
||||
list = sanmingSteelService.saveOrUpdateByIndexBatch(rows);
|
||||
list = sanmingSteelService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.FUZHOU_TRANSPORTATION_BUREAU)) {
|
||||
list = fuzhouTransportationBureauService.saveOrUpdateByIndexBatch(rows);
|
||||
list = fuzhouTransportationBureauService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.FUZHOU_HIGHWAY_BUREAU)) {
|
||||
list = fuzhouHighwayBureauService.saveOrUpdateByIndexBatch(rows);
|
||||
list = fuzhouHighwayBureauService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.FUZHOU_SURVEY)) {
|
||||
list = fujianSurveyService.saveOrUpdateByIndexBatch(rows);
|
||||
list = fujianSurveyService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (MaterialTaskType.isLocalMaterial(data.getType())) {
|
||||
list = localMaterialService.saveOrUpdateByIndexBatch(rows);
|
||||
list = localMaterialService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (data.getType().equals(MaterialTaskType.ASPHALT_MODIFIER)) {
|
||||
list = asphaltModifierService.saveOrUpdateByIndexBatch(rows);
|
||||
list = asphaltModifierService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else if (MaterialTaskType.isNetworkPrice(data.getType())) {
|
||||
list = dataNetworkService.saveOrUpdateByIndexBatch(rows, data);
|
||||
} else {
|
||||
System.out.println("MaterialTaskService.importData | 未识别的任务类型");
|
||||
// todo-3 异常处理:未识别的类型
|
||||
return false;
|
||||
}
|
||||
@@ -127,6 +133,7 @@ public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, M
|
||||
}
|
||||
|
||||
private List<Row> getTableRows(File file) throws IOException {
|
||||
System.out.println("MaterialTaskService.getTableRows | 解析表格 | " + file.getName());
|
||||
List<Row> result = new ArrayList<>();
|
||||
try (Workbook workbook = WorkbookFactory.create(file)) {
|
||||
Sheet sheet = workbook.getSheetAt(0); // 假设文件中只有一个表格
|
||||
|
@@ -27,7 +27,7 @@ public class OilService extends DataService<BaseMapper<Oil>, Oil> {
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<Oil> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<Oil> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<Oil> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -30,7 +30,7 @@ public class SanmingSteelService extends DataService<BaseMapper<SanmingSteel>, S
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<SanmingSteel> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<SanmingSteel> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<SanmingSteel> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -38,7 +38,7 @@ public class SteelPlateService extends DataService<BaseMapper<SteelPlate>, Steel
|
||||
}
|
||||
|
||||
|
||||
public LambdaQueryWrapper<SteelPlate> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<SteelPlate> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<SteelPlate> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -34,7 +34,7 @@ public class SteelRebarService extends DataService<BaseMapper<SteelRebar>, Steel
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<SteelRebar> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<SteelRebar> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<SteelRebar> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -35,7 +35,7 @@ public class SteelSectionService extends DataService<BaseMapper<SteelSection>, S
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<SteelSection> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<SteelSection> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<SteelSection> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -35,7 +35,7 @@ public class SteelStrandService extends DataService<BaseMapper<SteelStrand>, Ste
|
||||
return query;
|
||||
}
|
||||
|
||||
public LambdaQueryWrapper<SteelStrand> getQuery(String keyWord, Integer year, Integer month, String materialId, String name) {
|
||||
public LambdaQueryWrapper<SteelStrand> getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) {
|
||||
LambdaQueryWrapper<SteelStrand> query = new LambdaQueryWrapper<>();
|
||||
if (keyWord != null) {
|
||||
query.and(e -> e
|
||||
|
@@ -1,3 +1,18 @@
|
||||
ALTER TABLE price_publish ADD PRICE_ZHANGZHOUKFQ decimal(16,4) NULL COMMENT '漳州开发区价格';
|
||||
ALTER TABLE price_publish
|
||||
MODIFY COLUMN PRICE_ZHANGZHOUKFQ decimal(16,4) COMMENT '漳州开发区价格' AFTER PRICE_PINTAN;
|
||||
MODIFY COLUMN PRICE_ZHANGZHOUKFQ decimal(16,4) COMMENT '漳州开发区价格' AFTER PRICE_PINTAN;
|
||||
|
||||
create table DATA_NETWORK (
|
||||
ID int auto_increment primary key,
|
||||
MATERIAL_ID varchar(128) null comment '材料id',
|
||||
SPEC varchar(128) null comment '规格',
|
||||
UNIT varchar(128) null comment '单位',
|
||||
BRAND varchar(128) null comment '品牌',
|
||||
NAME varchar(128) null comment '名称',
|
||||
PRICE decimal(16, 4) null comment '价格',
|
||||
SOURCE varchar(128) null comment '信息来源',
|
||||
REMARK text null comment '备注',
|
||||
DATE date null comment '日期'
|
||||
) comment '网络价格';
|
||||
|
||||
ALTER TABLE DATA_NETWORK ADD REGION varchar(64) NULL COMMENT '地区';
|
38
src/test/java/mjkf/xinke/LoginTest.java
Normal file
38
src/test/java/mjkf/xinke/LoginTest.java
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
package mjkf.xinke;
|
||||
|
||||
import mjkf.xinke.auth.core.enums.SaClientTypeEnum;
|
||||
import mjkf.xinke.auth.modular.login.param.AuthAccountPasswordLoginParam;
|
||||
import mjkf.xinke.auth.modular.login.service.AuthService;
|
||||
import mjkf.xinke.dev.modular.dict.service.DevDictService;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* TestMain方法
|
||||
*
|
||||
*
|
||||
* @date 2022/9/17 17:10
|
||||
*/
|
||||
@SpringBootTest(classes = Application.class)
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
public class LoginTest {
|
||||
@Resource
|
||||
DevDictService devDictService;
|
||||
@Resource
|
||||
AuthService authService;
|
||||
|
||||
@org.junit.Test
|
||||
public void test() throws Exception {
|
||||
var param = new AuthAccountPasswordLoginParam();
|
||||
param.setAccount("superAdmin");
|
||||
param.setPassword("3578ea7ec54cf6c870892438b63f30af45096e4c91f3753ae377f369207cc0f7c1fc028bd24464eea8fb9f8e8bc3dd2c9d009351b16f56ee9aee30d6d5c98d1e71e9e9076a3042107eae7edd2666794967d7787b92a1053efc976438db518ee01cd88177a921");
|
||||
var result = authService.doLogin(param, SaClientTypeEnum.B.getValue());
|
||||
System.out.println(result);
|
||||
}
|
||||
|
||||
|
||||
}
|
49
src/test/java/mjkf/xinke/UploadFileTest.java
Normal file
49
src/test/java/mjkf/xinke/UploadFileTest.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package mjkf.xinke;
|
||||
|
||||
import cn.hutool.core.util.ZipUtil;
|
||||
import mjkf.xinke.dev.modular.file.enums.DevFileEngineTypeEnum;
|
||||
import mjkf.xinke.dev.modular.file.service.DevFileService;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
|
||||
@SpringBootTest(classes = Application.class)
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
public class UploadFileTest {
|
||||
@Resource
|
||||
DevFileService devFileService;
|
||||
|
||||
@Test
|
||||
public void test() throws Exception {
|
||||
var filePath = "C:\\Users\\Administrator\\Desktop\\材料管理系统模版\\主材\\网络价格.xlsx";
|
||||
var file = new File(filePath);
|
||||
var multipartFile = this.mockMultipartFile(file, "网络价格.xlsx", "application/x-zip-compressed");
|
||||
var fileId = devFileService.uploadReturnId(DevFileEngineTypeEnum.LOCAL.getValue(), multipartFile);
|
||||
System.out.println("UploadFileTest.test | fileId " + fileId);
|
||||
}
|
||||
|
||||
private MultipartFile mockMultipartFile(File file, String fileName, String contentType) {
|
||||
try {
|
||||
// 使用文件内容和文件名创建MockMultipartFile
|
||||
MockMultipartFile mockMultipartFile = new MockMultipartFile(
|
||||
"file", // 参数名,与表单提交时的name属性一致
|
||||
fileName, // 文件名
|
||||
contentType, // 文件内容类型
|
||||
new FileInputStream(file) // 文件内容
|
||||
);
|
||||
return mockMultipartFile;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user