Browse Source

feat:新增车辆四级联动数据脚本文件,同步汽车之家

master
tanzhisong 18 hours ago
parent
commit
babe58ef69
5 changed files with 198 additions and 81 deletions
  1. +7
    -1
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/controller/AppCarTreeController.java
  2. +3
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/entity/AppCarTree.java
  3. +104
    -79
      jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/cartree/controller/CarTreeController.java
  4. +1
    -1
      jeecg-module-system/jeecg-system-start/src/main/resources/application.yml
  5. +83
    -0
      jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/miniapp/car/CarInfoInitTest.java

+ 7
- 1
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/controller/AppCarTreeController.java View File

@ -56,9 +56,13 @@ public class AppCarTreeController extends JeecgController<AppCarTree, IAppCarTre
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
String hasQuery = req.getParameter("hasQuery");
req.setAttribute("order", "");
req.setAttribute("column", "");
if(hasQuery != null && "true".equals(hasQuery)){
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
List<AppCarTree> list = appCarTreeService.queryTreeListNoPage(queryWrapper);
// 强制按字母排序
queryWrapper.orderByAsc("bfirstletter");
List<AppCarTree> list = appCarTreeService.queryTreeListNoPage(queryWrapper);
IPage<AppCarTree> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
@ -69,6 +73,8 @@ public class AppCarTreeController extends JeecgController<AppCarTree, IAppCarTre
}
appCarTree.setPid(null);
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
// 强制按字母排序
queryWrapper.orderByAsc("bfirstletter");
// 使用 eq 防止模糊查询
queryWrapper.eq("pid", parentId);
Page<AppCarTree> page = new Page<AppCarTree>(pageNo, pageSize);


+ 3
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/entity/AppCarTree.java View File

