发表于: 2017-10-31 21:30:56

1 740


今天完成的事情:

继续完善这个示范接口,大致能了解

package com.ptteng.controller.invest;
import java.math.BigInteger;
import java.util.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.ptteng.playboy.invest.model.Product;
import com.ptteng.playboy.invest.model.User;
import com.ptteng.playboy.invest.service.ProductService;
import com.ptteng.playboy.invest.service.TransactService;
import com.ptteng.playboy.invest.service.UserService;
import com.ptteng.util.TransactUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.ptteng.playboy.invest.model.Transact;


/**
* Transact  crud
*
* @author magenm
* @Date 2014-4-16 13:43
*
*/
@Controller
public class TransactController {
private static final Log log = LogFactory.getLog(TransactController.class);

   @Autowired
   private TransactService transactService;


   @Autowired
   private UserService userService;

   @Autowired
   private ProductService productservice;





   /**
    * @Description 交易记录,根据接口文档定义参数
    * @param request
    * @param response
    * @param model
    * @param page
    * @param size
    * @return
    * @throws Exception
    */

   @RequestMapping(value = "/a/transact/{uid}/search", method = RequestMethod.GET)

/** * @Fields:HttpServletRequest和HttpServletResponse是拦截器的使用
    *后面跟接口文档中的字段
    * */
   public String getTransact(HttpServletRequest request,
                             HttpServletResponse response, ModelMap model, Integer page, Integer size,
                             @PathVariable Long uid, String mobile, String productName, Long startAt, Long endAt,
                             String name, Long scene, Long status) throws Exception {

/**打印日志输出这些数据*/
       log.info("get transact list page=" + page + "size=" + size + "uid=" + uid + "mobile=" + mobile + "productName=" + productName +
"startAt=" + startAt + "endAt=" + endAt + "name=" + name + "scene=" + scene + "status=" + status);

       /**页数和每页数值判空*/
       if (page == null) {
page = 1;
       }
if (size == null) {
size = 10;
       }
int start = (page - 1) * size;
       if (start < 0) {
start = 0;
       }


/**输出共有多少条信息和每一页的个数*/
       log.info("pageList : page =" + start + ",size=" + size);

       try {
User user = userService.getObjectById(uid);

           /**调用一个自己写的对应接口的工具类,新建一个名为map的Map数组*/
           Map<String, Object> map = TransactUtil.getTransactUtil(mobile, productName, startAt, endAt,
                   name, scene, status,uid, false);
           /**打印此map数组*/
           log.info(" map=" + map);

           /**调用TransactService接口的父类接口,getIdsByDynamicCondition方法,new一个只装Long类型的list集合,命名为ids.
            *传入四个值,第一个是class类型,第二个是Map类型,第三个和第四个是integer类型,具体用途不知,据说偏底层,可以不用管
            */
           List<Long> ids = transactService.getIdsByDynamicCondition(Transact.class, map, start, size);

           /**调用TransactService接口的getObjectsByIds方法,该方法参数为一个list集合,把刚刚new的transactIds集合放进去,取名为transactList.
            *有什么用不知道,只知道集合里的装的泛型从Long变成transact类
            */
           List<Transact> transactList = new ArrayList<>();

           /**新建一个名为productHashMap的hashmap
           /*hashmap对多线程来说不安全,但是可以以null为key值
            *这个hashmap键是long类型的,值是产品这个model
            */
           Map<Long, Product> productHashMap = new HashMap<>();

           /**这个isEmpty方法会返回一个boolean的数值,如果为空就返回true*/
           if (CollectionUtils.isEmpty(ids)) {
log.info("get user"+uid+"transact ids.size is 0");
           } else {
/**如果不为空,打出这个transactIds这个集合的长度*/
               log.info(" get user " + uid + "  transact ids ,size is " + ids.size());

               /**给集合transacts赋值,调用getObjectByIds方法,传的参数是transactIds这个集合
                * 原方法里显示ids,看不懂这种ids是什么意思
                * */
               transactList= transactService.getObjectsByIds(ids);

               /**new一个ArrayList集合*/
               List<Long> productIds = new ArrayList<>();
               /**高级for循环
                * 遍历transactList集合
                * */
               for (Transact transact : transactList) {
productIds.add(transact.getProductId());
               }

/**搞一个products的list集合*/
               if(productIds.size()>0){
List<Product> products = productservice.getObjectsByIds(productIds);
               for (Product product : products) {
/**调用hashmap的put方法,循环遍历products集合
                    *hashmap的put方法映射关联的指定键和值
                    *  */
                   productHashMap.put(product.getId(), product);
               }
}
}
map = TransactUtil.getTransactUtil(mobile, productName, startAt, endAt, name, scene,
                   status, uid,true);
           BigInteger total = (BigInteger) transactService.getObjectByDynamicCondition(Transact.class, map
, 0, Integer.MAX_VALUE);
           log.info("total=" + total);

           int totalPage = 1;
           if (total.intValue() > 0) {
totalPage = (((total.intValue() - 1)) / (size)) + 1;
           }
log.info("totalPage=" + totalPage);


           /**
            * 这个是对应的接口文档中,返回数据的code状态码
            */
           model.addAttribute("code", 0);

           /**
            * 下面是返回数据的message,其中包括页码,每页数据最大值,后面的两个值不理解什么意思,但是原型图上有一列数据,有下一页跳转什么的一定要有这四个
            */
           model.addAttribute("page", page);
           model.addAttribute("size", size);
           model.addAttribute("total", total);
           model.addAttribute("totalPage", totalPage);

           /**
            * 返回数据,直接返回整个数据,比如产品的hashmap,和user表
            */
           model.addAttribute("productHashMap", productHashMap);
           model.addAttribute("user", user);

       } catch (Throwable t) {
t.printStackTrace();
           log.error(t.getMessage());
           log.error("get feedBack list error,page is" + start + ",size" + size);
           model.addAttribute("code", -1);
       }

return "/playboy-invest-service/transact/json/transactListJson";
   }
}


明天计划的事情:

先用postman测试,向pm要到app后再看看怎么鼓捣app测试

写其他接口



遇到的问题:

不知道接口文档上的数据对应着那些地方(已解决)

还有就是不知道哪些是固定的需要写的,比如

 * 下面是返回数据的message,其中包括页码,每页数据最大值,后面的两个值不理解什么意思,但是原型图上有一列数据,有下一页跳转什么的一定要有这四个
            */
           model.addAttribute("page"page);
           model.addAttribute("size"size);
           model.addAttribute("total"total);
           model.addAttribute("totalPage"totalPage);

一直没弄明白后两个是什么,我就当是底层封装好的吧,需要的时候就统一调用



收获:

idea版本恢复:

新技能get,贼棒

http://blog.csdn.net/qq_35246620/article/details/70185685




返回列表 返回列表
评论

    分享到