Browse Source

更新库存bug

release_toaliyun_real
xiaohanzi 6 years ago
parent
commit
16965ae6c0
9 changed files with 138 additions and 92 deletions
  1. +3
    -0
      mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java
  2. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java
  3. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java
  4. +3
    -0
      mallinkService/src/main/java/com/iformall/service/WxOrderService.java
  5. +13
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java
  6. +106
    -76
      mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java
  7. +1
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java
  8. +7
    -1
      mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml
  9. +1
    -1
      mallinkService/src/main/resources/mapper/WxOrderMapper.xml

+ 3
- 0
mallinkSchedule/src/main/java/com/iformall/ScheduleApplication.java View File

@@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
@@ -18,6 +20,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableSwagger2
@EnableRocketMQ
@EnableEncryptableProperties
@EnableAspectJAutoProxy(exposeProxy = true)
public class ScheduleApplication {

@Value("${fm.exception}")


+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxCardInfo.java View File

@@ -16,6 +16,8 @@ import java.util.Date;
@EqualsAndHashCode(callSuper = true)
public class WxCardInfo extends TenantEntity {

private static final long serialVersionUID = 2974374593127477999L;

@Excel(name = "卡号", width = 20, orderNum = "1")
@io.swagger.annotations.ApiModelProperty(value="主键ID-与coupon_order_id一致",name="id")
protected Long id;


+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxCardInfoMapper.java View File

@@ -11,5 +11,7 @@ public interface WxCardInfoMapper extends CommonMapper<WxCardInfo, Long> {
List<WxCardVo> findVoList(WxCardVo wxCardVo);

void updateTransferStatusByCouponId(Long couponId);
List<WxCardInfo> findList(WxCardInfo wxCardInfo);

}

+ 3
- 0
mallinkService/src/main/java/com/iformall/service/WxOrderService.java View File

@@ -226,5 +226,8 @@ public interface WxOrderService {
* H5支付后, 券再注入
*/
Long saveOuterOrderForCoupon(WxCUser user, WxCoupon coupon, Long couponChannelId, String formId, Long couponPasswordId);
int countGroupOrder(Long groupId);

}

+ 13
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java View File

@@ -84,15 +84,26 @@ 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(),"参团人数已满,将稍后退款。");
}
Integer remainPeople = wxOrderGroup.getRemainPeople()-1;
//此处拼团数量应从订单总数查询
int ordercount = wxOrderService.countGroupOrder(orderGroupId);
Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount;
//Integer remainPeople = wxOrderGroup.getRemainPeople()-1;
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) {
//TODO 这个时候应该要发起异步退款。
//这个时候应该要发起异步退款。
wxOrderGroup.setStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_FAILD.getCode());
order.setOrderStatus(wxOrderGroup.getStatus());
wxOrderMapper.updateById(order);
wxOrderGroupMapper.updateOrderGroup(wxOrderGroup);
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,将稍后退款.");
}



+ 106
- 76
mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java View File

@@ -28,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -1006,86 +1007,102 @@ public class WxOrderServiceImpl implements WxOrderService {
if (coupon.getType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) {
isCard = true;
}
final IdWorker idWorker = IdWorker.get();

WxCouponOrder couponOrder = new WxCouponOrder();
couponOrder.setId(idWorker.nextId());
couponOrder.updateTenantInfo(order);
couponOrder.setCouponId(order.getProductId());
couponOrder.setCouponType(coupon.getType());
couponOrder.setCUserId(user.getId());
couponOrder.setOwnerId(user.getId());
couponOrder.setAutoRefund(coupon.getAutoRefund());
couponOrder.setOrderId(order.getOrderNumber());
couponOrder.setExpiredTime(valid_date);
if (!isCard) {
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode());
} else {
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_USING.getCode());
//TODO 如果orderId已经存在,则不再添加
WxCouponOrder couponOrderQ = new WxCouponOrder();
couponOrderQ.setOrderId(order.getId());
WxCouponOrder couponOrder = null;
List<WxCouponOrder> couponorderlist = wxCouponOrderMapper.findList(couponOrderQ);
if (null != couponorderlist && couponorderlist.size() > 0 ) {
couponOrder = couponorderlist.get(0);
}else {
final IdWorker idWorker = IdWorker.get();
couponOrder = new WxCouponOrder();
couponOrder.setId(idWorker.nextId());
couponOrder.updateTenantInfo(order);
couponOrder.setCouponId(order.getProductId());
couponOrder.setCouponType(coupon.getType());
couponOrder.setCUserId(user.getId());
couponOrder.setOwnerId(user.getId());
couponOrder.setAutoRefund(coupon.getAutoRefund());
couponOrder.setOrderId(order.getOrderNumber());
couponOrder.setExpiredTime(valid_date);
if (!isCard) {
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode());
} else {
couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_USING.getCode());
}
couponOrder.setCreateDate(curr);
couponOrder.setUpdateDate(curr);
couponOrder.setCouponPrice(order.getPayment());
wxCouponOrderMapper.insert(couponOrder);
}
couponOrder.setCreateDate(curr);
couponOrder.setUpdateDate(curr);
couponOrder.setCouponPrice(order.getPayment());

