Commit cc002df1 authored by shiyu's avatar shiyu

超时未支付扣除保证金

parent 18f2f52a
...@@ -201,18 +201,23 @@ public interface CommConsts { ...@@ -201,18 +201,23 @@ public interface CommConsts {
/** /**
* 微信手续费,按照最高的1%计算 * 微信手续费,按照最高的0.006计算
*/ */
public final static double WX_COMMISSION_REBATE = 0.01; public final static double WX_COMMISSION_REBATE = 0.006;
/** /**
* 默认介绍佣金比例 * 默认介绍佣金比例
*/ */
public final static double REBATE = 0.03; public final static double REBATE = 0.02;
/**
* 平台服务费
*/
public final static double CHANNEL_COST_REBATE = 0.01;
/** /**
* 自测账号,不发送短信 * 自测账号,不发送短信
*/ */
public static final List<Long> NOT_SEND_MSG_USERID = Arrays.asList(9357942L, 42273900L, 290775L ,61091901L, 299497L, 61097938L, public static final List<Long> NOT_SEND_MSG_USERID = Arrays.asList(9357942L, 42273900L, 290775L ,61091901L, 299497L, 61097938L,
61113888L, 60652774L, 60684039L, 42192256L, 60652774L, 291997L, 61098908L, 61074146L); 61113888L, 60652774L, 60684039L, 42192256L, 60652774L, 291997L, 61098908L, 61074146L, 2222222222222L, 6666666666L);
} }
...@@ -27,7 +27,9 @@ import com.wwdz.ch.core.entity.DistributionOrderNoticeMsg; ...@@ -27,7 +27,9 @@ import com.wwdz.ch.core.entity.DistributionOrderNoticeMsg;
import com.wwdz.ch.core.entity.PayNoticeMsg; import com.wwdz.ch.core.entity.PayNoticeMsg;
import com.wwdz.ch.core.service.SendMsgService; import com.wwdz.ch.core.service.SendMsgService;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseRecordRequestDto; import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseRecordRequestDto;
import com.wwdz.ch.db.dto.request.openShop.EarnestRecordRequestDto;
import com.wwdz.ch.wx.service.distribution.*; import com.wwdz.ch.wx.service.distribution.*;
import com.wwdz.ch.wx.service.openShop.AuctionEarnestService;
import com.xxdxxs.utils.DateUtils; import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.JsonUtils; import com.xxdxxs.utils.JsonUtils;
import com.xxdxxs.utils.StringUtils; import com.xxdxxs.utils.StringUtils;
...@@ -146,6 +148,9 @@ public class WxPayCallbackController { ...@@ -146,6 +148,9 @@ public class WxPayCallbackController {
@Autowired @Autowired
RedissonClient redissonClient; RedissonClient redissonClient;
@Autowired
AuctionEarnestService auctionEarnestService;
@RequestMapping(value ="/getPayNotify") @RequestMapping(value ="/getPayNotify")
public String payNotify(HttpServletRequest request) throws IOException { public String payNotify(HttpServletRequest request) throws IOException {
logger.info("------------------ 收到微信支付回调通知 ------------------"); logger.info("------------------ 收到微信支付回调通知 ------------------");
...@@ -362,6 +367,17 @@ public class WxPayCallbackController { ...@@ -362,6 +367,17 @@ public class WxPayCallbackController {
//更新拍品配置中的状态为"成交" //更新拍品配置中的状态为"成交"
auctionConfigDao.updateState(distributionOrder.getItemId(), AuctionEnum.StateEnum.DEALED.getCode()); auctionConfigDao.updateState(distributionOrder.getItemId(), AuctionEnum.StateEnum.DEALED.getCode());
//释放用户拍卖保证金
EarnestRecordRequestDto releaseEarnestDto = new EarnestRecordRequestDto();
releaseEarnestDto.setUserId(distributionOrder.getBuyerId());
releaseEarnestDto.setAuctionPrice(distributionOrder.getAmount());
releaseEarnestDto.setItemId(distributionOrder.getItemId());
Result releaseEarnestResult = auctionEarnestService.releaseEarnest(releaseEarnestDto);
if (!releaseEarnestResult.getSuccess()) {
logger.error("======= 订单号:{}, 拍卖支付回调处理失败,释放保证金失败 ======", distributionOrderId);
throw new Exception("拍卖付款成功后释放保证金失败");
}
//新增用户账户的明细,调整月度账单 //新增用户账户的明细,调整月度账单
DistributorProfit distributorProfit = distributorProfitDao.findById(distributionOrderId); DistributorProfit distributorProfit = distributorProfitDao.findById(distributionOrderId);
userAccountDetailService.create(distributionOrder, distributorProfit); userAccountDetailService.create(distributionOrder, distributorProfit);
......
...@@ -481,9 +481,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -481,9 +481,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
map.put("prepayId", prepayId); map.put("prepayId", prepayId);
//计算分销商的利润 //计算分销商的利润
DistributorProfit distributorProfit = new DistributorProfit(); DistributorProfit distributorProfit = new DistributorProfit();
//平台服务费,默认15% //平台服务费,默认1%
CollectorWhiteList collectorWhiteList = collectorWhiteListDao.findById(supplierItem.getCreatorId()); CollectorWhiteList collectorWhiteList = collectorWhiteListDao.findById(supplierItem.getCreatorId());
double channelCostRebate = 0.15; double channelCostRebate = CommConsts.CHANNEL_COST_REBATE;
if (collectorWhiteList != null && collectorWhiteList.getChannelCostRebate() != null) { if (collectorWhiteList != null && collectorWhiteList.getChannelCostRebate() != null) {
BigDecimal channelCost = collectorWhiteList.getChannelCostRebate(); BigDecimal channelCost = collectorWhiteList.getChannelCostRebate();
channelCost = PriceUtil.convertToDivide(channelCost); channelCost = PriceUtil.convertToDivide(channelCost);
...@@ -494,7 +494,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -494,7 +494,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
//实际订单到账金额 //实际订单到账金额
double realAmount = distributionOrder.getAmount().doubleValue() * (1 - CommConsts.WX_COMMISSION_REBATE); double realAmount = distributionOrder.getAmount().doubleValue() * (1 - CommConsts.WX_COMMISSION_REBATE);
//平台佣金还要减去微信的服务手续费1%,实际上平台佣金就是订单金额* (平台佣金比例(默认0.15)- 微信手续费(0.01)) //平台佣金还要减去微信的服务手续费0.6%,实际上平台佣金就是订单金额* (平台佣金比例(默认0.01)- 微信手续费(0.006))
//暂时先不考虑 //暂时先不考虑
double channelServiceCost = distributionOrder.getAmount().doubleValue() * channelCostRebate; double channelServiceCost = distributionOrder.getAmount().doubleValue() * channelCostRebate;
double introduceCost = distributionOrder.getAmount().doubleValue() * rebate; double introduceCost = distributionOrder.getAmount().doubleValue() * rebate;
......
...@@ -45,8 +45,8 @@ public class DistributorProfitServiceImpl implements DistributorProfitService { ...@@ -45,8 +45,8 @@ public class DistributorProfitServiceImpl implements DistributorProfitService {
public Double getIntroduceRebate(long userId, long introducerId) { public Double getIntroduceRebate(long userId, long introducerId) {
double rebate = CommConsts.REBATE; double rebate = CommConsts.REBATE;
try { try {
if (introducerId == CommConsts.SYSTEM_ACCOUNT) { /* if (introducerId == CommConsts.SYSTEM_ACCOUNT) {
return rebate; return rebate;
} }
IntroduceRecord introduceRecord = introduceRecordDao.findByDoubleId(userId, introducerId); IntroduceRecord introduceRecord = introduceRecordDao.findByDoubleId(userId, introducerId);
if (introduceRecord == null) { if (introduceRecord == null) {
...@@ -71,7 +71,7 @@ public class DistributorProfitServiceImpl implements DistributorProfitService { ...@@ -71,7 +71,7 @@ public class DistributorProfitServiceImpl implements DistributorProfitService {
rebate = 0.02; rebate = 0.02;
} else if (year == 3) { } else if (year == 3) {
rebate = 0.01; rebate = 0.01;
} }*/
return rebate; return rebate;
} catch (Exception e) { } catch (Exception e) {
logger.error("获取介绍人当前的佣金比例 error : {}", e); logger.error("获取介绍人当前的佣金比例 error : {}", e);
......
...@@ -27,10 +27,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; ...@@ -27,10 +27,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@Service @Service
...@@ -112,6 +109,7 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService { ...@@ -112,6 +109,7 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
map.put("totalOfferAmount", totalOfferAmount); map.put("totalOfferAmount", totalOfferAmount);
map.put("addOfferAmount", PriceUtil.convertPriceFenToYuan(addOfferAmount * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE)); map.put("addOfferAmount", PriceUtil.convertPriceFenToYuan(addOfferAmount * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE));
map.put("residueOfferAmount", PriceUtil.convertPriceFenToYuan(earnestUsableAmount * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE)); map.put("residueOfferAmount", PriceUtil.convertPriceFenToYuan(earnestUsableAmount * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE));
map.put("option", Arrays.asList("100", "200", "300", "400", "500", "600"));
return Result.success(map); return Result.success(map);
} catch (Exception e) { } catch (Exception e) {
logger.error("计算用户可出价的额度失败 error : {}", e); logger.error("计算用户可出价的额度失败 error : {}", e);
...@@ -121,6 +119,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService { ...@@ -121,6 +119,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Override @Override
public Result checkEnoughEarnest(EarnestRecordRequestDto dto) { public Result checkEnoughEarnest(EarnestRecordRequestDto dto) {
/*if (CommConsts.NOT_SEND_MSG_USERID.contains(dto.getUserId())) {
return Result.success();
}*/
try { try {
long auctionPrice = dto.getAuctionPrice(); long auctionPrice = dto.getAuctionPrice();
BigDecimal earnestAmount = new BigDecimal(String.valueOf(auctionPrice)).multiply(new BigDecimal(CommConsts.EARNEST_REBATE)); BigDecimal earnestAmount = new BigDecimal(String.valueOf(auctionPrice)).multiply(new BigDecimal(CommConsts.EARNEST_REBATE));
...@@ -141,6 +142,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService { ...@@ -141,6 +142,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Transactional @Transactional
@Override @Override
public Result occupyEarnest(EarnestRecordRequestDto dto) { public Result occupyEarnest(EarnestRecordRequestDto dto) {
/*if (CommConsts.NOT_SEND_MSG_USERID.contains(dto.getUserId())) {
return Result.success();
}*/
String lockKey = CommConsts.EARNEST_ACCOUNT_LOCK + dto.getUserId(); String lockKey = CommConsts.EARNEST_ACCOUNT_LOCK + dto.getUserId();
RLock lock = redissonClient.getLock(lockKey); RLock lock = redissonClient.getLock(lockKey);
try { try {
...@@ -187,6 +191,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService { ...@@ -187,6 +191,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Transactional @Transactional
@Override @Override
public Result releaseEarnest(EarnestRecordRequestDto dto) { public Result releaseEarnest(EarnestRecordRequestDto dto) {
/* if (CommConsts.NOT_SEND_MSG_USERID.contains(dto.getUserId())) {
return Result.success();
}*/
String itemIdKey = CommConsts.EARNEST_ACCOUNT_LOCK + dto.getUserId(); String itemIdKey = CommConsts.EARNEST_ACCOUNT_LOCK + dto.getUserId();
RLock lock = redissonClient.getLock(itemIdKey); RLock lock = redissonClient.getLock(itemIdKey);
try { try {
...@@ -240,6 +247,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService { ...@@ -240,6 +247,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Override @Override
public Result deductEarnest(EarnestRecordRequestDto dto) { public Result deductEarnest(EarnestRecordRequestDto dto) {
/* if (CommConsts.NOT_SEND_MSG_USERID.contains(dto.getUserId())) {
return Result.success();
}*/
String itemIdKey = CommConsts.EARNEST_ACCOUNT_LOCK + dto.getUserId(); String itemIdKey = CommConsts.EARNEST_ACCOUNT_LOCK + dto.getUserId();
RLock lock = redissonClient.getLock(itemIdKey); RLock lock = redissonClient.getLock(itemIdKey);
try { try {
......
...@@ -16,8 +16,10 @@ import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg; ...@@ -16,8 +16,10 @@ import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto; import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SpecialPerformanceConfigRequestDto; import com.wwdz.ch.db.dto.request.distribution.SpecialPerformanceConfigRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SpecialPerformanceRequestDto; import com.wwdz.ch.db.dto.request.distribution.SpecialPerformanceRequestDto;
import com.wwdz.ch.db.dto.request.openShop.EarnestRecordRequestDto;
import com.wwdz.ch.wx.service.distribution.DistributionOrderService; import com.wwdz.ch.wx.service.distribution.DistributionOrderService;
import com.wwdz.ch.core.service.SendMsgService; import com.wwdz.ch.core.service.SendMsgService;
import com.wwdz.ch.wx.service.openShop.AuctionEarnestService;
import com.xxdxxs.utils.DateUtils; import com.xxdxxs.utils.DateUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
...@@ -88,6 +90,9 @@ public class AutoSendMsgJob { ...@@ -88,6 +90,9 @@ public class AutoSendMsgJob {
@Autowired @Autowired
SpecialPerformanceDao specialPerformanceDao; SpecialPerformanceDao specialPerformanceDao;
@Autowired
AuctionEarnestService auctionEarnestService;
@Value("${dts.wx.auction-msg-url}") @Value("${dts.wx.auction-msg-url}")
private String AUCTION_MSG_URL; private String AUCTION_MSG_URL;
...@@ -250,6 +255,18 @@ public class AutoSendMsgJob { ...@@ -250,6 +255,18 @@ public class AutoSendMsgJob {
distributionOrderDao.updateState(distributionOrder.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode()); distributionOrderDao.updateState(distributionOrder.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
auctionConfigDao.updateState(distributionOrder.getItemId(), AuctionEnum.StateEnum.GET_NOT_PAY_TO_PASS.getCode()); auctionConfigDao.updateState(distributionOrder.getItemId(), AuctionEnum.StateEnum.GET_NOT_PAY_TO_PASS.getCode());
logger.info("================== 拍品:{}, 超过付款时效, 自动取消订单 ==================", distributionOrder.getItemId()); logger.info("================== 拍品:{}, 超过付款时效, 自动取消订单 ==================", distributionOrder.getItemId());
//扣除用户保证金
EarnestRecordRequestDto deductEarnestDto = new EarnestRecordRequestDto();
deductEarnestDto.setUserId(distributionOrder.getBuyerId());
deductEarnestDto.setAuctionPrice(distributionOrder.getAmount());
deductEarnestDto.setItemId(distributionOrder.getItemId());
Result releaseEarnestResult = auctionEarnestService.deductEarnest(deductEarnestDto);
if (!releaseEarnestResult.getSuccess()) {
logger.error("================== 拍卖订单号:{},超时未支付扣除保证金失败 ==================", distributionOrder.getDistributionOrderId());
} else {
logger.info("================== 拍卖订单号:{}, 超时未支付扣除保证金成功 SUCCESS ==================", distributionOrder.getDistributionOrderId());
}
} }
}); });
} }
......
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