发表于: 2018-03-08 19:30:27
1 783
今天完成的事情:
1.编写静默注册逻辑
//新华美育静默注册
@RequestMapping(value = "/a/xinhuameiyu", method = RequestMethod.GET)
public void xinHuaMeiYuQuietRegister(ModelMap model,HttpServletRequest request,HttpServletResponse response,
String token) {
registerLog.info("/a/xinhuameiyu GET ,the parameter is token" + token);
Map<String, String> parameterMap;
User xinHuaMeiYuUser = new User();
UserOpenidRelation xinHuaMeiYuUserOpenidRelation = new UserOpenidRelation();
Long existUserOpenidRelationId;
Long existUserId = null;
Long finalUserId;
try {
//参数校验
if (null == token) {
registerLog.error("参数缺失:token");
//todo 重定向至无引导登录页面
response.sendRedirect("");
return;
}
parameterMap = CooperatorUtil.decodeParameter(token);
String username = parameterMap.get("username");
String name = parameterMap.get("name");
String mobile = parameterMap.get("mobile");
String client = parameterMap.get("client");
//username为新华美育用户唯一标识符,不能为空;client为识别跳转向PC端或H5页面根据,不能为空
if (null == username || null == client) {
//todo 转向引导登录接口
}
//若用户-openid关系表中已存在数据(已经过静默注册)则直接跳转至登录接口
existUserOpenidRelationId = userOpenidRelationService.getUserOpenidRelationIdByOpenidAndType(username, "xinhuameiyu");
if (null != existUserOpenidRelationId) {
//todo 跳转至登录接口
response.sendRedirect("http://dev.pc.academy.ptteng.com/redirect/xinhuameiyu?token=" + token);
return;
}
xinHuaMeiYuUser.setAlias(username);
xinHuaMeiYuUserOpenidRelation.setType("xinhuameiyu");
xinHuaMeiYuUserOpenidRelation.setOpenid(username);
//若参数存在手机号码,则设置手机号码
if (StringUtils.isNotBlank(mobile)) {
xinHuaMeiYuUser.setMobile(mobile);
//若用户表中存在相同手机号码,则用户表只更新一个“name”字段
existUserId = userService.getUserIdByMobile(mobile);
if (DataUtils.isNotNullOrEmpty(existUserId)) {
xinHuaMeiYuUser = userService.getObjectById(existUserId);
}
}
//若name不为空,则更新进用户表中的name字段
if (StringUtils.isNotBlank(name)) {
xinHuaMeiYuUser.setName(name);
}
if (null == existUserId) {
finalUserId = userService.insert(xinHuaMeiYuUser);
registerLog.info("insert the new xinhuameiyu user,the id is :" + finalUserId);
} else {
finalUserId = existUserId;
Boolean success = userService.update(xinHuaMeiYuUser);
registerLog.info("update exist user, is success:" + success);
}
xinHuaMeiYuUserOpenidRelation.setUid(finalUserId);
Long insertUserOpenidRelation = userOpenidRelationService.insert(xinHuaMeiYuUserOpenidRelation);
registerLog.info("insert xinhuameiyu userOpenidRelation success , the id userOpenidRelation id is:" + insertUserOpenidRelation);
response.sendRedirect("http://dev.pc.academy.ptteng.com/redirect/xinhuameiyu?token=" + token);
} catch (Throwable t) {
t.getStackTrace();
userLog.error(t.getMessage());
userLog.error("get xinhuameiyu user list error");
model.addAttribute("code", -100000);
}
}
写完的时候到11点,然后和新华美育交接了下,发现有些事情没和我们说,如下面第二点所示,注册的逻辑先停下来了
2..需求变更
今天新华美育这边说需要有两种,一种是带用户信息过来的,一种是不带用户信息的
但是翻看之前的记录并没有说过,后面和PM交流了下,他也没有和其他人员说过
他说他打电话说过……然而没有人和我说这件事情
PM也说之前是不知道的
现在要变更/新增需求:
①无参数过来的新华美育用户要引导注册,以便标识为新华美育用户,这需要前端的配合
②既然可以注册了,那就一定可以使用账号密码登录,那么之前说的不需要绑定绑定手机/邮箱是不成立了,并且之前如果没有手机和邮箱的话是不能登录的,要更改现有绑定、注册逻辑
3.编写订单查询逻辑
public static Map<String, Object> getXinHuaMeiYuUserList(String username,String mobile,Integer minOrderNumber,Integer maxOrderNumber,
Integer minOrderMoney,Integer maxOrderMoney,boolean count) {
Map<String, Object> params = new HashMap<>();
params.put("@table", " (SELECT\n" +
"\t\t\tuser.id,COALESCE(SUM(lesson.price),0) AS lesson_money,COALESCE(SUM(user_member_relation.price),0) as member_money,COUNT(lesson.price) AS lesson_order_number,COUNT(user_member_relation.price) as member_order_number,\n" +
"\t\t\tuser.mobile as mobile,academy_user.user_openid_relation.openid as username,academy_user.user_openid_relation.type as type\n" +
"\t\tFROM\n" +
"\t\tacademy_user.user\n" +
"LEFT JOIN academy_user.uesr_course_relation ON user.id = uesr_course_relation.uid\n" +
"LEFT JOIN academy_course.lesson ON uesr_course_relation.target_id = lesson.id \n" +
"LEFT JOIN academy_user.user_member_relation ON user.id = user_member_relation.uid\n" +
"LEFT JOIN academy_user.user_openid_relation ON user.id = user_openid_relation.uid #这里可以写上openid = “xinhuameiyu”\n" +
"\n" +
"GROUP BY user.id)t ");
if (StringUtils.isNotBlank(username)) {
params.put("username & like", " '%" + username + "%' ");
}
if (StringUtils.isNotBlank(mobile)) {
params.put(" mobile & like ", " '%" + mobile + "%'");
}
if (DataUtils.isNotNullOrEmpty(minOrderNumber)) {
params.put("(lesson_order_number+member_order_number)+0 & >= ", " '" + minOrderNumber + "' ");
}
if (DataUtils.isNotNullOrEmpty(minOrderNumber)) {
params.put("(lesson_order_number+member_order_number)+0 & <= ", " '" + maxOrderNumber + "' ");
}
if (DataUtils.isNotNullOrEmpty(minOrderMoney)) {
params.put("(lesson_money+member_money)+0 & >= ", " '" + minOrderMoney + "' ");
}
if (DataUtils.isNotNullOrEmpty(maxOrderMoney)) {
params.put("(lesson_money+member_money)+0 & <= ", " '" + maxOrderMoney + "' ");
}
params.put("t.type", " 'xinhuameiyu' ");
if (count) {
params.put("@query", " count(t.id) ");
} else {
params.put("@query", " t.id ");
}
return params;
}
发现之前写的SQL逻辑有点问题,遂改之
测试类:
生成结果:
使用左联结和子查询生成新表:
至此,多表联查已经进入熟练阶段
明天计划的事情:
完成后台4个接口
对应story:【后台合作机构管理-用户统计】
遇到的问题:
需求变更,前台接口无法继续编写
收获:
以上
进度:
项目开始时间:2018.03.03
方案评审时间:2018.03.05
预计demo时间:2018.03.12
延期风险:有
原因:需求变更
story进度:
进行中:【后台合作机构管理-用户统计】 【对接新华美育】
评论