Commit cc002df1 authored by shiyu's avatar shiyu

超时未支付扣除保证金

parent 18f2f52a
......@@ -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,
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;
import com.wwdz.ch.core.entity.PayNoticeMsg;
import com.wwdz.ch.core.service.SendMsgService;
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.openShop.AuctionEarnestService;
import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.JsonUtils;
import com.xxdxxs.utils.StringUtils;
......@@ -146,6 +148,9 @@ public class WxPayCallbackController {
@Autowired
RedissonClient redissonClient;
@Autowired
AuctionEarnestService auctionEarnestService;
@RequestMapping(value ="/getPayNotify")
public String payNotify(HttpServletRequest request) throws IOException {
logger.info("------------------ 收到微信支付回调通知 ------------------");
......@@ -362,6 +367,17 @@ public class WxPayCallbackController {
//更新拍品配置中的状态为"成交"
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);
userAccountDetailService.create(distributionOrder, distributorProfit);
......
......@@ -481,9 +481,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
map.put("prepayId", prepayId);
//计算分销商的利润
DistributorProfit distributorProfit = new DistributorProfit();
//平台服务费,默认15%
//平台服务费,默认1%
CollectorWhiteList collectorWhiteList = collectorWhiteListDao.findById(supplierItem.getCreatorId());
double channelCostRebate = 0.15;
double channelCostRebate = CommConsts.CHANNEL_COST_REBATE;
if (collectorWhiteList != null && collectorWhiteList.getChannelCostRebate() != null) {
BigDecimal channelCost = collectorWhiteList.getChannelCostRebate();
channelCost = PriceUtil.convertToDivide(channelCost);
......@@ -494,7 +494,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
//实际订单到账金额
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 introduceCost = distributionOrder.getAmount().doubleValue() * rebate;
......
......@@ -45,7 +45,7 @@ public class DistributorProfitServiceImpl implements DistributorProfitService {
public Double getIntroduceRebate(long userId, long introducerId) {
double rebate = CommConsts.REBATE;
try {
if (introducerId == CommConsts.SYSTEM_ACCOUNT) {
/* if (introducerId == CommConsts.SYSTEM_ACCOUNT) {
return rebate;
}
IntroduceRecord introduceRecord = introduceRecordDao.findByDoubleId(userId, introducerId);
......@@ -71,7 +71,7 @@ public class DistributorProfitServiceImpl implements DistributorProfitService {
rebate = 0.02;
} else if (year == 3) {
rebate = 0.01;
}
}*/
return rebate;
} catch (Exception e) {
logger.error("获取介绍人当前的佣金比例 error : {}", e);
......
......@@ -27,10 +27,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Service
......@@ -112,6 +109,7 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
map.put("totalOfferAmount", totalOfferAmount);
map.put("addOfferAmount", PriceUtil.convertPriceFenToYuan(addOfferAmount * 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);
} catch (Exception e) {
logger.error("计算用户可出价的额度失败 error : {}", e);
......@@ -121,6 +119,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Override
public Result checkEnoughEarnest(EarnestRecordRequestDto dto) {
/*if (CommConsts.NOT_SEND_MSG_USERID.contains(dto.getUserId())) {
return Result.success();
}*/
try {
long auctionPrice = dto.getAuctionPrice();
BigDecimal earnestAmount = new BigDecimal(String.valueOf(auctionPrice)).multiply(new BigDecimal(CommConsts.EARNEST_REBATE));
......@@ -141,6 +142,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Transactional
@Override
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();
RLock lock = redissonClient.getLock(lockKey);
try {
......@@ -187,6 +191,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Transactional
@Override
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();
RLock lock = redissonClient.getLock(itemIdKey);
try {
......@@ -240,6 +247,9 @@ public class AuctionEarnestServiceImpl implements AuctionEarnestService {
@Override
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();
RLock lock = redissonClient.getLock(itemIdKey);
try {
......
......@@ -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.SpecialPerformanceConfigRequestDto;
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.core.service.SendMsgService;
import com.wwdz.ch.wx.service.openShop.AuctionEarnestService;
import com.xxdxxs.utils.DateUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
......@@ -88,6 +90,9 @@ public class AutoSendMsgJob {
@Autowired
SpecialPerformanceDao specialPerformanceDao;
@Autowired
AuctionEarnestService auctionEarnestService;
@Value("${dts.wx.auction-msg-url}")
private String AUCTION_MSG_URL;
......@@ -250,6 +255,18 @@ public class AutoSendMsgJob {
distributionOrderDao.updateState(distributionOrder.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
auctionConfigDao.updateState(distributionOrder.getItemId(), AuctionEnum.StateEnum.GET_NOT_PAY_TO_PASS.getCode());
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