Commit 75837549 authored by gaoyingwei's avatar gaoyingwei

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

parent b8b90cfe
......@@ -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 {
*/
@PostMapping("/pay")
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 {
*/
@PostMapping("/updateOrderStatus")
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,
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
......
......@@ -19,7 +19,7 @@ import java.io.IOException;
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;
......@@ -27,12 +27,13 @@ public interface WxPayService {
/**
* 小程序调用wx.requestPayment(OBJECT)发起微信支付成功后更新订单状态
* @param request
* @param orderId
* @param activityId
* @param request
* @param type
* @return
*/
CyPersistModel updateOrderStatus(Long orderId, Long activityId);
CyPersistModel updateOrderStatus(Long orderId, Long activityId, Integer type);
//主动查询微信订单状态
String selectWxOrderStatus(String orderNo) throws IOException, JDOMException;
......
......@@ -95,7 +95,7 @@ public class WxPayServiceImpl implements WxPayService {
private static final String UTF8 = "utf-8";
@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();
MemInfo memInfo = memInfoRepository.getInfoByUserId(userId);
......@@ -104,13 +104,14 @@ public class WxPayServiceImpl implements WxPayService {
JSONObject json = new JSONObject();
// try{
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;status -> 待支付 ,可以进行支付
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY +":"+ activityId +":"+ orderId);
if (detail!=null) {
if (Objects.equals(type, 0)) {
Object detail = cyRedisServiceImpl.get(RedisCons.ORDER_ACTIVITY + ":" + activityId + ":" + orderId);
if (detail != null) {
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);
if (activity!=null) {
Object activity = cyRedisServiceImpl.get(RedisCons.ACTIVITY_DETAIL + ":" + activityId);
if (activity != null) {
CmsActivity info = JSON.parseObject(JSON.toJSONString(activity), CmsActivity.class);
if (info.getEndTime().before(new Date()))
throw new CyServiceException("活动已结束,不允许支付");
......@@ -122,6 +123,18 @@ public class WxPayServiceImpl implements WxPayService {
} else {
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){
// log.error("失败",e);
// json.put("errMsg", "Failed");
......@@ -218,7 +231,10 @@ public class WxPayServiceImpl implements WxPayService {
orderDetail.setState(0);
orderDetail.setStatus(8);
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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -244,11 +260,12 @@ public class WxPayServiceImpl implements WxPayService {
* 小程序调用wx.requestPayment(OBJECT) 更新订单状态为待支付
* @param orderId
* @param activityId
* @param type
* @return
*/
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
@Override
public CyPersistModel updateOrderStatus(Long orderId, Long activityId) {
public CyPersistModel updateOrderStatus(Long orderId, Long activityId, Integer type) {
//加订单redis锁
boolean isGetLock = false;
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderId);
......@@ -256,14 +273,19 @@ public class WxPayServiceImpl implements WxPayService {
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付
orderDetail.setState(0);
orderDetail.setStatus(0);
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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} else
......@@ -370,7 +392,12 @@ public class WxPayServiceImpl implements WxPayService {
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderDetail.setTransactionId(transactionId);
......@@ -404,7 +431,7 @@ public class WxPayServiceImpl implements WxPayService {
orderDetail.setApplicationStatus("1");
}
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -527,7 +554,12 @@ public class WxPayServiceImpl implements WxPayService {
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) {
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (!orderDetail.getStatus().equals(2) && !orderDetail.getStatus().equals(3)
......@@ -550,7 +582,7 @@ public class WxPayServiceImpl implements WxPayService {
orderDetail.setApplicationStatus("3");
orderDetail.setState(0);
// //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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......
......@@ -12,4 +12,7 @@ public class OrderActivityDto {
/** 活动id */
private Long activityId;
/** 订单类型 0活动 1金币 */
private Integer type;
}
......@@ -209,5 +209,9 @@ public class CmsOrder extends CyIdSnowflakeEntity<CmsOrder> {
@Transient
@TableField(exist = false)
private String applicationStatus;
//现在的余额
@TableField(exist = false)
private Integer balance;
}
......@@ -128,4 +128,11 @@ public interface CmsOrderService {
* @return
*/
int manualCompensateOrder(CmsOrder dto);
/**
* 充值金币
* @param cmsOrder
* @return
*/
CyPersistModel addGold(CmsOrder cmsOrder);
}
......@@ -13,6 +13,8 @@ import org.rcisoft.business.cmsActivity.service.impl.StockService;
import org.rcisoft.business.cmsApplication.dao.CmsApplicationRepository;
import org.rcisoft.business.cmsApplication.entity.CmsApplication;
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.entity.MemInfo;
import org.rcisoft.core.async.AsyncFactory;
......@@ -40,6 +42,7 @@ import org.rcisoft.core.model.CyPageInfo;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
......@@ -94,6 +97,9 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
@Autowired
private MemInfoRepository memInfoRepository;
@Autowired
private MemGoldCoinFlowRepository memGoldCoinFlowRepository;
/**
* 保存 订单信息表
* @param cmsOrder
......@@ -181,7 +187,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderInfo.setStatus(9);
orderInfo.setApplicationStatus("1");
}
orderInfo.setType(1);
orderInfo.setType(0);
orderInfo.setOrderTime(new Date());
orderInfo.setDelFlag("0");
orderInfo.setCreateDate(new Date());
......@@ -443,7 +449,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
{
List<CmsOrder> orderRedis = new ArrayList<>();
//查询edis + DB ,redis 优先
Set<String> map = redisTemplate.keys(RedisCons.ORDER_ACTIVITY+"*");
Set<String> map = redisTemplate.keys("order:*");
if (CollectionUtils.isNotEmpty(map)) {
for (String key : map) {
Object detail = cyRedisServiceImpl.get(key);
......@@ -500,7 +506,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
// 查询订单的其他信息
List<CmsOrder> infos = baseMapper.queryOrderInfoByIds(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.setActivityBeginDate(o.getActivityBeginDate());
}
......@@ -541,7 +547,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(2) || orderDetail.getStatus().equals(4)) {
......@@ -552,7 +563,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(7);
orderDetail.setApplicationStatus("3");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -609,7 +620,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) {
......@@ -617,7 +633,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(9);
orderDetail.setApplicationStatus("1");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -644,7 +660,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) {
......@@ -652,7 +673,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -687,14 +708,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付
orderDetail.setState(0);
orderDetail.setStatus(0);
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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} else
......@@ -721,7 +747,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) {
......@@ -729,7 +760,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -843,7 +874,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderRedis = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderRedis.setState(0);
......@@ -856,7 +892,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
}
orderRedis.setApplicationStatus("1");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderRedis, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -1069,7 +1105,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
@Transactional
public void executeInsertOrder() throws NoSuchAlgorithmException {
// 查询 【order:activity:${所有}:${所有}】
Set<String> map = redisTemplate.keys(RedisCons.ORDER_ACTIVITY+"*");
Set<String> map = redisTemplate.keys("order:*");
if (CollectionUtils.isNotEmpty(map)) {
List<String>list = new ArrayList<>(map);
if (list.size()>50){
......@@ -1106,34 +1142,33 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
//未落库->落库;redis key: 【order:activity:${aid}:${oid}】【未同步】 => 落库
if (info == null) {
baseMapper.insert(orderDetail);
//添加报名信息
CmsApplication application = new CmsApplication();
application.setUserId(orderDetail.getUserId());
application.setActivityId(orderDetail.getGoodsId());
application.setName(orderDetail.getAccount());
// application.setPhone(orderDetail.get);
//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)||
// orderDetail.getStatus().equals(5)||orderDetail.getStatus().equals(8)||orderDetail.getStatus().equals(9))
// application.setStatus("1");
// else if (orderDetail.getStatus().equals(1)||orderDetail.getStatus().equals(10))
// application.setStatus("2");
// else if (orderDetail.getStatus().equals(6)||orderDetail.getStatus().equals(7))
// application.setStatus("3");
application.setStatus(orderDetail.getApplicationStatus());
application.setApplicationFee(orderDetail.getPayPrice());
application.setOrderId(orderDetail.getBusinessId());
applicationRepository.insert(application);
// //如果有优惠券,进行核销
// if (orderDetail.getCouponId() != null) {
// UserCouponRelative userCouponRelative = new UserCouponRelative();
// userCouponRelative.setBusinessId(orderDetail.getCouponId());
// userCouponRelative.setCancelId(orderDetail.getStoreId());
// userCouponRelative.setOrderId(orderDetail.getBusinessId());
// userCouponRelative.setStatus(1);
// userCouponRelative.setCancelTime(new Date());
// couponInfoRepository.useCouponById(userCouponRelative);
// }
if (orderDetail.getType().equals(0)) { //活动
//添加报名信息
CmsApplication application = new CmsApplication();
application.setUserId(orderDetail.getUserId());
application.setActivityId(orderDetail.getGoodsId());
application.setName(orderDetail.getAccount());
application.setStatus(orderDetail.getApplicationStatus());
application.setApplicationFee(orderDetail.getPayPrice());
application.setOrderId(orderDetail.getBusinessId());
applicationRepository.insert(application);
} else if (orderDetail.getType().equals(1)) { //金币
if (orderDetail.getStatus().equals(9)) {
MemInfo memInfo = memInfoRepository.getInfoByUserId(String.valueOf(orderDetail.getUserId()));
//增加到金币流水表
MemGoldCoinFlow memGoldCoinFlow = new MemGoldCoinFlow();
memGoldCoinFlow.setType("1");
memGoldCoinFlow.setActionType("10");
memGoldCoinFlow.setCount(orderDetail.getNum());
memGoldCoinFlow.setEndCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
memGoldCoinFlow.setOrderId(BigInteger.valueOf(orderDetail.getBusinessId()));
memGoldCoinFlow.setTargetId(BigInteger.valueOf(orderDetail.getUserId()));
memGoldCoinFlowRepository.insert(memGoldCoinFlow);
//修改会员表的金币余额
memInfo.setGoldCoinsCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
memInfoRepository.updateById(memInfo);
}
}
//加订单redis锁
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId());
try {
......@@ -1142,7 +1177,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
orderDetail.setState(1);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
cyRedisServiceImpl.set(key,orderDetail);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
......@@ -1198,33 +1233,26 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
boolean isGetLock = false;
orderDetail.setUpdateDate(new Date());
baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
//积分计算
// BigDecimal price = orderDetail.getPayPrice();
// IntegralAmountRelative relative = integralAmountRelativeRepository.queryIntegralByPrice(price);
// if (relative != null) {
// //查询会员信息
// SysUser info = sysUserRepositorys.selectUserById(orderDetail.getUserId());
// UserIntegral userIntegral = new UserIntegral();
// userIntegral.setUserId(orderDetail.getUserId());
// userIntegral.setGoodsId(orderDetail.getGoodsId());
// userIntegral.setChange(relative.getIntegral());
// Integer integral = info.getIntegral() + relative.getIntegral();
// userIntegral.setIntegral(integral);
// userIntegral.setCreateBy(String.valueOf(orderDetail.getUserId()));
// userIntegral.setCreateTime(new Date());
// userIntegralRepository.insertUserIntegral(userIntegral);
// //会员等级计算
// 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);
// }
if (orderDetail.getType().equals(0)) { //活动
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
} else if (orderDetail.getType().equals(1)){ //金币
MemInfo memInfo = memInfoRepository.getInfoByUserId(String.valueOf(orderDetail.getUserId()));
//增加到金币流水表
MemGoldCoinFlow memGoldCoinFlow = new MemGoldCoinFlow();
memGoldCoinFlow.setType("1");
memGoldCoinFlow.setActionType("10");
memGoldCoinFlow.setCount(orderDetail.getNum());
memGoldCoinFlow.setEndCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
memGoldCoinFlow.setOrderId(BigInteger.valueOf(orderDetail.getBusinessId()));
memGoldCoinFlow.setTargetId(BigInteger.valueOf(orderDetail.getUserId()));
memGoldCoinFlowRepository.insert(memGoldCoinFlow);
//修改会员表的金币余额
memInfo.setGoldCoinsCount(memGoldCoinFlow.getCount() + memInfo.getGoldCoinsCount());
memInfoRepository.updateById(memInfo);
}
//加订单redis锁
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId());
try {
......@@ -1233,7 +1261,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
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) {
Thread.currentThread().interrupt();
......@@ -1249,9 +1282,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
boolean isGetLock = false;
orderDetail.setUpdateDate(new Date());
baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
if (orderDetail.getType().equals(0)) { //活动
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
}
//加订单redis锁
RLock redisLock = redissonClient.getLock(RedisCons.ORDER_REDIS + orderDetail.getBusinessId());
try {
......@@ -1260,7 +1295,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
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) {
Thread.currentThread().interrupt();
......@@ -1276,9 +1316,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
boolean isGetLock = false;
orderDetail.setUpdateDate(new Date());
baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
if (orderDetail.getType().equals(0)) { //活动
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus(orderDetail.getApplicationStatus());
applicationRepository.updateById(application);
}
//订单优惠券退还
// if (orderDetail.getCouponId() != null) {
// UserCouponRelative userCouponRelative = new UserCouponRelative();
......@@ -1292,9 +1334,14 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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-> 【已同步】
orderDetail.setState(1);
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
cyRedisServiceImpl.set(redisKey +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
......@@ -1311,7 +1358,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
@Transactional
public void executeCloseOrder() throws NoSuchAlgorithmException {
// 查询 【order:activity:${所有}:${所有}】
Set<String> map = redisTemplate.keys(RedisCons.ORDER_ACTIVITY+"*");
Set<String> map = redisTemplate.keys("order:*");
if (CollectionUtils.isNotEmpty(map)) {
List<String>list = new ArrayList<>(map);
if (list.size()>50){
......@@ -1353,18 +1400,21 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
CmsOrder info = baseMapper.selectById(orderDetail.getBusinessId());
if (info != null) {
baseMapper.updateById(orderDetail);
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus("2");
applicationRepository.updateById(application);
if (orderDetail.getType().equals(0)) { //活动
CmsApplication application = applicationRepository.selectByOrderId(orderDetail.getBusinessId());
application.setStatus("2");
applicationRepository.updateById(application);
}
} else {
baseMapper.insert(orderDetail);
//添加报名信息
CmsApplication application = new CmsApplication();
application.setUserId(orderDetail.getUserId());
application.setActivityId(orderDetail.getGoodsId());
application.setName(orderDetail.getAccount());
if (orderDetail.getType().equals(0)) { //活动
//添加报名信息
CmsApplication application = new CmsApplication();
application.setUserId(orderDetail.getUserId());
application.setActivityId(orderDetail.getGoodsId());
application.setName(orderDetail.getAccount());
// 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)||
// orderDetail.getStatus().equals(5)||orderDetail.getStatus().equals(8)||orderDetail.getStatus().equals(9))
// application.setStatus("1");
......@@ -1372,10 +1422,11 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
// application.setStatus("2");
// else if (orderDetail.getStatus().equals(6)||orderDetail.getStatus().equals(7))
// application.setStatus("3");
application.setStatus("2");
application.setApplicationFee(orderDetail.getPayPrice());
application.setOrderId(orderDetail.getBusinessId());
applicationRepository.insert(application);
application.setStatus("2");
application.setApplicationFee(orderDetail.getPayPrice());
application.setOrderId(orderDetail.getBusinessId());
applicationRepository.insert(application);
}
}
//如果使用了优惠券,则改为未使用
......@@ -1393,11 +1444,13 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
if (isGetLock) {
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【已同步】
orderDetail.setState(1);
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);
if (orderDetail.getType().equals(0)) { //活动
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderDetail.getGoodsId() + ":" + orderDetail.getBusinessId(),orderDetail);
//退人数
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) {
Thread.currentThread().interrupt();
......@@ -1443,14 +1496,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderDetail.setState(0);
orderDetail.setStatus(9);
orderDetail.setApplicationStatus("1");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -1482,14 +1540,19 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 待支付
orderDetail.setState(0);
orderDetail.setStatus(0);
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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME,rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
} else
......@@ -1514,7 +1577,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
if (orderDetail.getStatus().equals(8)) {
......@@ -1522,7 +1590,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(0);
orderDetail.setApplicationStatus("1");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -1564,21 +1632,30 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
if (isGetLock) {
orderInfo.setState(0);
if ("SUCCESS".equals(result)){ //接口成功
if (orderInfo.getStatus().equals(3))
orderInfo.setStatus(2);
else
orderInfo.setStatus(4);
} else { //接口失败
Integer refundCount = orderInfo.getRefundCount();
orderInfo.setRefundCount(refundCount + 1);
}
orderInfo.setApplicationStatus("1");
//redis key: 【order:activity:${aid}:${oid}】 value 【hash】;ttl:-1;hash state-> 【未同步】,status -> 退款中 (2 3)
cyRedisServiceImpl.set(RedisCons.ORDER_ACTIVITY +":"+ orderInfo.getGoodsId() + ":" + orderInfo.getBusinessId(),orderInfo);
//发送 mq,exchange:`order_activity` route-key:`order_activity_status` value 【订单】
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderDetail.setState(0);
if ("SUCCESS".equals(result)) { //接口成功
if (orderDetail.getStatus().equals(3))
orderDetail.setStatus(2);
else
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);
}
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
......@@ -1620,7 +1697,12 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
isGetLock = redisLock.tryLock(Long.parseLong(RedisCons.ORDER_INFO_LOCK_WAIT_TIME),
Long.parseLong(RedisCons.ORDER_INFO_LOCK_LEASE_TIME), TimeUnit.SECONDS);
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) {
CmsOrder orderDetail = JSON.parseObject(JSON.toJSONString(detail), CmsOrder.class);
orderDetail.setState(0);
......@@ -1630,7 +1712,7 @@ public class CmsOrderServiceImpl extends ServiceImpl<CmsOrderRepository,CmsOrder
orderDetail.setStatus(7);
orderDetail.setApplicationStatus("1");
//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 【订单】
// rabbitClusterUtil.sendMsg(orderDetail, rabbitMQConfigBean.ORDER_EXCHANGE_NAME, rabbitMQConfigBean.ORDER_STATUS_QUEUE_NAME);
}
......@@ -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
}
orderInfo.setApplicationStatus("1");
//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 【订单】
// CySpringBeanComp.getBean(RabbitClusterUtil.class).sendMsg(orderInfo,
// CySpringBeanComp.getBean(RabbitMQConfigBean.class).ORDER_EXCHANGE_NAME,
......
......@@ -24,6 +24,8 @@ public class RedisCons {
//订单活动信息
public static final String ORDER_ACTIVITY = "order:activity";
//订单金币信息
public static final String ORDER_GOLD = "order:gold";
//订单数据库锁
public static final String ORDER_DB = "order:db:";
//订单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