diff --git a/pom.xml b/pom.xml index c116af0..33f63e6 100644 --- a/pom.xml +++ b/pom.xml @@ -157,6 +157,17 @@ jxls-jexcel 1.0.9 + + org.springframework + spring-test + + + + + org.springframework.boot + spring-boot-starter-test + test + diff --git a/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java b/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java index ca5f243..a7f1132 100644 --- a/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java +++ b/src/main/java/mjkf/xinke/main/constant/MaterialTaskType.java @@ -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 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(); + 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 项目材料价格预算计算数值没有小数点 diff --git a/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java b/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java index a3fb199..aaee9b7 100644 --- a/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java +++ b/src/main/java/mjkf/xinke/main/controller/LocalMaterialController.java @@ -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 data = localMaterialService.list(query); diff --git a/src/main/java/mjkf/xinke/main/dao/DataNetworkMapper.java b/src/main/java/mjkf/xinke/main/dao/DataNetworkMapper.java new file mode 100644 index 0000000..0394452 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/dao/DataNetworkMapper.java @@ -0,0 +1,16 @@ +package mjkf.xinke.main.dao; + +import mjkf.xinke.main.model.db.DataNetwork; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 网络价格 Mapper 接口 + *

+ * + * @author han0 + * @since 2024-07-08 + */ +public interface DataNetworkMapper extends BaseMapper { + +} diff --git a/src/main/java/mjkf/xinke/main/model/db/DataNetwork.java b/src/main/java/mjkf/xinke/main/model/db/DataNetwork.java new file mode 100644 index 0000000..daf1ee2 --- /dev/null +++ b/src/main/java/mjkf/xinke/main/model/db/DataNetwork.java @@ -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; + +/** + *

+ * 网络价格 + *

+ * + * @author han0 + * @since 2024-07-08 + */ +@Getter +@Setter +@TableName("DATA_NETWORK") +@ApiModel(value = "DataNetwork对象", description = "网络价格") +public class DataNetwork extends Model { + + 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; + } +} diff --git a/src/main/java/mjkf/xinke/main/service/AsphaltDomesticService.java b/src/main/java/mjkf/xinke/main/service/AsphaltDomesticService.java index d21710a..c05709c 100644 --- a/src/main/java/mjkf/xinke/main/service/AsphaltDomesticService.java +++ b/src/main/java/mjkf/xinke/main/service/AsphaltDomesticService.java @@ -28,7 +28,7 @@ public class AsphaltDomesticService extends DataService getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/AsphaltImportedService.java b/src/main/java/mjkf/xinke/main/service/AsphaltImportedService.java index 6c4149f..38fe559 100644 --- a/src/main/java/mjkf/xinke/main/service/AsphaltImportedService.java +++ b/src/main/java/mjkf/xinke/main/service/AsphaltImportedService.java @@ -28,7 +28,7 @@ public class AsphaltImportedService extends DataService getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/AsphaltModifierService.java b/src/main/java/mjkf/xinke/main/service/AsphaltModifierService.java index 31ed270..5a87615 100644 --- a/src/main/java/mjkf/xinke/main/service/AsphaltModifierService.java +++ b/src/main/java/mjkf/xinke/main/service/AsphaltModifierService.java @@ -27,7 +27,7 @@ public class AsphaltModifierService extends DataService getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/CementService.java b/src/main/java/mjkf/xinke/main/service/CementService.java index a5dbac1..6e496d0 100644 --- a/src/main/java/mjkf/xinke/main/service/CementService.java +++ b/src/main/java/mjkf/xinke/main/service/CementService.java @@ -34,7 +34,7 @@ public class CementService extends DataService, Cement> { return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/DataFujianService.java b/src/main/java/mjkf/xinke/main/service/DataFujianService.java index f358c31..242390a 100644 --- a/src/main/java/mjkf/xinke/main/service/DataFujianService.java +++ b/src/main/java/mjkf/xinke/main/service/DataFujianService.java @@ -12,7 +12,7 @@ import java.util.Map; @Service public class DataFujianService extends DataService, DataFujian> { - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e.like(DataFujian::getName, keyWord)); diff --git a/src/main/java/mjkf/xinke/main/service/DataGuangdongService.java b/src/main/java/mjkf/xinke/main/service/DataGuangdongService.java index b8eaafe..f170b7d 100644 --- a/src/main/java/mjkf/xinke/main/service/DataGuangdongService.java +++ b/src/main/java/mjkf/xinke/main/service/DataGuangdongService.java @@ -11,7 +11,7 @@ import java.util.Map; @Service public class DataGuangdongService extends DataService, DataGuangdong> { - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e.like(DataGuangdong::getName, keyWord)); diff --git a/src/main/java/mjkf/xinke/main/service/DataNetworkService.java b/src/main/java/mjkf/xinke/main/service/DataNetworkService.java new file mode 100644 index 0000000..d3623ca --- /dev/null +++ b/src/main/java/mjkf/xinke/main/service/DataNetworkService.java @@ -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, DataNetwork> { + + public LambdaQueryWrapper indexQuery(DataNetwork data) { + LambdaQueryWrapper 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 filterQuery(LambdaQueryWrapper query) { + return query; + } + + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { + LambdaQueryWrapper 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 trendQuery(Object obj, Integer year, Integer month) { + var data = (DataNetwork) obj; + LambdaQueryWrapper 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; + } +} + diff --git a/src/main/java/mjkf/xinke/main/service/DataService.java b/src/main/java/mjkf/xinke/main/service/DataService.java index 5a0f6db..987c245 100644 --- a/src/main/java/mjkf/xinke/main/service/DataService.java +++ b/src/main/java/mjkf/xinke/main/service/DataService.java @@ -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, T> extends ServiceImp } } + /** + * 唯一性查询 + */ abstract LambdaQueryWrapper indexQuery(T data); + /** + * 展示展示过滤 + */ abstract LambdaQueryWrapper filterQuery(LambdaQueryWrapper query); - abstract LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name); + /** + * 数据查询 + */ + abstract LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type); - public List saveOrUpdateByIndexBatch(List rows) throws Exception { + /** + * 批量更新 + */ + public List saveOrUpdateByIndexBatch(List 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, T> extends ServiceImp return list; } + /** + * 获取实体类 + */ public Class getEntityClass() { ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); Class clazz = (Class) pt.getActualTypeArguments()[1]; diff --git a/src/main/java/mjkf/xinke/main/service/DataZhejiangService.java b/src/main/java/mjkf/xinke/main/service/DataZhejiangService.java index e042359..fbb1ec0 100644 --- a/src/main/java/mjkf/xinke/main/service/DataZhejiangService.java +++ b/src/main/java/mjkf/xinke/main/service/DataZhejiangService.java @@ -13,7 +13,7 @@ import java.util.Map; public class DataZhejiangService extends DataService, DataZhejiang>{ - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e.like(DataZhejiang::getName, keyWord)); diff --git a/src/main/java/mjkf/xinke/main/service/FujianSurveyService.java b/src/main/java/mjkf/xinke/main/service/FujianSurveyService.java index 409ff3b..bb8dd7a 100644 --- a/src/main/java/mjkf/xinke/main/service/FujianSurveyService.java +++ b/src/main/java/mjkf/xinke/main/service/FujianSurveyService.java @@ -28,7 +28,7 @@ public class FujianSurveyService extends DataService, F return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/FuzhouHighwayBureauService.java b/src/main/java/mjkf/xinke/main/service/FuzhouHighwayBureauService.java index 4333501..5b8c5e0 100644 --- a/src/main/java/mjkf/xinke/main/service/FuzhouHighwayBureauService.java +++ b/src/main/java/mjkf/xinke/main/service/FuzhouHighwayBureauService.java @@ -29,7 +29,7 @@ public class FuzhouHighwayBureauService extends DataService getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/FuzhouTransportationBureauService.java b/src/main/java/mjkf/xinke/main/service/FuzhouTransportationBureauService.java index 01242ed..2266527 100644 --- a/src/main/java/mjkf/xinke/main/service/FuzhouTransportationBureauService.java +++ b/src/main/java/mjkf/xinke/main/service/FuzhouTransportationBureauService.java @@ -30,7 +30,7 @@ public class FuzhouTransportationBureauService extends DataService getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java b/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java index ec26716..f287168 100644 --- a/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java +++ b/src/main/java/mjkf/xinke/main/service/LocalMaterialService.java @@ -29,7 +29,7 @@ public class LocalMaterialService extends DataService, return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e @@ -54,8 +54,8 @@ public class LocalMaterialService extends DataService, } - public LambdaQueryWrapper getQuery(Integer year, Integer month, String city, String county, String spec, String name) { - var query = this.getQuery(null, year, month, null, name); + public LambdaQueryWrapper 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); } diff --git a/src/main/java/mjkf/xinke/main/service/MaterialResultService.java b/src/main/java/mjkf/xinke/main/service/MaterialResultService.java index 9a4c7d1..3f0f24a 100644 --- a/src/main/java/mjkf/xinke/main/service/MaterialResultService.java +++ b/src/main/java/mjkf/xinke/main/service/MaterialResultService.java @@ -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; } diff --git a/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java b/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java index 6968027..bb5be8b 100644 --- a/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java +++ b/src/main/java/mjkf/xinke/main/service/MaterialTaskService.java @@ -52,6 +52,8 @@ public class MaterialTaskService extends ServiceImpl, M LocalMaterialService localMaterialService; @Resource AsphaltModifierService asphaltModifierService; + @Resource + DataNetworkService dataNetworkService; @Override public boolean save(MaterialTask data) { @@ -79,6 +81,7 @@ public class MaterialTaskService extends ServiceImpl, 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, 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, M } private List getTableRows(File file) throws IOException { + System.out.println("MaterialTaskService.getTableRows | 解析表格 | " + file.getName()); List result = new ArrayList<>(); try (Workbook workbook = WorkbookFactory.create(file)) { Sheet sheet = workbook.getSheetAt(0); // 假设文件中只有一个表格 diff --git a/src/main/java/mjkf/xinke/main/service/OilService.java b/src/main/java/mjkf/xinke/main/service/OilService.java index 1fb345d..95e4d09 100644 --- a/src/main/java/mjkf/xinke/main/service/OilService.java +++ b/src/main/java/mjkf/xinke/main/service/OilService.java @@ -27,7 +27,7 @@ public class OilService extends DataService, Oil> { return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/SanmingSteelService.java b/src/main/java/mjkf/xinke/main/service/SanmingSteelService.java index 7308edc..dfa5ef2 100644 --- a/src/main/java/mjkf/xinke/main/service/SanmingSteelService.java +++ b/src/main/java/mjkf/xinke/main/service/SanmingSteelService.java @@ -30,7 +30,7 @@ public class SanmingSteelService extends DataService, S return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/SteelPlateService.java b/src/main/java/mjkf/xinke/main/service/SteelPlateService.java index 586862e..6b7ca18 100644 --- a/src/main/java/mjkf/xinke/main/service/SteelPlateService.java +++ b/src/main/java/mjkf/xinke/main/service/SteelPlateService.java @@ -38,7 +38,7 @@ public class SteelPlateService extends DataService, Steel } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/SteelRebarService.java b/src/main/java/mjkf/xinke/main/service/SteelRebarService.java index 686cf9c..92fba8e 100644 --- a/src/main/java/mjkf/xinke/main/service/SteelRebarService.java +++ b/src/main/java/mjkf/xinke/main/service/SteelRebarService.java @@ -34,7 +34,7 @@ public class SteelRebarService extends DataService, Steel return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/SteelSectionService.java b/src/main/java/mjkf/xinke/main/service/SteelSectionService.java index e48b1b8..d08d9f3 100644 --- a/src/main/java/mjkf/xinke/main/service/SteelSectionService.java +++ b/src/main/java/mjkf/xinke/main/service/SteelSectionService.java @@ -35,7 +35,7 @@ public class SteelSectionService extends DataService, S return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/java/mjkf/xinke/main/service/SteelStrandService.java b/src/main/java/mjkf/xinke/main/service/SteelStrandService.java index c5302b7..596987c 100644 --- a/src/main/java/mjkf/xinke/main/service/SteelStrandService.java +++ b/src/main/java/mjkf/xinke/main/service/SteelStrandService.java @@ -35,7 +35,7 @@ public class SteelStrandService extends DataService, Ste return query; } - public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name) { + public LambdaQueryWrapper getQuery(String keyWord, Integer year, Integer month, String materialId, String name, Integer type) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (keyWord != null) { query.and(e -> e diff --git a/src/main/resources/_sql/init/mysql/v0.1.sql b/src/main/resources/_sql/init/mysql/v0.1.sql index 8531263..d8b8b0a 100644 --- a/src/main/resources/_sql/init/mysql/v0.1.sql +++ b/src/main/resources/_sql/init/mysql/v0.1.sql @@ -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; \ No newline at end of file + 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 '地区'; \ No newline at end of file diff --git a/src/test/java/mjkf/xinke/LoginTest.java b/src/test/java/mjkf/xinke/LoginTest.java new file mode 100644 index 0000000..e8c487f --- /dev/null +++ b/src/test/java/mjkf/xinke/LoginTest.java @@ -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); + } + + +} diff --git a/src/test/java/mjkf/xinke/UploadFileTest.java b/src/test/java/mjkf/xinke/UploadFileTest.java new file mode 100644 index 0000000..0c90379 --- /dev/null +++ b/src/test/java/mjkf/xinke/UploadFileTest.java @@ -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; + } +}