wxCouponOrderMapper.insert(couponOrder);

/// 储值卡信息添加
if (isCard) {
Integer fee = 0;
WxCardInfo cardInfo = new WxCardInfo();
cardInfo.setId(couponOrder.getId());
cardInfo.updateTenantInfo(order);
cardInfo.setCouponId(order.getProductId());
cardInfo.setAmount(coupon.getPrice());
cardInfo.setSaleAmount(coupon.getSalePrice());
cardInfo.setRemainingAmount(coupon.getPrice());
if (!coupon.checkIsFree()) {
// 有价卡
cardInfo.setTransactionId(payOrder.getTransactionId());
if (payOrder.getShareAmount() != null) {
// 开启分账
fee = payOrder.getPayAmount() - payOrder.getShareAmount();
cardInfo.setShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRemainingShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRateAmount(payOrder.getRateAmount());
} else {
// 未开启分账
fee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRate(), false);
Integer shareAmount = payOrder.getPayAmount() - fee;
cardInfo.setShareFeeAmount(shareAmount);
cardInfo.setRemainingShareFeeAmount(shareAmount);
if (payAccount.getRealRate() != null) {
int iRealChargeFee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRealRate(), true);
if (fee > iRealChargeFee) {
cardInfo.setRateAmount(fee - iRealChargeFee);
}
}
}
} else {
// 免费卡
cardInfo.setShareFeeAmount(0);
cardInfo.setRemainingShareFeeAmount(0);
cardInfo.setRateAmount(0);
if (coupon.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) {
WxCouponPassword updateCPwd = new WxCouponPassword();
updateCPwd.setId(couponPasswordId);
updateCPwd.setCardId(cardInfo.getId());
updateCPwd.setStatus(EnumCouponPasswordStatus.USED.getCode());
couponPasswordMapper.updateById(updateCPwd);
}
}

cardInfo.setServiceFeeAmount(fee);
cardInfo.setCreateDate(curr);
cardInfo.setUpdateDate(curr);
cardInfo.setSupportTransfer(coupon.getSupportTransfer());

//检查卡是否下架,如果是,不可转赠
WxCouponChannel wxCouponChannel = wxCouponChannelMapper.selectById(order.getCouponChannelId());
if (wxCouponChannel != null && wxCouponChannel.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode())) {
cardInfo.setSupportTransfer(EnumCouponTransfer.NO.getCode());
}
wxCardInfoMapper.insert(cardInfo);
//判断该transctionId是否已经存在,如果存在,则不添加
WxCardInfo cardInfoq = new WxCardInfo();
cardInfoq.setTransactionId(payOrder.getTransactionId());
List<WxCardInfo> cardInfoList = wxCardInfoMapper.findList(cardInfoq);
if (null != cardInfoList && cardInfoList.size() > 0) {
//do nothing
}else {
Integer fee = 0;
WxCardInfo cardInfo = new WxCardInfo();
cardInfo.setId(couponOrder.getId());
cardInfo.updateTenantInfo(order);
cardInfo.setCouponId(order.getProductId());
cardInfo.setAmount(coupon.getPrice());
cardInfo.setSaleAmount(coupon.getSalePrice());
cardInfo.setRemainingAmount(coupon.getPrice());
if (!coupon.checkIsFree()) {
// 有价卡
cardInfo.setTransactionId(payOrder.getTransactionId());
if (payOrder.getShareAmount() != null) {
// 开启分账
fee = payOrder.getPayAmount() - payOrder.getShareAmount();
cardInfo.setShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRemainingShareFeeAmount(payOrder.getShareAmount());
cardInfo.setRateAmount(payOrder.getRateAmount());
} else {
// 未开启分账
fee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRate(), false);
Integer shareAmount = payOrder.getPayAmount() - fee;
cardInfo.setShareFeeAmount(shareAmount);
cardInfo.setRemainingShareFeeAmount(shareAmount);
if (payAccount.getRealRate() != null) {
int iRealChargeFee = PayUtils.getPayRate(payOrder.getPayAmount(), payAccount.getRealRate(), true);
if (fee > iRealChargeFee) {
cardInfo.setRateAmount(fee - iRealChargeFee);
}
}
}
} else {
// 免费卡
cardInfo.setShareFeeAmount(0);
cardInfo.setRemainingShareFeeAmount(0);
cardInfo.setRateAmount(0);
if (coupon.getPasswordSupport().equals(EnumCouponPasswordSupport.SUPPORTED.getCode())) {
WxCouponPassword updateCPwd = new WxCouponPassword();
updateCPwd.setId(couponPasswordId);
updateCPwd.setCardId(cardInfo.getId());
updateCPwd.setStatus(EnumCouponPasswordStatus.USED.getCode());
couponPasswordMapper.updateById(updateCPwd);
}
}
cardInfo.setServiceFeeAmount(fee);
cardInfo.setCreateDate(curr);
cardInfo.setUpdateDate(curr);
cardInfo.setSupportTransfer(coupon.getSupportTransfer());
//检查卡是否下架,如果是,不可转赠
WxCouponChannel wxCouponChannel = wxCouponChannelMapper.selectById(order.getCouponChannelId());
if (wxCouponChannel != null && wxCouponChannel.getStatus().equals(EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode())) {
cardInfo.setSupportTransfer(EnumCouponTransfer.NO.getCode());
}
wxCardInfoMapper.insert(cardInfo);
}
}
return couponOrder;
}
@@ -2261,5 +2278,18 @@ public class WxOrderServiceImpl implements WxOrderService {
return orderGroupId != null && !orderGroupId.equals(0L);
}

@Override
public int countGroupOrder(Long groupId) {
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());
query.setStatusS(statusS);
return wxOrderMapper.countList(query);
}


}

+ 1
- 12
mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java View File

@@ -124,6 +124,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
public void handleSuccessOrder(WxPayOrder oldRecord,WxOrder order,Map<String, String> retMap) {
Date curDate = new Date();
if (oldRecord.getPayOrderStatus() != EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) {
//因为此处是处理订单支付成功了但是订单状态为未支付成功的异常状态,库存不应该再扣减
//更新wxPayOrder
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());
String timEndStr = retMap.get("time_end");
@@ -200,12 +201,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
if (repeatPay) {
if (oldRecord.getPayOrderStatus()!=EnumPayStatus.PAY_STATUS_WAIT.getCode()) {
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode());
Long payno = idworker.nextId();
if (null == payno || payno.longValue() <=0) {
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单支付流水号生成失败!handleWxOrderQuery:oldRecord:"+oldRecord+":wxstatus:"+wxpaystatus);
}
oldRecord.setPayOrderNo(String.valueOf(payno));
int sqlRow0 =wxPayOrderMapper.updateById(oldRecord);
if (sqlRow0 != 1) {
logger.error("pay order update error: " + oldRecord.toString());
@@ -349,12 +344,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
}else if(oldRecord.getPayOrderStatus()==EnumPayStatus.PAY_STATUS_FAIL.getCode()||
oldRecord.getPayOrderStatus()==EnumPayStatus.PAY_STATUS_NOTPAY.getCode()) {
oldRecord.setPayOrderStatus(EnumPayStatus.PAY_STATUS_WAIT.getCode());
//重新设置支付no
Long payno = idworker.nextId();
if (null == payno || payno.longValue() <=0) {
throw new MallinkException(ErrorCode.PAY_ORDER_PAYING.getCode(),"订单支付流水号生成失败!service oldRecord:"+oldRecord);
}
oldRecord.setPayOrderNo(String.valueOf(payno));
int sqlRow0 = wxPayOrderMapper.updateById(oldRecord);
if (sqlRow0 != 1) {
logger.error("pay order update error: " + record.toString());


+ 7
- 1
mallinkService/src/main/resources/mapper/WxCardInfoMapper.xml View File

@@ -25,7 +25,7 @@
`share_fee_amount`,`remaining_share_fee_amount`, `rate_amount`,
`create_date`,`update_date`,`support_transfer`
</sql>
<sql id="dynamicWhereConditions">
where 1 = 1
<if test=" null != id ">
@@ -211,4 +211,10 @@
update wx_card_info set support_transfer=0,update_date=now() where support_transfer=1 and coupon_id=#{couponId}
</update>
<select id="findList" parameterType="com.iformall.domain.po.WxCardInfo" resultMap="BaseResultMap">
select <include refid="allColumns" />
from wx_card_info
<include refid="dynamicWhereConditions" />
</select>
</mapper>

+ 1
- 1
mallinkService/src/main/resources/mapper/WxOrderMapper.xml View File

@@ -133,7 +133,7 @@
</select>

<select id="countList" parameterType="com.iformall.domain.po.WxOrder" resultType="java.lang.Integer">
select count(*) from wx_order
select count(1) from wx_order
<include refid="dynamicWhereConditions"/>
</select>



Loading…
Cancel
Save