Commit 05cfcdff authored by shiyu's avatar shiyu

Merge branch 'quanku_v3.5' into quanku_v3.6

# Conflicts:
#	ch-wx-api/src/test/java/com/wwdz/ch/wx/api/WxPayServiceTest.java
parents 48739400 fb907615
...@@ -43,9 +43,9 @@ public class EarnestEnum { ...@@ -43,9 +43,9 @@ public class EarnestEnum {
public enum TypeEnum { public enum TypeEnum {
GIFT(1, "赠送保证金"), GIFT(1, "赠送保证金"),
PAY(2, "缴纳保证金"), PAY(2, "充值保证金"),
WITHDRAW(3, "提取保证金"), WITHDRAW(3, "提取保证金"),
OCCUPY(4, "占用保证金"), OCCUPY(4, "占用出价额度"),
RELEASE(5, "释放保证金"), RELEASE(5, "释放保证金"),
DEDUCT(-1, "扣除保证金"), DEDUCT(-1, "扣除保证金"),
; ;
...@@ -83,7 +83,7 @@ public class EarnestEnum { ...@@ -83,7 +83,7 @@ public class EarnestEnum {
public enum StateEnum { public enum StateEnum {
VALID(1, "初始有效状态"), VALID(1, "初始有效状态"),
RELEASE(5, "已释放"), RELEASE(5, "已释放"),
DEDUCT(-1, "中拍超时未支付,已扣除"), DEDUCT(-1, "中拍超时未支付,已扣除保证金"),
; ;
private int code; private int code;
......
...@@ -58,7 +58,12 @@ public class UserAccountVo implements Entity{ ...@@ -58,7 +58,12 @@ public class UserAccountVo implements Entity{
private String earnestAmount; private String earnestAmount;
/** /**
* 保证金可用金额 * 总保证金金额(充值 + 赠送的)
*/
private String totalEarnestAmount;
/**
* 保证金可用金额(未被占用的(充值+赠送的金额))
*/ */
private String earnestUsableAmount; private String earnestUsableAmount;
...@@ -98,6 +103,7 @@ public class UserAccountVo implements Entity{ ...@@ -98,6 +103,7 @@ public class UserAccountVo implements Entity{
userAccountVo.setIntroduceWaitEntryAmount(PriceUtil.convertPriceFenToYuan(userAccount.getIntroduceWaitEntryAmount())); userAccountVo.setIntroduceWaitEntryAmount(PriceUtil.convertPriceFenToYuan(userAccount.getIntroduceWaitEntryAmount()));
userAccountVo.setTotalIntroduceAmount(PriceUtil.convertPriceFenToYuan(userAccount.getIntroduceAmount() + userAccount.getIntroduceWaitEntryAmount())); userAccountVo.setTotalIntroduceAmount(PriceUtil.convertPriceFenToYuan(userAccount.getIntroduceAmount() + userAccount.getIntroduceWaitEntryAmount()));
userAccountVo.setEarnestAmount(PriceUtil.convertPriceFenToYuan(userAccount.getEarnestAmount())); userAccountVo.setEarnestAmount(PriceUtil.convertPriceFenToYuan(userAccount.getEarnestAmount()));
userAccountVo.setTotalEarnestAmount(PriceUtil.convertPriceFenToYuan(userAccount.getEarnestAmount() + userAccount.getGiftEarnestAmount()));
userAccountVo.setEarnestUsableAmount(PriceUtil.convertPriceFenToYuan(userAccount.getEarnestUsableAmount())); userAccountVo.setEarnestUsableAmount(PriceUtil.convertPriceFenToYuan(userAccount.getEarnestUsableAmount()));
userAccountVo.setGiftEarnestAmount(PriceUtil.convertPriceFenToYuan(userAccount.getGiftEarnestAmount())); userAccountVo.setGiftEarnestAmount(PriceUtil.convertPriceFenToYuan(userAccount.getGiftEarnestAmount()));
userAccountVo.setUsableOfferAmount(PriceUtil.convertPriceFenToYuan(userAccount.getEarnestUsableAmount() * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE)); userAccountVo.setUsableOfferAmount(PriceUtil.convertPriceFenToYuan(userAccount.getEarnestUsableAmount() * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE));
......
...@@ -13,6 +13,8 @@ public interface SpecialPerformanceConfigDao { ...@@ -13,6 +13,8 @@ public interface SpecialPerformanceConfigDao {
SpecialPerformanceConfig findById(int specialPerformanceId, long itemId); SpecialPerformanceConfig findById(int specialPerformanceId, long itemId);
SpecialPerformanceConfig findByItemId(long itemId);
boolean insert(SpecialPerformanceConfig specialPerformanceConfig); boolean insert(SpecialPerformanceConfig specialPerformanceConfig);
boolean update(SpecialPerformanceConfig specialPerformanceConfig); boolean update(SpecialPerformanceConfig specialPerformanceConfig);
......
...@@ -23,6 +23,15 @@ public interface EarnestRecordDao { ...@@ -23,6 +23,15 @@ public interface EarnestRecordDao {
*/ */
boolean update(EarnestRecord earnestRecord); boolean update(EarnestRecord earnestRecord);
/**
* 释放或扣除保证金
*
* @param dto
* @return
*/
boolean updateState(EarnestRecordRequestDto dto);
/** /**
* 查询保证金明细 * 查询保证金明细
* @param dto * @param dto
...@@ -36,4 +45,12 @@ public interface EarnestRecordDao { ...@@ -36,4 +45,12 @@ public interface EarnestRecordDao {
* @return * @return
*/ */
long sumForOccupy(EarnestRecordRequestDto dto); long sumForOccupy(EarnestRecordRequestDto dto);
/**
* 检查是否存在被保证金记录
* 兼容之前没有保证金的逻辑
* @param dto
* @return
*/
boolean isExisted(EarnestRecordRequestDto dto);
} }
...@@ -66,4 +66,10 @@ public class EarnestRecordRequestDto extends BaseRequestDto implements Entity { ...@@ -66,4 +66,10 @@ public class EarnestRecordRequestDto extends BaseRequestDto implements Entity {
* 状态 * 状态
*/ */
private Integer state; private Integer state;
/**
* 要查询的状态
* 用于扣除保证金,指定状态的记录修改
*/
private Integer searchState;
} }
...@@ -64,6 +64,15 @@ public class SpecialPerformanceConfigDaoImpl implements SpecialPerformanceConfig ...@@ -64,6 +64,15 @@ public class SpecialPerformanceConfigDaoImpl implements SpecialPerformanceConfig
return specialPerformanceConfigMapper.selectOneByExample(example); return specialPerformanceConfigMapper.selectOneByExample(example);
} }
@Override
public SpecialPerformanceConfig findByItemId(long itemId) {
SpecialPerformanceConfigExample example = new SpecialPerformanceConfigExample();
SpecialPerformanceConfigExample.Criteria criteria = example.createCriteria();
criteria.andItemIdEqualTo(itemId);
return specialPerformanceConfigMapper.selectOneByExample(example);
}
@Override @Override
public boolean insert(SpecialPerformanceConfig specialPerformanceConfig) { public boolean insert(SpecialPerformanceConfig specialPerformanceConfig) {
specialPerformanceConfig.setCreateTime(new Date()); specialPerformanceConfig.setCreateTime(new Date());
......
...@@ -32,6 +32,20 @@ public class EarnestRecordDaoImpl implements EarnestRecordDao { ...@@ -32,6 +32,20 @@ public class EarnestRecordDaoImpl implements EarnestRecordDao {
return earnestRecordMapper.updateByExampleSelective(earnestRecord, example) > 0; return earnestRecordMapper.updateByExampleSelective(earnestRecord, example) > 0;
} }
@Override
public boolean updateState(EarnestRecordRequestDto dto) {
EarnestRecordExample example = new EarnestRecordExample();
EarnestRecordExample.Criteria criteria = example.createCriteria();
criteria.andUserIdEqualTo(dto.getUserId());
criteria.andItemIdEqualTo(dto.getItemId());
criteria.andTypeEqualTo(dto.getType());
criteria.andStateEqualTo(dto.getSearchState());
EarnestRecord earnestRecord = new EarnestRecord();
earnestRecord.setState(dto.getState());
return earnestRecordMapper.updateByExampleSelective(earnestRecord, example) > 0;
}
@Override @Override
public List<EarnestRecord> findList(EarnestRecordRequestDto dto) { public List<EarnestRecord> findList(EarnestRecordRequestDto dto) {
EarnestRecordExample example = new EarnestRecordExample(); EarnestRecordExample example = new EarnestRecordExample();
...@@ -54,4 +68,18 @@ public class EarnestRecordDaoImpl implements EarnestRecordDao { ...@@ -54,4 +68,18 @@ public class EarnestRecordDaoImpl implements EarnestRecordDao {
JdbcHelper.ifPresent(dto.getState(), criteria :: andStateEqualTo); JdbcHelper.ifPresent(dto.getState(), criteria :: andStateEqualTo);
return earnestRecordMapper.sumForOccupy(example); return earnestRecordMapper.sumForOccupy(example);
} }
@Override
public boolean isExisted(EarnestRecordRequestDto dto) {
EarnestRecordExample example = new EarnestRecordExample();
EarnestRecordExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getUserId(), criteria :: andUserIdEqualTo);
JdbcHelper.ifPresent(dto.getItemId(), criteria :: andItemIdEqualTo);
JdbcHelper.ifPresent(dto.getType(), criteria :: andTypeEqualTo);
JdbcHelper.ifPresent(dto.getState(), criteria :: andStateEqualTo);
JdbcHelper.ifPresent(dto.getTypeList(), criteria :: andTypeIn);
JdbcHelper.ifPresent(dto.getFilterTypeList(), criteria :: andTypeNotIn);
return earnestRecordMapper.countByExample(example) > 0;
}
} }
...@@ -48,6 +48,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -48,6 +48,7 @@ import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -151,6 +152,9 @@ public class WxPayCallbackController { ...@@ -151,6 +152,9 @@ public class WxPayCallbackController {
@Autowired @Autowired
AuctionEarnestService auctionEarnestService; AuctionEarnestService auctionEarnestService;
@Autowired
EarnestRecordDao earnestRecordDao;
@RequestMapping(value ="/getPayNotify") @RequestMapping(value ="/getPayNotify")
public String payNotify(HttpServletRequest request) throws IOException { public String payNotify(HttpServletRequest request) throws IOException {
logger.info("------------------ 收到微信支付回调通知 ------------------"); logger.info("------------------ 收到微信支付回调通知 ------------------");
...@@ -337,7 +341,7 @@ public class WxPayCallbackController { ...@@ -337,7 +341,7 @@ public class WxPayCallbackController {
} }
@Transactional
public Result handleAuctionOrder(Transaction transaction) { public Result handleAuctionOrder(Transaction transaction) {
try { try {
//商户订单号,分销订单号 //商户订单号,分销订单号
...@@ -689,6 +693,18 @@ public class WxPayCallbackController { ...@@ -689,6 +693,18 @@ public class WxPayCallbackController {
earnestOrder.setUpdateTime(new Date()); earnestOrder.setUpdateTime(new Date());
earnestOrderDao.update(earnestOrder); earnestOrderDao.update(earnestOrder);
//保存充值记录
EarnestRecord earnestRecord = new EarnestRecord();
earnestRecord.setUserId(userId);
earnestRecord.setAmount(amount);
earnestRecord.setEntryType(EarnestEnum.EntryEnum.INCREASE.getCode());
earnestRecord.setCreateTime(new Date());
earnestRecord.setUpdateTime(new Date());
earnestRecord.setType(EarnestEnum.TypeEnum.PAY.getCode());
earnestRecord.setState(EarnestEnum.StateEnum.VALID.getCode());
earnestRecordDao.insert(earnestRecord);
//用户账户,更新保证金额度 //用户账户,更新保证金额度
UserAccount userAccount = userAccountDao.findByUserId(userId); UserAccount userAccount = userAccountDao.findByUserId(userId);
long earnestUsableAmount = userAccount.getEarnestUsableAmount(); long earnestUsableAmount = userAccount.getEarnestUsableAmount();
......
...@@ -163,4 +163,6 @@ public class AuctionDetailVo implements Entity { ...@@ -163,4 +163,6 @@ public class AuctionDetailVo implements Entity {
*/ */
private Boolean isSubscribed; private Boolean isSubscribed;
private Integer lot;
} }
...@@ -103,4 +103,9 @@ public class AuctionRecordVo implements Entity { ...@@ -103,4 +103,9 @@ public class AuctionRecordVo implements Entity {
* 是否足够保证金 * 是否足够保证金
*/ */
private Boolean enoughEarnest = true; private Boolean enoughEarnest = true;
/**
* 可出价额度
*/
private String usableOfferAmount;
} }
...@@ -9,6 +9,7 @@ import com.wwdz.ch.db.dao.distribution.UserAccountDetailDao; ...@@ -9,6 +9,7 @@ import com.wwdz.ch.db.dao.distribution.UserAccountDetailDao;
import com.wwdz.ch.db.dao.openShop.EarnestRecordDao; import com.wwdz.ch.db.dao.openShop.EarnestRecordDao;
import com.wwdz.ch.db.dao.openShop.UserAccountDao; import com.wwdz.ch.db.dao.openShop.UserAccountDao;
import com.wwdz.ch.db.domain.distribution.UserAccountDetail; import com.wwdz.ch.db.domain.distribution.UserAccountDetail;
import com.wwdz.ch.db.domain.openShop.EarnestRecord;
import com.wwdz.ch.db.domain.openShop.UserAccount; import com.wwdz.ch.db.domain.openShop.UserAccount;
import com.wwdz.ch.db.dto.request.openShop.EarnestRecordRequestDto; import com.wwdz.ch.db.dto.request.openShop.EarnestRecordRequestDto;
import com.wwdz.ch.wx.service.UserAccountService; import com.wwdz.ch.wx.service.UserAccountService;
...@@ -18,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -18,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -40,6 +42,7 @@ public class UserAccountServiceImpl implements UserAccountService { ...@@ -40,6 +42,7 @@ public class UserAccountServiceImpl implements UserAccountService {
try { try {
UserAccount userAccount = userAccountDao.findByUserId(userId); UserAccount userAccount = userAccountDao.findByUserId(userId);
if (userAccount == null) { if (userAccount == null) {
Date now = new Date();
UserAccount newAccount = new UserAccount(); UserAccount newAccount = new UserAccount();
newAccount.setUserId(userId); newAccount.setUserId(userId);
newAccount.setGuaranteeAmount(0L); newAccount.setGuaranteeAmount(0L);
...@@ -49,10 +52,21 @@ public class UserAccountServiceImpl implements UserAccountService { ...@@ -49,10 +52,21 @@ public class UserAccountServiceImpl implements UserAccountService {
newAccount.setIntroduceWaitEntryAmount(0L); newAccount.setIntroduceWaitEntryAmount(0L);
newAccount.setEarnestAmount(0L); newAccount.setEarnestAmount(0L);
newAccount.setGiftEarnestAmount(CommConsts.GIFT_EARNEST_AMOUNT); newAccount.setGiftEarnestAmount(CommConsts.GIFT_EARNEST_AMOUNT);
newAccount.setEarnestUsableAmount(CommConsts.GIFT_EARNEST_AMOUNT * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE); newAccount.setEarnestUsableAmount(CommConsts.GIFT_EARNEST_AMOUNT);
newAccount.setCreateTime(new Date()); newAccount.setCreateTime(now);
newAccount.setUpdateTime(new Date()); newAccount.setUpdateTime(now);
userAccountDao.insert(newAccount); userAccountDao.insert(newAccount);
//新用户新增默认赠送的保证金额度
EarnestRecord earnestRecord = new EarnestRecord();
earnestRecord.setUserId(userId);
earnestRecord.setAmount(CommConsts.GIFT_EARNEST_AMOUNT);
earnestRecord.setEntryType(EarnestEnum.EntryEnum.INCREASE.getCode());
earnestRecord.setCreateTime(now);
earnestRecord.setUpdateTime(now);
earnestRecord.setType(EarnestEnum.TypeEnum.GIFT.getCode());
earnestRecord.setState(EarnestEnum.StateEnum.VALID.getCode());
earnestRecordDao.insert(earnestRecord);
} }
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
......
...@@ -14,7 +14,9 @@ import com.wwdz.ch.core.util.PriceUtil; ...@@ -14,7 +14,9 @@ import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.db.dao.OfficialAccountSubscribeRecordDao; import com.wwdz.ch.db.dao.OfficialAccountSubscribeRecordDao;
import com.wwdz.ch.db.dao.UserDao; import com.wwdz.ch.db.dao.UserDao;
import com.wwdz.ch.db.dao.distribution.*; import com.wwdz.ch.db.dao.distribution.*;
import com.wwdz.ch.db.dao.openShop.UserAccountDao;
import com.wwdz.ch.db.domain.distribution.*; import com.wwdz.ch.db.domain.distribution.*;
import com.wwdz.ch.db.domain.openShop.UserAccount;
import com.wwdz.ch.db.dto.request.distribution.AuctionRecordRequestDto; import com.wwdz.ch.db.dto.request.distribution.AuctionRecordRequestDto;
import com.wwdz.ch.core.api.WxAppletApi; import com.wwdz.ch.core.api.WxAppletApi;
import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg; import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg;
...@@ -45,6 +47,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; ...@@ -45,6 +47,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -113,6 +116,9 @@ public class AuctionRecordServiceImpl implements AuctionRecordService { ...@@ -113,6 +116,9 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
@Autowired @Autowired
AuctionEarnestService auctionEarnestService; AuctionEarnestService auctionEarnestService;
@Autowired
UserAccountDao userAccountDao;
@Value("${spring.profiles.active}") @Value("${spring.profiles.active}")
private String env; private String env;
...@@ -140,6 +146,10 @@ public class AuctionRecordServiceImpl implements AuctionRecordService { ...@@ -140,6 +146,10 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
} }
} }
} }
//反复出价不付款用户
if (368815L == dto.getUserId()) {
return Result.failed("被风控系统识别不能出价");
}
Date now = new Date(); Date now = new Date();
//查询竞拍配置信息 //查询竞拍配置信息
AuctionConfig auctionConfig = auctionConfigDao.findByItemId(itemId); AuctionConfig auctionConfig = auctionConfigDao.findByItemId(itemId);
...@@ -275,6 +285,7 @@ public class AuctionRecordServiceImpl implements AuctionRecordService { ...@@ -275,6 +285,7 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
@Override @Override
public Result refreshOffer(AuctionRecordRequestDto dto) { public Result refreshOffer(AuctionRecordRequestDto dto) {
try { try {
userAccountService.initAccount(dto.getUserId());
AuctionRecordVo auctionRecordVo = new AuctionRecordVo(); AuctionRecordVo auctionRecordVo = new AuctionRecordVo();
AuctionRecordRequestDto searchDto = new AuctionRecordRequestDto(); AuctionRecordRequestDto searchDto = new AuctionRecordRequestDto();
searchDto.setItemId(dto.getItemId()); searchDto.setItemId(dto.getItemId());
...@@ -331,7 +342,15 @@ public class AuctionRecordServiceImpl implements AuctionRecordService { ...@@ -331,7 +342,15 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
earnestRecordRequestDto.setUserId(dto.getUserId()); earnestRecordRequestDto.setUserId(dto.getUserId());
earnestRecordRequestDto.setAuctionPrice(PriceUtil.convertPriceFromStr(auctionRecordVo.getNextPrice())); earnestRecordRequestDto.setAuctionPrice(PriceUtil.convertPriceFromStr(auctionRecordVo.getNextPrice()));
Result checkEnoughEarnestResult = auctionEarnestService.checkEnoughEarnest(earnestRecordRequestDto); Result checkEnoughEarnestResult = auctionEarnestService.checkEnoughEarnest(earnestRecordRequestDto);
if (!checkEnoughEarnestResult.getSuccess()) { long auctionPrice = PriceUtil.convertPriceFromStr(auctionRecordVo.getNextPrice());
//换算成对应需要占用的保证金
BigDecimal earnestAmount = new BigDecimal(String.valueOf(auctionPrice)).multiply(new BigDecimal(CommConsts.EARNEST_REBATE));
long occupyAmount = earnestAmount.longValue();
UserAccount userAccount = userAccountDao.findByUserId(dto.getUserId());
long earnestUsableAmount = userAccount.getEarnestUsableAmount();
//当前可出价的额度
auctionRecordVo.setUsableOfferAmount(PriceUtil.convertPriceFenToYuan(earnestUsableAmount * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE));
if (occupyAmount > earnestUsableAmount) {
auctionRecordVo.setEnoughEarnest(false); auctionRecordVo.setEnoughEarnest(false);
} }
auctionRecordVo.setStartPrice(PriceUtil.convertPriceFenToYuan(auctionConfig.getStartPrice())); auctionRecordVo.setStartPrice(PriceUtil.convertPriceFenToYuan(auctionConfig.getStartPrice()));
......
...@@ -24,6 +24,7 @@ import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto; ...@@ -24,6 +24,7 @@ import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.wwdz.ch.core.api.WxAppletApi; import com.wwdz.ch.core.api.WxAppletApi;
import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg; import com.wwdz.ch.core.entity.AuctionOfferNoticeMsg;
import com.wwdz.ch.core.entity.SignedNoticeMsg; import com.wwdz.ch.core.entity.SignedNoticeMsg;
import com.wwdz.ch.db.dto.request.openShop.EarnestRecordRequestDto;
import com.wwdz.ch.wx.entity.GroupPurchaseInfo; import com.wwdz.ch.wx.entity.GroupPurchaseInfo;
import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo; import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo;
import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo; import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo;
...@@ -33,6 +34,7 @@ import com.wwdz.ch.wx.service.distribution.DistributorProfitService; ...@@ -33,6 +34,7 @@ import com.wwdz.ch.wx.service.distribution.DistributorProfitService;
import com.wwdz.ch.core.service.SendMsgService; import com.wwdz.ch.core.service.SendMsgService;
import com.wwdz.ch.wx.service.distribution.GroupPurchaseService; import com.wwdz.ch.wx.service.distribution.GroupPurchaseService;
import com.wwdz.ch.wx.service.distribution.IdentifyOrderService; import com.wwdz.ch.wx.service.distribution.IdentifyOrderService;
import com.wwdz.ch.wx.service.openShop.AuctionEarnestService;
import com.xxdxxs.utils.DateUtils; import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.EntityMapper; import com.xxdxxs.utils.EntityMapper;
import org.redisson.api.RLock; import org.redisson.api.RLock;
...@@ -143,6 +145,8 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -143,6 +145,8 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Autowired @Autowired
ExchangeOrderSnapshotDao exchangeOrderSnapshotDao; ExchangeOrderSnapshotDao exchangeOrderSnapshotDao;
@Autowired
AuctionEarnestService auctionEarnestService;
@Transactional @Transactional
@Override @Override
...@@ -1362,6 +1366,21 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -1362,6 +1366,21 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
long diffInHours = diffInMillies / (60 * 1000 * 60); long diffInHours = diffInMillies / (60 * 1000 * 60);
if (diffInHours >= 24) { if (diffInHours >= 24) {
distributionOrderDao.updateState(distributionOrder.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode()); distributionOrderDao.updateState(distributionOrder.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
if (type == DistributionEnum.DistributionTypeEnum.AUCTION.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());
}
}
} }
} }
} }
...@@ -1393,6 +1412,21 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -1393,6 +1412,21 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
long diffInHours = diffInMillies / (60 * 1000 * 60); long diffInHours = diffInMillies / (60 * 1000 * 60);
if (diffInHours >= 24) { if (diffInHours >= 24) {
distributionOrderDao.updateState(distributionOrder.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode()); distributionOrderDao.updateState(distributionOrder.getDistributionOrderId(), DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
if (type == DistributionEnum.DistributionTypeEnum.AUCTION.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());
}
}
} }
} }
}); });
......
...@@ -647,6 +647,7 @@ public class SupplierItemServiceImpl implements SupplierItemService { ...@@ -647,6 +647,7 @@ public class SupplierItemServiceImpl implements SupplierItemService {
auctionDetailVo.setSpecialPerformanceId(specialPerformanceConfig.getSpecialPerformanceId()); auctionDetailVo.setSpecialPerformanceId(specialPerformanceConfig.getSpecialPerformanceId());
auctionDetailVo.setCurrentPrice(PriceUtil.convertPriceFenToYuan(specialPerformanceConfig.getCurrentPrice())); auctionDetailVo.setCurrentPrice(PriceUtil.convertPriceFenToYuan(specialPerformanceConfig.getCurrentPrice()));
auctionDetailVo.setIsSubscribed(disposableSubscribeRecordDao.isSubscribed(dto.getUserId(), itemId, DisposableSubscribeRecordEnum.TypeEnum.ITEM_PRE_END.getType())); auctionDetailVo.setIsSubscribed(disposableSubscribeRecordDao.isSubscribed(dto.getUserId(), itemId, DisposableSubscribeRecordEnum.TypeEnum.ITEM_PRE_END.getType()));
auctionDetailVo.setLot(specialPerformanceConfig.getLot());
//查询用户是否关注该商品 //查询用户是否关注该商品
SpecialPerformanceItemFollowRequestDto specialPerformanceItemFollowRequestDto = new SpecialPerformanceItemFollowRequestDto(); SpecialPerformanceItemFollowRequestDto specialPerformanceItemFollowRequestDto = new SpecialPerformanceItemFollowRequestDto();
specialPerformanceItemFollowRequestDto.setSpecialPerformanceId(specialPerformanceConfig.getSpecialPerformanceId()); specialPerformanceItemFollowRequestDto.setSpecialPerformanceId(specialPerformanceConfig.getSpecialPerformanceId());
......
...@@ -56,6 +56,9 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService { ...@@ -56,6 +56,9 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService {
@Autowired @Autowired
UserAccountDao userAccountDao; UserAccountDao userAccountDao;
@Autowired
UserAccountService userAccountService;
...@@ -63,6 +66,7 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService { ...@@ -63,6 +66,7 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService {
@Override @Override
public Result create(DistributionOrder distributionOrder, DistributorProfit distributorProfit) throws Exception { public Result create(DistributionOrder distributionOrder, DistributorProfit distributorProfit) throws Exception {
try { try {
userAccountService.initAccount(distributionOrder.getSellerId());
//订单金额 //订单金额
long orderAmount = distributionOrder.getAmount(); long orderAmount = distributionOrder.getAmount();
//平台佣金 //平台佣金
...@@ -111,6 +115,7 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService { ...@@ -111,6 +115,7 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService {
} else { } else {
introduceAccountDetail.setUserId(distributionOrder.getIntroducerId() == null ? Long.valueOf(distributionOrder.getShareRecordId()) : distributionOrder.getIntroducerId()); introduceAccountDetail.setUserId(distributionOrder.getIntroducerId() == null ? Long.valueOf(distributionOrder.getShareRecordId()) : distributionOrder.getIntroducerId());
//更新介绍人账户,增加待入账介绍佣金 //更新介绍人账户,增加待入账介绍佣金
userAccountService.initAccount(introduceAccountDetail.getUserId());
UserAccount oldIntroducerAccount = userAccountDao.findByUserId(introduceAccountDetail.getUserId()); UserAccount oldIntroducerAccount = userAccountDao.findByUserId(introduceAccountDetail.getUserId());
UserAccount newIntroducerAccount = new UserAccount(); UserAccount newIntroducerAccount = new UserAccount();
newIntroducerAccount.setUserId(introduceAccountDetail.getUserId()); newIntroducerAccount.setUserId(introduceAccountDetail.getUserId());
...@@ -148,7 +153,7 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService { ...@@ -148,7 +153,7 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService {
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("新增用户账户明细error:{}", e); logger.error("新增用户账户明细error:{}", e);
throw new Exception(e); throw new Exception();
} }
} }
......
package com.wwdz.ch.wx.impl.openShop; package com.wwdz.ch.wx.impl.openShop;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.EarnestEnum; import com.wwdz.ch.core.consts.EarnestEnum;
import com.wwdz.ch.core.entity.openShop.EarnestRecordVo; import com.wwdz.ch.core.entity.openShop.EarnestRecordVo;
import com.wwdz.ch.core.type.PageSearchResult; import com.wwdz.ch.core.type.PageSearchResult;
...@@ -20,6 +21,8 @@ import org.slf4j.Logger; ...@@ -20,6 +21,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
@Service @Service
...@@ -40,7 +43,8 @@ public class EarnestRecordServiceImpl implements EarnestRecordService { ...@@ -40,7 +43,8 @@ public class EarnestRecordServiceImpl implements EarnestRecordService {
public Result findList(EarnestRecordRequestDto dto) { public Result findList(EarnestRecordRequestDto dto) {
try { try {
List<EarnestRecordVo> earnestRecordVos = new ArrayList<>(); List<EarnestRecordVo> earnestRecordVos = new ArrayList<>();
dto.setTypeList(Arrays.asList(EarnestEnum.TypeEnum.PAY.getCode(), EarnestEnum.TypeEnum.DEDUCT.getCode(), EarnestEnum.TypeEnum.WITHDRAW.getCode())); dto.setTypeList(Arrays.asList(EarnestEnum.TypeEnum.PAY.getCode(), EarnestEnum.TypeEnum.DEDUCT.getCode(),
EarnestEnum.TypeEnum.WITHDRAW.getCode(), EarnestEnum.TypeEnum.GIFT.getCode()));
List<EarnestRecord> earnestRecordList = earnestRecordDao.findList(dto); List<EarnestRecord> earnestRecordList = earnestRecordDao.findList(dto);
PageInfo pageInfo = new PageInfo<>(earnestRecordList); PageInfo pageInfo = new PageInfo<>(earnestRecordList);
for (EarnestRecord earnestRecord : earnestRecordList) { for (EarnestRecord earnestRecord : earnestRecordList) {
...@@ -73,9 +77,13 @@ public class EarnestRecordServiceImpl implements EarnestRecordService { ...@@ -73,9 +77,13 @@ public class EarnestRecordServiceImpl implements EarnestRecordService {
EarnestRecordVo earnestRecordVo = new EarnestRecordVo(); EarnestRecordVo earnestRecordVo = new EarnestRecordVo();
EntityMapper.copyAttribute(earnestRecord, earnestRecordVo); EntityMapper.copyAttribute(earnestRecord, earnestRecordVo);
earnestRecordVo.setTypeName(EarnestEnum.TypeEnum.getNameByCode(earnestRecord.getType())); earnestRecordVo.setTypeName(EarnestEnum.TypeEnum.getNameByCode(earnestRecord.getType()));
earnestRecordVo.setAmount(PriceUtil.convertPriceFenToYuan(earnestRecord.getAmount())); //占用的额度
earnestRecordVo.setAmount(PriceUtil.convertPriceFenToYuan(earnestRecord.getAmount() * CommConsts.EARNEST_TRANSFORM_AUCTION_REBATE));
if (earnestRecord.getState() != EarnestEnum.StateEnum.VALID.getCode()) { if (earnestRecord.getState() != EarnestEnum.StateEnum.VALID.getCode()) {
earnestRecordVo.setStateName(EarnestEnum.StateEnum.getNameByCode(earnestRecord.getState())); earnestRecordVo.setStateName(EarnestEnum.StateEnum.getNameByCode(earnestRecord.getState()));
if (earnestRecord.getState() == EarnestEnum.StateEnum.DEDUCT.getCode()) {
earnestRecordVo.setStateName(EarnestEnum.StateEnum.getNameByCode(earnestRecord.getState()) + "¥" + PriceUtil.convertPriceFenToYuan(earnestRecord.getAmount()));
}
} }
SupplierItem supplierItem = supplierItemDao.findById(earnestRecord.getItemId()); SupplierItem supplierItem = supplierItemDao.findById(earnestRecord.getItemId());
earnestRecordVo.setItemName(supplierItem.getName()); earnestRecordVo.setItemName(supplierItem.getName());
...@@ -105,7 +113,7 @@ public class EarnestRecordServiceImpl implements EarnestRecordService { ...@@ -105,7 +113,7 @@ public class EarnestRecordServiceImpl implements EarnestRecordService {
map.put("usedPayAmount", "0"); map.put("usedPayAmount", "0");
} else { } else {
map.put("usedGiftAmount", PriceUtil.convertPriceFenToYuan(giftAmount)); map.put("usedGiftAmount", PriceUtil.convertPriceFenToYuan(giftAmount));
map.put("usedPayAmount", PriceUtil.convertPriceFenToYuan(earnestAmount - giftAmount)); map.put("usedPayAmount", PriceUtil.convertPriceFenToYuan(occupyAmount - giftAmount));
} }
return Result.success(map); return Result.success(map);
} catch (Exception e) { } catch (Exception e) {
......
...@@ -27,6 +27,7 @@ import com.wwdz.ch.db.dto.request.openShop.GuaranteeMoneyRecordRequestDto; ...@@ -27,6 +27,7 @@ import com.wwdz.ch.db.dto.request.openShop.GuaranteeMoneyRecordRequestDto;
import com.wwdz.ch.db.dto.request.openShop.OpenShopApplyOrderRequestDto; import com.wwdz.ch.db.dto.request.openShop.OpenShopApplyOrderRequestDto;
import com.wwdz.ch.db.dto.request.openShop.OpenShopInfoRequestDto; import com.wwdz.ch.db.dto.request.openShop.OpenShopInfoRequestDto;
import com.wwdz.ch.wx.impl.AiAssistantServiceImpl; import com.wwdz.ch.wx.impl.AiAssistantServiceImpl;
import com.wwdz.ch.wx.service.UserAccountService;
import com.wwdz.ch.wx.service.openShop.OpenShopService; import com.wwdz.ch.wx.service.openShop.OpenShopService;
import com.xxdxxs.utils.EntityMapper; import com.xxdxxs.utils.EntityMapper;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -44,7 +45,7 @@ import java.util.Map; ...@@ -44,7 +45,7 @@ import java.util.Map;
@Service @Service
public class OpenShopServiceImpl implements OpenShopService { public class OpenShopServiceImpl implements OpenShopService {
private static final Logger logger = LoggerFactory.getLogger(AiAssistantServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(OpenShopServiceImpl.class);
@Autowired @Autowired
OpenShopApplyOrderDao openShopApplyOrderDao; OpenShopApplyOrderDao openShopApplyOrderDao;
...@@ -73,11 +74,15 @@ public class OpenShopServiceImpl implements OpenShopService { ...@@ -73,11 +74,15 @@ public class OpenShopServiceImpl implements OpenShopService {
@Autowired @Autowired
OpenShopCostConfigDao openShopCostConfigDao; OpenShopCostConfigDao openShopCostConfigDao;
@Autowired
UserAccountService userAccountService;
@Override @Override
public Result checkAbleToOpenShop(OpenShopInfoRequestDto dto) { public Result checkAbleToOpenShop(OpenShopInfoRequestDto dto) {
try { try {
Map<String, Object> map = new HashMap<>();
long userId = dto.getUserId(); long userId = dto.getUserId();
userAccountService.initAccount(userId);
Map<String, Object> map = new HashMap<>();
//查询是否粉丝数超过了100 //查询是否粉丝数超过了100
long fansNum = followFansRecordDao.countFans(userId); long fansNum = followFansRecordDao.countFans(userId);
map.put("fansNum", fansNum); map.put("fansNum", fansNum);
......
...@@ -241,11 +241,14 @@ public class AutoSendMsgJob { ...@@ -241,11 +241,14 @@ public class AutoSendMsgJob {
/** /**
* 拍卖订单中拍超时未付款导致流拍 * 拍卖订单中拍超时未付款导致流拍
* 自动更新这些拍品的状态为"中拍未付款流拍" * 自动更新这些拍品的状态为"中拍未付款流拍"
* 每次检测100条
*/ */
public void autoCancelNotPayOrder() { public void autoCancelNotPayOrder() {
logger.info("********************* 自动更新超时未支付拍卖订单状态 *********************");
DistributionOrderRequestDto dto = new DistributionOrderRequestDto(); DistributionOrderRequestDto dto = new DistributionOrderRequestDto();
dto.setType(DistributionEnum.DistributionTypeEnum.AUCTION.getCode()); dto.setType(DistributionEnum.DistributionTypeEnum.AUCTION.getCode());
dto.setState(DistributionEnum.DistributionOrderStateEnum.PRE_PAY.getCode()); dto.setState(DistributionEnum.DistributionOrderStateEnum.PRE_PAY.getCode());
dto.setLimit(100);
List<DistributionOrder> prePayList = distributionOrderDao.findByPage(dto); List<DistributionOrder> prePayList = distributionOrderDao.findByPage(dto);
prePayList.forEach(distributionOrder -> { prePayList.forEach(distributionOrder -> {
long diffInMillies = Math.abs(new Date().getTime() - distributionOrder.getCreateTime().getTime()); long diffInMillies = Math.abs(new Date().getTime() - distributionOrder.getCreateTime().getTime());
...@@ -255,7 +258,6 @@ public class AutoSendMsgJob { ...@@ -255,7 +258,6 @@ 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(); EarnestRecordRequestDto deductEarnestDto = new EarnestRecordRequestDto();
deductEarnestDto.setUserId(distributionOrder.getBuyerId()); deductEarnestDto.setUserId(distributionOrder.getBuyerId());
......
package com.wwdz.ch.wx.service; package com.wwdz.ch.wx.service;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
public interface UserAccountService { public interface UserAccountService {
......
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