发表于: 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
评论