验证码
个人中心-菜单页 首页接口 预约到店(店铺列表) 通用商品列表 登录 退出登录 商品详情(缺少评价部分)
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
package com.chaozhanggui.system.cashierservice.service;
|
||||
|
||||
import com.chaozhanggui.system.cashierservice.dao.SysDictDetailMapper;
|
||||
import com.chaozhanggui.system.cashierservice.dao.TbCouponCategoryMapper;
|
||||
import com.chaozhanggui.system.cashierservice.dao.TbPlatformDictMapper;
|
||||
import com.chaozhanggui.system.cashierservice.dao.TbShopInfoMapper;
|
||||
import com.chaozhanggui.system.cashierservice.entity.SysDict;
|
||||
import com.chaozhanggui.system.cashierservice.entity.TbCouponCategory;
|
||||
import com.chaozhanggui.system.cashierservice.entity.TbPlatformDict;
|
||||
import com.chaozhanggui.system.cashierservice.entity.dto.HomeBaseDto;
|
||||
import com.chaozhanggui.system.cashierservice.entity.dto.HomeDto;
|
||||
import com.chaozhanggui.system.cashierservice.entity.vo.*;
|
||||
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
|
||||
import com.chaozhanggui.system.cashierservice.sign.Result;
|
||||
import com.chaozhanggui.system.cashierservice.util.JSONUtil;
|
||||
import com.chaozhanggui.system.cashierservice.util.LocationUtils;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class HomeDistrictService {
|
||||
@Resource
|
||||
private ProductService productService;
|
||||
|
||||
@Resource
|
||||
private TbShopInfoMapper shopInfoMapper;
|
||||
@Resource
|
||||
private TbPlatformDictMapper platformDictMapper;
|
||||
@Resource
|
||||
private TbCouponCategoryMapper couponCategoryMapper;
|
||||
@Resource
|
||||
private SysDictDetailMapper sysDictDetailMapper;
|
||||
|
||||
public Result queryShopListByPage(HomeBaseDto param, String environment) {
|
||||
PageHelper.startPage(param.getPage(), param.getSize());
|
||||
List<TbPlatformDict> carouselList = platformDictMapper.queryAllByType("subShop", environment);
|
||||
|
||||
Map<String, double[]> topAndBottomMap = LocationUtils.returnLLSquarePoint(
|
||||
Double.parseDouble(param.getLng()),
|
||||
Double.parseDouble(param.getLat()),
|
||||
param.getDistanceInKm());
|
||||
List<SubShopVo> subShopVos = shopInfoMapper.selShopInfoByGps(
|
||||
topAndBottomMap.get("rightTopPoint")[1],//109.06198684730003
|
||||
topAndBottomMap.get("rightTopPoint")[0],//34.39724773780949
|
||||
topAndBottomMap.get("leftBottomPoint")[1],//108.88884915269998
|
||||
topAndBottomMap.get("leftBottomPoint")[0],//34.288450262190516
|
||||
param.getAddress(), param.getLng(), param.getLat());//西安市
|
||||
for (SubShopVo subShopVo : subShopVos) {//距离计算
|
||||
if (StringUtils.isNotBlank(subShopVo.getLat()) && StringUtils.isNotBlank(subShopVo.getLng())) {
|
||||
double distance = LocationUtils.getDistanceFrom2LngLat(
|
||||
Double.parseDouble(param.getLng()), Double.parseDouble(param.getLat()),
|
||||
Double.parseDouble(subShopVo.getLng()), Double.parseDouble(subShopVo.getLat()));
|
||||
subShopVo.setDistances(Double.toString(distance));
|
||||
}
|
||||
}
|
||||
|
||||
CommonPageVo result = new CommonPageVo();
|
||||
PageInfo pageInfo = new PageInfo();
|
||||
pageInfo.setList(subShopVos);
|
||||
result.setResult(pageInfo);
|
||||
|
||||
result.setCarousel(JSONUtil.parseListTNewList(carouselList, HomeCarouselVo.class));
|
||||
result.setTitle("预约到店");
|
||||
return Result.success(CodeEnum.SUCCESS, result);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用商品页
|
||||
*/
|
||||
public Result proList(HomeDto param, String environment) throws ExecutionException, InterruptedException {
|
||||
CommonPageVo result = new CommonPageVo();
|
||||
// title + 顶部图
|
||||
if (StringUtils.isNotBlank(param.getType())) {
|
||||
TbCouponCategory tbCouponCategory = couponCategoryMapper.queryById(Integer.valueOf(param.getType()));
|
||||
result.setTitle(tbCouponCategory.getName());
|
||||
List<TbPlatformDict> carouselList = platformDictMapper.queryAllByType(param.getType(), environment);
|
||||
if (!CollectionUtils.isEmpty(carouselList)) {
|
||||
result.setCarousel(JSONUtil.parseListTNewList(carouselList, HomeCarouselVo.class));
|
||||
}
|
||||
List<SysDict> sysDicts = sysDictDetailMapper.selectByType(null);
|
||||
List<DicDetailVO> dicDetailVO = new ArrayList<>();
|
||||
for (SysDict sysDictsList : sysDicts) {
|
||||
DicDetailVO dicDetailVOList = new DicDetailVO();
|
||||
dicDetailVOList.setDictName(sysDictsList.getDictName());
|
||||
dicDetailVOList.setName(sysDictsList.getName());
|
||||
dicDetailVOList.setDescription(sysDictsList.getDescription());
|
||||
dicDetailVOList.setDetail(sysDictDetailMapper.selectByDictId(sysDictsList.getDictId()));
|
||||
dicDetailVOList.setIsChild((sysDictsList.getIsChild() == null || sysDictsList.getIsChild() == 0) ? false : true);
|
||||
dicDetailVO.add(dicDetailVOList);
|
||||
}
|
||||
result.setMenu(dicDetailVO);
|
||||
} else {
|
||||
if (param.getOrderBy() != null) {
|
||||
if (param.getOrderBy() == 0) {
|
||||
List<TbPlatformDict> carouselList = platformDictMapper.queryAllByType("newCoupon", environment);
|
||||
if (!CollectionUtils.isEmpty(carouselList)) {
|
||||
result.setCarousel(JSONUtil.parseListTNewList(carouselList, HomeCarouselVo.class));
|
||||
}
|
||||
result.setTitle("今日上新");
|
||||
} else if (param.getOrderBy() == 2) {
|
||||
List<TbPlatformDict> carouselList = platformDictMapper.queryAllByType("hotCoupon", environment);
|
||||
if (!CollectionUtils.isEmpty(carouselList)) {
|
||||
result.setCarousel(JSONUtil.parseListTNewList(carouselList, HomeCarouselVo.class));
|
||||
}
|
||||
result.setTitle("热榜推荐");
|
||||
List<SysDict> sysDicts = sysDictDetailMapper.selectHot();
|
||||
List<DicDetailVO> dicDetailVO = new ArrayList<>();
|
||||
for (SysDict sysDictsList : sysDicts) {
|
||||
DicDetailVO dicDetailVOList = new DicDetailVO();
|
||||
dicDetailVOList.setDictName(sysDictsList.getDictName());
|
||||
dicDetailVOList.setName(sysDictsList.getName());
|
||||
dicDetailVOList.setDescription(sysDictsList.getDescription());
|
||||
dicDetailVOList.setIsChild((sysDictsList.getIsChild() == null || sysDictsList.getIsChild() == 0) ? false : true);
|
||||
dicDetailVO.add(dicDetailVOList);
|
||||
}
|
||||
result.setMenu(dicDetailVO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<HomeVO> products = productService.products(param);
|
||||
|
||||
PageInfo pageInfo = new PageInfo();
|
||||
pageInfo.setList(products);
|
||||
result.setResult(pageInfo);
|
||||
return Result.success(CodeEnum.SUCCESS, result);
|
||||
}
|
||||
}
|
||||
@@ -32,120 +32,17 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
@Slf4j
|
||||
public class HomePageService {
|
||||
@Resource
|
||||
private TbShopInfoMapper shopInfoMapper;
|
||||
@Resource
|
||||
private TbProductSkuMapper productSkuMapper;
|
||||
@Resource
|
||||
private TbPlatformDictMapper platformDictMapper;
|
||||
@Resource
|
||||
private TbMerchantCouponMapper merchantCouponMapper;
|
||||
@Resource
|
||||
private TbProductMapper productMapper;
|
||||
@Resource
|
||||
private SysDictDetailMapper sysDictDetailMapper;
|
||||
@Resource
|
||||
private TagProductDeptsMapper tagProductDeptsMapper;
|
||||
private ProductService productService;
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
|
||||
public Result homePage(HomeDto homeDto, String environmen) throws ExecutionException, InterruptedException {
|
||||
int beginNo;
|
||||
if (homeDto.getPage() <= 0) {
|
||||
beginNo = 0;
|
||||
} else {
|
||||
beginNo = (homeDto.getPage() - 1) * homeDto.getSize();
|
||||
}
|
||||
//经纬度(附近一km)
|
||||
Map<String, double[]> topAndBottomMap = new HashMap<>();
|
||||
List<CouAndShopVo> tbMerchantCoupons = new ArrayList<>();
|
||||
if (homeDto.getOther() != null && homeDto.getOther() == 1){
|
||||
topAndBottomMap = LocationUtils.returnLLSquarePoint(Double.parseDouble(homeDto.getLng()), Double.parseDouble(homeDto.getLat()), 1);
|
||||
tbMerchantCoupons = merchantCouponMapper.queryAllByPage(beginNo, homeDto.getSize(), topAndBottomMap.get("rightTopPoint")[0],topAndBottomMap.get("rightTopPoint")[1],
|
||||
topAndBottomMap.get("leftBottomPoint")[0],topAndBottomMap.get("leftBottomPoint")[1],homeDto.getAddress(),homeDto.getOrderBy().toString(),homeDto.getLng(),homeDto.getLat());
|
||||
}else {
|
||||
tbMerchantCoupons = merchantCouponMapper.queryAllByPage(beginNo, homeDto.getSize(), null,null,null,null,
|
||||
homeDto.getAddress(),homeDto.getOrderBy().toString(),homeDto.getLng(),homeDto.getLat());
|
||||
}
|
||||
|
||||
//统计shopId,以及productId
|
||||
List<String> shopIds = new ArrayList<>();
|
||||
List<String> productIds = new ArrayList<>();
|
||||
List<Integer> productIdsInt = new ArrayList<>();
|
||||
for (CouAndShopVo coupon : tbMerchantCoupons) {
|
||||
shopIds.add(coupon.getShopId());
|
||||
productIds.add(coupon.getRelationIds());
|
||||
productIdsInt.add(Integer.valueOf(coupon.getRelationIds()));
|
||||
}
|
||||
CompletableFuture<List<TbShopInfo>> shopInfo = CompletableFuture.supplyAsync(() ->
|
||||
shopInfoMapper.selectByIds(shopIds));
|
||||
CompletableFuture<List<TbProduct>> product = CompletableFuture.supplyAsync(() ->
|
||||
productMapper.selectByIds((productIds)));
|
||||
CompletableFuture<List<TbProductSku>> productSku = CompletableFuture.supplyAsync(() ->
|
||||
productSkuMapper.selectSkus((productIds)));
|
||||
CompletableFuture<List<TagProductVO>> dictPro = CompletableFuture.supplyAsync(() ->
|
||||
tagProductDeptsMapper.queryTagAndProduct(productIdsInt));
|
||||
Threads.call(shopInfo,product,productSku,dictPro);
|
||||
|
||||
//组装
|
||||
List<HomeVO> homeVOList = new ArrayList<>();
|
||||
for (CouAndShopVo o : tbMerchantCoupons) {
|
||||
HomeVO homeVO = new HomeVO();
|
||||
homeVO.setId(o.getId());
|
||||
for (TbShopInfo tbShopInfo : shopInfo.get()) {
|
||||
if (o.getShopId().equals(tbShopInfo.getId().toString())) {
|
||||
homeVO.setShopName(tbShopInfo.getShopName());
|
||||
homeVO.setImage(tbShopInfo.getLogo());
|
||||
if (StringUtils.isBlank(tbShopInfo.getTag())){
|
||||
homeVO.setShopTag(new ArrayList<>());
|
||||
}else {
|
||||
List<Integer> shopTagIds = Arrays.stream(tbShopInfo.getTag().split(","))
|
||||
.map(Integer::parseInt)
|
||||
.collect(Collectors.toList());
|
||||
List<TbPlatformDict> tbPlatformDicts = platformDictMapper.queryByIdList(shopTagIds);
|
||||
homeVO.setShopTag(JSONUtil.parseListTNewList(tbPlatformDicts, TagVo.class));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
for (TbProduct tbProduct : product.get()) {
|
||||
if (o.getRelationIds().equals(tbProduct.getId().toString())) {
|
||||
homeVO.setProductName(o.getTitle());
|
||||
homeVO.setImage(tbProduct.getCoverImg());
|
||||
homeVO.setProductId(tbProduct.getId());
|
||||
}
|
||||
}
|
||||
for (TbProductSku tbProductSku : productSku.get()) {
|
||||
if (o.getRelationIds().equals(tbProductSku.getProductId())) {
|
||||
//原价
|
||||
if (tbProductSku.getSalePrice().compareTo(BigDecimal.ZERO)==0){
|
||||
homeVO.setOriginPrice(BigDecimal.ZERO);
|
||||
homeVO.setDiscount(BigDecimal.ZERO);
|
||||
}else {
|
||||
homeVO.setOriginPrice(tbProductSku.getSalePrice());
|
||||
homeVO.setDiscount(new BigDecimal(o.getAmount()).divide(tbProductSku.getSalePrice(),2,RoundingMode.DOWN).multiply(BigDecimal.TEN));
|
||||
}
|
||||
//销量
|
||||
homeVO.setRealSalesNumber(new BigDecimal(o.getNumber()));
|
||||
//现价
|
||||
homeVO.setSalePrice(new BigDecimal(o.getAmount().toString()));
|
||||
// 共省金额
|
||||
homeVO.setSave(homeVO.getOriginPrice().subtract(homeVO.getSalePrice()));
|
||||
}
|
||||
}
|
||||
for (TagProductVO tagProductVO :dictPro.get()) {
|
||||
if (o.getRelationIds().equals(tagProductVO.getProductId().toString())){
|
||||
homeVO.getProTag().add(tagProductVO);
|
||||
}
|
||||
}
|
||||
homeVO.setEndTime(DateUtils.getDayEndLong());
|
||||
homeVOList.add(homeVO);
|
||||
}
|
||||
|
||||
return Result.success(CodeEnum.SUCCESS, homeVOList);
|
||||
}
|
||||
|
||||
public Result homePageUp(String environment) {
|
||||
HomeUpVO homeUpVO = new HomeUpVO();
|
||||
//轮播图
|
||||
@@ -156,7 +53,7 @@ public class HomePageService {
|
||||
homeUpVO.setDistrict(JSONUtil.parseListTNewList(districtList, HomeDistrictVo.class));
|
||||
|
||||
//菜单
|
||||
List<SysDict> sysDicts = sysDictDetailMapper.selectByAll();
|
||||
List<SysDict> sysDicts = sysDictDetailMapper.selectByType("home");
|
||||
List<DicDetailVO> dicDetailVO = new ArrayList<>();
|
||||
for (SysDict sysDictsList : sysDicts) {
|
||||
DicDetailVO dicDetailVOList = new DicDetailVO();
|
||||
@@ -200,11 +97,18 @@ public class HomePageService {
|
||||
return Result.success(CodeEnum.SUCCESS, homeUpVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品列表
|
||||
*/
|
||||
public Result proList(HomeDto homeDto, String environmen) throws ExecutionException, InterruptedException {
|
||||
List<HomeVO> products = productService.products(homeDto);
|
||||
return Result.success(CodeEnum.SUCCESS, products);
|
||||
}
|
||||
|
||||
/**
|
||||
* 小条幅随机数据
|
||||
* @return
|
||||
*/
|
||||
|
||||
private BannerVO bannerVoRandom(){
|
||||
BannerVO bannerVO = new BannerVO();
|
||||
List<BannerInfoVo> bannerInfoList = new ArrayList<>();
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
|
||||
import com.chaozhanggui.system.cashierservice.sign.Result;
|
||||
import com.chaozhanggui.system.cashierservice.util.MD5Utils;
|
||||
import com.chaozhanggui.system.cashierservice.util.TokenUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@@ -21,6 +22,7 @@ import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class LoginService {
|
||||
|
||||
|
||||
@@ -50,110 +52,58 @@ public class LoginService {
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result wxCustomLogin(String openId, String headImage, String nickName, String telephone, String qrCode, String ip) throws Exception {
|
||||
|
||||
public Result wxCustomLogin(String openId, String headImage, String nickName, String telephone, String ip) throws Exception {
|
||||
TbUserInfo userInfo = tbUserInfoMapper.selectByOpenId(openId);
|
||||
if (ObjectUtil.isNull(userInfo)) {
|
||||
userInfo = new TbUserInfo();
|
||||
|
||||
userInfo.setAmount(BigDecimal.ZERO);
|
||||
userInfo.setChargeAmount(BigDecimal.ZERO);
|
||||
userInfo.setLineOfCredit(BigDecimal.ZERO);
|
||||
userInfo.setConsumeNumber(0);
|
||||
userInfo.setConsumeAmount(BigDecimal.ZERO);
|
||||
userInfo.setTotalScore(0);
|
||||
userInfo.setLockScore(0);
|
||||
userInfo.setHeadImg(ObjectUtil.isNotNull(headImage) ? headImage : "");
|
||||
userInfo.setNickName(ObjectUtil.isNotNull(nickName) ? nickName : "微信用户");
|
||||
userInfo.setTelephone(ObjectUtil.isNotNull(telephone) ? telephone : "");
|
||||
userInfo.setMiniAppOpenId(openId);
|
||||
userInfo.setStatus(Byte.parseByte("1"));
|
||||
userInfo.setParentType("PERSON");
|
||||
userInfo.setIsResource(Byte.parseByte("0"));
|
||||
userInfo.setIsOnline(Byte.parseByte("0"));
|
||||
userInfo.setIsVip(Byte.parseByte("0"));
|
||||
userInfo.setSourcePath("WECHAT-APP");
|
||||
userInfo.setIsAttentionMp(Byte.parseByte("0"));
|
||||
userInfo.setSearchWord("||微信用户");
|
||||
userInfo.setLastLogInAt(System.currentTimeMillis());
|
||||
userInfo.setCreatedAt(System.currentTimeMillis());
|
||||
userInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
tbUserInfoMapper.insert(userInfo);
|
||||
|
||||
} else {
|
||||
userInfo.setHeadImg(ObjectUtil.isNotNull(headImage) ? headImage : "");
|
||||
userInfo.setNickName(ObjectUtil.isNotNull(nickName) ? nickName : "微信用户");
|
||||
userInfo.setTelephone(ObjectUtil.isNotNull(telephone) ? telephone : "");
|
||||
tbUserInfoMapper.updateByPrimaryKeySelective(userInfo);
|
||||
}
|
||||
//app与微信用户 互相关联
|
||||
if (ObjectUtil.isNotNull(telephone)) {
|
||||
TbUserInfo appUser = tbUserInfoMapper.selectByPhone(telephone);
|
||||
if (appUser != null) {
|
||||
TbUserInfo wechatUser = tbUserInfoMapper.selectByOpenId(openId);
|
||||
appUser.setUserId(wechatUser.getId());
|
||||
tbUserInfoMapper.updateByPrimaryKey(appUser);
|
||||
wechatUser.setUserId(appUser.getId());
|
||||
tbUserInfoMapper.updateByPrimaryKey(wechatUser);
|
||||
userInfo = tbUserInfoMapper.selectByPhone(telephone);
|
||||
if (ObjectUtil.isNull(userInfo)) {
|
||||
userInfo = new TbUserInfo();
|
||||
userInfo.setAmount(BigDecimal.ZERO);
|
||||
userInfo.setChargeAmount(BigDecimal.ZERO);
|
||||
userInfo.setLineOfCredit(BigDecimal.ZERO);
|
||||
userInfo.setConsumeNumber(0);
|
||||
userInfo.setConsumeAmount(BigDecimal.ZERO);
|
||||
userInfo.setTotalScore(0);
|
||||
userInfo.setLockScore(0);
|
||||
userInfo.setHeadImg(ObjectUtil.isNotNull(headImage) ? headImage : "");
|
||||
userInfo.setNickName(ObjectUtil.isNotNull(nickName) ? nickName : "微信用户");
|
||||
userInfo.setTelephone(ObjectUtil.isNotNull(telephone) ? telephone : "");
|
||||
userInfo.setMiniAppOpenId(openId);
|
||||
userInfo.setStatus(Byte.parseByte("1"));
|
||||
userInfo.setParentType("PERSON");
|
||||
userInfo.setIsResource(Byte.parseByte("0"));
|
||||
userInfo.setIsOnline(Byte.parseByte("0"));
|
||||
userInfo.setIsVip(Byte.parseByte("0"));
|
||||
userInfo.setSourcePath("WECHAT-APP");
|
||||
userInfo.setIsAttentionMp(Byte.parseByte("0"));
|
||||
userInfo.setSearchWord("||微信用户");
|
||||
userInfo.setLastLogInAt(System.currentTimeMillis());
|
||||
userInfo.setCreatedAt(System.currentTimeMillis());
|
||||
userInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
tbUserInfoMapper.insert(userInfo);
|
||||
} else {
|
||||
userInfo.setSearchWord(userInfo.getSearchWord() + "||微信用户");
|
||||
userInfo.setMiniAppOpenId(openId);
|
||||
userInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
tbUserInfoMapper.updateByPrimaryKeySelective(userInfo);
|
||||
}
|
||||
}
|
||||
TbShopInfo tbShopInfo = null;
|
||||
if (ObjectUtil.isEmpty(qrCode)) {
|
||||
tbShopInfo = tbShopInfoMapper.selectByPhone(defaultPhone);
|
||||
|
||||
|
||||
} else {
|
||||
tbShopInfo = tbShopInfoMapper.selectByQrCode(qrCode);
|
||||
}
|
||||
|
||||
|
||||
TbShopUser tbShopUser = null;
|
||||
Map<String, String> shopMap = new HashMap<>();
|
||||
if (ObjectUtil.isNotEmpty(tbShopInfo)) {
|
||||
tbShopUser = tbShopUserMapper.selectByUserIdAndShopId(userInfo.getId().toString(), tbShopInfo.getId().toString());
|
||||
if (ObjectUtil.isEmpty(tbShopUser)) {
|
||||
tbShopUser = new TbShopUser();
|
||||
tbShopUser.setAmount(BigDecimal.ZERO);
|
||||
tbShopUser.setCreditAmount(BigDecimal.ZERO);
|
||||
tbShopUser.setConsumeAmount(BigDecimal.ZERO);
|
||||
tbShopUser.setConsumeNumber(0);
|
||||
tbShopUser.setLevelConsume(BigDecimal.ZERO);
|
||||
tbShopUser.setStatus(Byte.parseByte("1"));
|
||||
tbShopUser.setShopId(tbShopInfo.getId().toString());
|
||||
tbShopUser.setUserId(userInfo.getId().toString());
|
||||
tbShopUser.setMiniOpenId(openId);
|
||||
tbShopUser.setIsPwd("1");
|
||||
tbShopUser.setCreatedAt(System.currentTimeMillis());
|
||||
tbShopUser.setUpdatedAt(System.currentTimeMillis());
|
||||
tbShopUserMapper.insert(tbShopUser);
|
||||
}else {
|
||||
tbShopUser.setUpdatedAt(System.currentTimeMillis());
|
||||
tbShopUserMapper.updateByPrimaryKey(tbShopUser);
|
||||
}
|
||||
shopMap.put("shopId", tbShopUser.getShopId());
|
||||
shopMap.put("name", tbShopInfo.getShopName());
|
||||
shopMap.put("amount", BigDecimal.ZERO.toPlainString());
|
||||
shopMap.put("levelConsume", BigDecimal.ZERO.toPlainString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
//生成token 信息
|
||||
String token = TokenUtil.generateToken(userInfo.getId(), userInfo.getMiniAppOpenId(), userInfo.getTelephone(), userInfo.getNickName());
|
||||
|
||||
|
||||
//存储登录记录
|
||||
TbToken tbToken = new TbToken(tbShopInfo.getId(), userInfo.getId(), "wx_lite", token, ip, "1", new Date());
|
||||
tbTokenMapper.insert(tbToken);
|
||||
|
||||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
try {
|
||||
map.put("token", token);
|
||||
map.put("userInfo", userInfo);
|
||||
map.put("shopUser", shopMap);
|
||||
map.put("shopInfo", tbShopInfo);
|
||||
redisUtil.saveMessage(RedisCst.ONLINE_USER.concat(openId), JSON.toJSONString(map));
|
||||
//redis里 获取要关注的公众号信息
|
||||
//userInfo 某字段存储关注公众号的标识
|
||||
// userInfo.get
|
||||
//公众号 appid
|
||||
//展示描述
|
||||
//图标
|
||||
// map.put("", );
|
||||
// log.info("登录结果:"+ JSONUtil.toJSONString(map));
|
||||
return Result.success(CodeEnum.SUCCESS, map);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -162,6 +112,14 @@ public class LoginService {
|
||||
return Result.fail("登录失败");
|
||||
}
|
||||
|
||||
/**
|
||||
* APP注册
|
||||
*
|
||||
* @param phone
|
||||
* @param password
|
||||
* @param nickName
|
||||
* @return
|
||||
*/
|
||||
public TbUserInfo register(String phone, String password, String nickName) {
|
||||
|
||||
TbUserInfo userInfo = new TbUserInfo();
|
||||
@@ -186,19 +144,11 @@ public class LoginService {
|
||||
userInfo.setLastLogInAt(System.currentTimeMillis());
|
||||
userInfo.setCreatedAt(System.currentTimeMillis());
|
||||
userInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
if(StringUtils.isNotBlank(password)){
|
||||
if (StringUtils.isNotBlank(password)) {
|
||||
userInfo.setPassword(MD5Utils.MD5Encode(password, "UTF-8"));
|
||||
}
|
||||
tbUserInfoMapper.insert(userInfo);
|
||||
//注册时 app与微信小程序用户关联
|
||||
TbUserInfo wechatUser = tbUserInfoMapper.selectUserByPhone(phone, "WECHAT-APP");
|
||||
TbUserInfo appUser = tbUserInfoMapper.selectByPhone(phone);
|
||||
if (wechatUser != null) {
|
||||
appUser.setUserId(wechatUser.getId());
|
||||
tbUserInfoMapper.updateByPrimaryKey(appUser);
|
||||
wechatUser.setUserId(appUser.getId());
|
||||
tbUserInfoMapper.updateByPrimaryKey(wechatUser);
|
||||
}
|
||||
return appUser;
|
||||
}
|
||||
|
||||
@@ -223,14 +173,28 @@ public class LoginService {
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result appLogin(String username, String password) {
|
||||
TbUserInfo userInfo = tbUserInfoMapper.selectUserByPhone(username, "APP");
|
||||
TbUserInfo userInfo = tbUserInfoMapper.selectByPhone(username);
|
||||
if (ObjectUtil.isNull(userInfo)) {
|
||||
//注册
|
||||
userInfo=register(username, password, username);
|
||||
if (StringUtils.isNotBlank(password)) {
|
||||
return Result.fail("暂未设置密码,请使用验证码登录");
|
||||
}
|
||||
userInfo = register(username, password, username);
|
||||
}else {
|
||||
String searchWord = userInfo.getSearchWord();
|
||||
if(!searchWord.contains("移动端用户")){
|
||||
userInfo.setSearchWord(userInfo.getSearchWord() + "||移动端用户");
|
||||
userInfo.setUpdatedAt(System.currentTimeMillis());
|
||||
tbUserInfoMapper.updateByPrimaryKeySelective(userInfo);
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(password) && !password.equalsIgnoreCase(userInfo.getPassword())) {
|
||||
return Result.fail("密码错误");
|
||||
if (StringUtils.isNotBlank(password)) {//未使用验证码
|
||||
if (StringUtils.isBlank(userInfo.getPassword())) {
|
||||
return Result.fail("暂未设置密码,请使用验证码登录");
|
||||
} else if (!password.equalsIgnoreCase(userInfo.getPassword())) {
|
||||
return Result.fail("用户名或密码错误");
|
||||
}
|
||||
}
|
||||
|
||||
//生成token 信息
|
||||
String token = null;
|
||||
try {
|
||||
@@ -251,7 +215,7 @@ public class LoginService {
|
||||
return Result.fail("登录失败");
|
||||
}
|
||||
|
||||
public Result createCardNo(String id, String openId,String shopId) {
|
||||
public Result createCardNo(String id, String openId, String shopId) {
|
||||
if (ObjectUtil.isEmpty(id) || ObjectUtil.isEmpty(openId)) {
|
||||
return Result.fail("head 信息不允许为空");
|
||||
}
|
||||
@@ -266,59 +230,32 @@ public class LoginService {
|
||||
}
|
||||
|
||||
|
||||
TbShopUser tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(userInfo.getId().toString(),shopId);
|
||||
if(ObjectUtil.isEmpty(tbShopUser)||tbShopUser==null){
|
||||
TbShopUser tbShopUser = tbShopUserMapper.selectByUserIdAndShopId(userInfo.getId().toString(), shopId);
|
||||
if (ObjectUtil.isEmpty(tbShopUser) || tbShopUser == null) {
|
||||
return Result.fail("用户信息错误");
|
||||
}
|
||||
|
||||
String dynamicCode = RandomUtil.randomNumbers(8);
|
||||
dynamicCode= StringUtils.rightPad(tbShopUser.getId(),6,"0").concat(dynamicCode);
|
||||
dynamicCode = StringUtils.rightPad(tbShopUser.getId(), 6, "0").concat(dynamicCode);
|
||||
|
||||
tbShopUser.setDynamicCode(dynamicCode);
|
||||
tbShopUser.setUpdatedAt(System.currentTimeMillis());
|
||||
tbShopUserMapper.updateByPrimaryKeySelective(tbShopUser);
|
||||
|
||||
|
||||
|
||||
return Result.success(CodeEnum.SUCCESS, dynamicCode);
|
||||
}
|
||||
|
||||
|
||||
public Result userInfo(Integer userId, String shopId) {
|
||||
public Result userInfo(Integer userId) {
|
||||
TbUserInfo tbUserInfo = tbUserInfoMapper.selectByPrimaryKey(userId);
|
||||
|
||||
if (tbUserInfo == null) {
|
||||
return Result.success(CodeEnum.ENCRYPT, new ArrayList());
|
||||
}
|
||||
|
||||
|
||||
TbShopInfo tbShopInfo = null;
|
||||
if (ObjectUtil.isEmpty(shopId)) {
|
||||
tbShopInfo = tbShopInfoMapper.selectByPhone(defaultPhone);
|
||||
} else {
|
||||
tbShopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId));
|
||||
}
|
||||
|
||||
TbShopUser tbShopUser = null;
|
||||
Map<String, String> shopMap = new HashMap<>();
|
||||
if (ObjectUtil.isNotEmpty(tbShopInfo)) {
|
||||
tbShopUser = tbShopUserMapper.selectByUserIdAndShopId(tbUserInfo.getId().toString(), tbShopInfo.getId().toString());
|
||||
shopMap.put("shopId", tbShopUser.getShopId());
|
||||
shopMap.put("name", tbShopInfo.getShopName());
|
||||
shopMap.put("amount", BigDecimal.ZERO.toPlainString());
|
||||
shopMap.put("levelConsume", BigDecimal.ZERO.toPlainString());
|
||||
}
|
||||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("userInfo", tbUserInfo);
|
||||
map.put("shopUser", shopMap);
|
||||
map.put("shopInfo", tbShopInfo);
|
||||
|
||||
|
||||
return Result.success(CodeEnum.ENCRYPT, map);
|
||||
return Result.success(CodeEnum.ENCRYPT, tbUserInfo);
|
||||
}
|
||||
|
||||
public Result upUserInfo(TbUserInfo userInfo){
|
||||
public Result upUserInfo(TbUserInfo userInfo) {
|
||||
tbUserInfoMapper.updateByPrimaryKeySelective(userInfo);
|
||||
return Result.success(CodeEnum.SUCCESS);
|
||||
}
|
||||
|
||||
@@ -6,13 +6,16 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.chaozhanggui.system.cashierservice.dao.*;
|
||||
import com.chaozhanggui.system.cashierservice.entity.*;
|
||||
import com.chaozhanggui.system.cashierservice.entity.vo.ProductInfoVo;
|
||||
import com.chaozhanggui.system.cashierservice.entity.vo.ProductVo;
|
||||
import com.chaozhanggui.system.cashierservice.entity.vo.TagProductVO;
|
||||
import com.chaozhanggui.system.cashierservice.entity.dto.HomeDto;
|
||||
import com.chaozhanggui.system.cashierservice.entity.vo.*;
|
||||
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
|
||||
import com.chaozhanggui.system.cashierservice.sign.Result;
|
||||
import com.chaozhanggui.system.cashierservice.socket.AppWebSocketServer;
|
||||
import com.chaozhanggui.system.cashierservice.util.DateUtils;
|
||||
import com.chaozhanggui.system.cashierservice.util.JSONUtil;
|
||||
import com.chaozhanggui.system.cashierservice.util.LocationUtils;
|
||||
import com.chaozhanggui.system.cashierservice.util.Threads;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -20,14 +23,13 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@@ -135,8 +137,116 @@ public class ProductService {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品列表
|
||||
* 首页底部列表
|
||||
* 爆品上新
|
||||
* 销量榜
|
||||
* 咖啡饮品
|
||||
*/
|
||||
public List<HomeVO> products(HomeDto homeDto) throws ExecutionException, InterruptedException {
|
||||
PageHelper.startPage(homeDto.getPage(), homeDto.getSize());
|
||||
|
||||
public Result productInfo(Integer productId) throws Exception {
|
||||
//经纬度(附近一km)
|
||||
Map<String, double[]> topAndBottomMap = LocationUtils.returnLLSquarePoint(
|
||||
Double.parseDouble(homeDto.getLng()), Double.parseDouble(homeDto.getLat()), homeDto.getDistanceInKm());
|
||||
List<CouAndShopVo> tbMerchantCoupons = merchantCouponMapper.queryAllByPage(
|
||||
homeDto.getType(),
|
||||
topAndBottomMap.get("rightTopPoint")[1], topAndBottomMap.get("rightTopPoint")[0],
|
||||
topAndBottomMap.get("leftBottomPoint")[1], topAndBottomMap.get("leftBottomPoint")[0],
|
||||
homeDto.getAddress(), homeDto.getOrderBy().toString(), homeDto.getLng(), homeDto.getLat());
|
||||
|
||||
|
||||
//统计shopId,以及productId
|
||||
List<String> shopIds = new ArrayList<>();
|
||||
List<String> productIds = new ArrayList<>();
|
||||
List<Integer> productIdsInt = new ArrayList<>();
|
||||
for (CouAndShopVo coupon : tbMerchantCoupons) {
|
||||
shopIds.add(coupon.getShopId());
|
||||
productIds.add(coupon.getRelationIds());
|
||||
productIdsInt.add(Integer.valueOf(coupon.getRelationIds()));
|
||||
}
|
||||
CompletableFuture<List<TbShopInfo>> shopInfo = CompletableFuture.supplyAsync(() ->
|
||||
tbShopInfoMapper.selectByIds(shopIds));
|
||||
CompletableFuture<List<TbProduct>> product = CompletableFuture.supplyAsync(() ->
|
||||
tbProductMapper.selectByIds((productIds)));
|
||||
CompletableFuture<List<TbProductSku>> productSku = CompletableFuture.supplyAsync(() ->
|
||||
tbProductSkuMapper.selectSkus((productIds)));
|
||||
CompletableFuture<List<TagProductVO>> dictPro = CompletableFuture.supplyAsync(() ->
|
||||
tagProductDeptsMapper.queryTagAndProduct(productIdsInt));
|
||||
Threads.call(shopInfo, product, productSku, dictPro);
|
||||
|
||||
//组装
|
||||
List<HomeVO> homeVOList = new ArrayList<>();
|
||||
for (CouAndShopVo o : tbMerchantCoupons) {
|
||||
HomeVO homeVO = new HomeVO();
|
||||
homeVO.setId(o.getId());
|
||||
for (TbShopInfo tbShopInfo : shopInfo.get()) {
|
||||
if (o.getShopId().equals(tbShopInfo.getId().toString())) {
|
||||
homeVO.setShopName(tbShopInfo.getShopName());
|
||||
homeVO.setImage(tbShopInfo.getLogo());
|
||||
if (StringUtils.isBlank(tbShopInfo.getTag())) {
|
||||
homeVO.setShopTag(new ArrayList<>());
|
||||
} else {
|
||||
List<Integer> shopTagIds = Arrays.stream(tbShopInfo.getTag().split(","))
|
||||
.map(Integer::parseInt)
|
||||
.collect(Collectors.toList());
|
||||
List<TbPlatformDict> tbPlatformDicts = platformDictMapper.queryByIdList(shopTagIds);
|
||||
homeVO.setShopTag(JSONUtil.parseListTNewList(tbPlatformDicts, TagVo.class));
|
||||
}
|
||||
if (StringUtils.isNotBlank(tbShopInfo.getLat()) && StringUtils.isNotBlank(tbShopInfo.getLng())) {
|
||||
double distance = LocationUtils.getDistanceFrom2LngLat(
|
||||
Double.parseDouble(homeDto.getLng()), Double.parseDouble(homeDto.getLat()),
|
||||
Double.parseDouble(tbShopInfo.getLng()), Double.parseDouble(tbShopInfo.getLat()));
|
||||
homeVO.setDistances(Double.toString(distance));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
for (TbProduct tbProduct : product.get()) {
|
||||
if (o.getRelationIds().equals(tbProduct.getId().toString())) {
|
||||
homeVO.setProductName(o.getTitle());
|
||||
homeVO.setImage(tbProduct.getCoverImg());
|
||||
homeVO.setProductId(tbProduct.getId());
|
||||
}
|
||||
}
|
||||
for (TbProductSku tbProductSku : productSku.get()) {
|
||||
if (o.getRelationIds().equals(tbProductSku.getProductId())) {
|
||||
//原价
|
||||
if (tbProductSku.getSalePrice().compareTo(BigDecimal.ZERO) == 0) {
|
||||
homeVO.setOriginPrice(BigDecimal.ZERO);
|
||||
homeVO.setDiscount(BigDecimal.ZERO);
|
||||
} else {
|
||||
homeVO.setOriginPrice(tbProductSku.getSalePrice());
|
||||
homeVO.setDiscount(new BigDecimal(o.getAmount()).divide(tbProductSku.getSalePrice(), 2, RoundingMode.DOWN).multiply(BigDecimal.TEN));
|
||||
}
|
||||
//销量
|
||||
homeVO.setRealSalesNumber(new BigDecimal(o.getNumber()));
|
||||
//现价
|
||||
homeVO.setSalePrice(new BigDecimal(o.getAmount().toString()));
|
||||
// 共省金额
|
||||
homeVO.setSave(homeVO.getOriginPrice().subtract(homeVO.getSalePrice()));
|
||||
}
|
||||
}
|
||||
for (TagProductVO tagProductVO : dictPro.get()) {
|
||||
if (o.getRelationIds().equals(tagProductVO.getProductId().toString())) {
|
||||
homeVO.getProTag().add(tagProductVO);
|
||||
}
|
||||
}
|
||||
homeVO.setEndTime(DateUtils.getDayEndLong());
|
||||
homeVOList.add(homeVO);
|
||||
}
|
||||
return homeVOList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 团购卷详情
|
||||
*
|
||||
* @param productId 团购卷Id
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public Result productInfo(Integer productId,String environment) throws Exception {
|
||||
TbMerchantCoupon tbMerchantCoupon = merchantCouponMapper.queryById(productId);
|
||||
|
||||
CompletableFuture<TbShopInfo> shopInfo = CompletableFuture.supplyAsync(() ->
|
||||
@@ -148,7 +258,7 @@ public class ProductService {
|
||||
CompletableFuture<List<TagProductVO>> dictPro = CompletableFuture.supplyAsync(() ->
|
||||
tagProductDeptsMapper.queryTagByProductId(tbMerchantCoupon.getRelationIds()));
|
||||
CompletableFuture<TbPurchaseNotice> purchaseNotice = CompletableFuture.supplyAsync(() ->
|
||||
purchaseNoticeMapper.queryById(tbMerchantCoupon.getId()));
|
||||
purchaseNoticeMapper.queryByCouponId(tbMerchantCoupon.getId()));
|
||||
Threads.call(shopInfo, product, productSku, dictPro);
|
||||
|
||||
ProductInfoVo productInfo = new ProductInfoVo();
|
||||
@@ -195,18 +305,15 @@ public class ProductService {
|
||||
}
|
||||
productVo.getFoods().add(food);
|
||||
productInfo.getProductList().add(productVo);
|
||||
|
||||
productInfo.setPurchaseNotice(purchaseNotice.get());
|
||||
TbPurchaseNotice tbPurchaseNotice = purchaseNotice.get();
|
||||
productInfo.setPurchaseNotice(tbPurchaseNotice);
|
||||
List<TbPlatformDict> tbPlatformDicts = platformDictMapper.queryAllByType("prodetail", environment);
|
||||
if(tbPurchaseNotice.getBookingType().startsWith("无需预约")){
|
||||
List<TbPlatformDict> book = platformDictMapper.queryAllByType("prodetail-book", environment);
|
||||
tbPlatformDicts.addAll(book);
|
||||
}
|
||||
productInfo.setNoticeTag(JSONUtil.parseListTNewList(tbPlatformDicts, TagVo.class));
|
||||
|
||||
return Result.success(CodeEnum.SUCCESS, productInfo);
|
||||
}
|
||||
|
||||
private List<String> tagList(String tag) {
|
||||
if (tag == null) {
|
||||
return new ArrayList<>();
|
||||
} else {
|
||||
String[] arr = tag.split(",");
|
||||
return new ArrayList<>(Arrays.asList(arr));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user