diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/controller/AppCarTreeController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/controller/AppCarTreeController.java index bda1477..42c2b41 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/controller/AppCarTreeController.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/controller/AppCarTreeController.java @@ -56,9 +56,13 @@ public class AppCarTreeController extends JeecgController queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); - List list = appCarTreeService.queryTreeListNoPage(queryWrapper); + // 强制按字母排序 + queryWrapper.orderByAsc("bfirstletter"); + List list = appCarTreeService.queryTreeListNoPage(queryWrapper); IPage pageList = new Page<>(1, 10, list.size()); pageList.setRecords(list); return Result.OK(pageList); @@ -69,6 +73,8 @@ public class AppCarTreeController extends JeecgController queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); + // 强制按字母排序 + queryWrapper.orderByAsc("bfirstletter"); // 使用 eq 防止模糊查询 queryWrapper.eq("pid", parentId); Page page = new Page(pageNo, pageSize); diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/entity/AppCarTree.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/entity/AppCarTree.java index c7b7b81..7c4f9ba 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/entity/AppCarTree.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/car/entity/AppCarTree.java @@ -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 = "名称") diff --git a/jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/cartree/controller/CarTreeController.java b/jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/cartree/controller/CarTreeController.java index bab3cf8..d6f1a04 100644 --- a/jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/cartree/controller/CarTreeController.java +++ b/jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/cartree/controller/CarTreeController.java @@ -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{ - @Autowired - private IAppCarTreeService appCarTreeService; +public class CarTreeController extends JeecgController { + @Autowired + private IAppCarTreeService appCarTreeService; - /** - * 分页列表查询 - * - * @param appCarTree - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "汽车品牌-分页列表查询") - @ApiOperation(value="汽车品牌-分页列表查询", notes="汽车品牌-分页列表查询") - @GetMapping(value = "/rootList") - public Result> 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 queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); - List list = appCarTreeService.queryTreeListNoPage(queryWrapper); - IPage 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 queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); - // 使用 eq 防止模糊查询 - queryWrapper.eq("pid", parentId); - Page page = new Page(pageNo, pageSize); - IPage 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> 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 queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); + queryWrapper.orderByAsc("bfirstletter"); + List list = appCarTreeService.queryTreeListNoPage(queryWrapper); + IPage 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 queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); + queryWrapper.orderByAsc("bfirstletter"); + // 使用 eq 防止模糊查询 + queryWrapper.eq("pid", parentId); + Page page = new Page(pageNo, pageSize); + IPage pageList = appCarTreeService.page(page, queryWrapper); + return Result.OK(pageList); + } + } + + /** + * 列表查询不分页 + * + * @param appCarTree + * @param req + * @return + */ + //@AutoLog(value = "汽车品牌-分页列表查询") + @ApiOperation(value = "汽车品牌-一级列表查询不分页", notes = "汽车品牌-一级列表查询不分页") + @GetMapping(value = "/getList") + public Result> queryList(AppCarTree appCarTree, + HttpServletRequest req) { + String parentId = appCarTree.getPid(); + if (oConvertUtils.isEmpty(parentId)) { + parentId = "0"; + } + appCarTree.setPid(null); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); + queryWrapper.orderByAsc("bfirstletter"); + // 使用 eq 防止模糊查询 + queryWrapper.eq("pid", parentId); + List list = appCarTreeService.list(queryWrapper); + return Result.OK(list); + } /** * 【vue3专用】加载节点的子数据 @@ -139,45 +162,47 @@ public class CarTreeController extends JeecgController> queryPageList(AppCarTree appCarTree,HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); - List list = appCarTreeService.list(queryWrapper); - IPage pageList = new Page<>(1, 10, list.size()); - pageList.setRecords(list); - return Result.OK(pageList); - } + //@AutoLog(value = "汽车品牌-获取子数据") + @ApiOperation(value = "汽车品牌-获取子数据", notes = "汽车品牌-获取子数据") + @GetMapping(value = "/childList") + public Result> queryPageList(AppCarTree appCarTree, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(appCarTree, req.getParameterMap()); + List list = appCarTreeService.list(queryWrapper); + IPage 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 queryWrapper = new QueryWrapper<>(); - List parentIdList = Arrays.asList(parentIds.split(",")); - queryWrapper.in("pid", parentIdList); - List list = appCarTreeService.list(queryWrapper); - IPage 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 queryWrapper = new QueryWrapper<>(); + List parentIdList = Arrays.asList(parentIds.split(",")); + queryWrapper.in("pid", parentIdList); + List list = appCarTreeService.list(queryWrapper); + IPage 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()); + } + } } diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application.yml index 67562f1..2cf6c0d 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application.yml @@ -2,4 +2,4 @@ spring: application: name: jeecg-system profiles: - active: '@profile.name@' \ No newline at end of file + active: '@profile.name@' diff --git a/jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/miniapp/car/CarInfoInitTest.java b/jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/miniapp/car/CarInfoInitTest.java new file mode 100644 index 0000000..a1893bd --- /dev/null +++ b/jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/miniapp/car/CarInfoInitTest.java @@ -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); // 保存车型数据 + } + } + } + } + } + } + + + + +}