添加景区账号的登陆功能

添加“上传人脸、现场支付、事后支付、退款、点击购买”操作的数据记录
This commit is contained in:
longbinbin
2024-12-13 11:25:02 +08:00
parent 715c351f5f
commit 6fca6df89f
29 changed files with 344 additions and 45 deletions

View File

@@ -1,5 +1,6 @@
package com.ycwl.basic.service.impl.mobile;
import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.constant.BaseContextHandler;
@@ -11,9 +12,12 @@ import com.ycwl.basic.model.mobile.index.TopStateResp;
import com.ycwl.basic.model.mobile.scenic.ScenicAppVO;
import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO;
import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO;
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq;
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO;
import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO;
import com.ycwl.basic.model.pc.face.req.FaceReqQuery;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
@@ -58,6 +62,10 @@ public class AppScenicServiceImpl implements AppScenicService {
private VideoMapper videoMapper;
@Autowired
private TemplateMapper templateMapper;
@Autowired
private ScenicAccountMapper scenicAccountMapper;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Value("${face.score}")
private BigDecimal faceScore;
@@ -182,4 +190,31 @@ public class AppScenicServiceImpl implements AppScenicService {
return ApiResponse.success(contentList);
}
@Override
public ApiResponse<ScenicLoginRespVO> login(ScenicLoginReq scenicLoginReq) throws Exception {
ScenicAccountEntity scenicAccount = scenicAccountMapper.getByAccount(scenicLoginReq.getAccount());
if (scenicAccount == null) {
return ApiResponse.fail("账号不存在");
}
if (scenicAccount.getStatus() == 0) {
return ApiResponse.fail("账号已被禁用");
}
if (!scenicAccount.getPassword().equals(scenicLoginReq.getPassword())) {
return ApiResponse.fail("密码错误");
}
JwtInfo jwtInfo = new JwtInfo();
jwtInfo.setName(scenicAccount.getName());
jwtInfo.setAccount(scenicAccount.getAccount());
jwtInfo.setUserId(scenicAccount.getId());
jwtInfo.setScenicId(scenicAccount.getScenicId());
String token = jwtTokenUtil.generateToken(jwtInfo);
ScenicLoginRespVO scenicLoginRespVO = new ScenicLoginRespVO();
BeanUtil.copyProperties(scenicAccount,scenicLoginRespVO);
scenicLoginRespVO.setToken(token);
return ApiResponse.success(scenicLoginRespVO);
}
}

View File

