Parcourir la source

更新拼团bug

release_toaliyun_real
xiaohanzi il y a 6 ans
Parent
révision
f8f6a167c6
5 fichiers modifiés avec 32 ajouts et 15 suppressions
  1. +1
    -0
      mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java
  2. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxOrderService.java
  3. +11
    -7
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java
  4. +18
    -5
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  5. +1
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java

+ 1
- 0
mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java Voir le fichier

@@ -131,6 +131,7 @@ public class WxOrderController extends BaseController {
if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) { if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) {
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF); return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
} }
WxOrder order = wxOrderService.saveOrderForCoupon(user, coupon, orderSaveDto, isPress); WxOrder order = wxOrderService.saveOrderForCoupon(user, coupon, orderSaveDto, isPress);
return new ResultData(order); return new ResultData(order);
} catch (MallinkException e) { } catch (MallinkException e) {


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/WxOrderService.java Voir le fichier

@@ -228,6 +228,6 @@ public interface WxOrderService {
Long saveOuterOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId); Long saveOuterOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId);
int countGroupOrder(Long groupId);
int countGroupOrder(Long groupId,boolean ignoreUnPay);


} }

+ 11
- 7
mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java Voir le fichier

@@ -84,27 +84,31 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService {
//错误,更新状态,定时任务会发起退款 //错误,更新状态,定时任务会发起退款
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
wxOrderMapper.updateById(order); wxOrderMapper.updateById(order);
wxOrderGroup.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
wxOrderGroupMapper.updateOrderGroup(wxOrderGroup);
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团人数已满,将稍后退款。"); throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团人数已满,将稍后退款。");
} }
//锁住人数
boolean grouppeopleLock = redisLock.lock("grouppeopleLock_"+orderGroupId, String.valueOf(orderGroupId));
if (!grouppeopleLock) {
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团锁定失败,请稍后再试。");
}
//此处拼团数量应从订单总数查询 //此处拼团数量应从订单总数查询
int ordercount = wxOrderService.countGroupOrder(orderGroupId);
int ordercount = wxOrderService.countGroupOrder(orderGroupId,true);
Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount; Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount;
//Integer remainPeople = wxOrderGroup.getRemainPeople()-1; //Integer remainPeople = wxOrderGroup.getRemainPeople()-1;
wxOrderGroup.setStatus(remainPeople == 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus());
wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus());
wxOrderGroup.setUpdateDate(new Date()); wxOrderGroup.setUpdateDate(new Date());
wxOrderGroup.setRemainPeople(remainPeople); wxOrderGroup.setRemainPeople(remainPeople);
logger.info("非首次拼团,更新拼团信息, 剩余人数-1"); logger.info("非首次拼团,更新拼团信息, 剩余人数-1");
int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup); int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup);
if (row != 1) { if (row != 1) {
//这个时候应该要发起异步退款。 //这个时候应该要发起异步退款。
wxOrderGroup.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
order.setOrderStatus(wxOrderGroup.getStatus());
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
wxOrderMapper.updateById(order); wxOrderMapper.updateById(order);
wxOrderGroupMapper.updateOrderGroup(wxOrderGroup);
redisLock.unlock("grouppeopleLock_"+orderGroupId, String.valueOf(orderGroupId));
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,将稍后退款."); throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,将稍后退款.");
}else {
redisLock.unlock("grouppeopleLock_"+orderGroupId, String.valueOf(orderGroupId));
} }


// 更新订单信息 // 更新订单信息


+ 18
- 5
mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java Voir le fichier

@@ -2126,7 +2126,7 @@ public class WxOrderServiceImpl implements WxOrderService {


// 2. 拼团检查 // 2. 拼团检查
if (isOrderGroup(orderGroupId)) { if (isOrderGroup(orderGroupId)) {
checkOrderGroup(user, orderGroupId);
checkOrderGroup(user, orderGroupId,coupon);
} }
String couponIdStr = String.valueOf(coupon.getId()); String couponIdStr = String.valueOf(coupon.getId());
// 3. 减库存操作 // 3. 减库存操作
@@ -2257,16 +2257,27 @@ public class WxOrderServiceImpl implements WxOrderService {
return orderNumber; return orderNumber;
} }


