parent
b124eb007e
commit
e06b245562
@ -1 +1 @@ |
|||||||
package com.web.controller;
import com.hai.common.utils.*;
import com.hai.entity.HighOrder;
import com.hai.model.ResponseData;
import com.hai.order.model.CreateOrderModel;
import com.hai.order.service.OrderService;
import com.hai.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* @Auther: 胡锐
* @Description:
* @Date: 2021/3/26 23:08
*/
@Controller
@RequestMapping(value = "/test")
@Api(value = "订单接口")
public class TestController {
private static Logger log = LoggerFactory.getLogger(TestController.class);
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Resource
private OrderService orderService;
@Resource
private RedisUtil redisUtil;
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping(value = "/rocketMq", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "")
public ResponseData rocketMq(@RequestParam(name = "topicGroup", required = true) String topicGroup,
@RequestParam(name = "body", required = true) String body) {
try {
long startTime = System.currentTimeMillis();
// org.springframework.messaging.Message message = MessageBuilder.withPayload(order).build();
CreateOrderModel createOrder = new CreateOrderModel();
//发送对象消息
HighOrder order = rocketMQTemplate.sendAndReceive("order-topic:create", createOrder, HighOrder.class);
System.out.println("订单号:" + order.getOrderNo());
// SendResult sendResult = rocketMQTemplate.syncSend("order-topic:create", message, 3000);
/*List<HighOrder> list = new LinkedList<>();
for (int i = 0; i <= 100;i++) {
list.add(orderService.getDetailByOrderNo("HF2022080918014365701"));
*//* list.add(orderService.getDetailByOrderNo("HF2022080918014365701"));*//*
*//* updateUserWithRedisLock("coupon_" + couponKey, i+"");
new Thread(() -> {*//*
*//* redisTemplate.opsForValue().setIfAbsent("coupon_" + couponKey, i);
System.out.println("加入数据" + i);*//*
// redisTemplate.delete("coupon" + couponKey);
// System.out.println("释放数据" + index);
*//*
});*//*
}*/
System.out.println(System.currentTimeMillis() - startTime);
return ResponseMsgUtil.success(null);
} catch (Exception e) {
log.error("HighUserCardController --> rocketMq() error!", e);
return ResponseMsgUtil.exception(e);
}
}
public void updateUserWithRedisLock(String couponKey, String value) throws InterruptedException {
// 占分布式锁,去redis占坑
// 1. 分布式锁占坑
Boolean lock = redisTemplate.opsForValue().setIfAbsent("coupon" + couponKey, value);
if(lock) {
//加锁成功...
// todo business
System.out.println("加锁成功: " + value);
redisTemplate.delete("coupon" + couponKey); //删除key,释放锁
} else {
System.out.println("加锁失败");
/* Thread.sleep(100); // 加锁失败,重试
updateUserWithRedisLock("sysUser");*/
}
}
}
|
package com.web.controller;
import com.hai.common.utils.*;
import com.hai.config.HuiLianTongUnionCardConfig;
import com.hai.entity.HighOrder;
import com.hai.model.ResponseData;
import com.hai.order.model.CreateOrderModel;
import com.hai.order.service.OrderService;
import com.hai.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* @Auther: 胡锐
* @Description:
* @Date: 2021/3/26 23:08
*/
@Controller
@RequestMapping(value = "/test")
@Api(value = "订单接口")
public class TestController {
private static Logger log = LoggerFactory.getLogger(TestController.class);
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Resource
private OrderService orderService;
@Resource
private RedisUtil redisUtil;
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping(value = "/q", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "")
public ResponseData q(@RequestParam(name = "topicGroup", required = true) String topicGroup,
@RequestParam(name = "body", required = true) String body) {
try {
return ResponseMsgUtil.success(HuiLianTongUnionCardConfig.queryBalance("8800030132003656618"));
} catch (Exception e) {
log.error("HighUserCardController --> rocketMq() error!", e);
return ResponseMsgUtil.exception(e);
}
}
@RequestMapping(value = "/rocketMq", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "")
public ResponseData rocketMq(@RequestParam(name = "topicGroup", required = true) String topicGroup,
@RequestParam(name = "body", required = true) String body) {
try {
long startTime = System.currentTimeMillis();
// org.springframework.messaging.Message message = MessageBuilder.withPayload(order).build();
CreateOrderModel createOrder = new CreateOrderModel();
//发送对象消息
HighOrder order = rocketMQTemplate.sendAndReceive("order-topic:create", createOrder, HighOrder.class);
System.out.println("订单号:" + order.getOrderNo());
// SendResult sendResult = rocketMQTemplate.syncSend("order-topic:create", message, 3000);
/*List<HighOrder> list = new LinkedList<>();
for (int i = 0; i <= 100;i++) {
list.add(orderService.getDetailByOrderNo("HF2022080918014365701"));
*//* list.add(orderService.getDetailByOrderNo("HF2022080918014365701"));*//*
*//* updateUserWithRedisLock("coupon_" + couponKey, i+"");
new Thread(() -> {*//*
*//* redisTemplate.opsForValue().setIfAbsent("coupon_" + couponKey, i);
System.out.println("加入数据" + i);*//*
// redisTemplate.delete("coupon" + couponKey);
// System.out.println("释放数据" + index);
*//*
});*//*
}*/
System.out.println(System.currentTimeMillis() - startTime);
return ResponseMsgUtil.success(null);
} catch (Exception e) {
log.error("HighUserCardController --> rocketMq() error!", e);
return ResponseMsgUtil.exception(e);
}
}
public void updateUserWithRedisLock(String couponKey, String value) throws InterruptedException {
// 占分布式锁,去redis占坑
// 1. 分布式锁占坑
Boolean lock = redisTemplate.opsForValue().setIfAbsent("coupon" + couponKey, value);
if(lock) {
//加锁成功...
// todo business
System.out.println("加锁成功: " + value);
redisTemplate.delete("coupon" + couponKey); //删除key,释放锁
} else {
System.out.println("加锁失败");
/* Thread.sleep(100); // 加锁失败,重试
updateUserWithRedisLock("sysUser");*/
}
}
}
|
@ -0,0 +1,30 @@ |
|||||||
|
package com.hai.order.service.impl; |
||||||
|
|
||||||
|
import com.hai.entity.HighOrder; |
||||||
|
import com.hai.entity.HighUserCard; |
||||||
|
|
||||||
|
/** |
||||||
|
* 订单支付 |
||||||
|
* @className: OrderPayService |
||||||
|
* @author: HuRui |
||||||
|
* @date: 2022/9/5 |
||||||
|
**/ |
||||||
|
public interface OrderPayService { |
||||||
|
|
||||||
|
/** |
||||||
|
* 汇联通工会卡支付 |
||||||
|
* @param order 订单数据 |
||||||
|
* @param userCard 用户卡号 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
HighOrder hltCardPay(HighOrder order, HighUserCard userCard) throws Exception; |
||||||
|
|
||||||
|
/** |
||||||
|
* 嗨森逛油卡支付 |
||||||
|
* @param order 订单数据 |
||||||
|
* @param userCard 用户卡号 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
HighOrder oilCardPay(HighOrder order, HighUserCard userCard); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,132 @@ |
|||||||
|
package com.hai.order.service.impl; |
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
import com.alibaba.fastjson.JSONArray; |
||||||
|
import com.alibaba.fastjson.JSONObject; |
||||||
|
import com.hai.common.exception.ErrorCode; |
||||||
|
import com.hai.common.exception.ErrorHelp; |
||||||
|
import com.hai.common.exception.SysCode; |
||||||
|
import com.hai.config.HuiLianTongUnionCardConfig; |
||||||
|
import com.hai.config.TuanYouConfig; |
||||||
|
import com.hai.entity.*; |
||||||
|
import com.hai.enum_type.OilCardRecordSourceTypeEnum; |
||||||
|
import com.hai.enum_type.OrderPayTypeEnum; |
||||||
|
import com.hai.enum_type.OrderPushType; |
||||||
|
import com.hai.order.service.OrderPaySuccessService; |
||||||
|
import com.hai.order.service.OrderService; |
||||||
|
import com.hai.order.type.OrderChildStatus; |
||||||
|
import com.hai.order.type.OrderPayType; |
||||||
|
import com.hai.order.type.OrderProductType; |
||||||
|
import com.hai.order.type.OrderStatus; |
||||||
|
import com.hai.service.HighOilCardService; |
||||||
|
import com.hai.service.HighUserCardService; |
||||||
|
|
||||||
|
import javax.annotation.Resource; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @className: OrderPayServiceImpl |
||||||
|
* @author: HuRui |
||||||
|
* @date: 2022/9/5 |
||||||
|
**/ |
||||||
|
public class OrderPayServiceImpl implements OrderPayService { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private OrderPaySuccessService orderPaySuccessService; |
||||||
|
|
||||||
|
@Resource |
||||||
|
private HighUserCardService userCardService; |
||||||
|
|
||||||
|
@Resource |
||||||
|
private HighOilCardService oilCardService; |
||||||
|
|
||||||
|
@Resource |
||||||
|
private OrderService orderService; |
||||||
|
|
||||||
|
@Override |
||||||
|
public HighOrder hltCardPay(HighOrder order, HighUserCard userCard) throws Exception { |
||||||
|
String goodsDesc = ""; |
||||||
|
String tranDesc = ""; |
||||||
|
String instCode = "11101527"; |
||||||
|
String businessType = "hisen_consume"; |
||||||
|
|
||||||
|
if (order.getProductType().equals(OrderProductType.PRODUCT_TYPE5.getNumber())) { |
||||||
|
instCode = "11101526"; |
||||||
|
businessType = "sinopec_oil_code"; |
||||||
|
goodsDesc = "购买加油券"; |
||||||
|
tranDesc = order.getHighChildOrderList().get(0).getGoodsName(); |
||||||
|
|
||||||
|
} else if (order.getProductType().equals(OrderProductType.PRODUCT_TYPE4.getNumber())) { |
||||||
|
goodsDesc = "积分充值" + order.getPayPrice() + "元"; |
||||||
|
tranDesc = "嗨森逛积分充值" + order.getPayPrice() + "元"; |
||||||
|
|
||||||
|
} else if (order.getProductType().equals(OrderProductType.PRODUCT_TYPE6.getNumber())) { |
||||||
|
goodsDesc = "加油站加" + order.getPayPrice() + "元油"; |
||||||
|
tranDesc = "【" + order.getHighChildOrderList().get(0).getGoodsName() + "】加油" + order.getPayPrice() + "元"; |
||||||
|
|
||||||
|
} else if (order.getProductType().equals(OrderProductType.PRODUCT_TYPE7.getNumber())) { |
||||||
|
goodsDesc = "购买优惠券包"; |
||||||
|
tranDesc = "购买" + order.getHighChildOrderList().get(0).getGoodsName() + "优惠券包"; |
||||||
|
|
||||||
|
} else { |
||||||
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "暂时无法支付,请使用其他支付方式"); |
||||||
|
} |
||||||
|
|
||||||
|
// 工会卡支付
|
||||||
|
JSONObject consumption = HuiLianTongUnionCardConfig.consumption(order.getOrderNo(), userCard.getCardNo(), order.getPayPrice(), businessType, instCode, goodsDesc, tranDesc); |
||||||
|
if (!consumption.getString("respCode").equals("0000")) { |
||||||
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, consumption.getString("respMessage")); |
||||||
|
} |
||||||
|
// 响应参数
|
||||||
|
JSONObject consumptionResult = HuiLianTongUnionCardConfig.resolveResponse(consumption.getString("data")); |
||||||
|
if (consumptionResult.getBoolean("success") != true) { |
||||||
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, consumptionResult.getString("message")); |
||||||
|
} |
||||||
|
order.setMemCardId(userCard.getId()); |
||||||
|
order.setMemCardNo(userCard.getCardNo()); |
||||||
|
order.setMemCardType(userCard.getType()); |
||||||
|
order.setPaySerialNo(consumptionResult.getString("orderId")); // 支付流水号
|
||||||
|
order.setPayTime(new Date()); |
||||||
|
order.setPayType(OrderPayType.PAY_TYPE4.getNumber()); |
||||||
|
order.setPayRealPrice(order.getPayPrice()); |
||||||
|
order.setOrderStatus(OrderStatus.STATUS2.getNumber()); |
||||||
|
|
||||||
|
for (HighChildOrder childOrder : order.getHighChildOrderList()) { |
||||||
|
childOrder.setChildOrderStatus(OrderChildStatus.STATUS2.getNumber()); |
||||||
|
childOrder.setPayTime(new Date()); |
||||||
|
} |
||||||
|
HighOrder updateOrderData = orderService.updateOrderData(order); |
||||||
|
|
||||||
|
// 异步处理订单业务
|
||||||
|
orderPaySuccessService.asyncOrderPaySuccess(order); |
||||||
|
|
||||||
|
return updateOrderData; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public HighOrder oilCardPay(HighOrder order, HighUserCard userCard) { |
||||||
|
// 油卡扣款
|
||||||
|
Map<String, Object> consumeMap = new HashMap<>(); |
||||||
|
consumeMap.put("sourceType", OilCardRecordSourceTypeEnum.type2.getType()); |
||||||
|
consumeMap.put("sourceId", order.getId()); |
||||||
|
consumeMap.put("sourceOrderNo", order.getOrderNo()); |
||||||
|
consumeMap.put("sourceContent", "订单号:" + order.getOrderNo() + ",消费:¥" + order.getPayPrice()); |
||||||
|
oilCardService.consume(userCard.getCardNo(), order.getPayPrice(), consumeMap); |
||||||
|
|
||||||
|
order.setMemCardType(userCard.getType()); |
||||||
|
order.setMemCardId(userCard.getId()); |
||||||
|
order.setMemCardNo(userCard.getCardNo()); |
||||||
|
order.setPayTime(new Date()); |
||||||
|
order.setPayType(OrderPayTypeEnum.type7.getType()); |
||||||
|
order.setPayRealPrice(order.getPayPrice()); |
||||||
|
order.setOrderStatus(OrderStatus.STATUS2.getNumber()); |
||||||
|
HighOrder updateOrderData = orderService.updateOrderData(order); |
||||||
|
|
||||||
|
// 异步处理业务
|
||||||
|
orderPaySuccessService.asyncOrderPaySuccess(order); |
||||||
|
return updateOrderData; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue