This commit is contained in:
2025-01-21 14:48:58 +08:00
parent 812a4b6331
commit 29715bda78
16 changed files with 336 additions and 116 deletions

View File

@ -18,6 +18,7 @@ import com.wechat.pay.java.service.refund.RefundService;
import com.wechat.pay.java.service.refund.model.AmountReq;
import com.wechat.pay.java.service.refund.model.CreateRequest;
import com.wechat.pay.java.service.refund.model.Refund;
import com.ycwl.basic.biz.OrderBiz;
import com.ycwl.basic.config.WechatConfig;
import com.ycwl.basic.constant.HttpConstant;
import com.ycwl.basic.constant.NumberConstant;
@ -32,6 +33,7 @@ import com.ycwl.basic.mapper.SourceMapper;
import com.ycwl.basic.mapper.StatisticsMapper;
import com.ycwl.basic.mapper.VideoMapper;
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
import com.ycwl.basic.model.pc.payment.entity.PaymentEntity;
@ -101,6 +103,8 @@ public class WxPayServiceImpl implements WxPayService {
private VideoMapper videoMapper;
@Autowired
private OrderRepository orderRepository;
@Autowired
private OrderBiz orderBiz;
@Override
public WxPayRespVO createOrder(WXPayOrderReqVO req) {
@ -198,14 +202,19 @@ public class WxPayServiceImpl implements WxPayService {
// 更新订单信息
new Thread(() -> {
Transaction.TradeStateEnum tradeState = parse.getTradeState();
OrderStateEnum OrderStateEnum = null;
if (Transaction.TradeStateEnum.SUCCESS == tradeState) {
OrderStateEnum = OrderStateEnum.PAID;
}
if (Objects.nonNull(OrderStateEnum)) {
long orderId = Long.parseLong(parse.getOutTradeNo());
notifyOrderSuccess(orderId);
long orderId = Long.parseLong(parse.getOutTradeNo());
switch (parse.getTradeState()) {
case SUCCESS:
orderBiz.paidOrder(orderId);
break;
case NOTPAY:
case CLOSED:
case REVOKED:
orderBiz.cancelOrder(orderId);
break;
case REFUND:
orderBiz.refundOrder(orderId);
break;
}
}).start();
} catch (Exception e) {
@ -213,45 +222,6 @@ public class WxPayServiceImpl implements WxPayService {
}
}
@Override
public void notifyOrderSuccess(Long orderId) {
try {
orderService.updateOrderState(orderId, OrderStateEnum.PAID, null);
// 添加统计数据
statisticsHandler(orderId);
}catch (Exception e) {
log.error("[微信支付回调]更新订单状态失败", e);
}
OrderRespVO byId = orderMapper.getById(orderId);
List<OrderItemEntity> orderItemList = orderMapper.listOrderItemByOrderId(orderId);
orderItemList.forEach(orderItemVO -> {
orderRepository.clearUserBuyItemCache(byId.getMemberId(), orderItemVO.getGoodsType(), orderItemVO.getGoodsId());
switch (orderItemVO.getGoodsType()) {
case 0: // 成片
MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
memberVideoEntity.setMemberId(byId.getMemberId());
memberVideoEntity.setVideoId(orderItemVO.getGoodsId());
memberVideoEntity.setIsBuy(1);
memberVideoEntity.setOrderId(orderId);
videoMapper.updateRelation(memberVideoEntity);
break;
case 1: // 源视频
case 2: // 源素材
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setMemberId(byId.getMemberId());
// 源素材的goodsId是人脸ID
memberSourceEntity.setFaceId(orderItemVO.getGoodsId());
memberSourceEntity.setType(orderItemVO.getGoodsType());
memberSourceEntity.setIsBuy(1);
memberSourceEntity.setOrderId(orderId);
sourceMapper.updateRelation(memberSourceEntity);
break;
default:
break;
}
});
}
//
private void statisticsHandler(Long orderId) {
ApiResponse<OrderRespVO> orderDetail = orderService.detail(orderId);
@ -362,14 +332,13 @@ public class WxPayServiceImpl implements WxPayService {
if (!StringUtils.isEmpty(refund_status) && WECHATPAY_SUCCESS.equals(refund_status)) {
long orderId = Long.parseLong(out_trade_no);
orderService.updateOrderState(orderId, OrderStateEnum.REFUNDED, null);
orderBiz.refundOrder(orderId);
ApiResponse<OrderRespVO> detail = orderService.detail(orderId);
OrderRespVO orderData = detail.getData();
OrderEntity order = orderRepository.getOrder(orderId);
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(orderData.getMemberId());
statisticsRecordAddReq.setMemberId(order.getMemberId());
statisticsRecordAddReq.setType(StatisticEnum.REFUND.code);
statisticsRecordAddReq.setScenicId(orderData.getScenicId());
statisticsRecordAddReq.setScenicId(order.getScenicId());
statisticsRecordAddReq.setMorphId(orderId);
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);

View File

@ -189,48 +189,12 @@ public class OrderServiceImpl implements OrderService {
if (state == OrderStateEnum.CANCELED.getState()) {//取消支付
orderUpdateReq.setCancelAt(new Date());
//如果订单未支付就把商品状态更改成未购买
OrderRespVO orderRespVO = orderMapper.getById(orderSn);
Integer goodsType = orderRespVO.getGoodsType();
List<OrderItemVO> orderItemList = orderRespVO.getOrderItemList();
orderItemList.forEach(orderItemVO -> {
Long goodsId = orderItemVO.getGoodsId();
if (Objects.equals(goodsType, GoodsTypeEnum.VIDEO.code)) {
VideoEntity videoEntity = new VideoEntity();
videoEntity.setId(goodsId);
videoEntity.setIsBuy(0);
videoMapper.update(videoEntity);
} else if (Objects.equals(goodsType, GoodsTypeEnum.SOURCE.code)) {
SourceEntity sourceEntity = new SourceEntity();
sourceEntity.setId(goodsId);
sourceEntity.setIsBuy(0);
sourceMapper.update(sourceEntity);
}
});
} else if (state== OrderStateEnum.PAID.getState()) {//支付成功
orderUpdateReq.setPayAt(new Date());
}else if (state == OrderStateEnum.REFUNDED.getState()) {//退款成功
orderUpdateReq.setRefundAt(new Date());
//订单退款成功就把商品状态更改成未购买
OrderRespVO orderRespVO = orderMapper.getById(orderSn);
Integer goodsType = orderRespVO.getGoodsType();
List<OrderItemVO> orderItemList = orderRespVO.getOrderItemList();
orderItemList.forEach(orderItemVO -> {
Long goodsId = orderItemVO.getGoodsId();
if (Objects.equals(goodsType, GoodsTypeEnum.VIDEO.code)) {
VideoEntity videoEntity = new VideoEntity();
videoEntity.setId(goodsId);
videoEntity.setIsBuy(0);
videoMapper.update(videoEntity);
} else if (Objects.equals(goodsType, GoodsTypeEnum.SOURCE.code)) {
SourceEntity sourceEntity = new SourceEntity();
sourceEntity.setId(goodsId);
sourceEntity.setIsBuy(0);
sourceMapper.update(sourceEntity);
}
});
}
}
orderMapper.update(orderUpdateReq);

View File

@ -20,7 +20,6 @@ public interface WxPayService {
*/
void payNotify(HttpServletRequest xml);
void notifyOrderSuccess(Long orderId);
/**
* 微信支付结果查询

View File

@ -263,20 +263,22 @@ public class TaskTaskServiceImpl implements TaskService {
@Override
public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) {
FaceRespVO faceRespVO = faceMapper.getById(faceId);
if (faceRespVO == null) {
FaceEntity face = faceRepository.getFace(faceId);
if (face == null) {
log.info("faceId:{} is not exist", faceId);
return;
}
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(faceRespVO.getScenicId());
List<FaceSampleEntity> faceSampleList = faceRepository.getFaceSampleList(faceId);
if (faceSampleList.isEmpty()) {
return;
log.info("faceId:{} sample list not exist", faceId);
}
List<Long> faceSampleIds = faceSampleList.stream().map(FaceSampleEntity::getId).collect(Collectors.toList());
List<SourceEntity> sourceList = sourceMapper.listBySampleIds(faceSampleIds);
List<SourceEntity> sourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId);
if (sourceList.isEmpty()) {
log.info("faceId:{} source list not exist", faceId);
return;
}
// ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(face.getScenicId());
// if (automatic > 0) {
// TaskReqQuery taskReqQuery = new TaskReqQuery();
// taskReqQuery.setFaceId(faceId);
@ -314,7 +316,7 @@ public class TaskTaskServiceImpl implements TaskService {
task.faceId = faceId;
task.faceSampleIds = faceSampleIds;
task.templateId = templateId;
task.memberId = faceRespVO.getMemberId();
task.memberId = face.getMemberId();
task.callback = () -> {
log.info("task callback");
boolean canGenerate = templateBiz.determineTemplateCanGenerate(templateId, faceId);
@ -322,7 +324,7 @@ public class TaskTaskServiceImpl implements TaskService {
log.info("task callback: 不能生成");
return;
}
List<SourceEntity> videoSourceList = sourceMapper.listVideoByScenicFaceRelation(faceRespVO.getScenicId(), faceId);
List<SourceEntity> videoSourceList = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId);
Map<String, List<SourceEntity>> sourcesMap = videoSourceList.stream()
.peek(item -> item.setUrl(item.getVideoUrl()))
.collect(Collectors.groupingBy(item -> item.getDeviceId().toString()));
@ -337,8 +339,8 @@ public class TaskTaskServiceImpl implements TaskService {
List<TaskRespVO> list = taskMapper.list(taskReqQuery);
MemberVideoEntity memberVideoEntity = new MemberVideoEntity();
memberVideoEntity.setMemberId(faceRespVO.getMemberId());
memberVideoEntity.setScenicId(faceRespVO.getScenicId());
memberVideoEntity.setMemberId(face.getMemberId());
memberVideoEntity.setScenicId(face.getScenicId());
memberVideoEntity.setFaceId(faceId);
memberVideoEntity.setTemplateId(templateId);
memberVideoEntity.setIsBuy(0);
@ -346,7 +348,7 @@ public class TaskTaskServiceImpl implements TaskService {
log.info("创建任务! faceId:{},templateId:{},taskParams:{}", faceId, templateId, sourcesMap);
TaskEntity taskEntity = new TaskEntity();
taskEntity.setId(SnowFlakeUtil.getLongId());
taskEntity.setScenicId(faceRespVO.getScenicId());
taskEntity.setScenicId(face.getScenicId());
taskEntity.setFaceId(faceId);
taskEntity.setTemplateId(templateId);
taskEntity.setStatus(0);
@ -366,13 +368,21 @@ public class TaskTaskServiceImpl implements TaskService {
memberVideoEntity.setVideoId(video.getId());
// 已经生成了
new Thread(() -> {
sendVideoGeneratedServiceNotification(list.get(0).getId(), faceRespVO.getMemberId());
sendVideoGeneratedServiceNotification(list.get(0).getId(), face.getMemberId());
}).start();
}
}
videoMapper.addRelation(memberVideoEntity);
};
VideoPieceGetter.addTask(task);
if (faceSampleIds.isEmpty()) {
// 没有人脸样本
if (!sourceList.isEmpty()) {
// 但是有原片
task.callback.onInvoke();
}
} else {
VideoPieceGetter.addTask(task);
}
}
@Override