private void checkOrderGroup(WxCUser user, Long orderGroupId) {
private void checkOrderGroup(WxCUser user, Long orderGroupId,WxCoupon coupon) {
WxOrderGroup group = wxOrderGroupMapper.selectById(orderGroupId); WxOrderGroup group = wxOrderGroupMapper.selectById(orderGroupId);
if (group.getStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode())) { if (group.getStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode())) {
logger.error("下订单拼团人数已满>>>" + orderGroupId); logger.error("下订单拼团人数已满>>>" + orderGroupId);
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED); throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED);
} }
if (group.getRemainPeople()<=0) {
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED.getCode(),"下单人数已满");
}
//判断拼团人数是否已经超出限制
int groupCount = countGroupOrder(orderGroupId,false);
if (groupCount>=coupon.getPressLimitNum()) {
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FINISHED.getCode(),"下单人数超出优惠券人数限制!");
}
WxOrder order = new WxOrder(); WxOrder order = new WxOrder();
order.setOrderGroupId(group.getId()); order.setOrderGroupId(group.getId());
order.setCUserId(user.getId()); order.setCUserId(user.getId());
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode());
//order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode());
long count = wxOrderMapper.selectCount(new QueryWrapper(order)); long count = wxOrderMapper.selectCount(new QueryWrapper(order));
if (count > 0) { if (count > 0) {
logger.error("重复的拼团>>>" + orderGroupId); logger.error("重复的拼团>>>" + orderGroupId);
@@ -2279,14 +2290,16 @@ public class WxOrderServiceImpl implements WxOrderService {
} }


@Override @Override
public int countGroupOrder(Long groupId) {
public int countGroupOrder(Long groupId,boolean ignoreUnPay) {
WxOrder query = new WxOrder(); WxOrder query = new WxOrder();
query.setOrderGroupId(groupId); query.setOrderGroupId(groupId);
List<Integer> statusS = new ArrayList<Integer>(); List<Integer> statusS = new ArrayList<Integer>();
statusS.add(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()); statusS.add(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode());
statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()); statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode());
statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()); statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode());
//statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode());
if (!ignoreUnPay) {
statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode());
}
query.setStatusS(statusS); query.setStatusS(statusS);
return wxOrderMapper.countList(query); return wxOrderMapper.countList(query);
} }


+ 1
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java Voir le fichier

@@ -180,7 +180,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
@Override @Override
public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay) { public WxPayOrder handleWxOrderQuery(WxPayOrder oldRecord,WxOrder order,WxAppinfo appInfo,WxPayAccount payAccount,IdWorker idworker,boolean repeatPay) {
//int wxpaystatus = WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, order, appInfo, payAccount);
Map<String, String> retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(oldRecord, order, appInfo, payAccount); Map<String, String> retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(oldRecord, order, appInfo, payAccount);
int wxpaystatus = WxPayOrderServiceHelper.getPayStatusFromMap(retMap, oldRecord.getPayOrderNo()); int wxpaystatus = WxPayOrderServiceHelper.getPayStatusFromMap(retMap, oldRecord.getPayOrderNo());
if (EnumPayStatus.PAY_STATUS_SUCCESS.getCode()==wxpaystatus) { if (EnumPayStatus.PAY_STATUS_SUCCESS.getCode()==wxpaystatus) {
@@ -235,7 +234,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
WxOrder orderParams = new WxOrder(); WxOrder orderParams = new WxOrder();
orderParams.setOrderGroupId(order.getOrderGroupId()); orderParams.setOrderGroupId(order.getOrderGroupId());
orderParams.setCUserId(user.getId()); orderParams.setCUserId(user.getId());
orderParams.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode());
//orderParams.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode());
int count = wxOrderMapper.selectCount(new QueryWrapper(orderParams)); int count = wxOrderMapper.selectCount(new QueryWrapper(orderParams));
if (count > 0) { if (count > 0) {
logger.error("重复的拼团>>>" + order); logger.error("重复的拼团>>>" + order);


Chargement…
Annuler
Enregistrer