Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-api-boot-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lanbaoming
jiedao-api-boot-master
Commits
2bca120b
Commit
2bca120b
authored
Mar 22, 2025
by
332784038@qq.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
应收单业务汇率计算业务修改
parent
a8b0fd68
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
194 additions
and
34 deletions
+194
-34
20250222-currency-rate.sql
sql/v2.2财务/20250222-currency-rate.sql
+15
-3
CurrecyApiImpl.java
.../iocoder/yudao/module/ecw/service/api/CurrecyApiImpl.java
+18
-1
CurrencyRateService.java
.../module/ecw/service/currencyRate/CurrencyRateService.java
+1
-1
ReceivableDO.java
...module/wealth/dal/dataobject/receivable/ReceivableDO.java
+49
-0
ReceivableServiceImpl.java
...dule/wealth/service/receivable/ReceivableServiceImpl.java
+111
-29
No files found.
sql/v2.2财务/20250222-currency-rate.sql
View file @
2bca120b
...
@@ -65,8 +65,21 @@ COMMIT;
...
@@ -65,8 +65,21 @@ COMMIT;
ALTER
TABLE
`ecw_currency_rate`
ADD
COLUMN
`source_currency_code`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_general_ci
NOT
NULL
COMMENT
'原币种代码'
AFTER
`source_id`
;
ALTER
TABLE
`ecw_currency_rate`
ADD
COLUMN
`source_currency_code`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_general_ci
NOT
NULL
COMMENT
'原币种代码'
AFTER
`source_id`
;
ALTER
TABLE
`ecw_currency_rate`
ADD
COLUMN
`target_currency_code`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_general_ci
NOT
NULL
COMMENT
'目标种代码'
AFTER
`target_id`
;
ALTER
TABLE
`ecw_currency_rate`
ADD
COLUMN
`target_currency_code`
varchar
(
255
)
CHARACTER
SET
utf8mb4
COLLATE
utf8mb4_general_ci
NOT
NULL
COMMENT
'目标
币
种代码'
AFTER
`target_id`
;
update
`ecw_currency_rate`
r
left
join
`ecw_currency`
c1
on
r
.
source_id
=
c1
.
id
left
join
`ecw_currency`
c2
on
r
.
target_id
=
c2
.
id
update
`ecw_currency_rate`
r
left
join
`ecw_currency`
c1
on
r
.
source_id
=
c1
.
id
left
join
`ecw_currency`
c2
on
r
.
target_id
=
c2
.
id
set
r
.
`source_currency_code`
=
c1
.
fuhao
,
r
.
`target_currency_code`
=
c2
.
fuhao
;
set
r
.
`source_currency_code`
=
c1
.
fuhao
,
r
.
`target_currency_code`
=
c2
.
fuhao
;
\ No newline at end of file
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`source_amount`
DECIMAL
(
14
,
4
)
DEFAULT
NULL
COMMENT
'原币种基准金额'
AFTER
`fee_type`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`source_currency_code`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'原币种代码'
AFTER
`source_amount`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`target_amount`
DECIMAL
(
14
,
4
)
DEFAULT
NULL
COMMENT
'支付币种基准金额'
AFTER
`source_currency_code`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`target_currency_code`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'支付币种代码'
AFTER
`target_amount`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`dest_country_source_amount`
DECIMAL
(
14
,
4
)
DEFAULT
NULL
COMMENT
'目的国币种汇兑原币种基准金额'
AFTER
`target_currency_code`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`dest_country_target_amount`
DECIMAL
(
14
,
4
)
DEFAULT
NULL
COMMENT
'目的国币种支付基准金额'
AFTER
`dest_country_source_amount`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`dest_country_target_currency_code`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'目的国币种代码'
AFTER
`dest_country_target_amount`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`dest_country_sub_source_amount`
DECIMAL
(
14
,
4
)
DEFAULT
NULL
COMMENT
'目的国副币种汇兑原币种基准金额'
AFTER
`dest_country_target_currency_code`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`dest_country_sub_target_amount`
DECIMAL
(
14
,
4
)
DEFAULT
NULL
COMMENT
'目的国副币种支付基准金额'
AFTER
`dest_country_sub_source_amount`
;
ALTER
TABLE
`ecw_receivable`
ADD
COLUMN
`dest_country_sub_target_currency_code`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'目的国副币种代码'
AFTER
`dest_country_sub_target_amount`
;
yudao-module-ecw/yudao-module-ecw-impl/src/main/java/cn/iocoder/yudao/module/ecw/service/api/CurrecyApiImpl.java
View file @
2bca120b
...
@@ -113,6 +113,23 @@ public class CurrecyApiImpl implements CurrencyApi {
...
@@ -113,6 +113,23 @@ public class CurrecyApiImpl implements CurrencyApi {
@Override
@Override
public
List
<
ExchangeRateRespDTO
>
getAllCurrencyRate
()
{
public
List
<
ExchangeRateRespDTO
>
getAllCurrencyRate
()
{
List
<
CurrencyRateDO
>
currencyRateDOS
=
currencyRateService
.
queryAll
();
List
<
CurrencyRateDO
>
currencyRateDOS
=
currencyRateService
.
queryAll
();
return
CurrencyRateConvert
.
INSTANCE
.
convertList2
(
currencyRateDOS
);
return
convertRateRespList
(
currencyRateDOS
);
}
private
List
<
ExchangeRateRespDTO
>
convertRateRespList
(
List
<
CurrencyRateDO
>
currencyRateDOS
)
{
return
currencyRateDOS
.
stream
().
map
(
this
::
convertRateResp
).
collect
(
Collectors
.
toList
());
}
private
ExchangeRateRespDTO
convertRateResp
(
CurrencyRateDO
currencyRateDO
)
{
ExchangeRateRespDTO
dto
=
new
ExchangeRateRespDTO
();
dto
.
setSourceCurrencyAmount
(
currencyRateDO
.
getSourceAmount
());
dto
.
setSourceCurrencyId
(
currencyRateDO
.
getSourceId
());
dto
.
setSourceCurrencyCode
(
currencyRateDO
.
getSourceCurrencyCode
());
dto
.
setTargetCurrencyAmount
(
currencyRateDO
.
getTargetAmount
());
dto
.
setTargetCurrencyId
(
currencyRateDO
.
getTargetId
());
dto
.
setTargetCurrencyCode
(
currencyRateDO
.
getTargetCurrencyCode
());
dto
.
setExpireDate
(
currencyRateDO
.
getExpiration
());
dto
.
setCurrencyRate
(
currencyRateService
.
rate
(
currencyRateDO
.
getSourceAmount
(),
currencyRateDO
.
getTargetAmount
()));
return
dto
;
}
}
}
}
yudao-module-ecw/yudao-module-ecw-impl/src/main/java/cn/iocoder/yudao/module/ecw/service/currencyRate/CurrencyRateService.java
View file @
2bca120b
...
@@ -68,7 +68,7 @@ public interface CurrencyRateService {
...
@@ -68,7 +68,7 @@ public interface CurrencyRateService {
Date
now
=
new
Date
();
Date
now
=
new
Date
();
if
(
now
.
compareTo
(
entity
.
getExpiration
())
>
0
)
{
if
(
now
.
compareTo
(
entity
.
getExpiration
())
>
0
)
{
throw
exception
(
CURRENCY_RATE_EXPIRED
,
String
.
valueOf
(
sourceId
),
String
.
valueOf
(
targetId
));
throw
exception
(
CURRENCY_RATE_EXPIRED
,
entity
.
getSourceCurrencyCode
(),
entity
.
getTargetCurrencyCode
(
));
}
}
return
entity
;
return
entity
;
...
...
yudao-module-wealth/yudao-module-wealth-core/src/main/java/cn/iocoder/yudao/module/wealth/dal/dataobject/receivable/ReceivableDO.java
View file @
2bca120b
...
@@ -185,4 +185,53 @@ public class ReceivableDO extends BaseDO {
...
@@ -185,4 +185,53 @@ public class ReceivableDO extends BaseDO {
* 额外费用副币种汇率(用于报表,跟费用类型相关)
* 额外费用副币种汇率(用于报表,跟费用类型相关)
*/
*/
private
BigDecimal
destCountrySubRate
;
private
BigDecimal
destCountrySubRate
;
/**
* 原币种基准金额
*/
private
BigDecimal
sourceAmount
;
/**
* 原币种代码
*/
private
String
sourceCurrencyCode
;
/**
* 支付币种基准金额
*/
private
BigDecimal
targetAmount
;
/**
* 支付币种代码
*/
private
String
targetCurrencyCode
;
/**
* 目的国币种汇兑原币种基准金额
*/
private
BigDecimal
destCountrySourceAmount
;
/**
* 目的国币种支付基准金额
*/
private
BigDecimal
destCountryTargetAmount
;
/**
* 目的国币种代码
*/
private
String
destCountryTargetCurrencyCode
;
/**
* 目的国币副种汇兑原币种基准金额
*/
private
BigDecimal
destCountrySubSourceAmount
;
/**
* 目的国副币种支付基准金额
*/
private
BigDecimal
destCountrySubTargetAmount
;
/**
* 目的国副币种代码
*/
private
String
destCountrySubTargetCurrencyCode
;
}
}
yudao-module-wealth/yudao-module-wealth-core/src/main/java/cn/iocoder/yudao/module/wealth/service/receivable/ReceivableServiceImpl.java
View file @
2bca120b
...
@@ -61,6 +61,7 @@ import java.util.concurrent.ExecutionException;
...
@@ -61,6 +61,7 @@ import java.util.concurrent.ExecutionException;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
exception
.
util
.
ServiceExceptionUtil
.
exception
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
exception
.
util
.
ServiceExceptionUtil
.
exception
;
import
static
cn
.
iocoder
.
yudao
.
module
.
ecw
.
enums
.
ErrorCodeConstants
.
CURRENCY_RATE_EXPIRED
;
import
static
cn
.
iocoder
.
yudao
.
module
.
wealth
.
enums
.
BoxReportConstant
.*;
import
static
cn
.
iocoder
.
yudao
.
module
.
wealth
.
enums
.
BoxReportConstant
.*;
import
static
cn
.
iocoder
.
yudao
.
module
.
wealth
.
enums
.
ErrorCodeConstants
.*;
import
static
cn
.
iocoder
.
yudao
.
module
.
wealth
.
enums
.
ErrorCodeConstants
.*;
...
@@ -960,8 +961,8 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
...
@@ -960,8 +961,8 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
List
<
ReceivableIncomeBelong
>
receivableIncomeBelongs
=
receivableIncomeBelongMap
.
get
(
boxReceivable
.
getId
());
List
<
ReceivableIncomeBelong
>
receivableIncomeBelongs
=
receivableIncomeBelongMap
.
get
(
boxReceivable
.
getId
());
BigDecimal
baseCurrencyAmount
;
BigDecimal
baseCurrencyAmount
;
if
(
boxReceivable
.
getBaseAmount
()
==
null
)
{
if
(
boxReceivable
.
getBaseAmount
()
==
null
)
{
BigDecimal
exchangeRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
boxReceivable
.
getBaseCurrencyId
());
ExchangeRateRespDTO
exchangeRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
boxReceivable
.
getBaseCurrencyId
());
baseCurrencyAmount
=
boxReceivable
.
getTotalAmount
().
multiply
(
exchangeRate
);
baseCurrencyAmount
=
boxReceivable
.
getTotalAmount
().
multiply
(
exchangeRate
.
getTargetCurrencyAmount
()).
divide
(
exchangeRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
);
}
else
{
}
else
{
baseCurrencyAmount
=
boxReceivable
.
getBaseAmount
();
baseCurrencyAmount
=
boxReceivable
.
getBaseAmount
();
}
}
...
@@ -982,17 +983,18 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
...
@@ -982,17 +983,18 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
if
(
boxReceivable
.
getCurrencyId
().
equals
(
receivableCurrency
))
{
if
(
boxReceivable
.
getCurrencyId
().
equals
(
receivableCurrency
))
{
receivableBoxAmount
.
receivableTotalSettle
.
addAmount
(
currencyAmount
.
getAmount
());
receivableBoxAmount
.
receivableTotalSettle
.
addAmount
(
currencyAmount
.
getAmount
());
}
else
{
}
else
{
receivableBoxAmount
.
receivableTotalSettle
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
receivableCurrency
)));
ExchangeRateRespDTO
exchangeRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
receivableCurrency
);
receivableBoxAmount
.
receivableTotalSettle
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
exchangeRate
.
getTargetCurrencyAmount
()).
divide
(
exchangeRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
// 判断属于哪种费用 0运费,1 清关费,2 额外费用
// 判断属于哪种费用 0运费,1 清关费,2 额外费用
Integer
feeType
=
this
.
getFeeType
(
boxReceivable
.
getFeeType
());
Integer
feeType
=
this
.
getFeeType
(
boxReceivable
.
getFeeType
());
BigDecimal
discount
=
boxReceivable
.
getDiscountTotal
()
==
null
?
BigDecimal
.
ZERO
:
boxReceivable
.
getDiscountTotal
();
BigDecimal
discount
=
boxReceivable
.
getDiscountTotal
()
==
null
?
BigDecimal
.
ZERO
:
boxReceivable
.
getDiscountTotal
();
BigDecimal
notWrittenOff
=
Objects
.
equals
(
boxReceivable
.
getWriteOffAmount
(),
BigDecimal
.
ZERO
)
?
currencyAmount
.
getAmount
()
:
currencyAmount
.
getAmount
().
subtract
(
boxReceivable
.
getWriteOffAmount
());
BigDecimal
notWrittenOff
=
Objects
.
equals
(
boxReceivable
.
getWriteOffAmount
(),
BigDecimal
.
ZERO
)
?
currencyAmount
.
getAmount
()
:
currencyAmount
.
getAmount
().
subtract
(
boxReceivable
.
getWriteOffAmount
());
BigDecimal
freightRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
freightCurrency
);
ExchangeRateRespDTO
freightRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
freightCurrency
);
BigDecimal
clearanceRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
clearanceCurrency
);
ExchangeRateRespDTO
clearanceRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
clearanceCurrency
);
BigDecimal
otherFeeRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
otherFeeCurrency
);
ExchangeRateRespDTO
otherFeeRate
=
getExchangeRate
(
allCurrencyRate
,
boxReceivable
.
getCurrencyId
(),
otherFeeCurrency
);
BigDecimal
otherSubRate
=
getExchangeRate
(
allCurrencyRate
,
freightCurrency
,
otherSubCurrency
);
ExchangeRateRespDTO
otherSubRate
=
getExchangeRate
(
allCurrencyRate
,
freightCurrency
,
otherSubCurrency
);
switch
(
feeType
)
{
switch
(
feeType
)
{
case
0
:
case
0
:
if
(
boxReceivable
.
getCurrencyId
().
equals
(
freightCurrency
))
{
if
(
boxReceivable
.
getCurrencyId
().
equals
(
freightCurrency
))
{
...
@@ -1000,17 +1002,31 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
...
@@ -1000,17 +1002,31 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
receivableBoxAmount
.
receivableDiscountFreight
.
addAmount
(
discount
);
receivableBoxAmount
.
receivableDiscountFreight
.
addAmount
(
discount
);
receivableBoxAmount
.
receivableUnsettledFreight
.
addAmount
(
notWrittenOff
);
receivableBoxAmount
.
receivableUnsettledFreight
.
addAmount
(
notWrittenOff
);
}
else
{
}
else
{
receivableBoxAmount
.
receivableDetailFreight
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
freightRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableDiscountFreight
.
addAmount
(
discount
.
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
freightRate
));
receivableBoxAmount
.
receivableDetailFreight
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledFreight
.
addAmount
(
notWrittenOff
.
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
freightRate
));
receivableBoxAmount
.
receivableDiscountFreight
.
addAmount
(
discount
.
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledFreight
.
addAmount
(
notWrittenOff
.
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableDetailFreight
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
freightRate
.
getTargetCurrencyAmount
()).
divide
(
freightRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableDiscountFreight
.
addAmount
(
discount
.
multiply
(
freightRate
.
getTargetCurrencyAmount
()).
divide
(
freightRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledFreight
.
addAmount
(
notWrittenOff
.
multiply
(
freightRate
.
getTargetCurrencyAmount
()).
divide
(
freightRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
}
// 计算始发国或目的国实收
// 计算始发国或目的国实收
if
(
receivableIncomeBelongs
!=
null
)
{
if
(
receivableIncomeBelongs
!=
null
)
{
for
(
ReceivableIncomeBelong
receivableIncomeBelong
:
receivableIncomeBelongs
)
{
for
(
ReceivableIncomeBelong
receivableIncomeBelong
:
receivableIncomeBelongs
)
{
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
1
)
{
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
1
)
{
receivableBoxAmount
.
receivableStartCountryFreight
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
freightRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableStartCountryFreight
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableStartCountryFreight
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
freightRate
.
getTargetCurrencyAmount
()).
divide
(
freightRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
else
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
0
)
{
}
else
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
0
)
{
receivableBoxAmount
.
receivableDestCountryFreight
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
freightRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableDestCountryFreight
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableDestCountryFreight
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
freightRate
.
getTargetCurrencyAmount
()).
divide
(
freightRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
}
}
}
}
}
...
@@ -1021,17 +1037,31 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
...
@@ -1021,17 +1037,31 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
receivableBoxAmount
.
receivableDiscountClearance
.
addAmount
(
discount
);
receivableBoxAmount
.
receivableDiscountClearance
.
addAmount
(
discount
);
receivableBoxAmount
.
receivableUnsettledClearance
.
addAmount
(
notWrittenOff
);
receivableBoxAmount
.
receivableUnsettledClearance
.
addAmount
(
notWrittenOff
);
}
else
{
}
else
{
receivableBoxAmount
.
receivableDetailClearance
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
clearanceRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableDiscountClearance
.
addAmount
(
discount
.
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
clearanceRate
));
receivableBoxAmount
.
receivableDetailClearance
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledClearance
.
addAmount
(
notWrittenOff
.
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
clearanceRate
));
receivableBoxAmount
.
receivableDiscountClearance
.
addAmount
(
discount
.
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledClearance
.
addAmount
(
notWrittenOff
.
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableDetailClearance
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
clearanceRate
.
getTargetCurrencyAmount
()).
divide
(
clearanceRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableDiscountClearance
.
addAmount
(
discount
.
multiply
(
clearanceRate
.
getTargetCurrencyAmount
()).
divide
(
clearanceRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledClearance
.
addAmount
(
notWrittenOff
.
multiply
(
clearanceRate
.
getTargetCurrencyAmount
()).
divide
(
clearanceRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
}
// 计算始发国或目的国实收
// 计算始发国或目的国实收
if
(
receivableIncomeBelongs
!=
null
)
{
if
(
receivableIncomeBelongs
!=
null
)
{
for
(
ReceivableIncomeBelong
receivableIncomeBelong
:
receivableIncomeBelongs
)
{
for
(
ReceivableIncomeBelong
receivableIncomeBelong
:
receivableIncomeBelongs
)
{
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
1
)
{
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
1
)
{
receivableBoxAmount
.
receivableStartCountryClearance
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
clearanceRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableStartCountryClearance
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableStartCountryClearance
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
clearanceRate
.
getTargetCurrencyAmount
()).
divide
(
clearanceRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
else
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
0
)
{
}
else
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
0
)
{
receivableBoxAmount
.
receivableDestCountryClearance
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
clearanceRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableDestCountryClearance
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableDestCountryClearance
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
clearanceRate
.
getTargetCurrencyAmount
()).
divide
(
clearanceRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
}
}
}
}
}
...
@@ -1042,19 +1072,41 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
...
@@ -1042,19 +1072,41 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
receivableBoxAmount
.
receivableDiscountOtherFee
.
addAmount
(
discount
);
receivableBoxAmount
.
receivableDiscountOtherFee
.
addAmount
(
discount
);
receivableBoxAmount
.
receivableUnsettledOtherFee
.
addAmount
(
notWrittenOff
);
receivableBoxAmount
.
receivableUnsettledOtherFee
.
addAmount
(
notWrittenOff
);
}
else
{
}
else
{
receivableBoxAmount
.
receivableDetailOtherFee
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
otherFeeRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableDiscountOtherFee
.
addAmount
(
discount
.
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
otherFeeRate
));
receivableBoxAmount
.
receivableDetailOtherFee
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledOtherFee
.
addAmount
(
notWrittenOff
.
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
otherFeeRate
));
receivableBoxAmount
.
receivableDiscountOtherFee
.
addAmount
(
discount
.
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledOtherFee
.
addAmount
(
notWrittenOff
.
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableDetailOtherFee
.
addAmount
(
currencyAmount
.
getAmount
().
multiply
(
otherFeeRate
.
getTargetCurrencyAmount
()).
divide
(
otherFeeRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableDiscountOtherFee
.
addAmount
(
discount
.
multiply
(
otherFeeRate
.
getTargetCurrencyAmount
()).
divide
(
otherFeeRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
receivableBoxAmount
.
receivableUnsettledOtherFee
.
addAmount
(
notWrittenOff
.
multiply
(
otherFeeRate
.
getTargetCurrencyAmount
()).
divide
(
otherFeeRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
}
// 计算始发国或目的国实收
// 计算始发国或目的国实收
if
(
receivableIncomeBelongs
!=
null
)
{
if
(
receivableIncomeBelongs
!=
null
)
{
for
(
ReceivableIncomeBelong
receivableIncomeBelong
:
receivableIncomeBelongs
)
{
for
(
ReceivableIncomeBelong
receivableIncomeBelong
:
receivableIncomeBelongs
)
{
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
1
)
{
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
1
)
{
receivableBoxAmount
.
receivableStartCountryOtherFee
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
otherFeeRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableStartCountryOtherFeeSub
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountrySubRate
()
!=
null
?
boxReceivable
.
getDestCountrySubRate
()
:
otherSubRate
));
receivableBoxAmount
.
receivableStartCountryOtherFee
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableStartCountryOtherFee
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
otherFeeRate
.
getTargetCurrencyAmount
()).
divide
(
otherFeeRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
if
(
boxReceivable
.
getDestCountrySubSourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountrySubTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableStartCountryOtherFeeSub
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountrySubTargetAmount
()).
divide
(
boxReceivable
.
getDestCountrySubTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableStartCountryOtherFeeSub
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
otherSubRate
.
getTargetCurrencyAmount
()).
divide
(
otherSubRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
else
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
0
)
{
}
else
if
(
receivableIncomeBelong
.
getIncomeBelong
()
==
0
)
{
receivableBoxAmount
.
receivableDestCountryOtherFee
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryRate
()
!=
null
?
boxReceivable
.
getDestCountryRate
()
:
otherFeeRate
));
if
(
boxReceivable
.
getDestCountrySourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountryTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableDestCountryOtherFeeSub
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountrySubRate
()
!=
null
?
boxReceivable
.
getDestCountrySubRate
()
:
otherSubRate
));
receivableBoxAmount
.
receivableDestCountryOtherFee
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountryTargetAmount
()).
divide
(
boxReceivable
.
getDestCountryTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableDestCountryOtherFee
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
otherFeeRate
.
getTargetCurrencyAmount
()).
divide
(
otherFeeRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
if
(
boxReceivable
.
getDestCountrySubSourceAmount
()
!=
null
&&
boxReceivable
.
getDestCountrySubTargetAmount
()
!=
null
)
{
receivableBoxAmount
.
receivableDestCountryOtherFeeSub
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
boxReceivable
.
getDestCountrySubTargetAmount
()).
divide
(
boxReceivable
.
getDestCountrySubTargetAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
else
{
receivableBoxAmount
.
receivableDestCountryOtherFeeSub
.
addAmount
(
receivableIncomeBelong
.
getWriteOffAmount
().
multiply
(
otherSubRate
.
getTargetCurrencyAmount
()).
divide
(
otherSubRate
.
getSourceCurrencyAmount
(),
2
,
RoundingMode
.
HALF_UP
));
}
}
}
}
}
}
}
...
@@ -1232,19 +1284,49 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
...
@@ -1232,19 +1284,49 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
return
writeOffPercent
;
return
writeOffPercent
;
}
}
// /**
// * 获取汇率
// */
// private BigDecimal getExchangeRate(List<ExchangeRateRespDTO> allCurrencyRate, Long sourceId, Long targetId) {
// if (sourceId.equals(targetId)) {
// return BigDecimal.ONE;
// }
// for (ExchangeRateRespDTO exchangeRateRespDTO : allCurrencyRate) {
// if (exchangeRateRespDTO.getSourceCurrencyId().equals(sourceId) && exchangeRateRespDTO.getTargetCurrencyId().equals(targetId)) {
// return exchangeRateRespDTO.getTargetCurrencyAmount().divide(exchangeRateRespDTO.getSourceCurrencyAmount(), 6, RoundingMode.HALF_UP);
// }
// }
// return BigDecimal.ONE;
// }
/**
/**
* 获取汇率
* 获取汇率
详情
*/
*/
private
BigDecimal
getExchangeRate
(
List
<
ExchangeRateRespDTO
>
allCurrencyRate
,
Long
sourceId
,
Long
targetId
)
{
private
ExchangeRateRespDTO
getExchangeRate
(
List
<
ExchangeRateRespDTO
>
allCurrencyRate
,
Long
sourceId
,
Long
targetId
)
{
if
(
sourceId
.
equals
(
targetId
))
{
if
(
sourceId
.
equals
(
targetId
))
{
return
BigDecimal
.
ONE
;
ExchangeRateRespDTO
exchangeRateRespDTO
=
new
ExchangeRateRespDTO
();
exchangeRateRespDTO
.
setSourceCurrencyId
(
sourceId
);
exchangeRateRespDTO
.
setSourceCurrencyAmount
(
BigDecimal
.
ONE
);
exchangeRateRespDTO
.
setTargetCurrencyId
(
targetId
);
exchangeRateRespDTO
.
setTargetCurrencyAmount
(
BigDecimal
.
ONE
);
return
exchangeRateRespDTO
;
}
}
for
(
ExchangeRateRespDTO
exchangeRateRespDTO
:
allCurrencyRate
)
{
for
(
ExchangeRateRespDTO
exchangeRateRespDTO
:
allCurrencyRate
)
{
if
(
exchangeRateRespDTO
.
getSourceCurrencyId
().
equals
(
sourceId
)
&&
exchangeRateRespDTO
.
getTargetCurrencyId
().
equals
(
targetId
))
{
if
(
exchangeRateRespDTO
.
getSourceCurrencyId
().
equals
(
sourceId
)
&&
exchangeRateRespDTO
.
getTargetCurrencyId
().
equals
(
targetId
))
{
return
exchangeRateRespDTO
.
getTargetCurrencyAmount
().
divide
(
exchangeRateRespDTO
.
getSourceCurrencyAmount
(),
6
,
RoundingMode
.
HALF_UP
);
Date
now
=
new
Date
();
if
(
now
.
compareTo
(
exchangeRateRespDTO
.
getExpireDate
())
>
0
)
{
throw
exception
(
CURRENCY_RATE_EXPIRED
,
exchangeRateRespDTO
.
getSourceCurrencyCode
(),
exchangeRateRespDTO
.
getTargetCurrencyCode
());
}
return
exchangeRateRespDTO
;
}
}
}
}
return
BigDecimal
.
ONE
;
// TODO 正常来说这里不会有不存在的汇率,在前期订单生成阶段应该都有初始数据定义
ExchangeRateRespDTO
exchangeRateRespDTO
=
new
ExchangeRateRespDTO
();
exchangeRateRespDTO
.
setSourceCurrencyId
(
sourceId
);
exchangeRateRespDTO
.
setSourceCurrencyAmount
(
BigDecimal
.
ONE
);
exchangeRateRespDTO
.
setTargetCurrencyId
(
targetId
);
exchangeRateRespDTO
.
setTargetCurrencyAmount
(
BigDecimal
.
ONE
);
return
exchangeRateRespDTO
;
}
}
/**
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment