Commit 75837549 authored by gaoyingwei's avatar gaoyingwei

修改 订单添加金币相关代码

parent b8b90cfe
...@@ -87,4 +87,15 @@ public class AppOrderController extends CyPaginationController<CmsOrder> { ...@@ -87,4 +87,15 @@ public class AppOrderController extends CyPaginationController<CmsOrder> {
} }
@PreAuthorize("@cyPerm.hasPerm('app:order:add')")
@CyOpeLogAnno(title = "system-订单信息表管理-充值金币", businessType = CyLogTypeEnum.INSERT)
@Operation(summary="充值金币", description="充值金币")
@PostMapping(value = "/order/addGold")
public CyResult addGold(@Valid @RequestBody CmsOrder cmsOrder, BindingResult bindingResult) {
CyPersistModel data = cmsOrderServiceImpl.addGold(cmsOrder);
return CyResultGenUtil.builder(data,
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
cmsOrder);
}
} }
...@@ -42,7 +42,7 @@ public class WxPayController { ...@@ -42,7 +42,7 @@ public class WxPayController {
*/ */
@PostMapping("/pay") @PostMapping("/pay")
public Map<String, Object> pay(HttpServletRequest request,@RequestBody OrderActivityDto orderActivityDto) throws IOException, JDOMException { public Map<String, Object> pay(HttpServletRequest request,@RequestBody OrderActivityDto orderActivityDto) throws IOException, JDOMException {
return wxPayService.wxPay(orderActivityDto.getOrderId(), orderActivityDto.getActivityId(), request); return wxPayService.wxPay(orderActivityDto.getOrderId(), orderActivityDto.getActivityId(), orderActivityDto.getType(), request);
} }
/** /**
...@@ -52,7 +52,7 @@ public class WxPayController { ...@@ -52,7 +52,7 @@ public class WxPayController {
*/ */
@PostMapping("/updateOrderStatus") @PostMapping("/updateOrderStatus")
public CyResult updateOrderStatus(@RequestBody OrderActivityDto orderActivityDto) { public CyResult updateOrderStatus(@RequestBody OrderActivityDto orderActivityDto) {
CyPersistModel data = wxPayService.updateOrderStatus(orderActivityDto.getOrderId(), orderActivityDto.getActivityId()); CyPersistModel data = wxPayService.updateOrderStatus(orderActivityDto.getOrderId(), orderActivityDto.getActivityId(), orderActivityDto.getType());
return CyResultGenUtil.builder(data, return CyResultGenUtil.builder(data,
CyMessCons.MESSAGE_ALERT_SUCCESS, CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR, CyMessCons.MESSAGE_ALERT_ERROR,
......
...@@ -19,7 +19,7 @@ import java.io.IOException; ...@@ -19,7 +19,7 @@ import java.io.IOException;
public interface WxPayService { public interface WxPayService {
JSONObject wxPay(Long orderId, Long activityId, HttpServletRequest request) throws IOException, JDOMException; JSONObject wxPay(Long orderId, Long activityId, Integer type, HttpServletRequest request) throws IOException, JDOMException;
void wxNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException; void wxNotify(HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException;
...@@ -27,12 +27,13 @@ public interface WxPayService { ...@@ -27,12 +27,13 @@ public interface WxPayService {
/** /**
* 小程序调用wx.requestPayment(OBJECT)发起微信支付成功后更新订单状态 * 小程序调用wx.requestPayment(OBJECT)发起微信支付成功后更新订单状态
* @param request
* @param orderId * @param orderId
* @param activityId * @param activityId
* @param request * @param type
* @return * @return
*/ */
CyPersistModel updateOrderStatus(Long orderId, Long activityId); CyPersistModel updateOrderStatus(Long orderId, Long activityId, Integer type);
//主动查询微信订单状态 //主动查询微信订单状态
String selectWxOrderStatus(String orderNo) throws IOException, JDOMException; String selectWxOrderStatus(String orderNo) throws IOException, JDOMException;
......
...@@ -95,7 +95,7 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -95,7 +95,7 @@ public class WxPayServiceImpl implements WxPayService {
private static final String UTF8 = "utf-8"; private static final String UTF8 = "utf-8";
@Override @Override
public JSONObject wxPay(Long orderId, Long activityId, HttpServletRequest request) throws IOException, JDOMException { public JSONObject wxPay(Long orderId, Long activityId, Integer type, HttpServletRequest request) throws IOException, JDOMException {
//添加实名判断 //添加实名判断
String userId = CyUserUtil.getAuthenBusinessId(); String userId = CyUserUtil.getAuthenBusinessId();
MemInfo memInfo = memInfoRepository.getInfoByUserId(userId); MemInfo memInfo = memInfoRepository.getInfoByUserId(userId);
...@@ -104,13 +104,14 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -104,13 +104,14 @@ public class WxPayServiceImpl implements WxPayService {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
// try{ // try{
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;status -> 待支付 ,可以进行支付 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;status -> 待支付 ,可以进行支付
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY +":"+ activityId +":"+ orderId); if (Objects.equals(type, 0)) {
if (detail!=null) { Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + activityId + ":" + orderId);
if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(0)){ if (orderDetail.getStatus().equals(0)) {
//校验【活动已结束】不允许支付 //校验【活动已结束】不允许支付
Object activity = cyRedisServiceImpl.get(RedisCons.ACTIVITY_DETAIL +":"+ activityId); Object activity = cyRedisServiceImpl.get(RedisCons.ACTIVITY_DETAIL + ":" + activityId);
if (activity!=null) { if (activity != null) {
CmsActivity info = JSON.parseObject(JSON.toJSONString(activity), CmsActivity.class); CmsActivity info = JSON.parseObject(JSON.toJSONString(activity), CmsActivity.class);
if (info.getEndTime().before(new Date())) if (info.getEndTime().before(new Date()))
throw new CyServiceException("活动已结束,不允许支付"); throw new CyServiceException("活动已结束,不允许支付");
...@@ -122,6 +123,18 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -122,6 +123,18 @@ public class WxPayServiceImpl implements WxPayService {
} else { } else {
throw new CyServiceException("订单支付失败,请稍后重试"); throw new CyServiceException("订单支付失败,请稍后重试");
} }
} else if (Objects.equals(type, 1)) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_GOLD + ":" + activityId + ":" + orderId);
if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(0)) {
createWxOrder(request, json, orderDetail);
} else
throw new CyServiceException("该订单不是待支付订单,不能支付");
} else {
throw new CyServiceException("订单支付失败,请稍后重试");
}
}
// }catch(Exception e){ // }catch(Exception e){
// log.error("失败",e); // log.error("失败",e);
// json.put("errMsg", "Failed"); // json.put("errMsg", "Failed");
...@@ -218,7 +231,10 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -218,7 +231,10 @@ public class WxPayServiceImpl implements WxPayService {
orderDetail.setState(0); orderDetail.setState(0);
orderDetail.setStatus(8); orderDetail.setStatus(8);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); if (orderDetail.getType().equals(0))
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
else if (orderDetail.getType().equals(1))
cyRedisServiceImpl.set(RedisCons.ORDER_GOLD +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -244,11 +260,12 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -244,11 +260,12 @@ public class WxPayServiceImpl implements WxPayService {
* 小程序调用wx.requestPayment(OBJECT) 更新订单状态为待支付 * 小程序调用wx.requestPayment(OBJECT) 更新订单状态为待支付
* @param orderId * @param orderId
* @param activityId * @param activityId
* @param type
* @return * @return
*/ */
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT) @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
@Override @Override
public CyPersistModel updateOrderStatus(Long orderId, Long activityId) { public CyPersistModel updateOrderStatus(Long orderId, Long activityId, Integer type) {
//加订单redis锁 //加订单redis锁
boolean isGetLock = false; boolean isGetLock = false;
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderId); RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderId);
...@@ -256,14 +273,19 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -256,14 +273,19 @@ public class WxPayServiceImpl implements WxPayService {
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY +":"+ activityId +":"+ orderId); String redisKey = RedisCons.ORDER_ACTIVITY;
if (Objects.equals(type, 0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (Objects.equals(type, 1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey +":"+ activityId +":"+ orderId);
if (detail!=null) { if (detail!=null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付
orderDetail.setState(0); orderDetail.setState(0);
orderDetail.setStatus(0); orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); cyRedisServiceImpl.set(redisKey +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} else } else
...@@ -370,7 +392,12 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -370,7 +392,12 @@ public class WxPayServiceImpl implements WxPayService {
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + activityId + ":" + orderId); String redisKey = RedisCons.ORDER_ACTIVITY; //活动
Object detail = cyRedisServiceImpl.get(redisKey + ":" + activityId + ":" + orderId);
if (detail == null) {
redisKey = RedisCons.ORDER_GOLD; //金币
detail = cyRedisServiceImpl.get(redisKey + ":" + activityId + ":" + orderId);
}
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderDetail.setTransactionId(transactionId); orderDetail.setTransactionId(transactionId);
...@@ -404,7 +431,7 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -404,7 +431,7 @@ public class WxPayServiceImpl implements WxPayService {
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
} }
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付中 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付中
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -527,7 +554,12 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -527,7 +554,12 @@ public class WxPayServiceImpl implements WxPayService {
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
CmsOrder order = orderInfoRepository.selectById(Long.valueOf(orderId)); CmsOrder order = orderInfoRepository.selectById(Long.valueOf(orderId));
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + order.getGoodsId() + ":" + orderId); String redisKey = RedisCons.ORDER_ACTIVITY;
if (order.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (order.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + order.getGoodsId() + ":" + orderId);
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (!orderDetail.getStatus().equals(2) && !orderDetail.getStatus().equals(3) if (!orderDetail.getStatus().equals(2) && !orderDetail.getStatus().equals(3)
...@@ -550,7 +582,7 @@ public class WxPayServiceImpl implements WxPayService { ...@@ -550,7 +582,7 @@ public class WxPayServiceImpl implements WxPayService {
orderDetail.setApplicationStatus("3"); orderDetail.setApplicationStatus("3");
orderDetail.setState(0); orderDetail.setState(0);
// //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付中 // //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付中
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
// //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 // //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
......
...@@ -12,4 +12,7 @@ public class OrderActivityDto { ...@@ -12,4 +12,7 @@ public class OrderActivityDto {
/** 活动id */ /** 活动id */
private Long activityId; private Long activityId;
/** 订单类型 0活动 1金币 */
private Integer type;
} }
...@@ -209,5 +209,9 @@ public class CmsOrder extends CyIdSnowflakeEntity<CmsOrder> { ...@@ -209,5 +209,9 @@ public class CmsOrder extends CyIdSnowflakeEntity<CmsOrder> {
@Transient @Transient
@TableField(exist = false) @TableField(exist = false)
private String applicationStatus; private String applicationStatus;
//现在的余额
@TableField(exist = false)
private Integer balance;
} }
...@@ -128,4 +128,11 @@ public interface CmsOrderService { ...@@ -128,4 +128,11 @@ public interface CmsOrderService {
* @return * @return
*/ */
int manualCompensateOrder(CmsOrder dto); int manualCompensateOrder(CmsOrder dto);
/**
* 充值金币
* @param cmsOrder
* @return
*/
CyPersistModel addGold(CmsOrder cmsOrder);
} }
...@@ -13,6 +13,8 @@ import org.rcisoft.business.cmsActivity.service.impl.StockService; ...@@ -13,6 +13,8 @@ import org.rcisoft.business.cmsActivity.service.impl.StockService;
import org.rcisoft.business.cmsApplication.dao.CmsApplicationRepository; import org.rcisoft.business.cmsApplication.dao.CmsApplicationRepository;
import org.rcisoft.business.cmsApplication.entity.CmsApplication; import org.rcisoft.business.cmsApplication.entity.CmsApplication;
import org.rcisoft.business.cmsOrder.dto.OrderActivityDto; import org.rcisoft.business.cmsOrder.dto.OrderActivityDto;
import org.rcisoft.business.memGoldCoinFlow.dao.MemGoldCoinFlowRepository;
import org.rcisoft.business.memGoldCoinFlow.entity.MemGoldCoinFlow;
import org.rcisoft.business.memInfo.dao.MemInfoRepository; import org.rcisoft.business.memInfo.dao.MemInfoRepository;
import org.rcisoft.business.memInfo.entity.MemInfo; import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.core.async.AsyncFactory; import org.rcisoft.core.async.AsyncFactory;
...@@ -40,6 +42,7 @@ import org.rcisoft.core.model.CyPageInfo; ...@@ -40,6 +42,7 @@ import org.rcisoft.core.model.CyPageInfo;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
...@@ -94,6 +97,9 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -94,6 +97,9 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
@Autowired @Autowired
private MemInfoRepository memInfoRepository; private MemInfoRepository memInfoRepository;
@Autowired
private MemGoldCoinFlowRepository memGoldCoinFlowRepository;
/** /**
* 保存 订单信息表 * 保存 订单信息表
* @param cmsOrder * @param cmsOrder
...@@ -181,7 +187,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -181,7 +187,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderInfo.setStatus(9); orderInfo.setStatus(9);
orderInfo.setApplicationStatus("1"); orderInfo.setApplicationStatus("1");
} }
orderInfo.setType(1); orderInfo.setType(0);
orderInfo.setOrderTime(new Date()); orderInfo.setOrderTime(new Date());
orderInfo.setDelFlag("0"); orderInfo.setDelFlag("0");
orderInfo.setCreateDate(new Date()); orderInfo.setCreateDate(new Date());
...@@ -443,7 +449,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -443,7 +449,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
{ {
List<CmsOrder> orderRedis = new ArrayList<>(); List<CmsOrder> orderRedis = new ArrayList<>();
//查询edis + DB ,redis 优先 //查询edis + DB ,redis 优先
Set<String> map = redisTemplate.keys(RedisCons.ORDER_ACTIVITY+"*"); Set<String> map = redisTemplate.keys("order:*");
if (CollectionUtils.isNotEmpty(map)) { if (CollectionUtils.isNotEmpty(map)) {
for (String key : map) { for (String key : map) {
Object detail = cyRedisServiceImpl.get(key); Object detail = cyRedisServiceImpl.get(key);
...@@ -500,7 +506,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -500,7 +506,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
// 查询订单的其他信息 // 查询订单的其他信息
List<CmsOrder> infos = baseMapper.queryOrderInfoByIds(list); List<CmsOrder> infos = baseMapper.queryOrderInfoByIds(list);
for (CmsOrder info : list) { for (CmsOrder info : list) {
CmsOrder o = infos.stream().filter(l -> l.getBusinessId().equals(info.getBusinessId())).toList().get(0); CmsOrder o = infos.stream().filter(l -> l.getBusinessId().equals(info.getBusinessId())).findFirst().orElse(new CmsOrder());
info.setImgUrl(o.getImgUrl()); info.setImgUrl(o.getImgUrl());
info.setActivityBeginDate(o.getActivityBeginDate()); info.setActivityBeginDate(o.getActivityBeginDate());
} }
...@@ -541,7 +547,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -541,7 +547,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(2) || orderDetail.getStatus().equals(4)) { if (orderDetail.getStatus().equals(2) || orderDetail.getStatus().equals(4)) {
...@@ -552,7 +563,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -552,7 +563,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(7); orderDetail.setStatus(7);
orderDetail.setApplicationStatus("3"); orderDetail.setApplicationStatus("3");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款完成 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款完成
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -609,7 +620,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -609,7 +620,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) { if (orderDetail.getStatus().equals(8)) {
...@@ -617,7 +633,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -617,7 +633,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(9); orderDetail.setStatus(9);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -644,7 +660,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -644,7 +660,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) { if (orderDetail.getStatus().equals(8)) {
...@@ -652,7 +673,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -652,7 +673,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(0); orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -687,14 +708,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -687,14 +708,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY +":"+ orderInfo.getGoodsId() +":"+ orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey +":"+ orderInfo.getGoodsId() +":"+ orderInfo.getBusinessId());
if (detail!=null) { if (detail!=null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付
orderDetail.setState(0); orderDetail.setState(0);
orderDetail.setStatus(0); orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); cyRedisServiceImpl.set(redisKey +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} else } else
...@@ -721,7 +747,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -721,7 +747,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) { if (orderDetail.getStatus().equals(8)) {
...@@ -729,7 +760,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -729,7 +760,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(0); orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -843,7 +874,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -843,7 +874,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY +":"+ orderDb.getGoodsId() +":"+ orderDb.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderDb.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderDb.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey +":"+ orderDb.getGoodsId() +":"+ orderDb.getBusinessId());
if (detail!=null) { if (detail!=null) {
CmsOrder orderRedis = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderRedis = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderRedis.setState(0); orderRedis.setState(0);
...@@ -856,7 +892,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -856,7 +892,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
} }
orderRedis.setApplicationStatus("1"); orderRedis.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款中 (2 3) //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款中 (2 3)
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderRedis.getGoodsId() + ":" + orderRedis.getBusinessId(), orderRedis); cyRedisServiceImpl.set(redisKey + ":" + orderRedis.getGoodsId() + ":" + orderRedis.getBusinessId(), orderRedis);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderRedis, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderRedis, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -1069,7 +1105,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1069,7 +1105,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
@Transactional @Transactional
public void executeInsertOrder() throws NoSuchAlgorithmException { public void executeInsertOrder() throws NoSuchAlgorithmException {
// 查询 【order:activity:${所有}:${所有}】 // 查询 【order:activity:${所有}:${所有}】
Set<String> map = redisTemplate.keys(RedisCons.ORDER_ACTIVITY+"*"); Set<String> map = redisTemplate.keys("order:*");
if (CollectionUtils.isNotEmpty(map)) { if (CollectionUtils.isNotEmpty(map)) {
List<String>list = new ArrayList<>(map); List<String>list = new ArrayList<>(map);
if (list.size()>50){ if (list.size()>50){
...@@ -1106,34 +1142,33 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1106,34 +1142,33 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
//未落库->落库;redis key: 【order:activity:${aid}:${oid}】【未同步】 => 落库 //未落库->落库;redis key: 【order:activity:${aid}:${oid}】【未同步】 => 落库
if (info == null) { if (info == null) {
baseMapper.insert(orderDetail); baseMapper.insert(orderDetail);
//添加报名信息 if (orderDetail.getType().equals(0)) { //活动
CmsApplication application = new CmsApplication(); //添加报名信息
application.setUserId(orderDetail.getUserId()); CmsApplication application = new CmsApplication();
application.setActivityId(orderDetail.getGoodsId()); application.setUserId(orderDetail.getUserId());
application.setName(orderDetail.getAccount()); application.setActivityId(orderDetail.getGoodsId());
// application.setPhone(orderDetail.get); application.setName(orderDetail.getAccount());
//0 待支付 1已取消 2退款中 3退款中 4后台退款中 5后台退款中 6退款完成 7后台退款完成 8支付中 9 支付完成 10订单关闭 application.setStatus(orderDetail.getApplicationStatus());
// if (orderDetail.getStatus().equals(0)||orderDetail.getStatus().equals(2)||orderDetail.getStatus().equals(3)||orderDetail.getStatus().equals(4)|| application.setApplicationFee(orderDetail.getPayPrice());
// orderDetail.getStatus().equals(5)||orderDetail.getStatus().equals(8)||orderDetail.getStatus().equals(9)) application.setOrderId(orderDetail.getBusinessId());
// application.setStatus("1"); applicationRepository.insert(application);
// else if (orderDetail.getStatus().equals(1)||orderDetail.getStatus().equals(10)) } else if (orderDetail.getType().equals(1)) { //金币
// application.setStatus("2"); if (orderDetail.getStatus().equals(9)) {
// else if (orderDetail.getStatus().equals(6)||orderDetail.getStatus().equals(7)) MemInfo memInfo = memInfoRepository.getInfoByUserId(String.valueOf(orderDetail.getUserId()));
// application.setStatus("3"); //增加到金币流水表
application.setStatus(orderDetail.getApplicationStatus()); MemGoldCoinFlow memGoldCoinFlow = new MemGoldCoinFlow();
application.setApplicationFee(orderDetail.getPayPrice()); memGoldCoinFlow.setType("1");
application.setOrderId(orderDetail.getBusinessId()); memGoldCoinFlow.setActionType("10");
applicationRepository.insert(application); memGoldCoinFlow.setCount(orderDetail.getNum());
// //如果有优惠券,进行核销 memGoldCoinFlow.setEndCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
// if (orderDetail.getCouponId() != null) { memGoldCoinFlow.setOrderId(BigInteger.valueOf(orderDetail.getBusinessId()));
// UserCouponRelative userCouponRelative = new UserCouponRelative(); memGoldCoinFlow.setTargetId(BigInteger.valueOf(orderDetail.getUserId()));
// userCouponRelative.setBusinessId(orderDetail.getCouponId()); memGoldCoinFlowRepository.insert(memGoldCoinFlow);
// userCouponRelative.setCancelId(orderDetail.getStoreId()); //修改会员表的金币余额
// userCouponRelative.setOrderId(orderDetail.getBusinessId()); memInfo.setGoldCoinsCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
// userCouponRelative.setStatus(1); memInfoRepository.updateById(memInfo);
// userCouponRelative.setCancelTime(new Date()); }
// couponInfoRepository.useCouponById(userCouponRelative); }
// }
//加订单redis锁 //加订单redis锁
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId()); RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId());
try { try {
...@@ -1142,7 +1177,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1142,7 +1177,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) { if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
orderDetail.setState(1); orderDetail.setState(1);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); cyRedisServiceImpl.set(key,orderDetail);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
...@@ -1198,33 +1233,26 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1198,33 +1233,26 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
boolean isGetLock = false; boolean isGetLock = false;
orderDetail.setUpdateDate(new Date()); orderDetail.setUpdateDate(new Date());
baseMapper.updateById(orderDetail); baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId()); if (orderDetail.getType().equals(0)) { //活动
application.setStatus(orderDetail.getApplicationStatus()); CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
applicationRepository.updateById(application); application.setStatus(orderDetail.getApplicationStatus());
//积分计算 applicationRepository.updateById(application);
// BigDecimal price = orderDetail.getPayPrice(); } else if (orderDetail.getType().equals(1)){ //金币
// IntegralAmountRelative relative = integralAmountRelativeRepository.queryIntegralByPrice(price); MemInfo memInfo = memInfoRepository.getInfoByUserId(String.valueOf(orderDetail.getUserId()));
// if (relative != null) { //增加到金币流水表
// //查询会员信息 MemGoldCoinFlow memGoldCoinFlow = new MemGoldCoinFlow();
// SysUser info = sysUserRepositorys.selectUserById(orderDetail.getUserId()); memGoldCoinFlow.setType("1");
// UserIntegral userIntegral = new UserIntegral(); memGoldCoinFlow.setActionType("10");
// userIntegral.setUserId(orderDetail.getUserId()); memGoldCoinFlow.setCount(orderDetail.getNum());
// userIntegral.setGoodsId(orderDetail.getGoodsId()); memGoldCoinFlow.setEndCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
// userIntegral.setChange(relative.getIntegral()); memGoldCoinFlow.setOrderId(BigInteger.valueOf(orderDetail.getBusinessId()));
// Integer integral = info.getIntegral() + relative.getIntegral(); memGoldCoinFlow.setTargetId(BigInteger.valueOf(orderDetail.getUserId()));
// userIntegral.setIntegral(integral); memGoldCoinFlowRepository.insert(memGoldCoinFlow);
// userIntegral.setCreateBy(String.valueOf(orderDetail.getUserId())); //修改会员表的金币余额
// userIntegral.setCreateTime(new Date()); memInfo.setGoldCoinsCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
// userIntegralRepository.insertUserIntegral(userIntegral); memInfoRepository.updateById(memInfo);
// //会员等级计算 }
// MemberBenefits benefits = memberBenefitsRepository.selectMemberBenefitsByLevel(info.getLevel()+1);
// if (benefits != null && (integral >= benefits.getIntegral())) {
// info.setLevel(info.getLevel()+1);
// }
// info.setIntegral(integral);
// sysUserRepositorys.updateSysUser(info);
// cyRedisServiceImpl.set(RedisCons.MEMBER_INFO + ":" + orderDetail.getUserId(), info);
// }
//加订单redis锁 //加订单redis锁
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId()); RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId());
try { try {
...@@ -1233,7 +1261,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1233,7 +1261,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) { if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
orderDetail.setState(1); orderDetail.setState(1);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderDetail.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderDetail.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
cyRedisServiceImpl.set(redisKey +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
...@@ -1249,9 +1282,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1249,9 +1282,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
boolean isGetLock = false; boolean isGetLock = false;
orderDetail.setUpdateDate(new Date()); orderDetail.setUpdateDate(new Date());
baseMapper.updateById(orderDetail); baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId()); if (orderDetail.getType().equals(0)) { //活动
application.setStatus(orderDetail.getApplicationStatus()); CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
applicationRepository.updateById(application); application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
}
//加订单redis锁 //加订单redis锁
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId()); RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId());
try { try {
...@@ -1260,7 +1295,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1260,7 +1295,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) { if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
orderDetail.setState(1); orderDetail.setState(1);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderDetail.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderDetail.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
cyRedisServiceImpl.set(redisKey +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
...@@ -1276,9 +1316,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1276,9 +1316,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
boolean isGetLock = false; boolean isGetLock = false;
orderDetail.setUpdateDate(new Date()); orderDetail.setUpdateDate(new Date());
baseMapper.updateById(orderDetail); baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId()); if (orderDetail.getType().equals(0)) { //活动
application.setStatus(orderDetail.getApplicationStatus()); CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
applicationRepository.updateById(application); application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
}
//订单优惠券退还 //订单优惠券退还
// if (orderDetail.getCouponId() != null) { // if (orderDetail.getCouponId() != null) {
// UserCouponRelative userCouponRelative = new UserCouponRelative(); // UserCouponRelative userCouponRelative = new UserCouponRelative();
...@@ -1292,9 +1334,14 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1292,9 +1334,14 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderDetail.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderDetail.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
orderDetail.setState(1); orderDetail.setState(1);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); cyRedisServiceImpl.set(redisKey +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
...@@ -1311,7 +1358,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1311,7 +1358,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
@Transactional @Transactional
public void executeCloseOrder() throws NoSuchAlgorithmException { public void executeCloseOrder() throws NoSuchAlgorithmException {
// 查询 【order:activity:${所有}:${所有}】 // 查询 【order:activity:${所有}:${所有}】
Set<String> map = redisTemplate.keys(RedisCons.ORDER_ACTIVITY+"*"); Set<String> map = redisTemplate.keys("order:*");
if (CollectionUtils.isNotEmpty(map)) { if (CollectionUtils.isNotEmpty(map)) {
List<String>list = new ArrayList<>(map); List<String>list = new ArrayList<>(map);
if (list.size()>50){ if (list.size()>50){
...@@ -1353,18 +1400,21 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1353,18 +1400,21 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
CmsOrder info = baseMapper.selectById(orderDetail.getBusinessId()); CmsOrder info = baseMapper.selectById(orderDetail.getBusinessId());
if (info != null) { if (info != null) {
baseMapper.updateById(orderDetail); baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId()); if (orderDetail.getType().equals(0)) { //活动
application.setStatus("2"); CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
applicationRepository.updateById(application); application.setStatus("2");
applicationRepository.updateById(application);
}
} else { } else {
baseMapper.insert(orderDetail); baseMapper.insert(orderDetail);
//添加报名信息 if (orderDetail.getType().equals(0)) { //活动
CmsApplication application = new CmsApplication(); //添加报名信息
application.setUserId(orderDetail.getUserId()); CmsApplication application = new CmsApplication();
application.setActivityId(orderDetail.getGoodsId()); application.setUserId(orderDetail.getUserId());
application.setName(orderDetail.getAccount()); application.setActivityId(orderDetail.getGoodsId());
application.setName(orderDetail.getAccount());
// application.setPhone(orderDetail.get); // application.setPhone(orderDetail.get);
//0 待支付 1已取消 2退款中 3退款中 4后台退款中 5后台退款中 6退款完成 7后台退款完成 8支付中 9 支付完成 10订单关闭 //0 待支付 1已取消 2退款中 3退款中 4后台退款中 5后台退款中 6退款完成 7后台退款完成 8支付中 9 支付完成 10订单关闭
// if (orderDetail.getStatus().equals(0)||orderDetail.getStatus().equals(2)||orderDetail.getStatus().equals(3)||orderDetail.getStatus().equals(4)|| // if (orderDetail.getStatus().equals(0)||orderDetail.getStatus().equals(2)||orderDetail.getStatus().equals(3)||orderDetail.getStatus().equals(4)||
// orderDetail.getStatus().equals(5)||orderDetail.getStatus().equals(8)||orderDetail.getStatus().equals(9)) // orderDetail.getStatus().equals(5)||orderDetail.getStatus().equals(8)||orderDetail.getStatus().equals(9))
// application.setStatus("1"); // application.setStatus("1");
...@@ -1372,10 +1422,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1372,10 +1422,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
// application.setStatus("2"); // application.setStatus("2");
// else if (orderDetail.getStatus().equals(6)||orderDetail.getStatus().equals(7)) // else if (orderDetail.getStatus().equals(6)||orderDetail.getStatus().equals(7))
// application.setStatus("3"); // application.setStatus("3");
application.setStatus("2"); application.setStatus("2");
application.setApplicationFee(orderDetail.getPayPrice()); application.setApplicationFee(orderDetail.getPayPrice());
application.setOrderId(orderDetail.getBusinessId()); application.setOrderId(orderDetail.getBusinessId());
applicationRepository.insert(application); applicationRepository.insert(application);
}
} }
//如果使用了优惠券,则改为未使用 //如果使用了优惠券,则改为未使用
...@@ -1393,11 +1444,13 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1393,11 +1444,13 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) { if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
orderDetail.setState(1); orderDetail.setState(1);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); if (orderDetail.getType().equals(0)) { //活动
//退人数 cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
// ActivityInfo activityInfo = activityInfoRepository.selectActivityInfoById(orderDetail.getGoodsId()); //退人数
// if (activityInfo.getIsRestrictions().equals(0)) stockService.addStock(RedisCons.ACTIVITY_COUNT +":"+ orderDetail.getGoodsId(), 1);
stockService.addStock(RedisCons.ACTIVITY_COUNT +":"+ orderDetail.getGoodsId(), 1); } else if (orderDetail.getType().equals(1)) //金币
cyRedisServiceImpl.set(RedisCons.ORDER_GOLD +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
...@@ -1443,14 +1496,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1443,14 +1496,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderDetail.setState(0); orderDetail.setState(0);
orderDetail.setStatus(9); orderDetail.setStatus(9);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -1482,14 +1540,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1482,14 +1540,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY +":"+ orderInfo.getGoodsId() +":"+ orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey +":"+ orderInfo.getGoodsId() +":"+ orderInfo.getBusinessId());
if (detail!=null) { if (detail!=null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付
orderDetail.setState(0); orderDetail.setState(0);
orderDetail.setStatus(0); orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail); cyRedisServiceImpl.set(redisKey +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} else } else
...@@ -1514,7 +1577,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1514,7 +1577,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) { if (orderDetail.getStatus().equals(8)) {
...@@ -1522,7 +1590,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1522,7 +1590,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(0); orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 支付完成
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -1564,21 +1632,30 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1564,21 +1632,30 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
orderInfo.setState(0); String redisKey = RedisCons.ORDER_ACTIVITY;
if ("SUCCESS".equals(result)){ //接口成功 if (orderInfo.getType().equals(0)) //活动
if (orderInfo.getStatus().equals(3)) redisKey = RedisCons.ORDER_ACTIVITY;
orderInfo.setStatus(2); else if (orderInfo.getType().equals(1)) //金币
else redisKey = RedisCons.ORDER_GOLD;
orderInfo.setStatus(4); Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
} else { //接口失败 if (detail != null) {
Integer refundCount = orderInfo.getRefundCount(); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderInfo.setRefundCount(refundCount + 1); orderDetail.setState(0);
} if ("SUCCESS".equals(result)) { //接口成功
orderInfo.setApplicationStatus("1"); if (orderDetail.getStatus().equals(3))
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款中 (2 3) orderDetail.setStatus(2);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId(),orderInfo); else
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 orderDetail.setStatus(4);
} else { //接口失败
Integer refundCount = orderDetail.getRefundCount();
orderDetail.setRefundCount(refundCount + 1);
}
orderDetail.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款中 (2 3)
cyRedisServiceImpl.set(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderInfo, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderInfo, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
...@@ -1620,7 +1697,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1620,7 +1697,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME), isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS); Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) { if (isGetLock) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId()); String redisKey = RedisCons.ORDER_ACTIVITY;
if (orderInfo.getType().equals(0)) //活动
redisKey = RedisCons.ORDER_ACTIVITY;
else if (orderInfo.getType().equals(1)) //金币
redisKey = RedisCons.ORDER_GOLD;
Object detail = cyRedisServiceImpl.get(redisKey + ":" + orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId());
if (detail != null) { if (detail != null) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class); CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderDetail.setState(0); orderDetail.setState(0);
...@@ -1630,7 +1712,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1630,7 +1712,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(7); orderDetail.setStatus(7);
orderDetail.setApplicationStatus("1"); orderDetail.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款完成 //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款完成
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail); cyRedisServiceImpl.set(redisKey + ":" + orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(), orderDetail);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME); // rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} }
...@@ -1686,5 +1768,71 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder ...@@ -1686,5 +1768,71 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
} }
} }
// 查询DB,下单完成,近4个月的订单,如今日是2023-5-5,查询 2023-1-5 至2023-4-5 的
QueryWrapper<CmsOrder> wrapper1 = new QueryWrapper<>();
wrapper1.eq("del_flag",0);
wrapper1.in("status",1,6,7,9);
wrapper1.between("order_time",df.format(startTime),df.format(endTime));
List<CmsOrder> orderList = baseMapper.selectList(wrapper1);
for (CmsOrder order : orderList) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_GOLD +":"+ order.getGoodsId() + ":" + order.getBusinessId());
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
//state->已同步 => del key
if (Objects.equals(orderDetail.getState(),1))
redisTemplate.delete(RedisCons.ORDER_GOLD +":"+ order.getGoodsId() + ":" + order.getBusinessId());
}
}
/**
* 金币充值
* @param cmsOrder
* @return
*/
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT)
@Override
public CyPersistModel addGold(CmsOrder cmsOrder){
//增加操作
int line = 1;
//添加实名判断
String userId = CyUserUtil.getAuthenBusinessId();
MemInfo memInfo = memInfoRepository.getInfoByUserId(userId);
if (!"1".equals(memInfo.getMemRealAuthen()))
throw new CyServiceException("您未实名认证,不能充值");
long orderId = cyIdGenUtil.getSnowFlakedId();
CmsOrder orderInfo = new CmsOrder();
orderInfo.setBusinessId(orderId);
orderInfo.setName("金币充值");
orderInfo.setGoodsId(0);
orderInfo.setUserId(Integer.valueOf(userId));
orderInfo.setAccount(CyUserUtil.getAuthenUsername());
orderInfo.setNum(orderInfo.getNum());
//计算价格 -开始
if (cmsOrder.getPrice() != null && cmsOrder.getPrice().compareTo(BigDecimal.ZERO) > 0) {
BigDecimal price = cmsOrder.getPrice().setScale(2, BigDecimal.ROUND_DOWN);
orderInfo.setStatus(0);
//查询会员折扣
BigDecimal discount = new BigDecimal("100.00");
orderInfo.setPrice(price);
orderInfo.setPayPrice(price.multiply(discount.divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN)).setScale(2, BigDecimal.ROUND_DOWN));
if (orderInfo.getPayPrice().compareTo(BigDecimal.ZERO) <= 0){
orderInfo.setStatus(9);
}
} else { //免费 --> 支付完成
orderInfo.setPrice(BigDecimal.ZERO);
orderInfo.setPayPrice(BigDecimal.ZERO);
orderInfo.setStatus(9);
}
orderInfo.setType(1);
orderInfo.setOrderTime(new Date());
orderInfo.setDelFlag("0");
orderInfo.setCreateDate(new Date());
orderInfo.setCreateBy(CyUserUtil.getAuthenBusinessId());
orderInfo.setState(0);
cyRedisServiceImpl.set(RedisCons.ORDER_GOLD +":"+ orderInfo.getGoodsId() + ":" + orderId,orderInfo);
return new CyPersistModel(line);
} }
} }
...@@ -165,7 +165,10 @@ public class AsyncFactory ...@@ -165,7 +165,10 @@ public class AsyncFactory
} }
orderInfo.setApplicationStatus("1"); orderInfo.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款中 (2 3) //redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款中 (2 3)
CySpringBeanComp.getBean(CyRedisServiceImpl.class).set(RedisCons.ORDER_ACTIVITY +":"+ orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId(),orderInfo); if (orderInfo.getType().equals(0))
CySpringBeanComp.getBean(CyRedisServiceImpl.class).set(RedisCons.ORDER_ACTIVITY +":"+ orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId(),orderInfo);
else if (orderInfo.getType().equals(1))
CySpringBeanComp.getBean(CyRedisServiceImpl.class).set(RedisCons.ORDER_GOLD +":"+ orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId(),orderInfo);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】 //发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
// CySpringBeanComp.getBean(RabbitClusterUtil.class).sendMsg(orderInfo, // CySpringBeanComp.getBean(RabbitClusterUtil.class).sendMsg(orderInfo,
// CySpringBeanComp.getBean(RabbitMQConfigBean.class).ORDER_EXCHANGE_NAME, // CySpringBeanComp.getBean(RabbitMQConfigBean.class).ORDER_EXCHANGE_NAME,
......
...@@ -24,6 +24,8 @@ public class RedisCons { ...@@ -24,6 +24,8 @@ public class RedisCons {
//订单活动信息 //订单活动信息
public static final String ORDER_ACTIVITY = "order:activity"; public static final String ORDER_ACTIVITY = "order:activity";
//订单金币信息
public static final String ORDER_GOLD = "order:gold";
//订单数据库锁 //订单数据库锁
public static final String ORDER_DB = "order:db:"; public static final String ORDER_DB = "order:db:";
//订单redis锁 //订单redis锁
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment