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