Просмотр исходного кода

更新拼团bug

release_toaliyun_real
xiaohanzi 6 лет назад
Родитель
Сommit
f8f6a167c6
5 измененных файлов: 32 добавлений и 15 удалений
  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 Просмотреть файл

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


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/WxOrderService.java Просмотреть файл

@@ -228,6 +228,6 @@ public interface WxOrderService {
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 Просмотреть файл

@@ -84,27 +84,31 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService {
//错误,更新状态,定时任务会发起退款
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
wxOrderMapper.updateById(order);
wxOrderGroup.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
wxOrderGroupMapper.updateOrderGroup(wxOrderGroup);
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 = 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.setRemainPeople(remainPeople);
logger.info("非首次拼团,更新拼团信息, 剩余人数-1");
int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup);
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);
wxOrderGroupMapper.updateOrderGroup(wxOrderGroup);
redisLock.unlock("grouppeopleLock_"+orderGroupId, String.valueOf(orderGroupId));
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 Просмотреть файл

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

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

private void checkOrderGroup(WxCUser user, Long orderGroupId) {
private void checkOrderGroup(WxCUser user, Long orderGroupId,WxCoupon coupon) {
WxOrderGroup group = wxOrderGroupMapper.selectById(orderGroupId);
if (group.getStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode())) {
logger.error("下订单拼团人数已满>>>" + orderGroupId);
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();
order.setOrderGroupId(group.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));
if (count > 0) {
logger.error("重复的拼团>>>" + orderGroupId);
@@ -2279,14 +2290,16 @@ public class WxOrderServiceImpl implements WxOrderService {
}

@Override
public int countGroupOrder(Long groupId) {
public int countGroupOrder(Long groupId,boolean ignoreUnPay) {
WxOrder query = new WxOrder();
query.setOrderGroupId(groupId);
List<Integer> statusS = new ArrayList<Integer>();
statusS.add(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode());
statusS.add(EnumOrderStatus.ORDER_STATUS_COOPERATING.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);
return wxOrderMapper.countList(query);
}


+ 1
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java Просмотреть файл

@@ -180,7 +180,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
@Override
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);
int wxpaystatus = WxPayOrderServiceHelper.getPayStatusFromMap(retMap, oldRecord.getPayOrderNo());
if (EnumPayStatus.PAY_STATUS_SUCCESS.getCode()==wxpaystatus) {
@@ -235,7 +234,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
WxOrder orderParams = new WxOrder();
orderParams.setOrderGroupId(order.getOrderGroupId());
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));
if (count > 0) {
logger.error("重复的拼团>>>" + order);


Загрузка…
Отмена
Сохранить