提交 42b9d3e9 authored 作者: huyufan's avatar huyufan

订单到期释放冻结的相关资金

上级 c97def26
......@@ -17,7 +17,8 @@ public enum IdTypeEnum {
CASE_OUT_FROZEN(3L, "提现冻结"),
CASE_OUT_SUCCESS(4L, "提现成功"),
TOP_UP_SUCCESS(5L, "充值成功"),
FROZEN(6L, "冻结")
FROZEN(6L, "冻结"),
THAW(7L, "解冻")
;
private final Long code;
private final String msg;
......
package com.clx.performance.feign;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.param.pc.owner.UpdateStatusParam;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.msl.common.result.Result;
......@@ -34,6 +35,9 @@ public interface PerformanceFeign {
@PostMapping(value = {"clx-performance/feign/owner/ownerAccountFrozen"})
Result<Object> ownerAccountFrozen(@RequestBody FrozenAccountParam param);
@PostMapping(value = {"clx-performance/feign/owner/ownerAccountThaw"})
Result<Object> ownerAccountThaw(@RequestBody ThawAccountParam param);
@PostMapping(value = {"clx-performance/pc/carrier/settlementOwner/updateStatusByOrderNo"})
Result<Object> updateStatusByOrderNo(@RequestBody UpdateStatusParam param);
}
package com.clx.performance.param.pc.owner;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class ThawAccountParam {
private String orderNo;
// 1: 普通单 2:网运单
private String orderType;
}
......@@ -2,6 +2,7 @@ package com.clx.performance.controller.feign;
import cn.hutool.json.JSONUtil;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OwnerAccountService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
......@@ -24,11 +25,19 @@ public class OwnerAccountFeignController {
private final OwnerAccountService ownerAccountService;
@ApiOperation(value = "冻结保证金", notes = "<br>By:胡宇帆")
@ApiOperation(value = "冻结保证金和预付运费", notes = "<br>By:胡宇帆")
@PostMapping("/ownerAccountFrozen")
public Result<Object> ownerAccountFrozen(@RequestBody FrozenAccountParam param) {
log.info("进行冻结保证金账户,相关参数{}", JSONUtil.parse(param).toString());
log.info("进行冻结保证金和预付运费,相关参数{}", JSONUtil.parse(param).toString());
ownerAccountService.ownerAccountFrozen(param);
return Result.ok();
}
@ApiOperation(value = "解冻保证金和预付运费", notes = "<br>By:胡宇帆")
@PostMapping("/ownerAccountThaw")
public Result<Object> ownerAccountThaw(@RequestBody ThawAccountParam param) {
log.info("进行解冻保证金和预付运费账户,相关参数{}", JSONUtil.parse(param).toString());
ownerAccountService.ownerAccountThaw(param);
return Result.ok();
}
}
......@@ -21,4 +21,6 @@ public interface OwnerAccountDao extends BaseDao<OwnerAccountMapper, OwnerAccoun
Integer updateAccountCAS(OwnerAccount account, LocalDateTime now, boolean flag);
Integer thawAccount(OwnerAccount account, LocalDateTime now);
}
......@@ -9,6 +9,8 @@ import com.clx.performance.param.pc.PagePlatformPrepaidFreightAccountParam;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.msl.common.dao.BaseDao;
import java.util.List;
public interface OwnerRunningWaterRecordDao extends BaseDao<OwnerRunningWaterRecordMapper, OwnerRunningWaterRecord, Integer> {
......@@ -17,4 +19,6 @@ public interface OwnerRunningWaterRecordDao extends BaseDao<OwnerRunningWaterRec
IPage<OwnerAccountRunningWaterRecordVO> prepaidFreightAccountPageList(PagePlatformPrepaidFreightAccountParam param);
IPage<OwnerAccountRunningWaterRecordVO> ownerAccountRunningWaterPageList(PageOwnerAccountRunningWaterParam param);
List<OwnerRunningWaterRecord> getOwnerRunningWaterRecord(String orderNo);
}
......@@ -41,14 +41,14 @@ public class OwnerAccountDaoImpl extends BaseDaoImpl<OwnerAccountMapper, OwnerAc
@Override
public Integer updateOwnerAccountForConfirm(OwnerAccount account) {
String nowStr = DateUtils.formatDateTime(LocalDateTime.now(),"yyyy-MM-dd HH:mm:ss").get();
String nowStr = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
return baseMapper.updateOwnerAccountForConfirm(account,nowStr);
return baseMapper.updateOwnerAccountForConfirm(account, nowStr);
}
@Override
public Integer updateAccountCAS(OwnerAccount account, LocalDateTime now, boolean flag) {
String nowStr = DateUtils.formatDateTime(now,"yyyy-MM-dd HH:mm:ss").get();
String nowStr = DateUtils.formatDateTime(now, "yyyy-MM-dd HH:mm:ss").get();
if (flag) {
return baseMapper.addAccount(account, nowStr);
} else {
......@@ -56,5 +56,12 @@ public class OwnerAccountDaoImpl extends BaseDaoImpl<OwnerAccountMapper, OwnerAc
}
}
@Override
public Integer thawAccount(OwnerAccount account, LocalDateTime now) {
String nowStr = DateUtils.formatDateTime(now, "yyyy-MM-dd HH:mm:ss").get();
return baseMapper.thawAccount(account, nowStr);
}
}
......@@ -12,6 +12,8 @@ import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class OwnerRunningWaterRecordDaoImpl extends BaseDaoImpl<OwnerRunningWaterRecordMapper, OwnerRunningWaterRecord, Integer> implements OwnerRunningWaterRecordDao {
......@@ -32,4 +34,11 @@ public class OwnerRunningWaterRecordDaoImpl extends BaseDaoImpl<OwnerRunningWate
Page<OwnerAccountRunningWaterRecordVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.ownerAccountRunningWaterPageList(page, param);
}
@Override
public List<OwnerRunningWaterRecord> getOwnerRunningWaterRecord(String orderNo) {
return baseMapper.selectList(lambdaQuery().eq(OwnerRunningWaterRecord::getOrderNo, orderNo)
.eq(OwnerRunningWaterRecord::getOrderChildNo, null)
);
}
}
......@@ -45,4 +45,13 @@ public interface OwnerAccountMapper extends BaseMapper<OwnerAccount> {
+ "where id = #{account.id} and modified_time = #{account.modifiedTime}"
)
Integer updateOwnerAccountForConfirm(@Param("account") OwnerAccount account, @Param("now") String now);
@Update("update owner_account set usable_balance = usable_balance + #{account.usableBalance}"
+ ",account_balance = account_balance + #{account.accountBalance}"
+ ",frozen_balance = frozen_balance - #{account.frozenBalance},"
+ ",modified_time= #{now}"
+ "where id = #{account.id} and modified_time = #{account.modifiedTime}"
)
Integer thawAccount(@Param("account") OwnerAccount account, @Param("now") String now);
}
\ No newline at end of file
......@@ -8,6 +8,7 @@ import com.clx.performance.param.open.OpenOwnerTopUpParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.param.pc.owner.CreteAccountParam;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.user.param.pc.owner.UpdateOwnerBindCardFeignParam;
......@@ -82,4 +83,6 @@ public interface OwnerAccountService {
void ownerAccountFrozen(FrozenAccountParam param);
void createAccount(CreteAccountParam param);
void ownerAccountThaw(ThawAccountParam param);
}
......@@ -2,6 +2,7 @@ package com.clx.performance.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.dao.*;
......@@ -15,6 +16,7 @@ import com.clx.performance.param.open.OpenOwnerTopUpParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.param.pc.owner.CreteAccountParam;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.struct.OwnerAccountStruct;
import com.clx.performance.utils.excel.ExcelData;
......@@ -83,8 +85,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
}
@Override
public Map<String,OwnerAccountVO> accountInfo(Long ownerUserNo) {
Map<String,OwnerAccountVO> result = new HashMap<>(2);
public Map<String, OwnerAccountVO> accountInfo(Long ownerUserNo) {
Map<String, OwnerAccountVO> result = new HashMap<>(2);
List<OwnerAccountVO> list = ownerAccountStruct.convertList(ownerAccountDao.accountInfo(ownerUserNo));
for (OwnerAccountVO ownerAccountVO : list) {
if (OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode().equals(ownerAccountVO.getAccountType())) {
......@@ -316,7 +318,6 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
}
}
}
......@@ -400,7 +401,6 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
ownerCaseOutDao.updateEntityByKey(entity);
}
@Override
......@@ -445,7 +445,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
rowData.add(new ExcelData(dto.getUsableBalance()));
rowData.add(new ExcelData(dto.getAccountBalance()));
rowData.add(new ExcelData(dto.getTakeOutBalance()));
rowData.add(new ExcelData(dto.getRunningWaterNo() == null ? "" :dto.getRunningWaterNo().toString()));
rowData.add(new ExcelData(dto.getRunningWaterNo() == null ? "" : dto.getRunningWaterNo().toString()));
rowData.add(new ExcelData(dto.getCreateBy()));
rowData.add(new ExcelData(dto.getCreateTime().toString()));
......@@ -503,7 +503,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
rowData.add(new ExcelData(dto.getUsableBalance()));
rowData.add(new ExcelData(dto.getAccountBalance()));
rowData.add(new ExcelData(dto.getTakeOutBalance()));
rowData.add(new ExcelData(dto.getRunningWaterNo() == null ? "" :dto.getRunningWaterNo().toString()));
rowData.add(new ExcelData(dto.getRunningWaterNo() == null ? "" : dto.getRunningWaterNo().toString()));
rowData.add(new ExcelData(dto.getCreateBy()));
rowData.add(new ExcelData(dto.getCreateTime()));
......@@ -700,7 +700,7 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
accountList = ownerAccountDao.accountInfo(userNo);
for (OwnerAccount ownerAccount : accountList) {
if (ownerAccount.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())) {
//插入保证金冻结流水
log.info("插入保证金冻结流水");
OwnerRunningWaterRecord marginAccount = new OwnerRunningWaterRecord();
marginAccount.setOwnerUserName(ownerName);
marginAccount.setMobile(mobile);
......@@ -720,10 +720,8 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
marginAccount.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode());
marginAccount.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.FROZEN.getCode()));
ownerRunningWaterRecordDao.saveEntity(marginAccount);
}else {
} else {
log.info("插入预付运费冻结流水");
//插入预付运费冻结流水
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setOwnerUserName(ownerName);
prepaidFreight.setMobile(mobile);
......@@ -746,8 +744,6 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
}
}
break;
}
}
......@@ -775,4 +771,78 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
ownerAccount.setAccountType(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode());
ownerAccountDao.saveEntity(ownerAccount);
}
@Override
public void ownerAccountThaw(ThawAccountParam param) {
String orderNo = param.getOrderNo();
if (StringUtils.equals(param.getOrderType(), "1")) {
List<OwnerRunningWaterRecord> list = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderNo);
if (null == list || list.size() != 2) {
log.info("解冻预付运费、保证金账户出错,查询出冻结流水有问题,参数为{}", JSONUtil.parse(param));
return;
}
while (true) {
int flag = 0;
for (OwnerRunningWaterRecord runningWaterRecord : list) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType());
OwnerAccount entity = new OwnerAccount();
entity.setId(entity.getId());
entity.setModifiedTime(entity.getModifiedTime());
entity.setAccountBalance(runningWaterRecord.getAlterationBalance());
flag += ownerAccountDao.thawAccount(account, LocalDateTime.now());
}
if (flag == 2) {
log.info("解冻预付运费、保证金账户,账户扣款已处理,开始执行插入相关流水");
for (OwnerRunningWaterRecord runningWaterRecord : list) {
OwnerAccount account = ownerAccountDao.getAccountByOwnerUserNoAndAccountType(runningWaterRecord.getOwnerUserNo(), runningWaterRecord.getAccountType());
if (runningWaterRecord.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())) {
log.info("插入预付运费解冻流水");
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName());
prepaidFreight.setMobile(runningWaterRecord.getMobile());
prepaidFreight.setCreateBy("系统");
prepaidFreight.setOrderId(runningWaterRecord.getOrderId());
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo());
prepaidFreight.setRelationId(null);
prepaidFreight.setAlterationBalance(runningWaterRecord.getAlterationBalance());
prepaidFreight.setFrozenBalance(BigDecimal.ZERO);
prepaidFreight.setUsableBalance(account.getUsableBalance());
prepaidFreight.setTakeOutBalance(BigDecimal.ZERO);
prepaidFreight.setAccountBalance(account.getAccountBalance());
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo());
prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode());
prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode()));
ownerRunningWaterRecordDao.saveEntity(prepaidFreight);
} else {
log.info("插入保证金解冻流水");
OwnerRunningWaterRecord prepaidFreight = new OwnerRunningWaterRecord();
prepaidFreight.setOwnerUserName(runningWaterRecord.getOwnerUserName());
prepaidFreight.setMobile(runningWaterRecord.getMobile());
prepaidFreight.setCreateBy("系统");
prepaidFreight.setOrderId(runningWaterRecord.getOrderId());
prepaidFreight.setOrderNo(runningWaterRecord.getOrderNo());
prepaidFreight.setRelationId(null);
prepaidFreight.setAlterationBalance(runningWaterRecord.getAlterationBalance());
prepaidFreight.setFrozenBalance(BigDecimal.ZERO);
prepaidFreight.setUsableBalance(account.getUsableBalance());
prepaidFreight.setTakeOutBalance(BigDecimal.ZERO);
prepaidFreight.setAccountBalance(account.getAccountBalance());
prepaidFreight.setOwnerUserNo(account.getOwnerUserNo());
prepaidFreight.setAccountType(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode());
prepaidFreight.setRunningWaterType(OwnerAccountEnum.RunningWaterStatus.THAW.getCode());
prepaidFreight.setRunningWaterNo(idGenerateSnowFlake.nextId(IdTypeEnum.Type.THAW.getCode()));
ownerRunningWaterRecordDao.saveEntity(prepaidFreight);
}
}
break;
}
}
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论