diff --git a/mallinkPublicApi/src/main/java/com/iformall/controller/UserThirdCircleOrderController.java b/mallinkPublicApi/src/main/java/com/iformall/controller/UserThirdCircleOrderController.java index 31a7eb6a1..168f995f3 100644 --- a/mallinkPublicApi/src/main/java/com/iformall/controller/UserThirdCircleOrderController.java +++ b/mallinkPublicApi/src/main/java/com/iformall/controller/UserThirdCircleOrderController.java @@ -90,6 +90,7 @@ public class UserThirdCircleOrderController extends BaseController { thirdPartyOrders.setUserPhone(userPhone); thirdPartyOrders.setTimeEnd(timeEndDate); thirdPartyOrders.setAmount(amount); + thirdPartyOrders.setPayAmount(amount); thirdPartyOrders.setSummary(summary); try{ thirdPartyOrdersService.createOrder(thirdPartyOrders); diff --git a/mallinkService/src/main/java/com/iformall/mapper/AliBusinessCircleOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/AliBusinessCircleOrderMapper.java index a5959ef23..d1d5c70b6 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/AliBusinessCircleOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/AliBusinessCircleOrderMapper.java @@ -14,6 +14,7 @@ public interface AliBusinessCircleOrderMapper extends CommonMapper getRefundOrderByTransactionId(AliBusinessCircleOrder record); /** diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java index 353a9376d..78a418f9a 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxBusinessCircleOrderMapper.java @@ -12,6 +12,7 @@ public interface WxBusinessCircleOrderMapper extends CommonMapper getRefundOrderByTransactionId(WxBusinessCircleOrder record); /** diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java index 08aa80f92..45da1e3a3 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyOrdersMapper.java @@ -14,6 +14,7 @@ public interface WxThirdPartyOrdersMapper extends CommonMapper getRefundOrderByTransactionId(WxThirdPartyOrders record); /** diff --git a/mallinkService/src/main/java/com/iformall/service/AliBusinessCircleOrderService.java b/mallinkService/src/main/java/com/iformall/service/AliBusinessCircleOrderService.java index 2b9d51599..777319059 100644 --- a/mallinkService/src/main/java/com/iformall/service/AliBusinessCircleOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/AliBusinessCircleOrderService.java @@ -31,6 +31,7 @@ public interface AliBusinessCircleOrderService { * @return */ AliBusinessCircleOrder getOrderByTransactionId(String transactionId, String tenantId); + AliBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId); List getRefundOrderByTransactionId(String transactionId, String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java index 4264313d2..5deb4972d 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxBusinessCircleOrderService.java @@ -2,7 +2,6 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxBusinessCircleOrder; -import org.springframework.scheduling.annotation.Async; import java.util.List; @@ -32,6 +31,7 @@ public interface WxBusinessCircleOrderService { * @return */ WxBusinessCircleOrder getOrderByTransactionId(String transactionId, String tenantId); + WxBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId); List getRefundOrderByTransactionId(String transactionId, String tenantId); void createOrder(WxBusinessCircleOrder record); diff --git a/mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java b/mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java index fe480c02c..8b481babf 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxThirdPartyOrdersService.java @@ -1,7 +1,6 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; -import com.iformall.domain.po.WxBusinessCircleOrder; import com.iformall.domain.po.WxThirdPartyOrders; import com.iformall.enums.EnumThirdOrderType; @@ -33,6 +32,7 @@ public interface WxThirdPartyOrdersService { * @return */ WxThirdPartyOrders getOrderByTransactionId(EnumThirdOrderType orderType, String transactionId, String tenantId); + WxThirdPartyOrders getRefundOrderByRefundId(String refundId, String tenantId); List getRefundOrderByTransactionId(EnumThirdOrderType orderType, String transactionId, String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/AliBusinessCircleOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/AliBusinessCircleOrderServiceImpl.java index 18632f04d..831726e4a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/AliBusinessCircleOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/AliBusinessCircleOrderServiceImpl.java @@ -1,13 +1,10 @@ package com.iformall.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; import com.iformall.enums.*; -import com.iformall.exception.MallinkException; import com.iformall.mapper.AliBusinessCircleOrderMapper; import com.iformall.service.*; import com.iformall.utils.RedisLock; @@ -68,6 +65,14 @@ public class AliBusinessCircleOrderServiceImpl implements AliBusinessCircleOrder return aliBusinessCircleOrderMapper.getOrderByTransactionId(recordQ); } + @Override + public AliBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId) { + AliBusinessCircleOrder recordQ = new AliBusinessCircleOrder(); + recordQ.setRefundId(refundId); + recordQ.setTenantId(tenantId); + return aliBusinessCircleOrderMapper.getRefundOrderByRefundId(recordQ); + } + @Override public List getRefundOrderByTransactionId(String transactionId, String tenantId) { AliBusinessCircleOrder recordQ = new AliBusinessCircleOrder(); @@ -165,89 +170,96 @@ public class AliBusinessCircleOrderServiceImpl implements AliBusinessCircleOrder @Override public void insertRefundNoticeOrder(AliBusinessCircleOrder record) { - String lockKey = StringUtils.join(ALI_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":","lock"); - long time = System.currentTimeMillis() + 2000; - String timeStr = String.valueOf(time); - if (redisLock.lock2(lockKey, timeStr)) { - AliBusinessCircleOrder order = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); - if(order == null){ - logger.error("--Ali商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); - }else{ - List refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); - Integer amount = order.getPayAmount(); - Integer increasedPoints = order.getIncreasedPoints(); - Integer refundAmount = 0; - Integer refundIncreasedPoints = 0; - - if(refundOrders != null && refundOrders.size()>0){ - for (AliBusinessCircleOrder ro:refundOrders) { - refundAmount += ro.getRefundAmount(); - refundIncreasedPoints += ro.getIncreasedPoints(); - } - } - if(refundAmount >= amount){ - logger.error("--Ali商圈退款--已经退款--transactionId="+record.getTransactionId()); - }else if((refundAmount + record.getRefundAmount()) > amount ){ - logger.error("--Ali商圈退款--退款金额超限--transactionId="+record.getTransactionId()); + AliBusinessCircleOrder order = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); + if(order == null){ + logger.error("--Ali商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); + }else{ + String lockKey = StringUtils.join(ALI_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":","lock"); + long time = System.currentTimeMillis() + 2000; + String timeStr = String.valueOf(time); + if (redisLock.lock2(lockKey, timeStr)) { + AliBusinessCircleOrder refundOrder = this.getRefundOrderByRefundId(record.getRefundId(),record.getTenantId()); + if(refundOrder != null){ + logger.error("--Ali商圈退款--退款消息已存在---RefundId="+record.getRefundId()); }else{ - Date now = new Date(); - final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); - record.setCreateTime(now); - record.setUpdateTime(now); - - record.setCUserId(order.getCUserId()); - record.setMerchantId(order.getMerchantId()); - aliBusinessCircleOrderMapper.insertRefundNoticeOrder(record); - - if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ - WxCreditHistory creditHistory = new WxCreditHistory(); - creditHistory.setTenantId(record.getFinalTenantId()); - creditHistory.setOperatorType(EnumUserType.ALI_CIRCLE.getCode()); - creditHistory.setOperatorId(record.getCUserId()); - creditHistory.setCUserId(record.getCUserId()); - creditHistory.setCreateDate(new Date()); - creditHistory.setCouponId(record.getId()); - creditHistory.setMerchantId(record.getMerchantId()); - creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); - int points = 0; - if((refundAmount + record.getRefundAmount()) == amount){ - points = increasedPoints - refundIncreasedPoints; - }else{ - points = new BigDecimal(order.getIncreasedPoints()) - .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) - .multiply(new BigDecimal(record.getRefundAmount())) - .intValue(); - } + List refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); + Integer amount = order.getPayAmount(); + Integer increasedPoints = order.getIncreasedPoints(); + Integer refundAmount = 0; + Integer refundIncreasedPoints = 0; - creditHistory.setCreditNum(points); - creditHistory.setSpend(0-record.getRefundAmount()); - creditHistory.setChangePurpose("Ali商圈消费退款:商户["+record.getMallName()+"] ("+record.getRefundAmountStr()+"元) "); - creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); - Integer creditNum = 0; - if (creditHistory.getCreditNum() != null) { - creditNum = creditHistory.getCreditNum(); - } - if(creditNum == 0){ - return; + if(refundOrders != null && refundOrders.size()>0){ + for (AliBusinessCircleOrder ro:refundOrders) { + refundAmount += ro.getRefundAmount(); + refundIncreasedPoints += ro.getIncreasedPoints(); } + } + if(refundAmount >= amount){ + logger.error("--Ali商圈退款--已经退款--transactionId="+record.getTransactionId()); + }else if((refundAmount + record.getRefundAmount()) > amount ){ + logger.error("--Ali商圈退款--退款金额超限--transactionId="+record.getTransactionId()); + }else{ + Date now = new Date(); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(now); + record.setUpdateTime(now); + + record.setAmount(order.getAmount()); + record.setPayAmount(order.getPayAmount()); + record.setCUserId(order.getCUserId()); + record.setMerchantId(order.getMerchantId()); + aliBusinessCircleOrderMapper.insertRefundNoticeOrder(record); + + if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setTenantId(record.getFinalTenantId()); + creditHistory.setOperatorType(EnumUserType.ALI_CIRCLE.getCode()); + creditHistory.setOperatorId(record.getCUserId()); + creditHistory.setCUserId(record.getCUserId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setCouponId(record.getId()); + creditHistory.setMerchantId(record.getMerchantId()); + creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); + int points = 0; + if((refundAmount + record.getRefundAmount()) == amount){ + points = increasedPoints - refundIncreasedPoints; + }else{ + points = new BigDecimal(order.getIncreasedPoints()) + .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) + .multiply(new BigDecimal(record.getRefundAmount())) + .intValue(); + } + + creditHistory.setCreditNum(points); + creditHistory.setSpend(0-record.getRefundAmount()); + creditHistory.setChangePurpose("Ali商圈消费退款:商户["+record.getMallName()+"] ("+record.getRefundAmountStr()+"元) "); + creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); + Integer creditNum = 0; + if (creditHistory.getCreditNum() != null) { + creditNum = creditHistory.getCreditNum(); + } + if(creditNum == 0){ + return; + } - record.setIncreasedPoints(creditNum); - record.setPointsUpdateTime(creditHistory.getCreateDate()); - this.updatePoints(record); + record.setIncreasedPoints(creditNum); + record.setPointsUpdateTime(creditHistory.getCreateDate()); + this.updatePoints(record); + } } } - } - redisLock.unlock(lockKey, timeStr); - }else{ - logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - }finally { redisLock.unlock(lockKey, timeStr); + }else{ + logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + }finally { + redisLock.unlock(lockKey, timeStr); + } } } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java index 72579535b..ef254d391 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxBusinessCircleOrderServiceImpl.java @@ -3,13 +3,12 @@ package com.iformall.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; -import com.iformall.domain.po.WxBusinessCircleOrder; -import com.iformall.domain.po.WxCUser; -import com.iformall.domain.po.WxCreditHistory; -import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.*; import com.iformall.enums.*; import com.iformall.mapper.WxBusinessCircleOrderMapper; import com.iformall.service.*; +import com.iformall.utils.RedisLock; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +23,11 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private static final String WX_CIRCLE_KEY = "CIRCLE:WX:"; + + @Autowired + RedisLock redisLock; + @Autowired WxBusinessCircleOrderMapper wxBusinessCircleOrderMapper; @@ -61,6 +65,14 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe return wxBusinessCircleOrderMapper.getOrderByTransactionId(recordQ); } + @Override + public WxBusinessCircleOrder getRefundOrderByRefundId(String refundId, String tenantId) { + WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); + recordQ.setRefundId(refundId); + recordQ.setTenantId(tenantId); + return wxBusinessCircleOrderMapper.getRefundOrderByRefundId(recordQ); + } + @Override public List getRefundOrderByTransactionId(String transactionId, String tenantId) { WxBusinessCircleOrder recordQ = new WxBusinessCircleOrder(); @@ -71,129 +83,57 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe @Override public void createOrder(WxBusinessCircleOrder record) { - WxBusinessCircleOrder byTransactionId = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); - if(byTransactionId != null){ - logger.error("--Wx商圈付款--订单消息已存在---byTransactionId="+byTransactionId.getTransactionId()); - }else{ - Date now = new Date(); - final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); - record.setCreateTime(now); - record.setUpdateTime(now); + String lockKey = StringUtils.join(WX_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":", "lock"); + long time = System.currentTimeMillis() + 2000; + String timeStr = String.valueOf(time); + if (redisLock.lock2(lockKey, timeStr)) { - //TODO 第三方获取门店(标识可能发生变化) -// WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getWxShopNumber())); - WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getWxShopNumber()); - if(wxMerchant != null){ - record.setMerchantId(wxMerchant.getId()); - }else{ - logger.error("--Wx商圈付款通知消息未找到门店--shopName="+record.getWxShopName()+"&shopNumber="+record.getWxShopNumber()); - } - WxCUser userQ = new WxCUser(); - userQ.updateTenantInfo(record); - userQ.setOpenId(record.getOpenid()); - userQ.setAppId(record.getAppid()); - WxCUser user = wxCUserService.getByOpenId(userQ); - if(user != null && user.getUserId() != null){ - record.setCUserId(user.getUserId()); - }else{ - logger.error("--Wx商圈付款通知消息未找到会员--openid="+record.getOpenid()); - } - wxBusinessCircleOrderMapper.insertNoticeOrder(record); - - if(record.getCUserId() == null){ - return; - } - Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); - if(wxMerchant != null){ - businessId = wxMerchant.getBusinessId(); - } - WxCreditHistory creditHistory = new WxCreditHistory(); - creditHistory.setTenantId(record.getFinalTenantId()); - creditHistory.setOperatorType(EnumUserType.BUSINESS_CIRCLE.getCode()); - creditHistory.setOperatorId(record.getCUserId()); - creditHistory.setCUserId(record.getCUserId()); - creditHistory.setCreateDate(now); - creditHistory.setCouponId(record.getId()); - creditHistory.setBusinessId(businessId); - creditHistory.setMerchantId(record.getMerchantId()); - creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); - creditHistory.setSpend(record.getPayAmount()); - creditHistory.setChangePurpose("Wx商圈消费:消费商户["+record.getWxShopName()+"] ("+record.getPayAmountStr()+"元) "); - creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); - Integer creditNum = 0; - if (creditHistory.getCreditNum() != null) { - creditNum = creditHistory.getCreditNum(); - } - if(creditNum == 0){ - return; - } - record.setIncreasedPoints(creditNum); - record.setPointsUpdateTime(creditHistory.getCreateDate()); - this.updatePoints(record); - - //同步积分 - wxCallBackService.notifyPoints(record); - - } - } - - @Override - public void insertRefundNoticeOrder(WxBusinessCircleOrder record) { - WxBusinessCircleOrder order = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); - if(order == null){ - logger.error("--Wx商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); - }else{ - List refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); - Integer amount = order.getPayAmount(); - Integer increasedPoints = order.getIncreasedPoints(); - Integer refundAmount = 0; - Integer refundIncreasedPoints = 0; - - if(refundOrders != null && refundOrders.size()>0){ - for (WxBusinessCircleOrder ro:refundOrders) { - refundAmount += ro.getRefundAmount(); - refundIncreasedPoints += ro.getIncreasedPoints(); - } - } - if(refundAmount >= amount){ - logger.error("--Wx商圈退款--已经退款--transactionId="+record.getTransactionId()); - }else if((refundAmount + record.getRefundAmount()) > amount ){ - logger.error("--Wx商圈退款--退款金额超限--transactionId="+record.getTransactionId()); - }else{ + WxBusinessCircleOrder byTransactionId = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); + if(byTransactionId != null){ + logger.error("--Wx商圈付款--订单消息已存在---byTransactionId="+byTransactionId.getTransactionId()); + }else { Date now = new Date(); final IdWorker idWorker = IdWorker.get(); record.setId(idWorker.nextId()); record.setCreateTime(now); record.setUpdateTime(now); - record.setCUserId(order.getCUserId()); - record.setMerchantId(order.getMerchantId()); - wxBusinessCircleOrderMapper.insertRefundNoticeOrder(record); - - if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ + //TODO 第三方获取门店(标识可能发生变化) +// WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getWxShopNumber())); + WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getWxShopNumber()); + if (wxMerchant != null) { + record.setMerchantId(wxMerchant.getId()); + } else { + logger.error("--Wx商圈付款通知消息未找到门店--shopName=" + record.getWxShopName() + "&shopNumber=" + record.getWxShopNumber()); + } + WxCUser userQ = new WxCUser(); + userQ.updateTenantInfo(record); + userQ.setOpenId(record.getOpenid()); + userQ.setAppId(record.getAppid()); + WxCUser user = wxCUserService.getByOpenId(userQ); + if (user != null && user.getUserId() != null) { + record.setCUserId(user.getUserId()); + } else { + logger.error("--Wx商圈付款通知消息未找到会员--openid=" + record.getOpenid()); + } + wxBusinessCircleOrderMapper.insertNoticeOrder(record); + if(record.getCUserId() != null){ + Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); + if(wxMerchant != null){ + businessId = wxMerchant.getBusinessId(); + } WxCreditHistory creditHistory = new WxCreditHistory(); creditHistory.setTenantId(record.getFinalTenantId()); creditHistory.setOperatorType(EnumUserType.BUSINESS_CIRCLE.getCode()); creditHistory.setOperatorId(record.getCUserId()); creditHistory.setCUserId(record.getCUserId()); - creditHistory.setCreateDate(new Date()); + creditHistory.setCreateDate(now); creditHistory.setCouponId(record.getId()); + creditHistory.setBusinessId(businessId); creditHistory.setMerchantId(record.getMerchantId()); - creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); - int points = 0; - if((refundAmount + record.getRefundAmount()) == amount){ - points = increasedPoints - refundIncreasedPoints; - }else{ - points = new BigDecimal(order.getIncreasedPoints()) - .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) - .multiply(new BigDecimal(record.getRefundAmount())) - .intValue(); - } - - creditHistory.setCreditNum(points); - creditHistory.setSpend(0-record.getRefundAmount()); - creditHistory.setChangePurpose("Wx商圈消费退款:商户["+record.getWxShopName()+"] ("+record.getRefundAmountStr()+"元) "); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setSpend(record.getPayAmount()); + creditHistory.setChangePurpose("Wx商圈消费:消费商户["+record.getWxShopName()+"] ("+record.getPayAmountStr()+"元) "); creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); Integer creditNum = 0; if (creditHistory.getCreditNum() != null) { @@ -202,12 +142,121 @@ public class WxBusinessCircleOrderServiceImpl implements WxBusinessCircleOrderSe if(creditNum == 0){ return; } - record.setIncreasedPoints(creditNum); record.setPointsUpdateTime(creditHistory.getCreateDate()); this.updatePoints(record); + + //同步积分 + wxCallBackService.notifyPoints(record); + } + + } + redisLock.unlock(lockKey, timeStr); + + }else { + logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + }finally { + redisLock.unlock(lockKey, timeStr); + } + } + + } + + @Override + public void insertRefundNoticeOrder(WxBusinessCircleOrder record) { + WxBusinessCircleOrder order = this.getOrderByTransactionId(record.getTransactionId(),record.getTenantId()); + if(order == null){ + logger.error("--Wx商圈退款--付款消息未找到--transactionId="+record.getTransactionId()); + }else{ + String lockKey = StringUtils.join(WX_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":", "lock"); + long time = System.currentTimeMillis() + 2000; + String timeStr = String.valueOf(time); + if (redisLock.lock2(lockKey, timeStr)) { + WxBusinessCircleOrder refundOrder = this.getRefundOrderByRefundId(record.getRefundId(),record.getTenantId()); + if(refundOrder != null){ + logger.error("--Ali商圈退款--退款消息已存在---RefundId="+record.getRefundId()); + }else{ + List refundOrders = this.getRefundOrderByTransactionId(record.getTransactionId(),record.getTenantId()); + Integer amount = order.getPayAmount(); + Integer increasedPoints = order.getIncreasedPoints(); + Integer refundAmount = 0; + Integer refundIncreasedPoints = 0; + + if(refundOrders != null && refundOrders.size()>0){ + for (WxBusinessCircleOrder ro:refundOrders) { + refundAmount += ro.getRefundAmount(); + refundIncreasedPoints += ro.getIncreasedPoints(); + } + } + if(refundAmount >= amount){ + logger.error("--Wx商圈退款--已经退款--transactionId="+record.getTransactionId()); + }else if((refundAmount + record.getRefundAmount()) > amount ){ + logger.error("--Wx商圈退款--退款金额超限--transactionId="+record.getTransactionId()); + }else{ + Date now = new Date(); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(now); + record.setUpdateTime(now); + + record.setCUserId(order.getCUserId()); + record.setMerchantId(order.getMerchantId()); + wxBusinessCircleOrderMapper.insertRefundNoticeOrder(record); + + if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setTenantId(record.getFinalTenantId()); + creditHistory.setOperatorType(EnumUserType.BUSINESS_CIRCLE.getCode()); + creditHistory.setOperatorId(record.getCUserId()); + creditHistory.setCUserId(record.getCUserId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setCouponId(record.getId()); + creditHistory.setMerchantId(record.getMerchantId()); + creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); + int points = 0; + if((refundAmount + record.getRefundAmount()) == amount){ + points = increasedPoints - refundIncreasedPoints; + }else{ + points = new BigDecimal(order.getIncreasedPoints()) + .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) + .multiply(new BigDecimal(record.getRefundAmount())) + .intValue(); + } + + creditHistory.setCreditNum(points); + creditHistory.setSpend(0-record.getRefundAmount()); + creditHistory.setChangePurpose("Wx商圈消费退款:商户["+record.getWxShopName()+"] ("+record.getRefundAmountStr()+"元) "); + creditHistory = creditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); + Integer creditNum = 0; + if (creditHistory.getCreditNum() != null) { + creditNum = creditHistory.getCreditNum(); + } + if(creditNum == 0){ + return; + } + + record.setIncreasedPoints(creditNum); + record.setPointsUpdateTime(creditHistory.getCreateDate()); + this.updatePoints(record); + } + } + } + redisLock.unlock(lockKey, timeStr); + }else { + logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + }finally { + redisLock.unlock(lockKey, timeStr); } } + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java index aca4a08b7..9a956d457 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxThirdPartyOrdersServiceImpl.java @@ -9,6 +9,7 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxThirdPartyOrdersMapper; import com.iformall.service.*; +import com.iformall.utils.RedisLock; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,8 +25,14 @@ import static org.springframework.transaction.annotation.Propagation.REQUIRED; @Service public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private static final String THIRD_CIRCLE_KEY = "CIRCLE:TH:"; + + @Autowired + RedisLock redisLock; + @Autowired WxThirdPartyOrdersMapper wxThirdPartyOrdersMapper; @@ -65,6 +72,14 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService return wxThirdPartyOrdersMapper.getOrderByTransactionId(recordQ); } + @Override + public WxThirdPartyOrders getRefundOrderByRefundId(String refundId, String tenantId) { + WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); + recordQ.setRefundId(refundId); + recordQ.setTenantId(tenantId); + return wxThirdPartyOrdersMapper.getRefundOrderByRefundId(recordQ); + } + @Override public List getRefundOrderByTransactionId(EnumThirdOrderType orderType, String transactionId, String tenantId) { WxThirdPartyOrders recordQ = new WxThirdPartyOrders(); @@ -76,74 +91,89 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService @Override public void createOrder(WxThirdPartyOrders record) { - WxThirdPartyOrders byTransactionId = this.getOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); - if(byTransactionId != null){ - logger.error("--第三方付款--通知消息已存在---byTransactionId="+byTransactionId.getTransactionId()); - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); - }else{ - Date now = new Date(); - final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); - record.setCreateTime(now); - record.setUpdateTime(now); + String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getTransactionId(), ":",EnumYesOrNo.NO.getCode(),":", "lock"); + long time = System.currentTimeMillis() + 2000; + String timeStr = String.valueOf(time); + if (redisLock.lock2(lockKey, timeStr)) { + WxThirdPartyOrders byTransactionId = this.getOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); + if(byTransactionId != null){ + logger.error("--第三方付款--通知消息已存在---byTransactionId="+byTransactionId.getTransactionId()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); + }else{ + Date now = new Date(); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(now); + record.setUpdateTime(now); - record.setSourceType(EnumThirdOrderType.RMB_PAY.getCode()); + record.setSourceType(EnumThirdOrderType.RMB_PAY.getCode()); - //TODO 第三方获取门店(标识可能发生变化) + //TODO 第三方获取门店(标识可能发生变化) // WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getShopNumber())); - WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getShopNumber()); - if(wxMerchant != null){ - record.setMerchantId(wxMerchant.getId()); - }else{ - logger.info("--第三方付款通知消息未找到门店--shopName="+record.getShopName()+"&shopNumber="+record.getShopNumber()); - } + WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getShopNumber()); + if(wxMerchant != null){ + record.setMerchantId(wxMerchant.getId()); + }else{ + logger.info("--第三方付款通知消息未找到门店--shopName="+record.getShopName()+"&shopNumber="+record.getShopNumber()); + } - WxCUserBasicInfo basicInfo = null; - basicInfo = wxCUserBasicInfoService.getById(Long.parseLong(record.getUserNumber()), record.getFinalTenantId()); - if(basicInfo == null){ - basicInfo = wxCUserBasicInfoService.registerByPhone(record, record.getUserPhone()); - } + WxCUserBasicInfo basicInfo = null; + basicInfo = wxCUserBasicInfoService.getById(Long.parseLong(record.getUserNumber()), record.getFinalTenantId()); + if(basicInfo == null){ + basicInfo = wxCUserBasicInfoService.registerByPhone(record, record.getUserPhone()); + } - if(basicInfo != null){ - record.setCUserId(basicInfo.getId()); - }else{ - logger.error("--第三方付款通知消息未找到会员--userPhone="+record.getUserPhone()+"$userNumer="+record.getId()); - } - wxThirdPartyOrdersMapper.insertNoticeOrder(record); + if(basicInfo != null){ + record.setCUserId(basicInfo.getId()); + }else{ + logger.error("--第三方付款通知消息未找到会员--userPhone="+record.getUserPhone()+"$userNumer="+record.getId()); + } + wxThirdPartyOrdersMapper.insertNoticeOrder(record); - if(record.getCUserId() == null){ - return; - } - Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); - if(wxMerchant != null){ - businessId = wxMerchant.getBusinessId(); - } - WxCreditHistory creditHistory = new WxCreditHistory(); - creditHistory.setTenantId(record.getFinalTenantId()); - creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); - creditHistory.setOperatorId(record.getCUserId()); - creditHistory.setCUserId(record.getCUserId()); - creditHistory.setCreateDate(now); - creditHistory.setCouponId(record.getId()); - creditHistory.setBusinessId(businessId); - creditHistory.setMerchantId(record.getMerchantId()); - creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); - creditHistory.setSpend(record.getPayAmount()); - creditHistory.setChangePurpose("第三方消费:消费商户["+record.getShopName()+"] ("+record.getPayAmountStr()+"元) "); - creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); - Integer creditNum = 0; - if (creditHistory.getCreditNum() != null) { - creditNum = creditHistory.getCreditNum(); + if(record.getCUserId() == null){ + return; + } + Integer businessId = EnumBusiness.BUSINESS_ID6.getCode(); + if(wxMerchant != null){ + businessId = wxMerchant.getBusinessId(); + } + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setTenantId(record.getFinalTenantId()); + creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); + creditHistory.setOperatorId(record.getCUserId()); + creditHistory.setCUserId(record.getCUserId()); + creditHistory.setCreateDate(now); + creditHistory.setCouponId(record.getId()); + creditHistory.setBusinessId(businessId); + creditHistory.setMerchantId(record.getMerchantId()); + creditHistory.setCreditType(EnumScoreType.CONSUMPTION.getCode()); + creditHistory.setSpend(record.getPayAmount()); + creditHistory.setChangePurpose("第三方消费:消费商户["+record.getShopName()+"] ("+record.getPayAmountStr()+"元) "); + creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); + Integer creditNum = 0; + if (creditHistory.getCreditNum() != null) { + creditNum = creditHistory.getCreditNum(); + } + if(creditNum == 0){ + return; + } + record.setIncreasedPoints(creditNum); + record.setPointsUpdateTime(creditHistory.getCreateDate()); + this.updatePoints(record); } - if(creditNum == 0){ - return; + redisLock.unlock(lockKey, timeStr); + }else { + logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + }finally { + redisLock.unlock(lockKey, timeStr); } - record.setIncreasedPoints(creditNum); - record.setPointsUpdateTime(creditHistory.getCreateDate()); - this.updatePoints(record); + } - } } @@ -153,79 +183,99 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService if(order == null){ logger.error("--第三方退款--付款消息未找到--transactionId="+record.getTransactionId()); throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "付款消息未找到"); - }else if(order.getIsRefund().equals(EnumYesOrNo.YES.getCode())){ - logger.error("--第三方退款--已是退款状态--transactionId="+record.getTransactionId()); - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "已是退款状态"); }else{ - List refundOrders = this.getRefundOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); - Integer amount = order.getPayAmount(); - Integer increasedPoints = order.getIncreasedPoints(); - Integer refundAmount = 0; - Integer refundIncreasedPoints = 0; - - if(refundOrders != null && refundOrders.size()>0){ - for (WxThirdPartyOrders ro:refundOrders) { - refundAmount += ro.getRefundAmount(); - refundIncreasedPoints += ro.getIncreasedPoints(); - } - } - if(refundAmount >= amount){ - logger.error("--第三方退款--已经退款--transactionId="+record.getTransactionId()); - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "已经退款"); - }else if((refundAmount + record.getRefundAmount()) > amount ){ - logger.error("--第三方退款--退款金额超限--transactionId="+record.getTransactionId()); - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款金额超限"); + WxThirdPartyOrders refundOrder = this.getRefundOrderByRefundId(record.getRefundId(),record.getTenantId()); + if(refundOrder != null){ + logger.error("--Ali商圈退款--退款消息已存在---RefundId="+record.getRefundId()); }else{ - - Date now = new Date(); - final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); - record.setCreateTime(now); - record.setUpdateTime(now); - - record.setCUserId(order.getCUserId()); - record.setMerchantId(order.getMerchantId()); - wxThirdPartyOrdersMapper.insertRefundNoticeOrder(record); - - if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ - WxCreditHistory creditHistory = new WxCreditHistory(); - creditHistory.setTenantId(record.getFinalTenantId()); - creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); - creditHistory.setOperatorId(record.getCUserId()); - creditHistory.setCUserId(record.getCUserId()); - creditHistory.setCreateDate(new Date()); - creditHistory.setCouponId(record.getId()); - creditHistory.setMerchantId(record.getMerchantId()); - creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); - int points = 0; - if((refundAmount + record.getRefundAmount()) == amount){ - points = increasedPoints - refundIncreasedPoints; - }else{ - points = new BigDecimal(order.getIncreasedPoints()) - .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) - .multiply(new BigDecimal(record.getRefundAmount())) - .intValue(); + String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getRefundId(), ":",EnumYesOrNo.YES.getCode(),":", "lock"); + long time = System.currentTimeMillis() + 2000; + String timeStr = String.valueOf(time); + if (redisLock.lock2(lockKey, timeStr)) { + List refundOrders = this.getRefundOrderByTransactionId(EnumThirdOrderType.RMB_PAY,record.getTransactionId(),record.getTenantId()); + Integer amount = order.getPayAmount(); + Integer increasedPoints = order.getIncreasedPoints(); + Integer refundAmount = 0; + Integer refundIncreasedPoints = 0; + + if(refundOrders != null && refundOrders.size()>0){ + for (WxThirdPartyOrders ro:refundOrders) { + refundAmount += ro.getRefundAmount(); + refundIncreasedPoints += ro.getIncreasedPoints(); + } } + if(refundAmount >= amount){ + logger.error("--第三方退款--已经退款--transactionId="+record.getTransactionId()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "已经退款"); + }else if((refundAmount + record.getRefundAmount()) > amount ){ + logger.error("--第三方退款--退款金额超限--transactionId="+record.getTransactionId()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "退款金额超限"); + }else{ - creditHistory.setCreditNum(points); - creditHistory.setSpend(0-record.getRefundAmount()); - creditHistory.setChangePurpose("第三方消费退款:商户["+record.getShopName()+"] ("+record.getRefundAmountStr()+"元) "); - creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); - Integer creditNum = 0; - if (creditHistory.getCreditNum() != null) { - creditNum = creditHistory.getCreditNum(); - } - if(creditNum == 0){ - return; + Date now = new Date(); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(now); + record.setUpdateTime(now); + + record.setAmount(order.getAmount()); + record.setPayAmount(order.getPayAmount()); + record.setCUserId(order.getCUserId()); + record.setMerchantId(order.getMerchantId()); + wxThirdPartyOrdersMapper.insertRefundNoticeOrder(record); + + if(order.getEarnPoints().equals(EnumYesOrNo.YES.getCode())){ + WxCreditHistory creditHistory = new WxCreditHistory(); + creditHistory.setTenantId(record.getFinalTenantId()); + creditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); + creditHistory.setOperatorId(record.getCUserId()); + creditHistory.setCUserId(record.getCUserId()); + creditHistory.setCreateDate(new Date()); + creditHistory.setCouponId(record.getId()); + creditHistory.setMerchantId(record.getMerchantId()); + creditHistory.setCreditType(EnumScoreType.REFUND_CONSUMPTION.getCode()); + int points = 0; + if((refundAmount + record.getRefundAmount()) == amount){ + points = increasedPoints - refundIncreasedPoints; + }else{ + points = new BigDecimal(order.getIncreasedPoints()) + .divide(new BigDecimal(order.getPayAmount()),2,BigDecimal.ROUND_HALF_UP) + .multiply(new BigDecimal(record.getRefundAmount())) + .intValue(); + } + + creditHistory.setCreditNum(points); + creditHistory.setSpend(0-record.getRefundAmount()); + creditHistory.setChangePurpose("第三方消费退款:商户["+record.getShopName()+"] ("+record.getRefundAmountStr()+"元) "); + creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record.getTenantId()); + Integer creditNum = 0; + if (creditHistory.getCreditNum() != null) { + creditNum = creditHistory.getCreditNum(); + } + if(creditNum == 0){ + return; + } + + record.setIncreasedPoints(creditNum); + record.setPointsUpdateTime(creditHistory.getCreateDate()); + this.updatePoints(record); + } } - record.setIncreasedPoints(creditNum); - record.setPointsUpdateTime(creditHistory.getCreateDate()); - this.updatePoints(record); + redisLock.unlock(lockKey, timeStr); + }else { + logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + }finally { + redisLock.unlock(lockKey, timeStr); + } } } - } + } @Override @@ -249,42 +299,58 @@ public class WxThirdPartyOrdersServiceImpl implements WxThirdPartyOrdersService record.setCUserId(basicInfo.getId()); - WxThirdPartyOrders byTransactionId = this.getOrderByTransactionId(EnumThirdOrderType.CREDIT_PAY,record.getTransactionId(),record.getTenantId()); - if(byTransactionId != null){ - logger.error("--第三方积分订单--数据已存在---byTransactionId="+byTransactionId.getTransactionId()); - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); - }else{ - Date now = new Date(); - final IdWorker idWorker = IdWorker.get(); - record.setId(idWorker.nextId()); - record.setCreateTime(now); - record.setUpdateTime(now); + String lockKey = StringUtils.join(THIRD_CIRCLE_KEY,record.getTransactionId(), ":CP:", "lock"); + long time = System.currentTimeMillis() + 2000; + String timeStr = String.valueOf(time); + if (redisLock.lock2(lockKey, timeStr)) { + WxThirdPartyOrders byTransactionId = this.getOrderByTransactionId(EnumThirdOrderType.CREDIT_PAY,record.getTransactionId(),record.getTenantId()); + if(byTransactionId != null){ + logger.error("--第三方积分订单--数据已存在---byTransactionId="+byTransactionId.getTransactionId()); + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "订单数据已存在"); + }else{ + Date now = new Date(); + final IdWorker idWorker = IdWorker.get(); + record.setId(idWorker.nextId()); + record.setCreateTime(now); + record.setUpdateTime(now); - record.setSourceType(EnumThirdOrderType.CREDIT_PAY.getCode()); + record.setSourceType(EnumThirdOrderType.CREDIT_PAY.getCode()); - //TODO 第三方获取门店(标识可能发生变化) + //TODO 第三方获取门店(标识可能发生变化) // WxMerchant wxMerchant = wxMerchantService.getById(Long.parseLong(record.getShopNumber())); - WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getShopNumber()); - if(wxMerchant != null){ - record.setMerchantId(wxMerchant.getId()); - }else{ - logger.info("--第三方付款通知消息未找到门店--shopName="+record.getShopName()+"&shopNumber="+record.getShopNumber()); - } + WxMerchant wxMerchant = wxMerchantService.getMerchantByEncode(record.getShopNumber()); + if(wxMerchant != null){ + record.setMerchantId(wxMerchant.getId()); + }else{ + logger.info("--第三方积分抵扣未找到门店--shopName="+record.getShopName()+"&shopNumber="+record.getShopNumber()); + } - WxCreditHistory wxCreditHistory = new WxCreditHistory(); - wxCreditHistory.setTenantId(record.getFinalTenantId()); - wxCreditHistory.setCUserId(basicInfo.getId()); - wxCreditHistory.setOperatorId(basicInfo.getId()); - wxCreditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); - wxCreditHistory.setCreditNum(record.getAmount()); - wxCreditHistory.setCreditType(EnumScoreType.CHANGE_CREDIT.getCode()); - wxCreditHistory.setChangePurpose("第三方消费抵扣{}"+record.getSummary()); - wxCreditHistory.setCouponId(record.getId()); - wxCreditHistoryService.saveOrUpdate(wxCreditHistory,record.getTenantId()); - - wxThirdPartyOrdersMapper.insertNoticeOrder(record); + WxCreditHistory wxCreditHistory = new WxCreditHistory(); + wxCreditHistory.setTenantId(record.getFinalTenantId()); + wxCreditHistory.setCUserId(basicInfo.getId()); + wxCreditHistory.setOperatorId(basicInfo.getId()); + wxCreditHistory.setOperatorType(EnumUserType.THIRD_CIRCLE.getCode()); + wxCreditHistory.setCreditNum(record.getAmount()); + wxCreditHistory.setCreditType(EnumScoreType.CHANGE_CREDIT.getCode()); + wxCreditHistory.setChangePurpose("第三方积分抵扣{}"+record.getSummary()); + wxCreditHistory.setCouponId(record.getId()); + wxCreditHistoryService.saveOrUpdate(wxCreditHistory,record.getTenantId()); + + wxThirdPartyOrdersMapper.insertNoticeOrder(record); + } + redisLock.unlock(lockKey, timeStr); + }else{ + logger.debug("CacheAspect 读库等待中, key:{}: " + lockKey); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + }finally { + redisLock.unlock(lockKey, timeStr); + } } + } diff --git a/mallinkService/src/main/resources/mapper/AliBusinessCircleOrderMapper.xml b/mallinkService/src/main/resources/mapper/AliBusinessCircleOrderMapper.xml index 81dcd1e25..7e6216e48 100644 --- a/mallinkService/src/main/resources/mapper/AliBusinessCircleOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/AliBusinessCircleOrderMapper.xml @@ -138,6 +138,15 @@ and `transaction_id` = #{transactionId} + + + + + +