@@ -1,10 +1,18 @@
package com.ycwl.basic.service.impl.mobile;
import com.ycwl.basic.enums.StatisticEnum;
import com.ycwl.basic.mapper.StatisticsMapper;
import com.ycwl.basic.model.mobile.statistic.*;
import com.ycwl.basic.model.jwt.JwtInfo;
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
import com.ycwl.basic.model.mobile.statistic.resp.AppSta1VO;
import com.ycwl.basic.model.mobile.statistic.resp.AppSta2VO;
import com.ycwl.basic.model.mobile.statistic.resp.AppSta3VO;
import com.ycwl.basic.model.mobile.statistic.resp.AppStatisticsFunnelVO;
import com.ycwl.basic.service.mobile.AppStatisticsService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.DateUtils;
import com.ycwl.basic.utils.JwtTokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -12,6 +20,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.Map;
/**
* @Author:longbinbin
@@ -196,6 +205,27 @@ public class AppStatisticsServiceImpl implements AppStatisticsService {
return ApiResponse.success(vo);
}
@Override
public ApiResponse addStatistics(StatisticsRecordAddReq req) {
JwtInfo worker = JwtTokenUtil.getWorker();
Long userId = worker.getUserId();
req.setMemberId(userId);
Integer type = req.getType();
if(type==null){
return ApiResponse.fail("类型不能为空");
}
Map<Integer, StatisticEnum> valueMap = StatisticEnum.cacheMap;
if(!valueMap.containsKey(type)){
return ApiResponse.fail("添加失败,类型不存在");
}
int i=statisticsMapper.addStatisticsRecord(req);
if(i==0){
return ApiResponse.fail("添加失败");
}else{
return ApiResponse.success("添加成功");
}
}
/**
*
* @param num1

View File

@@ -21,7 +21,10 @@ import com.ycwl.basic.constant.NumberConstant;
import com.ycwl.basic.constant.WeiXinConstant;
import com.ycwl.basic.enums.BizCodeEnum;
import com.ycwl.basic.enums.OrderStateEnum;
import com.ycwl.basic.enums.StatisticEnum;
import com.ycwl.basic.exception.AppException;
import com.ycwl.basic.mapper.StatisticsMapper;
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
import com.ycwl.basic.model.wx.WXPayOrderReqVO;
import com.ycwl.basic.model.wx.WxPayRespVO;
@@ -29,6 +32,8 @@ import com.ycwl.basic.model.wx.WxchatCallbackSuccessData;
import com.ycwl.basic.service.HttpService;
import com.ycwl.basic.service.mobile.WxPayService;
import com.ycwl.basic.service.pc.OrderService;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.DateUtils;
import com.ycwl.basic.utils.SnowFlakeUtil;
import com.ycwl.basic.utils.WXPayUtil;
import lombok.extern.slf4j.Slf4j;
@@ -71,6 +76,8 @@ public class WxPayServiceImpl implements WxPayService {
private HttpService httpService;
@Autowired
private OrderService orderService;
@Autowired
private StatisticsMapper statisticsMapper;
@Override
public WxPayRespVO createOrder(WXPayOrderReqVO req) {
@@ -164,7 +171,16 @@ public class WxPayServiceImpl implements WxPayService {
OrderStateEnum = OrderStateEnum.PAID;
}
if (Objects.nonNull(OrderStateEnum)) {
orderService.updateOrderState(Long.parseLong(parse.getOutTradeNo()), OrderStateEnum, null);
long orderId = Long.parseLong(parse.getOutTradeNo());
try {
orderService.updateOrderState(orderId, OrderStateEnum, null);
// 添加统计数据
statisticsHandler(orderId);
}catch (Exception e) {
log.error("[微信支付回调]更新订单状态失败", e);
}
}
}).start();
} catch (Exception e) {
@@ -172,6 +188,28 @@ public class WxPayServiceImpl implements WxPayService {
}
}
//
private void statisticsHandler(Long orderId) {
ApiResponse<OrderRespVO> orderDetail = orderService.detail(orderId);
OrderRespVO orderData = orderDetail.getData();
//支付时间
Date payAt = orderData.getPayAt();
//商品创建时间
Date createTime = orderData.getOrderItemList().get(0).getCreateTime();
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(orderData.getMemberId());
//如果订单在商品创建后30分钟内支付,则为现场支付,否则为事后支付
if(DateUtils.addDateMinute(createTime,30).compareTo(payAt)>0){//
statisticsRecordAddReq.setType(StatisticEnum.ON_SITE_PAYMENT.code);
}else {
statisticsRecordAddReq.setType(StatisticEnum.POST_PAYMENT.code);
}
statisticsRecordAddReq.setScenicId(orderData.getScenicId());
statisticsRecordAddReq.setMorphId(orderId);
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
}
@Override
public WxchatCallbackSuccessData queryPay(Long orderId) {
WxchatCallbackSuccessData wxchatCallbackSuccessData = new WxchatCallbackSuccessData();
@@ -253,7 +291,18 @@ public class WxPayServiceImpl implements WxPayService {
String out_trade_no = reqInfo.get(WECHATPAY_OUT_TRADE_NO); // 订单号
if (!StringUtils.isEmpty(refund_status) && WECHATPAY_SUCCESS.equals(refund_status)) {
orderService.updateOrderState(Long.parseLong(out_trade_no), OrderStateEnum.REFUNDED, null);
long orderId = Long.parseLong(out_trade_no);
orderService.updateOrderState(orderId, OrderStateEnum.REFUNDED, null);
ApiResponse<OrderRespVO> detail = orderService.detail(orderId);
OrderRespVO orderData = detail.getData();
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(orderData.getMemberId());
statisticsRecordAddReq.setType(StatisticEnum.REFUND.code);
statisticsRecordAddReq.setScenicId(orderData.getScenicId());
statisticsRecordAddReq.setMorphId(orderId);
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
log.info("[微信退款回调]退款成功");
return true;
} else {