package com.yeshi.fanli.controller.xcx;
|
|
import java.io.PrintWriter;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.UUID;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.yeshi.utils.HttpUtil;
|
import org.yeshi.utils.IPUtil;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.tencentcloud.COSManager;
|
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
|
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
|
import com.yeshi.fanli.entity.system.System;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra;
|
import com.yeshi.fanli.exception.goods.CollectionGoodsException;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
|
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
|
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
|
import com.yeshi.fanli.service.inter.order.LostOrderService;
|
import com.yeshi.fanli.service.inter.order.OrderItemServcie;
|
import com.yeshi.fanli.service.inter.order.OrderService;
|
import com.yeshi.fanli.service.inter.user.AccountDetailsService;
|
import com.yeshi.fanli.service.inter.user.AccountMessageService;
|
import com.yeshi.fanli.service.inter.user.BindingAccountService;
|
import com.yeshi.fanli.service.inter.user.ExtractService;
|
import com.yeshi.fanli.service.inter.user.PassWordErrorRecordService;
|
import com.yeshi.fanli.service.inter.user.ShamUserService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.service.inter.user.WxDownService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.GsonUtil;
|
import com.yeshi.fanli.util.RedisManager;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.ThreadUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.util.wx.WXLoginUtil;
|
|
import net.sf.json.JSONObject;
|
|
@Controller
|
@RequestMapping("api/xcx/v1/XcxCustomer")
|
public class XcxUserInfoController {
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private OrderService orderService;
|
|
@Resource
|
private HongBaoService hongBaoService;
|
|
|
|
@Resource
|
private BindingAccountService bindingAccountService;
|
|
@Resource
|
private ExtractService extractService;
|
|
@Resource
|
private PassWordErrorRecordService passWordErrorRecordService;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private XcxMiniControllerUtil xcxMiniControllerUtil;
|
|
@Resource
|
private ShamUserService shamUserService;
|
|
@Resource
|
private ThreeSaleSerivce threeSaleSerivce;
|
|
@Resource
|
private LostOrderService lostOrderService;
|
|
@Resource
|
private OrderItemServcie orderItemServcie;
|
|
@Resource
|
private AccountDetailsService accountDetailsService;
|
|
@Resource
|
private AccountMessageService accountMessageService;
|
|
@Resource
|
private CollectionGoodsV2Service collectionGoodsV2Service;
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
@Resource
|
private WxDownService wxDownService;
|
|
@Resource
|
private RedisManager redisManager;
|
|
/**
|
* 获取用户信息
|
*
|
* @param acceptData
|
* @param form
|
* @param requst
|
* @param out
|
*/
|
@RequestMapping(value = "getuserinfo", method = RequestMethod.POST)
|
public void getUserInfo(AcceptData acceptData, UserInfo form, String code, String create, boolean first,
|
HttpServletRequest requst, PrintWriter out) {
|
String remotIP = IPUtil.getRemotIP(requst);
|
long id = form.getId();
|
// 判断是不是用ID登陆的,如果是用ID登陆的其他都不要管了
|
if (id != 0) {
|
UserInfo find = userInfoService.getUserById(id);
|
if (find != null) {
|
outUserInfo(out, remotIP, find, acceptData.getDevice());
|
return;
|
} else {
|
out.print(JsonUtil.loadFalseResult("不存在该账户!"));
|
return;
|
}
|
}
|
// 不是用ID的登陆的事就多了
|
System system = xcxMiniControllerUtil.getSystem(acceptData);
|
if (system == null) {
|
out.print(JsonUtil.loadFalseResult(XcxMiniControllerUtil.NOSYSTEM));
|
return;
|
}
|
String appid = system.getAppid();
|
|
// 判断是否是第一次正常登陆
|
/*
|
* String platform = acceptData.getPlatform(); if(platform == "ios") {
|
* // 1: 安卓 2:ios if(firstIos == "1") { //第一次登陆 first = true; } else {
|
* first = false; } }
|
*/
|
if (first) {
|
int loginType = form.getLoginType();
|
// WeiXinUserParam wxParam = null;
|
// 如果是微信登陆,那需要先获取到微信的unionid
|
WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
|
if (loginType == Constant.WEIXIN && StringUtil.isNullOrEmpty(form.getWxUnionId())) {
|
// wxParam = WXinUtil.getWxParam(code);
|
if (weiXinUser == null) {
|
out.print(JsonUtil.loadFalseResult(XcxMiniControllerUtil.FAILED));
|
return;
|
}
|
form.setWxOpenId(weiXinUser.getOpenid());
|
form.setWxUnionId(weiXinUser.getUnionid());
|
}
|
String openid = loginType == 1 ? form.getOpenid() : form.getWxUnionId();
|
LogHelper.userInfo("[ip:" + IPUtil.getRemotIP(requst) + "]" + (loginType == 1 ? "淘宝登陆" : "微信登陆")
|
+ "[openid:" + openid + "]");
|
if (openid == null || openid.equals("")) {
|
out.print(JsonUtil.loadFalseResult(XcxMiniControllerUtil.FAILED));
|
return;
|
}
|
// 获取用户信息
|
UserInfo user = userInfoService.getUserByLoginTypeAndOpenId(loginType, openid, appid);
|
// 判断获取的用户信息是否为空,如果不为空就做的事就又多了
|
if (user != null) {// 数据库中已经存在该用户
|
outUserInfo(out, remotIP, user, acceptData.getDevice());
|
UserInfo temp = user;
|
long lastLoginTime = temp.getLastLoginTime() == null ? 0 : temp.getLastLoginTime().longValue();
|
if (lastLoginTime == 0) {// 等于0则是第一次登陆,那么需要判断用户是不是被传销来的,如果是的话,那需要修改相关三级分销的状态
|
ThreadUtil.run(new Runnable() {
|
@Override
|
public void run() {
|
threeSaleSerivce.effective(temp);
|
}
|
|
});
|
}
|
return;
|
}
|
// 查询到的用户信息为空,那么需要填充一些用户信息
|
if (loginType == Constant.WEIXIN) {
|
form.setPortrait(weiXinUser.getHeadimgurl());
|
String wxHeadImg = COSManager.getInstance()
|
.uploadFile(HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()),
|
Constant.WXHEADURL + UUID.randomUUID().toString())
|
.getUrl();
|
form.setWxPic(wxHeadImg);
|
form.setNickName(weiXinUser.getNickname());
|
form.setWxName(weiXinUser.getNickname());
|
} else if (loginType == Constant.TAOBAO) {
|
form.setTbName(form.getNickName());
|
form.setTbPic(form.getPortrait());
|
}
|
form.setLastLoginIp(remotIP);
|
form.setLastLoginTime(java.lang.System.currentTimeMillis());
|
form.setSystem(system);
|
requst.getSession().setAttribute("newUser", form);
|
out.append(JsonUtil.loadTrueResult(2, form));
|
return;
|
}
|
|
if (create == null || "0".equals(create)) {
|
out.append(JsonUtil.loadFalseResult("参数create不能为空!"));
|
return;
|
}
|
|
UserInfo newUser = (UserInfo) requst.getSession().getAttribute("newUser");
|
UserInfo mainUser = (UserInfo) requst.getSession().getAttribute("mainUser");
|
if (Constant.NEWUSER.equals(create)) { // 创建
|
UserInfo user;
|
synchronized (UserInfo.class) {
|
user = userInfoService.addUser(newUser, appid);
|
}
|
if (user != null) {
|
JSONObject data = new JSONObject();
|
data.put("user", GsonUtil.toJsonExpose(user));
|
data.put("first", 1);
|
out.print(JsonUtil.loadTrueResult(data));
|
LogHelper.userInfo(GsonUtil.toJsonExpose(user));
|
} else {
|
LogHelper.userInfo("不存在用户:" + GsonUtil.toJsonExpose(form));
|
out.print(JsonUtil.loadFalseResult(XcxMiniControllerUtil.FAILED));
|
}
|
requst.getSession().removeAttribute("newUser");
|
return;
|
} else if (Constant.BINDUSER.equals(create) && mainUser == null) { // 绑定
|
int formLoginType = form.getLoginType();
|
int newUserLoginType = newUser.getLoginType();
|
if (newUserLoginType == formLoginType) { // 相同类型不能绑定
|
out.print(JsonUtil.loadFalseResult("相同类型的账号不能绑定!"));
|
return;
|
}
|
// 判断是不是微信。如果是微信就要填充微信相关信息
|
if (formLoginType == Constant.WEIXIN/*
|
* &&
|
* StringUtil.isNullOrEmpty(form
|
* .getWxOpenId())
|
*/) {
|
WeiXinUser xinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
|
if (xinUser == null) {
|
out.print(JsonUtil.loadFalseResult(XcxMiniControllerUtil.FAILED));
|
return;
|
}
|
form.setWxOpenId(xinUser.getOpenid());
|
form.setWxUnionId(xinUser.getUnionid());
|
form.setPortrait(xinUser.getHeadimgurl());
|
form.setNickName(xinUser.getNickname());
|
form.setWxName(xinUser.getNickname());
|
String wxHeadImg = COSManager.getInstance()
|
.uploadFile(HttpUtil.getAsInputStream(xinUser.getHeadimgurl()),
|
Constant.WXHEADURL + UUID.randomUUID().toString())
|
.getUrl();
|
form.setWxPic(wxHeadImg);
|
} else if (formLoginType == Constant.TAOBAO) {
|
form.setTbName(form.getNickName());
|
form.setTbPic(form.getPortrait());
|
}
|
form.setSystem(system);
|
requst.getSession().setAttribute("mainUser", form);
|
String openid = formLoginType == 1 ? form.getOpenid() : form.getWxUnionId();
|
// 获取主账户用户信息
|
UserInfo find = userInfoService.getUserByLoginTypeAndOpenId(formLoginType, openid, appid);
|
if (find != null) {
|
// 主账户不为空就进行绑定操作
|
bind(find, newUser);
|
userInfoService.update(find);
|
outUserInfo(out, remotIP, find, acceptData.getDevice());
|
requst.getSession().removeAttribute("newUser");
|
requst.getSession().removeAttribute("mainUser");
|
} else {
|
// 为空的话就返回用户信息
|
out.print(JsonUtil.loadTrueResult(3, form));
|
return;
|
}
|
} else {// create=2 ,mainUser != null 创建并绑定!
|
bind(mainUser, newUser);
|
mainUser = userInfoService.addUser(mainUser, appid);
|
outUserInfo(out, remotIP, mainUser, acceptData.getDevice());
|
requst.getSession().removeAttribute("newUser");
|
requst.getSession().removeAttribute("mainUser");
|
}
|
}
|
|
/**
|
* 将副账户绑定到主账户上
|
*
|
* @param mainUser
|
* @param viceUser
|
*/
|
private void bind(UserInfo mainUser, UserInfo viceUser) {
|
int loginType = viceUser.getLoginType();
|
if (loginType == Constant.TAOBAO) {
|
mainUser.setOpenid(viceUser.getOpenid());
|
mainUser.setTbName(viceUser.getNickName());
|
mainUser.setTbPic(viceUser.getTbPic());
|
} else if (loginType == Constant.WEIXIN) {
|
mainUser.setWxName(viceUser.getWxName());
|
mainUser.setWxOpenId(viceUser.getWxOpenId());
|
mainUser.setWxUnionId(viceUser.getWxUnionId());
|
mainUser.setWxPic(viceUser.getWxPic());
|
}
|
}
|
|
private void outUserInfo(PrintWriter out, String remotIP, UserInfo user, String device) {
|
BigDecimal totalmoney = hongBaoService.getTotalHongBaoByUid(user.getId());
|
user.setTotalHongBao(totalmoney);
|
BigDecimal unOpenmoney = hongBaoService.getUnOpenHongBaoByUid(user.getId());
|
BigDecimal canOpenMoney = hongBaoService.getCanOpenHongBaoByUid(user.getId());
|
user.setNoOpenHongBao(unOpenmoney);
|
user.setCanOpenHongBao(canOpenMoney);
|
JSONObject data = new JSONObject();
|
data.put("user", GsonUtil.toJsonExpose(user));
|
data.put("first", 0);
|
out.print(JsonUtil.loadTrueResult(data));
|
final UserInfo uuser = user;
|
ThreadUtil.run(new Runnable() {
|
public void run() {
|
LogHelper.userInfo(GsonUtil.toJsonExpose(uuser));
|
uuser.setLastLoginIp(remotIP);
|
uuser.setLastLoginTime(java.lang.System.currentTimeMillis());
|
userInfoService.updateLoginInfo(uuser);
|
wxDownService.save(device);
|
}
|
});
|
}
|
|
/**
|
*
|
* 方法说明: 收藏商品
|
*
|
* @author mawurui createTime 2018年4月25日 下午4:58:12
|
* @param uid
|
* @param auctionId
|
* @param type
|
* @param out
|
*/
|
@RequestMapping("collectionGoods")
|
public void collectionGoods(long uid, long auctionId, int type, PrintWriter out) {
|
CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId);
|
if (type == 1) {
|
if (find != null) {
|
out.print(JsonUtil.loadFalseResult(""));
|
return;
|
}
|
try {
|
TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
|
collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
|
out.print(JsonUtil.loadTrueResult("收藏成功"));
|
} catch (TaobaoGoodsDownException e) {
|
out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
|
} catch (CollectionGoodsException e1) {
|
out.print(JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
|
}
|
} else {
|
if (find == null) {
|
out.print(JsonUtil.loadTrueResult("取消收藏成功"));
|
return;
|
} else {
|
try {
|
collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId);
|
out.print(JsonUtil.loadTrueResult("取消收藏成功"));
|
} catch (CollectionGoodsException e) {
|
out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
|
}
|
}
|
}
|
}
|
|
/**
|
*
|
* 方法说明: 查看我的收藏列表
|
*
|
* @author mawurui createTime 2018年4月25日 下午4:38:32
|
* @param uid
|
* @param page
|
* @param out
|
*/
|
@RequestMapping("collectionGoodsList")
|
public void collectionGoodsList(long uid, int page, int pageSize, PrintWriter out) {
|
List<CollectionGoodsV2> coList = collectionGoodsV2Service.getCollectionGoodsList(uid, page, pageSize);
|
long count = collectionGoodsV2Service.getCollectionGoodsCount(uid);
|
JSONObject data = new JSONObject();
|
BigDecimal proportion = hongBaoManageService.getFanLiRate();
|
List<TaoBaoGoodsBriefExtra> list = new ArrayList<TaoBaoGoodsBriefExtra>();
|
coList.parallelStream().forEachOrdered(cg -> {
|
TaoBaoGoodsBrief goodsBrief = TaoBaoUtil.convert(cg.getCommonGoods());
|
TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goodsBrief,
|
proportion.toString(), "");
|
list.add(taoBaoGoodsBriefExtra);
|
});
|
int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
|
data.put("totalPage", totalPage);
|
data.put("list", GsonUtil.toJsonExpose(list));
|
data.put("count", count);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
*
|
* 方法说明: 删除收藏商品
|
*
|
* @author mawurui createTime 2018年4月25日 下午4:58:39
|
* @param ids
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping("deleteCollectionGoods")
|
public void deleteCollectionGoods(String ids, long uid, PrintWriter out) {
|
if (ids != null) {
|
Arrays.asList(ids.split(",")).parallelStream().forEach(auctionIdStr -> {
|
try {
|
collectionGoodsV2Service.cancelCollection(uid, Long.parseLong(auctionIdStr));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
});
|
|
}
|
out.print(JsonUtil.loadTrueResult("删除成功"));
|
}
|
|
/**
|
*
|
* 方法说明: 清空收藏列表
|
*
|
* @author mawurui createTime 2018年4月25日 下午4:58:46
|
* @param uid
|
* @param out
|
*/
|
@RequestMapping("clearConllectionGoods")
|
public void clearConllectionGoods(long uid, PrintWriter out) {
|
try {
|
collectionGoodsV2Service.cancelCollectionByUid(uid);
|
} catch (CollectionGoodsException e) {
|
e.printStackTrace();
|
}
|
out.print(JsonUtil.loadTrueResult("删除成功"));
|
}
|
|
/**
|
*
|
* 方法说明: 微信登陆
|
*
|
* @author mawurui createTime 2018年4月25日 下午5:02:02
|
* @param acceptData
|
* @param out
|
*/
|
@RequestMapping(value = "isWxDown")
|
public void isWxDown(AcceptData acceptData, PrintWriter out) {
|
boolean b = wxDownService.isWxDownFirstLogin(acceptData.getDevice());
|
JSONObject data = new JSONObject();
|
data.put("isFirst", b);
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
*
|
* 方法说明: 获取商品分享连接
|
*
|
* @author mawurui createTime 2018年4月25日 下午5:02:09
|
* @param acceptData
|
* @param id
|
* @param out
|
*/
|
@RequestMapping(value = "getGoodsShareUrl")
|
public void getGoodsShareUrl(AcceptData acceptData, long id, PrintWriter out) {
|
out.print(JsonUtil.loadTrueResult(Constant.systemCommonConfig.getAppShareInfoUrl() + "?id=" + id));
|
}
|
|
}
|