while (!isLastPage) { // 封装请求头 ResponseEntity<String> responseEntity = restTemplate.exchange(StrUtil.format(djUrl, qssj, zzsj, page, limit), HttpMethod.GET, formEntity, String.class); JSONObject response = JSONUtil.parseObj(responseEntity.getBody()); log.info("调用登记信息查询接口返回:{}",responseEntity.getBody()); if (!"200".equals(response.getStr("code"))) { log.info("调用登记信息查询接口返回不是成功:{}_{}", response.get("code"), response.get("msg")); break; } List<BdBdcDj> djList = new ArrayList<>(); List<BdMessage> messageList = new ArrayList<>(); // 解析数据 JSONArray data = response.getJSONArray("data"); data.toList(JSONObject.class).forEach(jsonObject -> { String bsm = jsonObject.getStr("bsm"); // 如果数据库已存在本条记录,则忽略 if (bdBdcDjDao.selectByPrimaryKey(bsm) == null) { // 使用 MapperUtils.map 枚举字段设置有问题,勿改 BdBdcDj bdBdcDj = BeanUtil.mapToBean(jsonObject, BdBdcDj.class, false, null); bdBdcDj.setId(bsm); bdBdcDj.setHouseId(jsonObject.getStr("hbsm")); bdBdcDj.setDivisionCode(jsonObject.getStr("qxdm")); // 如果是转移登记则待处理 if ("C".equals(jsonObject.getStr("djlx"))) { bdBdcDj.setResolveStatus(ResolveStatusEnum.WAITING); // 如果是转移登记则如bdMessage,并推送维资 BdMessage msg = getMessageByDj(bdBdcDj); messageList.add(msg); } else { bdBdcDj.setResolveStatus(ResolveStatusEnum.NO_NEED); } djList.add(bdBdcDj); } });
时间: 2024-02-10 15:34:03 浏览: 20
看起来您的代码主要是调用接口返回数据并解析数据,然后对数据进行处理,并将数据插入数据库。
以下是一些可供优化的建议:
1.尝试将一些重复的代码封装成方法,以提高代码的重用性和可读性。
2.对于大量的数据解析和处理,可以考虑使用多线程或并发编程技术,以提高代码的运行效率。
3.在处理大量数据时,可以考虑将数据分批处理,以避免出现内存溢出等问题。
4.尽量减少对数据库的查询次数,可以通过批量插入等技术来提高代码的运行效率。
5.在处理数据时,可以使用工具类或框架来简化代码,提高开发效率和可读性。
6.优化日志输出,尽量避免在循环中不必要的日志输出,以提高代码的运行效率。
希望这些建议能够对您有所帮助。
相关问题
private void gvbind() { //商品类别业务逻辑层 BLL.CPInfoBusiness busi = new BLL.CPInfoBusiness(); DataSet ds = new DataSet(); //加载业务列表 ds = busi.GetList(""); PagedDataSource objPds = new PagedDataSource(); objPds.DataSource = ds.Tables[0].DefaultView; objPds.AllowPaging = true; objPds.PageSize = 16; int CurPage; if (Request.QueryString["Page"] != null) CurPage = Convert.ToInt32(Request.QueryString["Page"]); else CurPage = 1; objPds.CurrentPageIndex = CurPage - 1; lblCurrentPage.Text = CurPage.ToString(); lblSumPage.Text = objPds.PageCount.ToString(); if (!objPds.IsFirstPage) { this.hyfirst.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + 1; lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1); } if (!objPds.IsLastPage) { hylastpage.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + objPds.PageCount; lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1); } this.DataList1.DataSource = objPds; this.DataList1.DataBind(); }
这段代码是一个ASP.NET页面的gvbind()函数,用于绑定数据到DataList1控件上,并实现分页功能。具体实现如下:
1. 实例化BLL.CPInfoBusiness对象
在该函数中,首先实例化了一个BLL.CPInfoBusiness对象,用于从数据库中获取数据。
2. 获取数据并进行分页
通过调用BLL.CPInfoBusiness对象的GetList("")方法,获取数据并赋值给DataSet对象ds。然后,将ds.Tables[0].DefaultView赋值给PagedDataSource对象objPds。将objPds.AllowPaging属性设置为true,表示启用分页功能,并将每页显示的条数设置为16条。根据当前页数,将objPds.CurrentPageIndex属性设置为当前页码-1。最后,将分页相关的标签lblCurrentPage和lblSumPage的Text属性分别设置为当前页码和总页数。
3. 设置分页链接
根据当前页数和总页数,设置分页链接hyfirst、lnkPrev、lnkNext和hylastpage的NavigateUrl属性,以便用户在分页时能够跳转到相应的页面。
4. 绑定数据
将objPds赋值给DataList1的DataSource属性,然后调用DataList1的DataBind()方法,将数据绑定到DataList1上。
总的来说,这段代码实现了从数据库中获取数据,并将数据分页显示在DataList1控件上。
解释PageInfo<Article>
PageInfo<Article>是一个泛型类,用于表示分页的信息。其中,Article是分页数据的类型,表示文章。
具体而言,PageInfo<Article>包含以下属性:
- pageNum:当前页码
- pageSize:每页数据条数
- size:当前页实际数据条数
- startRow:当前页第一条数据在数据库中的行号
- endRow:当前页最后一条数据在数据库中的行号
- total:总记录数
- pages:总页数
- list:当前页的数据列表
- prePage:前一页页码
- nextPage:后一页页码
- isFirstPage:是否为第一页
- isLastPage:是否为最后一页
- hasPreviousPage:是否有前一页
- hasNextPage:是否有后一页
- navigatePages:导航页码数
- navigatepageNums:所有导航页号
通过PageInfo<Article>,可以方便地获取分页相关的信息,如当前页码、总页数、当前页的数据列表等。这样可以更加方便地实现分页查询功能。