feat: 新增上传采集网络价格数据

This commit is contained in:
han0
2024-07-08 16:39:40 +08:00
parent 9c91f40d91
commit 46e648fc8c
29 changed files with 499 additions and 50 deletions

11
pom.xml
View File

@@ -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>

View File

@@ -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 项目材料价格预算计算数值没有小数点

View File

@@ -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);

View 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> {
}

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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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));

View File

@@ -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));

View File

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

View File

@@ -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];

View File

@@ -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));

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

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

View File

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

View File

@@ -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); // 假设文件中只有一个表格

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 '地区';

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

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