@ -43,6 +43,9 @@ public class AppCarTree implements Serializable {
@Dict(dicCode = "yn")
@ApiModelProperty(value = "是否有子节点")
private java.lang.String hasChild;
@ApiModelProperty(value = "英文前缀")
private java.lang.String bfirstletter;
/**名称*/
@Excel(name = "名称", width = 15)
@ApiModelProperty(value = "名称")


+ 104
- 79
jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/cartree/controller/CarTreeController.java View File

@ -6,9 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.SelectTreeModel;
@ -17,64 +15,89 @@ import org.jeecg.modules.sysMiniapp.car.entity.AppCarTree;
import org.jeecg.modules.sysMiniapp.car.service.IAppCarTreeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* @Description: 汽车品牌
* @Author: jeecg-boot
* @Date: 2025-02-19
* @Version: V1.0
*/
@Api(tags="汽车品牌")
* @Description: 汽车品牌
* @Author: jeecg-boot
* @Date: 2025-02-19
* @Version: V1.0
*/
@Api(tags = "汽车品牌")
@RestController
@RequestMapping("/miniapp/car")
@Slf4j
public class CarTreeController extends JeecgController<AppCarTree, IAppCarTreeService>{
@Autowired
private IAppCarTreeService appCarTreeService;
public class CarTreeController extends JeecgController<AppCarTree, IAppCarTreeService> {
@Autowired
private IAppCarTreeService appCarTreeService;
/**
* 分页列表查询
*
* @param appCarTree
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "汽车品牌-分页列表查询")
@ApiOperation(value="汽车品牌-分页列表查询", notes="汽车品牌-分页列表查询")
@GetMapping(value = "/rootList")
public Result<IPage<AppCarTree>> queryPageList(AppCarTree appCarTree,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
String hasQuery = req.getParameter("hasQuery");
if(hasQuery != null && "true".equals(hasQuery)){
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
List<AppCarTree> list = appCarTreeService.queryTreeListNoPage(queryWrapper);
IPage<AppCarTree> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
}else{
String parentId = appCarTree.getPid();
if (oConvertUtils.isEmpty(parentId)) {
parentId = "0";
}
appCarTree.setPid(null);
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
// 使用 eq 防止模糊查询
queryWrapper.eq("pid", parentId);
Page<AppCarTree> page = new Page<AppCarTree>(pageNo, pageSize);
IPage<AppCarTree> pageList = appCarTreeService.page(page, queryWrapper);
return Result.OK(pageList);
}
}
/**
* 分页列表查询
*
* @param appCarTree
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "汽车品牌-分页列表查询")
@ApiOperation(value = "汽车品牌-分页列表查询", notes = "汽车品牌-分页列表查询")
@GetMapping(value = "/rootList")
public Result<IPage<AppCarTree>> queryPageList(AppCarTree appCarTree,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
String hasQuery = req.getParameter("hasQuery");
if (hasQuery != null && "true".equals(hasQuery)) {
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
queryWrapper.orderByAsc("bfirstletter");
List<AppCarTree> list = appCarTreeService.queryTreeListNoPage(queryWrapper);
IPage<AppCarTree> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
} else {
String parentId = appCarTree.getPid();
if (oConvertUtils.isEmpty(parentId)) {
parentId = "0";
}
appCarTree.setPid(null);
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
queryWrapper.orderByAsc("bfirstletter");
// 使用 eq 防止模糊查询
queryWrapper.eq("pid", parentId);
Page<AppCarTree> page = new Page<AppCarTree>(pageNo, pageSize);
IPage<AppCarTree> pageList = appCarTreeService.page(page, queryWrapper);
return Result.OK(pageList);
}
}
/**
* 列表查询不分页
*
* @param appCarTree
* @param req
* @return
*/
//@AutoLog(value = "汽车品牌-分页列表查询")
@ApiOperation(value = "汽车品牌-一级列表查询不分页", notes = "汽车品牌-一级列表查询不分页")
@GetMapping(value = "/getList")
public Result<List<AppCarTree>> queryList(AppCarTree appCarTree,
HttpServletRequest req) {
String parentId = appCarTree.getPid();
if (oConvertUtils.isEmpty(parentId)) {
parentId = "0";
}
appCarTree.setPid(null);
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
queryWrapper.orderByAsc("bfirstletter");
// 使用 eq 防止模糊查询
queryWrapper.eq("pid", parentId);
List<AppCarTree> list = appCarTreeService.list(queryWrapper);
return Result.OK(list);
}
/**
* vue3专用加载节点的子数据
@ -139,45 +162,47 @@ public class CarTreeController extends JeecgController<AppCarTree, IAppCarTreeSe
/**
* 获取子数据
*
* @param appCarTree
* @param req
* @return
*/
//@AutoLog(value = "汽车品牌-获取子数据")
@ApiOperation(value="汽车品牌-获取子数据", notes="汽车品牌-获取子数据")
@GetMapping(value = "/childList")
public Result<IPage<AppCarTree>> queryPageList(AppCarTree appCarTree,HttpServletRequest req) {
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
List<AppCarTree> list = appCarTreeService.list(queryWrapper);
IPage<AppCarTree> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
}
//@AutoLog(value = "汽车品牌-获取子数据")
@ApiOperation(value = "汽车品牌-获取子数据", notes = "汽车品牌-获取子数据")
@GetMapping(value = "/childList")
public Result<IPage<AppCarTree>> queryPageList(AppCarTree appCarTree, HttpServletRequest req) {
QueryWrapper<AppCarTree> queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap());
List<AppCarTree> list = appCarTreeService.list(queryWrapper);
IPage<AppCarTree> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
}
/**
/**
* 批量查询子节点
*
* @param parentIds 父ID多个采用半角逗号分割
* @return 返回 IPage
* @param parentIds
* @return 返回 IPage
* @return
*/
//@AutoLog(value = "汽车品牌-批量获取子数据")
@ApiOperation(value="汽车品牌-批量获取子数据", notes="汽车品牌-批量获取子数据")
@GetMapping("/getChildListBatch")
public Result getChildListBatch(@RequestParam("parentIds") String parentIds) {
try {
QueryWrapper<AppCarTree> queryWrapper = new QueryWrapper<>();
List<String> parentIdList = Arrays.asList(parentIds.split(","));
queryWrapper.in("pid", parentIdList);
List<AppCarTree> list = appCarTreeService.list(queryWrapper);
IPage<AppCarTree> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
} catch (Exception e) {
log.error(e.getMessage(), e);
return Result.error("批量查询子节点失败:" + e.getMessage());
}
}
//@AutoLog(value = "汽车品牌-批量获取子数据")
@ApiOperation(value = "汽车品牌-批量获取子数据", notes = "汽车品牌-批量获取子数据")
@GetMapping("/getChildListBatch")
public Result getChildListBatch(@RequestParam("parentIds") String parentIds) {
try {
QueryWrapper<AppCarTree> queryWrapper = new QueryWrapper<>();
List<String> parentIdList = Arrays.asList(parentIds.split(","));
queryWrapper.in("pid", parentIdList);
List<AppCarTree> list = appCarTreeService.list(queryWrapper);
IPage<AppCarTree> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
} catch (Exception e) {
log.error(e.getMessage(), e);
return Result.error("批量查询子节点失败:" + e.getMessage());
}
}
}

+ 1
- 1
jeecg-module-system/jeecg-system-start/src/main/resources/application.yml View File

@ -2,4 +2,4 @@ spring:
application:
name: jeecg-system
profiles:
active: '@profile.name@'
active: '@profile.name@'

+ 83
- 0
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/miniapp/car/CarInfoInitTest.java View File

@ -0,0 +1,83 @@
package org.jeecg.modules.miniapp.car;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.jeecg.JeecgSystemApplication;
import org.jeecg.modules.sysMiniapp.car.entity.AppCarTree;
import org.jeecg.modules.sysMiniapp.car.service.impl.AppCarTreeServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @author Tanzs
* @date 2025/2/28 下午4:00
* @description 汽车品牌数据初始化脚本调用汽车之家API获取数据并保存到数据库中同步时清空数据库后执行此脚本记得更改环境变量
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeecgSystemApplication.class)
public class CarInfoInitTest {
@Autowired
AppCarTreeServiceImpl appCarTreeService;
@Test
public void test(){
// 1.调用品牌接口
String brandList = HttpRequest.get("http://www.autohome.com.cn/ashx/AjaxIndexCarFind.ashx?type=1").execute().body();
JSONObject brandJson = JSONObject.parseObject(brandList);
JSONArray branditems = brandJson.getJSONObject("result").getJSONArray("branditems");
for (int i = 0; i < branditems.size() ; i++) {
JSONObject brand = branditems.getJSONObject(i);
AppCarTree brandTree = new AppCarTree();
brandTree.setName(brand.getString("name"));
brandTree.setPid("0");
brandTree.setBfirstletter(brand.getString("bfirstletter"));
brandTree.setHasChild("1");
appCarTreeService.save(brandTree); // 保存品牌数据
// 根据品牌数据遍历下面的车型接口
String typeList = HttpRequest.get("http://www.autohome.com.cn/ashx/AjaxIndexCarFind.ashx?type=3&value="+brand.getInteger("id")).execute().body();
JSONArray typeitems = JSONObject.parseObject(typeList).getJSONObject("result").getJSONArray("factoryitems");
for (int j = 0; j < typeitems.size() ; j++) {
JSONObject typeitem = typeitems.getJSONObject(j);
AppCarTree typeTree = new AppCarTree();
typeTree.setName(typeitem.getString("name"));
typeTree.setBfirstletter(typeitem.getString("firstletter"));
typeTree.setHasChild("1");
typeTree.setPid(brandTree.getId());
appCarTreeService.save(typeTree);
JSONArray seriesitems = typeitem.getJSONArray("seriesitems");
for (int k = 0; k < seriesitems.size() ; k++) {
JSONObject seriesitem = seriesitems.getJSONObject(k);
AppCarTree seriesTree = new AppCarTree();
seriesTree.setName(seriesitem.getString("name"));
seriesTree.setHasChild("1");
seriesTree.setPid(typeTree.getId());
seriesTree.setBfirstletter(seriesitem.getString("firstletter"));
appCarTreeService.save(seriesTree);
// 根据车型数据遍历下面的车系接口
String seriesList = HttpRequest.get("https://www.autohome.com.cn/ashx/v2/inquirylayer/listSpecListBySeriesId?&cityId=110100&seriesId="+seriesitem.getInteger("id")).execute().body();
JSONArray seriesitemList = JSONObject.parseObject(seriesList).getJSONArray("result");
for (int l = 0; l < seriesitemList.size() ; l++) {
JSONObject seriesitemListItem = seriesitemList.getJSONObject(l);
JSONArray specitems = seriesitemListItem.getJSONArray("specList");
for (int m = 0; m < specitems.size() ; m++) {
AppCarTree specTree = new AppCarTree();
specTree.setPid(seriesTree.getId());
specTree.setName(specitems.getJSONObject(m).getString("specName"));
specTree.setHasChild("0");
appCarTreeService.save(specTree); // 保存车型数据
}
}
}
}
}
}
}

Loading…
Cancel
Save