Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx-performance
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
姜武杰
clx-performance
Commits
447715a2
提交
447715a2
authored
2月 04, 2024
作者:
huyufan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
接单借款判断
上级
90e6271a
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
53 行增加
和
28 行删除
+53
-28
OrderChildLoanComponent.java
...om/clx/performance/component/OrderChildLoanComponent.java
+43
-12
OwnerLoanAccountDaoImpl.java
...lx/performance/dao/impl/loan/OwnerLoanAccountDaoImpl.java
+1
-2
OwnerLoanRecordDaoImpl.java
...clx/performance/dao/impl/loan/OwnerLoanRecordDaoImpl.java
+5
-0
OrderChildServiceImpl.java
...m/clx/performance/service/impl/OrderChildServiceImpl.java
+4
-14
没有找到文件。
performance-web/src/main/java/com/clx/performance/component/OrderChildLoanComponent.java
浏览文件 @
447715a2
package
com
.
clx
.
performance
.
component
;
import
cn.hutool.json.JSONUtil
;
import
com.clx.order.feign.OrderFeign
;
import
com.clx.order.vo.feign.FeignOrderInfoVO
;
import
com.clx.order.vo.pc.owner.OwnerQuotationDetailVO
;
...
...
@@ -18,7 +19,6 @@ import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import
com.clx.performance.enums.loan.OwnerRePaymentEnum
;
import
com.clx.performance.model.OrderChild
;
import
com.clx.performance.model.OrderGoods
;
import
com.clx.performance.model.OwnerAccount
;
import
com.clx.performance.model.OwnerRunningWaterRecord
;
import
com.clx.performance.model.loan.OwnerLoanAccount
;
import
com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord
;
...
...
@@ -28,18 +28,18 @@ import com.clx.user.vo.feign.OwnerInfoFeignVO;
import
com.msl.common.base.Optional
;
import
com.msl.common.exception.ServiceSystemException
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
@Component
@AllArgsConstructor
@Slf4j
public
class
OrderChildLoanComponent
{
private
final
OrderFeign
orderFeign
;
...
...
@@ -58,27 +58,40 @@ public class OrderChildLoanComponent {
private
final
OwnerLoanAccountRunningWaterRecordDao
ownerLoanAccountRunningWaterRecordDao
;
public
void
getChildDetermine
(
FeignOrderInfoVO
orderInfoVO
,
OwnerInfoFeignVO
ownerInfoFeignVO
,
OrderGoods
orderGoods
,
String
childNo
)
{
/**
* 接单校验判断
* @param orderInfoVO
* @param ownerInfoFeignVO
* @param orderGoods
* @param childNo
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
getChildDetermine
(
FeignOrderInfoVO
orderInfoVO
,
OwnerInfoFeignVO
ownerInfoFeignVO
,
OrderGoods
orderGoods
,
String
childNo
)
{
log
.
info
(
"1.接单校验判断"
);
OwnerQuotationDetailVO
quotationDetailVO
=
orderFeign
.
getQuotationByOrderNo
(
orderInfoVO
.
getOrderNo
()).
getData
();
BigDecimal
freightFreezeRate
=
quotationDetailVO
.
getFreightFreezeRate
();
if
(
freightFreezeRate
.
compareTo
(
BigDecimal
.
ONE
)
==
0
)
{
//百分百预付不需要考虑借款账户
log
.
info
(
"2.百分百预付不需要考虑借款账户"
);
return
;
}
//发货-是否可超标准 0 否 1 是
Integer
overWeight
=
orderInfoVO
.
getOverWeight
();
if
(
OrderGoodsOverWeightEnum
.
NO
.
getCode
().
equals
(
overWeight
))
{
determine
(
orderGoods
.
getPendingOrderFreight
().
multiply
(
new
BigDecimal
(
35
)),
ownerInfoFeignVO
,
childNo
);
log
.
info
(
"3.进行标吨判断"
);
determine
(
orderGoods
.
getPendingOrderFreight
().
multiply
(
new
BigDecimal
(
35
)),
ownerInfoFeignVO
,
orderGoods
.
getOrderNo
(),
childNo
);
}
else
{
determine
(
orderGoods
.
getPendingOrderFreight
().
multiply
(
new
BigDecimal
(
50
)),
ownerInfoFeignVO
,
childNo
);
log
.
info
(
"3.进行超吨判断"
);
determine
(
orderGoods
.
getPendingOrderFreight
().
multiply
(
new
BigDecimal
(
50
)),
ownerInfoFeignVO
,
orderGoods
.
getOrderNo
(),
childNo
);
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
determine
(
BigDecimal
orderChildPrice
,
OwnerInfoFeignVO
ownerInfoFeignVO
,
String
childNo
)
{
List
<
OwnerRunningWaterRecord
>
runningWaterRecordList
=
ownerRunningWaterRecordDao
.
getOwnerRunningWaterRecord
(
""
);
public
void
determine
(
BigDecimal
orderChildPrice
,
OwnerInfoFeignVO
ownerInfoFeignVO
,
String
orderNo
,
String
childNo
)
{
log
.
info
(
"4.预估运费{},货主{},订单号{},运单号{}"
,
orderChildPrice
,
ownerInfoFeignVO
.
getUserNo
(),
orderNo
,
childNo
);
List
<
OwnerRunningWaterRecord
>
runningWaterRecordList
=
ownerRunningWaterRecordDao
.
getOwnerRunningWaterRecord
(
orderNo
);
BigDecimal
frozen
=
runningWaterRecordList
.
stream
().
filter
(
item
->
{
return
item
.
getRunningWaterType
().
equals
(
OwnerAccountEnum
.
RunningWaterStatus
.
FROZEN
.
getCode
())
&&
item
.
getAccountType
().
equals
(
OwnerAccountEnum
.
AccountTypeStatus
.
PREPAID_FREIGHT_ACCOUNT
.
getCode
())
...
...
@@ -91,42 +104,52 @@ public class OrderChildLoanComponent {
;
}).
map
(
OwnerRunningWaterRecord:
:
getAlterationBalance
).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
BigDecimal
subtract
=
frozen
.
subtract
(
takeOut
);
log
.
info
(
"5.查询预付运费相关流水:订单冻结预付运费{}, 扣除流水{}"
,
frozen
,
takeOut
);
if
(
subtract
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
//查询未结算的运单(没有产生扣除流水的运单)
List
<
OrderChild
>
orderChildList
=
orderChildDao
.
selectInTransitOrderChildLtUnsettle
(
""
);
List
<
OrderChild
>
orderChildList
=
orderChildDao
.
selectInTransitOrderChildLtUnsettle
(
orderNo
);
BigDecimal
orderChildSum
=
orderChildList
.
stream
().
map
(
OrderChild:
:
getWeight
).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
BigDecimal
ans
=
subtract
.
subtract
(
orderChildSum
);
log
.
info
(
"6.当前订单冻结的预付运费还有剩余, 查询查询未结算的运单(没有产生扣除流水的运单)总计{},账户剩余{}"
,
orderChildSum
,
subtract
);
if
(
ans
.
compareTo
(
BigDecimal
.
ZERO
)
>=
0
&&
ans
.
compareTo
(
orderChildPrice
)
>=
0
)
{
//预付运费够
log
.
info
(
"7.预付运费足够,不限制"
);
return
;
}
}
log
.
info
(
"8.预付运费不够,开始进行借款判断"
);
// 进行借款判断
OwnerLoanAccount
ownerLoanAccount
=
ownerLoanAccountDao
.
getOneByField
(
OwnerLoanAccount:
:
getOwnerUserNo
,
ownerInfoFeignVO
.
getUserNo
()).
get
();
BigDecimal
ownerLoanAccountSum
=
ownerLoanAccount
.
getVirtuallyUsableBalance
().
add
(
ownerLoanAccount
.
getFundingUsableBalance
());
if
(
ownerLoanAccountSum
.
compareTo
(
orderChildPrice
)
<
0
)
{
log
.
info
(
"9.当前货主借款账户总计{},小于预估运费{}"
,
ownerLoanAccountSum
,
orderChildPrice
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
ORDER_CHILD_SAVE_FAIL
,
"货主已欠款"
);
}
//借款账户钱够,判断是否逾期
log
.
info
(
"10.借款账户钱够,判断是否逾期"
);
Optional
<
OwnerRepayment
>
optional
=
ownerRepaymentDao
.
getLimitOneByField
(
OwnerRepayment:
:
getBeOverdue
,
OwnerRePaymentEnum
.
BeOverdue
.
YES
.
getCode
());
if
(
optional
.
isPresent
())
{
//逾期:不允许
log
.
info
(
"11.当前货主存在逾期借款"
);
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
ORDER_CHILD_SAVE_FAIL
,
"货主已欠款"
);
}
List
<
OwnerLoanRecord
>
updateList
=
new
LinkedList
<>();
//
借款扣款:
//
查询审批通过并且未用完的借款
List
<
OwnerLoanRecord
>
ownerLoanRecords
=
ownerLoanRecordDao
.
selectLoanBalance
(
ownerInfoFeignVO
.
getUserNo
());
BigDecimal
orderChildPriceTemp
=
orderChildPrice
;
for
(
OwnerLoanRecord
ownerLoanRecord
:
ownerLoanRecords
)
{
BigDecimal
loanResidueBalance
=
ownerLoanRecord
.
getLoanResidueBalance
();
log
.
info
(
"12.当前预估运费金额:{},借款单号{},借款剩余金额{}"
,
orderChildPriceTemp
,
ownerLoanRecord
.
getLoanNo
(),
loanResidueBalance
);
if
(
loanResidueBalance
.
compareTo
(
orderChildPriceTemp
)
>=
0
)
{
log
.
info
(
"当前借款单的剩余金额足够预估运费金额"
);
generateFrozenOwnerLoanRunningWater
(
ownerLoanRecord
,
childNo
,
orderChildPrice
);
updateList
.
add
(
ownerLoanRecord
.
setLoanResidueBalance
(
loanResidueBalance
.
subtract
(
orderChildPriceTemp
)));
break
;
}
else
{
log
.
info
(
"当前借款单的剩余金额不够抵扣预估运费金额,先进行扣除当前借款所有剩余"
);
generateFrozenOwnerLoanRunningWater
(
ownerLoanRecord
,
childNo
,
orderChildPrice
);
updateList
.
add
(
ownerLoanRecord
.
setLoanResidueBalance
(
BigDecimal
.
ZERO
));
orderChildPriceTemp
=
orderChildPriceTemp
.
subtract
(
loanResidueBalance
);
...
...
@@ -141,11 +164,14 @@ public class OrderChildLoanComponent {
}
//生成借款冻结流水
public
void
generateFrozenOwnerLoanRunningWater
(
OwnerLoanRecord
ownerLoanRecord
,
String
childNo
,
BigDecimal
orderChildPrice
)
{
log
.
info
(
"13.生成借款冻结流水"
);
OwnerLoanAccount
update
=
new
OwnerLoanAccount
();
while
(
true
)
{
ownerLoanAccountUpdate
(
ownerLoanRecord
,
orderChildPrice
,
update
);
Integer
i
=
ownerLoanAccountDao
.
updateAccountCAS
(
update
,
LocalDateTime
.
now
(),
false
);
log
.
info
(
"CAS更新结果:{}"
,
i
);
if
(
i
==
1
)
{
OwnerLoanAccountRunningWaterRecord
waterRecord
=
new
OwnerLoanAccountRunningWaterRecord
();
waterRecord
.
setLoanNo
(
ownerLoanRecord
.
getLoanNo
());
...
...
@@ -161,6 +187,7 @@ public class OrderChildLoanComponent {
waterRecord
.
setAccountBalance
(
account
.
getVirtuallyAccountBalance
().
add
(
account
.
getFundingAccountBalance
()));
waterRecord
.
setUseableBalance
(
account
.
getVirtuallyUsableBalance
().
add
(
account
.
getFundingUsableBalance
()));
waterRecord
.
setCreateBy
(
"系统"
);
log
.
info
(
"14.生成借款账户流水信息:{}"
,
JSONUtil
.
parse
(
waterRecord
));
ownerLoanAccountRunningWaterRecordDao
.
saveEntity
(
waterRecord
);
break
;
}
...
...
@@ -168,11 +195,14 @@ public class OrderChildLoanComponent {
}
//借款账户信息更新
public
void
ownerLoanAccountUpdate
(
OwnerLoanRecord
ownerLoanRecord
,
BigDecimal
orderChildPrice
,
OwnerLoanAccount
update
)
{
log
.
info
(
"执行CAS前置借款账户信息赋值"
);
Integer
loanType
=
ownerLoanRecord
.
getLoanType
();
OwnerLoanAccount
account
=
ownerLoanAccountDao
.
getOneByField
(
OwnerLoanAccount:
:
getOwnerUserNo
,
ownerLoanRecord
.
getOwnerUserNo
()).
get
();
if
(
OwnerLoanRecordEnum
.
LoanType
.
VIRTUAL_CURRENCY
.
getCode
().
equals
(
loanType
))
{
log
.
info
(
"进行虚拟货币信息赋值"
);
update
.
setId
(
account
.
getId
());
update
.
setModifiedTime
(
account
.
getModifiedTime
());
update
.
setVirtuallyFrozenBalance
(
orderChildPrice
);
...
...
@@ -183,6 +213,7 @@ public class OrderChildLoanComponent {
update
.
setFundingFrozenBalance
(
BigDecimal
.
ZERO
);
update
.
setFundingUsableBalance
(
BigDecimal
.
ZERO
);
}
else
{
log
.
info
(
"进行资金信息赋值"
);
update
.
setId
(
account
.
getId
());
update
.
setModifiedTime
(
account
.
getModifiedTime
());
update
.
setFundingFrozenBalance
(
orderChildPrice
);
...
...
performance-web/src/main/java/com/clx/performance/dao/impl/loan/OwnerLoanAccountDaoImpl.java
浏览文件 @
447715a2
...
...
@@ -27,8 +27,7 @@ public class OwnerLoanAccountDaoImpl extends BaseDaoImpl<OwnerLoanAccountMapper,
if
(
flag
)
{
return
baseMapper
.
addAccount
(
account
,
nowStr
);
}
else
{
return
null
;
// return baseMapper.subAccount(account, nowStr);
return
baseMapper
.
subAccount
(
account
,
nowStr
);
}
}
...
...
performance-web/src/main/java/com/clx/performance/dao/impl/loan/OwnerLoanRecordDaoImpl.java
浏览文件 @
447715a2
...
...
@@ -55,6 +55,11 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O
return
baseMapper
.
pageByParam
(
page
,
param
);
}
/**
* 查询审批通过并且未用完的借款
* @param userNo
* @return
*/
@Override
public
List
<
OwnerLoanRecord
>
selectLoanBalance
(
Long
userNo
)
{
return
baseMapper
.
selectList
(
...
...
performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
浏览文件 @
447715a2
...
...
@@ -8,6 +8,7 @@ import com.clx.order.feign.OrderFeign;
import
com.clx.order.vo.feign.FeignAddressVO
;
import
com.clx.order.vo.feign.FeignOrderInfoVO
;
import
com.clx.performance.component.GoodsOrderTruckRecordComponent
;
import
com.clx.performance.component.OrderChildLoanComponent
;
import
com.clx.performance.constant.RedisConstants
;
import
com.clx.performance.constant.RedissonConstants
;
import
com.clx.performance.dao.*
;
...
...
@@ -153,17 +154,7 @@ public class OrderChildServiceImpl implements OrderChildService {
private
FeignPaymentService
feignPaymentService
;
@Autowired
private
TruckService
truckService
;
@Autowired
private
ZjxlGpsService
zjxlGpsService
;
@Autowired
private
UserService
userService
;
@Autowired
private
OwnerRunningWaterRecordDao
ownerRunningWaterRecordDao
;
private
OrderChildLoanComponent
orderChildLoanComponent
;
@Override
public
SaveOrderChildVO
saveOrderChild
(
OrderChildSaveParam
param
)
{
...
...
@@ -265,7 +256,6 @@ public class OrderChildServiceImpl implements OrderChildService {
FeignOrderInfoVO
orderInfo
=
orderService
.
getOrderInfo
(
orderGoods
.
getOrderNo
()).
orElseThrow
(
PerformanceResultEnum
.
ORDER_INVALID
);
OwnerInfoFeignVO
ownerInfo
=
ownerInfoService
.
getOwnerInfo
(
orderInfo
.
getOwnerUserNo
());
// // 车型限制
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow
// (PerformanceResultEnum.DATA_NOT_FIND);
...
...
@@ -312,8 +302,8 @@ public class OrderChildServiceImpl implements OrderChildService {
throw
new
ServiceSystemException
(
PerformanceResultEnum
.
ORDER_WEIGHT_LACK
);
}
//
TODO 借款账户相关限制
//
接单判断
orderChildLoanComponent
.
getChildDetermine
(
orderInfo
,
ownerInfo
,
orderGoods
,
childNo
);
OrderChild
orderChild
=
new
OrderChild
();
orderChild
.
setChildNo
(
childNo
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论