Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
youjj
cloud-platform
Commits
b3928fe8
Commit
b3928fe8
authored
Sep 16, 2019
by
周健威
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Revert "Merge branch 'master-modify-cutAmount' into dev""
This reverts commit
7c23a0fe
parent
7c23a0fe
Changes
38
Hide whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
1505 additions
and
380 deletions
+1505
-380
UserFeign.java
...va/com/github/wxiaoqi/security/admin/feign/UserFeign.java
+3
-0
AppUserDetailBiz.java
...m/github/wxiaoqi/security/admin/biz/AppUserDetailBiz.java
+5
-0
AppUserDetailMapper.java
...ub/wxiaoqi/security/admin/mapper/AppUserDetailMapper.java
+2
-0
AppUserController.java
...github/wxiaoqi/security/admin/rest/AppUserController.java
+8
-0
AppUserDetailMapper.xml
...e-admin/src/main/resources/mapper/AppUserDetailMapper.xml
+9
-0
AccountTypeEnum.java
...xfc/platform/order/contant/enumerate/AccountTypeEnum.java
+57
-0
DeductionTypeEnum.java
...c/platform/order/contant/enumerate/DeductionTypeEnum.java
+58
-0
OrderViolateEnum.java
...fc/platform/order/contant/enumerate/OrderViolateEnum.java
+2
-1
OrderAccount.java
...ain/java/com/xxfc/platform/order/entity/OrderAccount.java
+109
-0
OrderItem.java
...c/main/java/com/xxfc/platform/order/entity/OrderItem.java
+8
-0
OrderRentVehicleDetail.java
...om/xxfc/platform/order/entity/OrderRentVehicleDetail.java
+8
-0
DedDetailDTO.java
.../main/java/com/xxfc/platform/order/pojo/DedDetailDTO.java
+5
-1
OrderAccountDeduction.java
...fc/platform/order/pojo/account/OrderAccountDeduction.java
+34
-0
OrderAccountDetail.java
.../xxfc/platform/order/pojo/account/OrderAccountDetail.java
+32
-0
InProgressVO.java
.../com/xxfc/platform/order/pojo/calculate/InProgressVO.java
+30
-0
OrderPageVO.java
.../java/com/xxfc/platform/order/pojo/order/OrderPageVO.java
+5
-0
RentVehiclePriceVO.java
...om/xxfc/platform/order/pojo/price/RentVehiclePriceVO.java
+25
-0
BaseOrderBiz.java
...c/main/java/com/xxfc/platform/order/biz/BaseOrderBiz.java
+139
-3
OrderAccountBiz.java
...ain/java/com/xxfc/platform/order/biz/OrderAccountBiz.java
+356
-0
OrderRefundBiz.java
...main/java/com/xxfc/platform/order/biz/OrderRefundBiz.java
+282
-244
OrderTemplateBiz.java
...in/java/com/xxfc/platform/order/biz/OrderTemplateBiz.java
+14
-0
OrderVehicleCrosstownBiz.java
...com/xxfc/platform/order/biz/OrderVehicleCrosstownBiz.java
+49
-35
OrderCalculateBiz.java
.../com/xxfc/platform/order/biz/inner/OrderCalculateBiz.java
+80
-31
OrderCancelBiz.java
...ava/com/xxfc/platform/order/biz/inner/OrderCancelBiz.java
+72
-22
RentDepositJobHandler.java
...xxfc/platform/order/jobhandler/RentDepositJobHandler.java
+7
-1
OrderAccountMapper.java
...va/com/xxfc/platform/order/mapper/OrderAccountMapper.java
+15
-0
RefundMQHandler.java
...va/com/xxfc/platform/order/mqhandler/RefundMQHandler.java
+5
-1
BackStageOrderController.java
...om/xxfc/platform/order/rest/BackStageOrderController.java
+8
-0
BaseOrderController.java
...ava/com/xxfc/platform/order/rest/BaseOrderController.java
+5
-0
OrderAccountController.java
.../com/xxfc/platform/order/rest/OrderAccountController.java
+14
-0
OrderRefundController.java
...a/com/xxfc/platform/order/rest/OrderRefundController.java
+33
-33
OrderRentVehicleService.java
.../xxfc/platform/order/service/OrderRentVehicleService.java
+11
-0
BaseOrderMapper.xml
...rder-server/src/main/resources/mapper/BaseOrderMapper.xml
+1
-1
VehicleBookRecordQueryVo.java
.../xxfc/platform/vehicle/pojo/VehicleBookRecordQueryVo.java
+5
-0
VehiclePlanDto.java
...va/com/xxfc/platform/vehicle/pojo/dto/VehiclePlanDto.java
+2
-0
VehicleBiz.java
...c/main/java/com/xxfc/platform/vehicle/biz/VehicleBiz.java
+1
-1
VehicleBookRecordMapper.xml
...ver/src/main/resources/mapper/VehicleBookRecordMapper.xml
+3
-0
VehicleMapper.xml
...ehicle-server/src/main/resources/mapper/VehicleMapper.xml
+3
-6
No files found.
ace-modules/ace-admin-api/src/main/java/com/github/wxiaoqi/security/admin/feign/UserFeign.java
View file @
b3928fe8
...
...
@@ -52,6 +52,9 @@ public interface UserFeign {
public
ObjectRestResponse
<
AppUserDTO
>
userDetailById
(
@RequestParam
(
"id"
)
Integer
id
);
@GetMapping
(
"/app/user/app/unauth/getUserIdByUsername"
)
public
List
<
Integer
>
getUserIdByUsername
(
@RequestParam
(
value
=
"keywords"
)
String
keywords
);
/**
*status:0-判断是否认证过,1-认证成功后修改用户认证状态
*userId:用户登录时的id,必须
...
...
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/AppUserDetailBiz.java
View file @
b3928fe8
...
...
@@ -144,4 +144,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
appUserInfoVo
.
setNickname
(
userDetail
.
getNickname
());
return
appUserInfoVo
;
}
public
List
<
Integer
>
getUserIdByUsername
(
String
keywords
)
{
return
mapper
.
getUserIdByUsername
(
keywords
);
}
}
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/mapper/AppUserDetailMapper.java
View file @
b3928fe8
...
...
@@ -19,4 +19,6 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> {
void
updateUserMemberStatusByUserId
(
@Param
(
"userId"
)
Integer
userId
,
@Param
(
"status"
)
Integer
status
);
void
updateUserPositionByUserId
(
@Param
(
"userId"
)
Integer
id
,
@Param
(
"positionId"
)
Integer
positionId
);
List
<
Integer
>
getUserIdByUsername
(
@Param
(
"keywords"
)
String
keywords
);
}
\ No newline at end of file
ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/rest/AppUserController.java
View file @
b3928fe8
...
...
@@ -280,6 +280,14 @@ public class AppUserController extends CommonBaseController{
return
ObjectRestResponse
.
succ
(
appUserInfoVo
);
}
@GetMapping
(
"/app/unauth/getUserIdByUsername"
)
@IgnoreUserToken
@IgnoreClientToken
public
List
<
Integer
>
getUserIdByUsername
(
@RequestParam
(
"keywords"
)
String
keywords
){
List
<
Integer
>
userIds
=
userDetailBiz
.
getUserIdByUsername
(
keywords
);
return
userIds
;
}
@GetMapping
(
"/app/unauth/test"
)
@IgnoreUserToken
@IgnoreClientToken
...
...
ace-modules/ace-admin/src/main/resources/mapper/AppUserDetailMapper.xml
View file @
b3928fe8
...
...
@@ -42,6 +42,15 @@
where d.userid = #{userId} limit 1
</select>
<select
id=
"getUserIdByUsername"
resultType=
"java.lang.Integer"
parameterType=
"java.lang.String"
>
select d.userid from app_user_login l
left join app_user_detail d
on d.userid = l.id
where d.realname like concat("%", #{keywords}, "%") or l.username like concat("%", #{keywords}, "%")
</select>
<select
id=
"selectAppUserManage"
parameterType=
"com.github.wxiaoqi.security.admin.dto.AppUserManageDTO"
resultType=
"com.github.wxiaoqi.security.admin.vo.AppUserManageVo"
>
select
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/contant/enumerate/AccountTypeEnum.java
0 → 100644
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
contant
.
enumerate
;
import
java.util.HashMap
;
import
java.util.Map
;
public
enum
AccountTypeEnum
{
//账款类型 1*--入账;2*--出账
//账款类型 记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款
IN_ORDER_PAY
(
101
,
"订单支付"
),
OUT_ORDER_FUND
(
201
,
"订单款"
),
OUT_DEPOSIT
(
202
,
"所有押金"
),
OUT_PART_DEPOSIT
(
203
,
"部分押金(扣除该扣除的 + 保留违章预备金)"
),
OUT_RESIDUE_DEPOSIT
(
204
,
"剩余押金(扣除该扣除的)"
),
;
/**
* 编码
*/
private
Integer
code
;
/**
* 类型描述
*/
private
String
desc
;
private
static
Map
<
Integer
,
String
>
codeAndDesc
=
new
HashMap
<
Integer
,
String
>();
//Maps.newHashMap();
static
{
for
(
AccountTypeEnum
enumE
:
AccountTypeEnum
.
values
()){
codeAndDesc
.
put
(
enumE
.
getCode
(),
enumE
.
getDesc
());
}
}
AccountTypeEnum
(
Integer
code
,
String
desc
){
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
static
Boolean
exists
(
Integer
code
){
return
codeAndDesc
.
containsKey
(
code
);
}
}
\ No newline at end of file
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/contant/enumerate/DeductionTypeEnum.java
0 → 100644
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
contant
.
enumerate
;
import
java.util.HashMap
;
import
java.util.Map
;
public
enum
DeductionTypeEnum
{
//账款类型 1--违约金;2--消费金额;3--赔偿金(定损);4--违章相关
VIOLATE_CANCEL
(
101
,
"提前取消违约金"
),
VIOLATE_ADVANCE
(
102
,
"提前还车违约金"
),
VIOLATE_DELAY
(
103
,
"延迟还车违约金"
),
EXTRA
(
201
,
"消费金额"
),
DAMAGES
(
301
,
"赔偿金(定损)"
),
VIOLATE_TRAFFIC_DEDUCT
(
401
,
"违章扣款"
),
VIOLATE_TRAFFIC_KEEP
(
402
,
"违章扣款保留金"
),
;
/**
* 编码
*/
private
Integer
code
;
/**
* 类型描述
*/
private
String
desc
;
private
static
Map
<
Integer
,
String
>
codeAndDesc
=
new
HashMap
<
Integer
,
String
>();
//Maps.newHashMap();
static
{
for
(
DeductionTypeEnum
enumE
:
DeductionTypeEnum
.
values
()){
codeAndDesc
.
put
(
enumE
.
getCode
(),
enumE
.
getDesc
());
}
}
DeductionTypeEnum
(
Integer
code
,
String
desc
){
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
static
Boolean
exists
(
Integer
code
){
return
codeAndDesc
.
containsKey
(
code
);
}
}
\ No newline at end of file
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/contant/enumerate/OrderViolateEnum.java
View file @
b3928fe8
...
...
@@ -6,7 +6,8 @@ import java.util.Map;
public
enum
OrderViolateEnum
{
BEFORE
(
1
,
"提前"
),
AFTER
(
2
,
"延期"
)
AFTER
(
2
,
"延期"
),
EXCESS
(
3
,
"消费超额金"
)
;
/**
* 编码
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderAccount.java
0 → 100755
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
entity
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
javax.persistence.*
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 订单帐目
*
* @author zhoujw
* @email 18178966185@163.com
* @date 2019-09-09 15:51:16
*/
@Data
@Table
(
name
=
"order_account"
)
public
class
OrderAccount
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 主键
*/
@Id
@GeneratedValue
(
generator
=
"JDBC"
)
@ApiModelProperty
(
"主键"
)
private
Integer
id
;
/**
* 订单id
*/
@Column
(
name
=
"order_id"
)
@ApiModelProperty
(
value
=
"订单id"
)
private
Integer
orderId
;
/**
* 账款对应的流水号
*/
@Column
(
name
=
"trade_no"
)
@ApiModelProperty
(
value
=
"账款对应的流水号"
)
private
String
tradeNo
;
/**
* 记账时间
*/
@Column
(
name
=
"account_time"
)
@ApiModelProperty
(
value
=
"记账时间"
)
private
Long
accountTime
;
/**
* 记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款
*/
@Column
(
name
=
"account_type"
)
@ApiModelProperty
(
value
=
"记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款"
)
private
Integer
accountType
;
/**
* 账款状态 1--成功;2--失败
*/
@Column
(
name
=
"account_status"
)
@ApiModelProperty
(
value
=
"账款状态 1--成功;2--失败"
)
private
Integer
accountStatus
;
/**
* 账款金额
*/
@Column
(
name
=
"account_amount"
)
@ApiModelProperty
(
value
=
"账款金额"
)
private
BigDecimal
accountAmount
;
/**
* 账款说明
*/
@Column
(
name
=
"account_desc"
)
@ApiModelProperty
(
value
=
"账款说明"
)
private
String
accountDesc
;
/**
* 账款详情
*/
@Column
(
name
=
"account_detail"
)
@ApiModelProperty
(
value
=
"账款详情"
)
private
String
accountDetail
;
/**
* 创建时间
*/
@Column
(
name
=
"crt_time"
)
@ApiModelProperty
(
value
=
"创建时间"
,
hidden
=
true
)
private
Long
crtTime
;
/**
* 原金额
*/
@Column
(
name
=
"original_amount"
)
@ApiModelProperty
(
value
=
"原金额"
)
private
BigDecimal
originalAmount
;
/**
* 扣除金额
*/
@Column
(
name
=
"deduct_amount"
)
@ApiModelProperty
(
value
=
"扣除金额"
)
private
BigDecimal
deductAmount
;
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderItem.java
View file @
b3928fe8
...
...
@@ -146,6 +146,14 @@ public class OrderItem implements Serializable {
return
calculateAmount
;
}
public
BigDecimal
getBuyAmount
()
{
return
getUnitPrice
().
multiply
(
new
BigDecimal
(
getBuyNum
()
+
""
));
}
public
BigDecimal
getCutAmount
()
{
return
getUnitPrice
().
multiply
(
new
BigDecimal
(
getCutNum
()
+
""
));
}
public
BigDecimal
handleCouponAmount
(
BigDecimal
couponAmount
)
{
BigDecimal
realAmountResidue
=
getRealAmount
().
subtract
(
couponAmount
);
//剩余价格小于0 即优惠价格超出本item的实际价格,返回剩余优惠
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/entity/OrderRentVehicleDetail.java
View file @
b3928fe8
...
...
@@ -315,4 +315,12 @@ public class OrderRentVehicleDetail implements Serializable {
// @Column(name = "back_free_days")
// Integer backFreeDays;
@ApiModelProperty
(
value
=
"违章金额"
)
@Column
(
name
=
"violate_traffic_amount"
)
BigDecimal
violateTrafficAmount
;
@ApiModelProperty
(
value
=
"使用天数"
)
@Column
(
name
=
"used_day"
)
Integer
usedDay
;
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/DedDetailDTO.java
View file @
b3928fe8
...
...
@@ -7,6 +7,9 @@ import java.util.List;
@Data
public
class
DedDetailDTO
{
//public static final int TYPE_VIOLATE_ADVANCE = 1;
/**
* : 扣除项名称
*/
...
...
@@ -23,7 +26,8 @@ public class DedDetailDTO {
Integer
id
;
//1、延期, 2、车辆损坏 3、其他
//作为:DedDetail :2、车辆损坏 3、其他
//作为:violate_amount_detail 1--提前还车 2--延期还车 3--消费超额
Integer
type
;
//小雨都不知道什么东西
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/account/OrderAccountDeduction.java
0 → 100644
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
pojo
.
account
;
import
lombok.Data
;
import
java.math.BigDecimal
;
@Data
public
class
OrderAccountDeduction
{
public
static
final
int
ORIGIN_ORDER
=
1
;
public
static
final
int
ORIGIN_DEPOSIT
=
2
;
public
static
final
int
ORIGIN_ORDER_DEPOSIT
=
3
;
public
static
final
int
ORIGIN_DEPOSIT_ORDER
ß
=
4
;
/**
* 名称
*/
String
name
;
/**
* 类型
*/
Integer
type
;
/**
* 来源 1--订单款 2--押金
*/
Integer
origin
;
/**
* 金额
*/
BigDecimal
amount
;
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/account/OrderAccountDetail.java
0 → 100644
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
pojo
.
account
;
import
lombok.Data
;
import
org.assertj.core.util.Lists
;
import
java.math.BigDecimal
;
import
java.util.List
;
@Data
public
class
OrderAccountDetail
{
/**
* 实际返回订单款
*/
BigDecimal
orderAmount
;
/**
* 实际返回押金款
*/
BigDecimal
depositAmount
;
/**
* 原来要返回的订单款
*/
BigDecimal
originOrderAmount
;
/**
* 原来要返回的押金款
*/
BigDecimal
originDepositAmount
;
/**
* 扣款列表
*/
List
<
OrderAccountDeduction
>
deductions
=
Lists
.
newArrayList
();
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/calculate/InProgressVO.java
View file @
b3928fe8
...
...
@@ -23,6 +23,31 @@ public class InProgressVO {
*/
BigDecimal
extraAmount
=
BigDecimal
.
ZERO
;
/**
* 已使用天数
*/
Integer
usedDays
=
0
;
/**
* 已使用的金额
*/
BigDecimal
usedAmount
=
BigDecimal
.
ZERO
;
/**
* 已使用免费天数
*/
Integer
usedfreeDays
=
0
;
/**
* 已使用的免费天数对应的费用
*/
BigDecimal
usedFreeDaysAmount
=
BigDecimal
.
ZERO
;
/**
* 返回订单款金额
*/
BigDecimal
refundOrderAmount
=
BigDecimal
.
ZERO
;
/**
* 返还的优惠券
*/
...
...
@@ -32,4 +57,9 @@ public class InProgressVO {
* 返还的免费天数
*/
Integer
backFreeDays
=
0
;
String
cancelCostDetail
=
""
;
String
advanceDelayCostDetail
=
""
;
}
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/order/OrderPageVO.java
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
pojo
.
order
;
import
com.xxfc.platform.order.entity.*
;
import
com.xxfc.platform.order.pojo.DedDetailDTO
;
import
com.xxfc.platform.vehicle.entity.VehicleUserLicense
;
import
lombok.Data
;
...
...
@@ -33,6 +34,10 @@ public class OrderPageVO extends BaseOrder {
private
String
telephone
;
//订单违约金
private
DedDetailDTO
dedDetailDTO
;
//订单消费超额金
private
DedDetailDTO
excessDedDetailDTO
;
/**
* 車輛編碼
*/
...
...
xx-order/xx-order-api/src/main/java/com/xxfc/platform/order/pojo/price/RentVehiclePriceVO.java
View file @
b3928fe8
...
...
@@ -33,4 +33,29 @@ public class RentVehiclePriceVO extends OrderPriceVO{
BigDecimal
damageSafePrice
;
@ApiModelProperty
(
value
=
"费用详情"
)
private
String
costDetail
;
// /**
// * 原租车天数
// */
// private Integer originDayNum;
/**
* 免费天数
*/
private
Integer
freeDayNum
;
/**
* 免费价格
*/
private
BigDecimal
freeAmount
;
/**
* 购买的租车金额
*/
private
BigDecimal
buyVehicleAmount
;
/**
* 优惠描述
*/
private
String
couponDesc
=
""
;
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/BaseOrderBiz.java
View file @
b3928fe8
...
...
@@ -2,11 +2,11 @@ package com.xxfc.platform.order.biz;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.github.wxiaoqi.security.admin.dto.UserMemberDTO
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.admin.feign.dto.UserDTO
;
import
com.github.wxiaoqi.security.admin.vo.AppUserVo
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.context.BaseContextHandler
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
...
...
@@ -15,17 +15,23 @@ import com.github.wxiaoqi.security.common.util.Query;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.google.common.collect.Lists
;
import
com.xxfc.platform.activity.feign.ActivityFeign
;
import
com.xxfc.platform.order.biz.inner.OrderCalculateBiz
;
import
com.xxfc.platform.order.biz.inner.OrderMsgBiz
;
import
com.xxfc.platform.order.contant.enumerate.AccountTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.ItemTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.OrderStatusEnum
;
import
com.xxfc.platform.order.contant.enumerate.OrderTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.OrderViolateEnum
;
import
com.xxfc.platform.order.entity.*
;
import
com.xxfc.platform.order.mapper.BaseOrderMapper
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.DedDetailDTO
;
import
com.xxfc.platform.order.pojo.calculate.InProgressVO
;
import
com.xxfc.platform.order.pojo.mq.OrderMQDTO
;
import
com.xxfc.platform.order.pojo.order.OrderListVo
;
import
com.xxfc.platform.order.pojo.order.OrderPageVO
;
import
com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto
;
import
com.xxfc.platform.order.pojo.order.QueryOrderDTO
;
import
com.xxfc.platform.order.rest.BaseOrderController
;
import
com.xxfc.platform.tour.entity.TourUser
;
import
com.xxfc.platform.tour.feign.TourFeign
;
import
com.xxfc.platform.universal.constant.DictionaryKey
;
...
...
@@ -43,6 +49,9 @@ import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.joda.time.DateTime
;
import
org.joda.time.format.DateTimeFormat
;
import
org.joda.time.format.DateTimeFormatter
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -89,6 +98,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
@Autowired
OrderItemBiz
orderItemBiz
;
@Autowired
OrderAccountBiz
orderAccountBiz
;
@Autowired
VehicleFeign
vehicleFeign
;
...
...
@@ -110,6 +122,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
@Autowired
ActivityFeign
activityFeign
;
@Autowired
OrderCalculateBiz
orderCalculateBiz
;
public
static
final
DateTimeFormatter
DEFAULT_DATE_TIME_FORMATTER
=
DateTimeFormat
.
forPattern
(
"yyyy-MM-dd"
);
public
List
<
OrderPageVO
>
pageByParm
(
Map
<
String
,
Object
>
paramMap
)
{
return
mapper
.
pageByParm
(
paramMap
);
}
...
...
@@ -144,7 +162,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
AppUserDTO
appUserVo
=
userFeign
.
userDetailById
(
orderPageVo
.
getUserId
()).
getData
();
if
(
appUserVo
!=
null
)
{
orderPageVo
.
setTelephone
(
appUserVo
.
getUsername
());
orderPageVo
.
setUsername
(
appUserVo
.
get
Nick
name
());
orderPageVo
.
setUsername
(
appUserVo
.
get
Real
name
());
}
List
<
BranchCompany
>
branchCompanies
=
vehicleFeign
.
companyAll
(
userDTO
.
getDataAll
(),
userDTO
.
getDataCompany
(),
userDTO
.
getDataZone
());
List
<
Integer
>
companyIds
=
branchCompanies
.
stream
().
map
(
BranchCompany:
:
getId
).
collect
(
Collectors
.
toList
());
...
...
@@ -178,13 +196,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
RestResponse
<
Vehicle
>
response
=
vehicleFeign
.
findById
(
orderPageVo
.
getOrderRentVehicleDetail
().
getVehicleId
());
if
(
response
.
getData
()
!=
null
)
{
orderPageVo
.
setVehicalNumberPlat
(
response
.
getData
().
getNumberPlate
());
orderPageVo
.
setCode
(
response
.
getData
().
getCode
());
}
//设置违约金金额
updateCrossRefund
(
orderPageVo
);
}
else
if
(
orderPageVo
.
getOrderTourDetail
()
!=
null
)
{
if
(
StringUtils
.
isNotBlank
(
orderPageVo
.
getOrderTourDetail
().
getTourUserIds
()))
{
List
<
TourUser
>
list
=
tourFeign
.
getTourUsers
(
orderPageVo
.
getOrderTourDetail
().
getTourUserIds
()).
getData
();
orderPageVo
.
getOrderTourDetail
().
setUserVoList
(
list
==
null
||
list
.
size
()
<=
0
?
new
ArrayList
<>()
:
list
);
}
}
//设置保留金
Map
<
String
,
Dictionary
>
dictionaryMap
=
thirdFeign
.
dictionaryGetAll4Map
().
getData
();
BigDecimal
illegalReserve
=
new
BigDecimal
(
dictionaryMap
.
get
(
APP_ORDER
+
"_"
+
DictionaryKey
.
ILLEGAL_RESERVE
).
getDetail
());
...
...
@@ -195,6 +217,107 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
return
ObjectRestResponse
.
succ
(
orderPageVo
);
}
//获取两个日期之间的天数
public
int
getDaysBetweenDateTime
(
DateTime
startDay
,
DateTime
endDay
)
{
int
a
=
0
;
for
(
DateTime
curDate
=
startDay
.
plusDays
(
1
);
curDate
.
compareTo
(
endDay
)
<
0
;
curDate
=
curDate
.
plusDays
(
1
))
{
a
++;
}
return
a
;
}
public
void
updateCrossRefund
(
OrderPageVO
orderPageVO
)
{
//计算延期费用
DedDetailDTO
dedDetailDTO
=
new
DedDetailDTO
();
//提前还车,结束时间大于当前时间
DateTime
nowTime
=
DateTime
.
parse
(
DateTime
.
now
().
toString
(
DEFAULT_DATE_TIME_FORMATTER
),
DEFAULT_DATE_TIME_FORMATTER
);
DateTime
endTime
=
DateTime
.
parse
(
new
DateTime
(
orderPageVO
.
getOrderRentVehicleDetail
().
getEndTime
()).
toString
(
DEFAULT_DATE_TIME_FORMATTER
),
DEFAULT_DATE_TIME_FORMATTER
);
DateTime
startTime
=
DateTime
.
parse
(
new
DateTime
(
orderPageVO
.
getOrderRentVehicleDetail
().
getStartTime
()).
toString
(
DEFAULT_DATE_TIME_FORMATTER
),
DEFAULT_DATE_TIME_FORMATTER
);
//设置使用天数
int
userUsedDay
=
getDaysBetweenDateTime
(
startTime
,
nowTime
);
orderPageVO
.
getOrderRentVehicleDetail
().
setUsedDay
(
userUsedDay
);
orderRentVehicleBiz
.
updateSelectiveById
(
orderPageVO
.
getOrderRentVehicleDetail
());
//实际预定的天数
int
actualDay
=
getDaysBetweenDateTime
(
startTime
,
endTime
);
Integer
orderId
=
orderPageVO
.
getId
();
List
<
OrderItem
>
items
=
orderItemBiz
.
selectList
(
new
OrderItem
()
{{
setOrderId
(
orderId
);
}});
//租车车辆单价
BigDecimal
amount
=
new
BigDecimal
(
0
);
if
(
items
!=
null
&&
items
.
size
()
>
0
)
{
for
(
OrderItem
orderItem
:
items
)
{
if
(
orderItem
.
getType
()
==
ItemTypeEnum
.
VEHICLE_MODEL
.
getCode
())
{
amount
=
orderItem
.
getUnitPrice
();
break
;
}
}
}
if
(
orderPageVO
.
getOrderRentVehicleDetail
().
getEndTime
()
>
nowTime
.
getMillis
())
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
//提前的天数, 当天就算使用一天
int
noUsedDay
=
getDaysBetweenDateTime
(
nowTime
,
endTime
)
-
1
;
//退还未使用的天数,或者金额,扣除违约金,实际未使用天数的金额,最多3000元
InProgressVO
inProgressVO
=
new
InProgressVO
();
inProgressVO
.
setViolateAmount
(
new
BigDecimal
(
200
));
inProgressVO
.
setExtraAmount
(
new
BigDecimal
(
200
));
//InProgressVO inProgressVO = orderCalculateBiz.inProgressCalculate(orderPageVO, actualDay - noUsedDay);
if
(
inProgressVO
!=
null
)
{
//消费超额金
if
(
inProgressVO
.
getExtraAmount
()
!=
null
)
{
DedDetailDTO
excessDedDetailDTO
=
new
DedDetailDTO
();
initDedDetail
(
excessDedDetailDTO
,
OrderViolateEnum
.
EXCESS
.
getCode
(),
inProgressVO
.
getExtraAmount
(),
stringBuilder
);
orderPageVO
.
setExcessDedDetailDTO
(
excessDedDetailDTO
);
}
stringBuilder
.
append
(
"违约金( ¥"
);
stringBuilder
.
append
(
amount
);
stringBuilder
.
append
(
" x "
);
stringBuilder
.
append
(
actualDay
-
noUsedDay
);
stringBuilder
.
append
(
"天) = "
);
BigDecimal
cost
=
(
inProgressVO
.
getExtraAmount
()).
add
(
inProgressVO
.
getViolateAmount
());
stringBuilder
.
append
(
cost
);
initDedDetail
(
dedDetailDTO
,
OrderViolateEnum
.
BEFORE
.
getCode
(),
cost
,
stringBuilder
);
}
//延期还车,结束时间小于当前时间
}
else
if
(
orderPageVO
.
getOrderRentVehicleDetail
().
getEndTime
()
<
nowTime
.
getMillis
())
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
"违约金( ¥"
);
//延期的天数, 延期违约金是延期天数*200%
int
usedDay
=
getDaysBetweenDateTime
(
endTime
,
nowTime
);
stringBuilder
.
append
(
amount
);
stringBuilder
.
append
(
" x "
);
stringBuilder
.
append
(
usedDay
);
stringBuilder
.
append
(
"(天)"
);
stringBuilder
.
append
(
" x 2"
);
BigDecimal
cost
=
amount
.
multiply
(
new
BigDecimal
(
usedDay
)).
multiply
(
new
BigDecimal
(
2
));
stringBuilder
.
append
(
" = "
);
stringBuilder
.
append
(
cost
);
stringBuilder
.
append
(
"元"
);
initDedDetail
(
dedDetailDTO
,
OrderViolateEnum
.
AFTER
.
getCode
(),
cost
,
stringBuilder
);
}
orderPageVO
.
setDedDetailDTO
(
dedDetailDTO
);
}
public
void
initDedDetail
(
DedDetailDTO
dedDetailDTO
,
Integer
type
,
BigDecimal
cost
,
StringBuilder
stringBuilder
)
{
String
detailName
=
null
;
if
(
type
==
OrderViolateEnum
.
BEFORE
.
getCode
())
{
dedDetailDTO
.
setType
(
OrderViolateEnum
.
BEFORE
.
getCode
());
detailName
=
"提前还车违约金"
;
}
else
if
(
type
==
OrderViolateEnum
.
AFTER
.
getCode
())
{
dedDetailDTO
.
setType
(
OrderViolateEnum
.
AFTER
.
getCode
());
detailName
=
"延期还车违约金"
;
}
else
if
(
type
==
OrderViolateEnum
.
EXCESS
.
getCode
())
{
dedDetailDTO
.
setType
(
OrderViolateEnum
.
EXCESS
.
getCode
());
detailName
=
"消费超额金"
;
}
//900元+违约金(¥900x2天=)1800元
dedDetailDTO
.
setDeductions
(
stringBuilder
.
toString
());
dedDetailDTO
.
setCost
(
cost
);
dedDetailDTO
.
setId
(
1
);
dedDetailDTO
.
setStatusIndex
(
1
);
dedDetailDTO
.
setStatusName
(
detailName
);
}
public
void
getUserLicense
(
OrderPageVO
orderPageVo
)
{
OrderVehicleCrosstownDto
orderVehicleCrosstownDto
=
new
OrderVehicleCrosstownDto
();
orderVehicleCrosstownDto
.
setOrderId
(
orderPageVo
.
getId
());
...
...
@@ -302,6 +425,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
setVersion
(
baseOrder
.
getVersion
());
}};
//订单账款类
OrderAccountDetail
oad
=
new
OrderAccountDetail
();
oad
.
setOriginOrderAmount
(
baseOrder
.
getRealAmount
());
oad
.
setOrderAmount
(
baseOrder
.
getRealAmount
());
//如果是会员订单,则触发会员效益
if
(
OrderTypeEnum
.
MEMBER
.
getCode
().
equals
(
baseOrder
.
getType
()))
{
//直接设置订单完成
...
...
@@ -327,6 +455,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
orvd
=
orderRentVehicleBiz
.
selectOne
(
new
OrderRentVehicleDetail
()
{{
setOrderId
(
baseOrder
.
getId
());
}});
//账款设置押金
oad
.
setOriginDepositAmount
(
orvd
.
getDeposit
());
oad
.
setDepositAmount
(
orvd
.
getDeposit
());
//车辆预定审核通过
RestResponse
<
Integer
>
result
=
vehicleFeign
.
rentProveVehicleBooking
(
orvd
.
getBookRecordId
());
...
...
@@ -344,8 +477,11 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
//站点总人数添加
tourFeign
.
updateTourGoodPersonNum
(
otd
.
getVerificationId
(),
TourFeign
.
TOTAL_PERSON
,
otd
.
getTotalNumber
());
}
try
{
this
.
updateSelectiveByIdRe
(
updateOrder
);
//记录订单账款记录
Integer
flag
=
orderAccountBiz
.
addOrderAccount
(
baseOrder
.
getId
(),
"订单支付"
,
oad
.
getOriginOrderAmount
().
add
(
oad
.
getOriginDepositAmount
()),
oad
.
getOrderAmount
().
add
(
oad
.
getDepositAmount
()),
tradeNo
,
AccountTypeEnum
.
IN_ORDER_PAY
.
getCode
(),
JSONUtil
.
toJsonStr
(
oad
));
}
finally
{
AppUserDTO
appUserDTO
=
userFeign
.
userDetailById
(
baseOrder
.
getUserId
()).
getData
();
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/OrderAccountBiz.java
0 → 100755
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
biz
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.util.IntervalUtil
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.xxfc.platform.order.biz.inner.OrderCalculateBiz
;
import
com.xxfc.platform.order.biz.inner.OrderMsgBiz
;
import
com.xxfc.platform.order.contant.enumerate.*
;
import
com.xxfc.platform.order.entity.*
;
import
com.xxfc.platform.order.pojo.DedDetailDTO
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDeduction
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.mq.OrderMQDTO
;
import
com.xxfc.platform.universal.constant.DictionaryKey
;
import
com.xxfc.platform.universal.entity.Dictionary
;
import
com.xxfc.platform.universal.feign.ThirdFeign
;
import
com.xxfc.platform.universal.vo.OrderRefundVo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.jexl2.MapContext
;
import
org.mockito.internal.util.collections.Sets
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.xxfc.platform.order.mapper.OrderAccountMapper
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
SYS_FALSE
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
SYS_TRUE
;
import
static
com
.
xxfc
.
platform
.
universal
.
constant
.
DictionaryKey
.
APP_ORDER
;
/**
* 订单帐目
*
* @author zhoujw
* @email 18178966185@163.com
* @date 2019-09-09 15:51:16
*/
@Service
@Slf4j
public
class
OrderAccountBiz
extends
BaseBiz
<
OrderAccountMapper
,
OrderAccount
>
{
@Autowired
BaseOrderBiz
baseOrderBiz
;
@Autowired
OrderRentVehicleBiz
orderRentVehicleBiz
;
@Autowired
OrderVehicleCrosstownBiz
crosstownBiz
;
@Autowired
OrderMsgBiz
orderMsgBiz
;
@Autowired
OrderItemBiz
orderItemBiz
;
@Autowired
OrderDepositRefundRecordBiz
orderDepositRefundRecordBiz
;
@Autowired
OrderCalculateBiz
orderCalculateBiz
;
@Autowired
ThirdFeign
thirdFeign
;
@Autowired
UserFeign
userFeign
;
/**
* 租车退款流程
* @param baseOrder
* @param mainItemRealAmount 主要商品(租车费用、旅游费用等)
* @param timeLag 与开始时间的时间差
* @param dicParentKey
*/
public
BigDecimal
rentRefundProcessCancel
(
BaseOrder
baseOrder
,
BigDecimal
mainItemRealAmount
,
Long
timeLag
,
String
dicParentKey
,
BigDecimal
depositAmount
,
BigDecimal
originalDeductAmount
)
{
//计算退款金额
//商品价格 - 优惠券减免的价格
BigDecimal
originalRefundAmount
=
BigDecimal
.
ZERO
.
add
(
mainItemRealAmount
);
StringBuilder
refundDescBuilder
=
new
StringBuilder
(
"取消订单退款:"
);
OrderAccountDetail
oad
=
new
OrderAccountDetail
();
BigDecimal
refundMainGoodsAmount
=
calculateRefund
(
originalRefundAmount
,
timeLag
,
dicParentKey
,
refundDescBuilder
,
oad
);
refundMainGoodsAmount
=
refundMainGoodsAmount
.
setScale
(
2
,
RoundingMode
.
HALF_UP
);
//退款金额 = 主要商品退款 + (其他商品退款) 即--> 主要商品退款 + (订单总商品款 - 主要商品款)
oad
.
setOrderAmount
(
refundMainGoodsAmount
.
add
(
baseOrder
.
getOrderAmount
().
subtract
(
mainItemRealAmount
)));
BigDecimal
refundAmount
=
oad
.
getOrderAmount
();
// 押金
BigDecimal
originalRefundAmountDeposit
=
BigDecimal
.
ZERO
.
add
(
depositAmount
);
BigDecimal
refundAmountDeposit
=
BigDecimal
.
ZERO
.
add
(
depositAmount
);
refundDescBuilder
=
refundDescBuilder
.
append
(
",押金退款:"
);
if
(
null
!=
originalDeductAmount
&&
BigDecimal
.
ZERO
.
compareTo
(
originalDeductAmount
)
<
0
)
{
//通过原扣除款 计算剩余款
BigDecimal
residueAmount
=
calculateRefund
(
originalDeductAmount
,
timeLag
,
dicParentKey
,
refundDescBuilder
,
oad
);
residueAmount
=
residueAmount
.
setScale
(
2
,
RoundingMode
.
HALF_UP
);
//退款金额 :押金 - (原扣除款 - 剩余款) 即: 押金 - (免费天数对应的钱 - 剩余款)
refundAmountDeposit
=
originalRefundAmountDeposit
.
subtract
(
originalDeductAmount
.
subtract
(
residueAmount
));
}
originalRefundAmount
=
originalRefundAmount
.
add
(
originalRefundAmountDeposit
);
oad
.
setDepositAmount
(
refundAmountDeposit
);
refundAmount
=
refundAmount
.
add
(
refundAmountDeposit
);
//退款子流程: 订单基础,退款描述, 款金额
refundSubProcess
(
baseOrder
,
refundDescBuilder
.
toString
(),
originalRefundAmount
,
refundAmount
,
AccountTypeEnum
.
OUT_ORDER_FUND
.
getCode
(),
RefundStatusEnum
.
ALL
.
getCode
(),
oad
);
return
refundAmount
;
}
/**
* 退款子流程
* @param baseOrder
* @param refundDesc 退款描述
* @param refundAmount 退款金额
* @param refundType 退款类型
* @param refundStatus 退款状态
*/
public
void
refundSubProcess
(
BaseOrder
baseOrder
,
String
refundDesc
,
BigDecimal
originalRefundAmount
,
BigDecimal
refundAmount
,
Integer
refundType
,
Integer
refundStatus
,
OrderAccountDetail
oad
)
{
String
refundTradeNo
=
null
;
//0 小于 退款金额
if
(
BigDecimal
.
ZERO
.
compareTo
(
refundAmount
)
<
0
)
{
OrderRefundVo
orv
=
new
OrderRefundVo
();
orv
.
setAmount
(
baseOrder
.
getRealAmount
().
multiply
(
new
BigDecimal
(
"100"
)).
intValue
());
orv
.
setOrderNo
(
baseOrder
.
getNo
());
orv
.
setRefundDesc
(
refundDesc
+
refundAmount
.
toString
());
orv
.
setRefundAmount
(
refundAmount
.
multiply
(
new
BigDecimal
(
"100"
)).
intValue
());
ObjectRestResponse
<
String
>
result
=
thirdFeign
.
refund
(
orv
);
refundTradeNo
=
result
.
getData
();
if
(
null
==
refundTradeNo
)
{
log
.
error
(
"退款没有refundTradeNo,订单号为:"
+
baseOrder
.
getNo
()+
", 微服务调用结果为"
+
JSONUtil
.
toJsonStr
(
result
));
}
}
//记录订单退款记录
Integer
flag
=
addOrderAccount
(
baseOrder
.
getId
(),
refundDesc
,
originalRefundAmount
,
refundAmount
,
refundTradeNo
,
refundType
,
JSONUtil
.
toJsonStr
(
oad
));
//更新订单的退款状态和退款时间
BaseOrder
updateBaseOrder
=
new
BaseOrder
();
updateBaseOrder
.
setId
(
baseOrder
.
getId
());
updateBaseOrder
.
setRefundStatus
(
refundStatus
);
updateBaseOrder
.
setRefundTime
(
System
.
currentTimeMillis
());
updateBaseOrder
.
setVersion
(
baseOrder
.
getVersion
());
if
(
SYS_TRUE
.
equals
(
flag
)
&&
null
!=
refundStatus
)
{
BeanUtil
.
copyProperties
(
baseOrderBiz
.
updateSelectiveByIdReT
(
updateBaseOrder
),
baseOrder
);
}
}
public
BigDecimal
calculateRefund
(
BigDecimal
goodsAmount
,
Long
timeLag
,
String
dicParentKey
,
StringBuilder
refundDescBuilder
,
OrderAccountDetail
orderAccountDetail
)
{
BigDecimal
refundGoodsAmount
=
goodsAmount
;
if
(
null
==
orderAccountDetail
)
{
orderAccountDetail
=
new
OrderAccountDetail
();
}
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
Integer
hourLag
=
Long
.
valueOf
(
timeLag
/(
1000L
*
60L
*
60L
)).
intValue
();
Map
<
String
,
Dictionary
>
dictionaryMap
=
thirdFeign
.
dictionaryGetAll4Map
().
getData
();
Set
<
Dictionary
>
rentRefunds
=
dictionaryMap
.
get
(
dicParentKey
).
getChildrens
();
for
(
com
.
xxfc
.
platform
.
universal
.
entity
.
Dictionary
dic
:
rentRefunds
)
{
if
(
StrUtil
.
isBlank
(
dic
.
getName
()))
{
continue
;
}
String
[]
names
=
dic
.
getName
().
split
(
"\\|"
);
if
(
names
.
length
<
2
)
{
continue
;
}
//符合范围
if
(
IntervalUtil
.
staticIsInTheInterval
(
hourLag
.
toString
(),
names
[
0
])){
refundGoodsAmount
=
new
BigDecimal
((
IntervalUtil
.
evaluate
(
dic
.
getDetail
(),
new
MapContext
(){{
//ga : goodsAmount
set
(
"ga"
,
goodsAmount
);
}})).
toString
());
refundDescBuilder
=
refundDescBuilder
.
insert
(
0
,
names
[
1
]+
","
);
orderAccountDetail
.
getDeductions
().
add
(
initDeduction
(
goodsAmount
.
subtract
(
refundGoodsAmount
),
names
[
1
],
DeductionTypeEnum
.
VIOLATE_CANCEL
,
OrderAccountDeduction
.
ORIGIN_DEPOSIT
));
break
;
}
}
return
refundGoodsAmount
;
}
/**
* 初始化deduction
* @param subtract
* @param name
* @return
*/
public
OrderAccountDeduction
initDeduction
(
BigDecimal
subtract
,
String
name
,
DeductionTypeEnum
dte
,
Integer
origin
)
{
OrderAccountDeduction
orderAccountDeduction
=
new
OrderAccountDeduction
();
orderAccountDeduction
.
setType
(
dte
.
getCode
());
orderAccountDeduction
.
setName
(
name
);
orderAccountDeduction
.
setAmount
(
subtract
);
orderAccountDeduction
.
setOrigin
(
origin
);
return
orderAccountDeduction
;
}
/**
* 记录订单退款记录
* @param orderId
* @param accountDesc
* @param accountAmount
* @param tradeNo
*/
public
Integer
addOrderAccount
(
Integer
orderId
,
String
accountDesc
,
BigDecimal
originalAmount
,
BigDecimal
accountAmount
,
String
tradeNo
,
Integer
accountType
,
String
detail
)
{
//如果返回的流水为空,则当做失败
Integer
refundStatus
=
SYS_TRUE
;
if
(
StrUtil
.
isBlank
(
tradeNo
))
{
refundStatus
=
SYS_FALSE
;
}
//创建订单退款记录
OrderAccount
orderAccount
=
new
OrderAccount
(){{
setOrderId
(
orderId
);
setAccountTime
(
System
.
currentTimeMillis
());
setTradeNo
(
tradeNo
);
setAccountType
(
RefundTypeEnum
.
ORDER_FUND
.
getCode
());
}};
orderAccount
.
setOriginalAmount
(
originalAmount
);
orderAccount
.
setDeductAmount
(
originalAmount
.
subtract
(
accountAmount
));
orderAccount
.
setAccountAmount
(
accountAmount
);
orderAccount
.
setAccountDesc
(
accountDesc
);
orderAccount
.
setAccountStatus
(
refundStatus
);
orderAccount
.
setAccountType
(
accountType
);
orderAccount
.
setAccountDetail
(
detail
);
insertSelective
(
orderAccount
);
return
refundStatus
;
}
public
void
refundTrigger
(
BaseOrder
baseOrder
,
OrderRentVehicleDetail
orvd
,
BigDecimal
residueAmount
,
BigDecimal
originalRefundAmount
,
BigDecimal
refundAmont
,
String
refundDesc
,
Integer
refundStatus
,
AccountTypeEnum
accountTypeEnum
,
OrderAccountDetail
oad
)
{
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess
(
baseOrder
,
refundDesc
,
originalRefundAmount
,
refundAmont
,
accountTypeEnum
.
getCode
(),
refundStatus
,
oad
);
//设置剩余没有返还的钱
orderRentVehicleBiz
.
updateSelectiveById
(
new
OrderRentVehicleDetail
(){{
setId
(
orvd
.
getId
());
setReturnPayResidue
(
residueAmount
);
}});
}
/**
* 退还部分押金
* @param orderMQDTO
*/
public
void
refundPartDeposit
(
OrderMQDTO
orderMQDTO
){
Map
<
String
,
Dictionary
>
dictionaryMap
=
thirdFeign
.
dictionaryGetAll4Map
().
getData
();
BigDecimal
illegalReserve
=
new
BigDecimal
(
dictionaryMap
.
get
(
APP_ORDER
+
"_"
+
DictionaryKey
.
ILLEGAL_RESERVE
).
getDetail
());
//未退还, 进行挂起保留违章预备金 的退还
if
(
RefundStatusEnum
.
NONE
.
getCode
().
equals
(
orderMQDTO
.
getRefundStatus
()))
{
Integer
crosstownTypeEnum
;
DepositRefundStatus
depositRefundRecordStatus
;
//判断是否定损过
if
(
SYS_TRUE
.
equals
(
orderMQDTO
.
getOrderRentVehicleDetail
().
getFixedLossStatus
()))
{
crosstownTypeEnum
=
CrosstownTypeEnum
.
FIXED_LOSS
.
getCode
();
depositRefundRecordStatus
=
DepositRefundStatus
.
FIXLOSSREFUNDARRIVAL
;
}
else
{
crosstownTypeEnum
=
CrosstownTypeEnum
.
ARRIVE
.
getCode
();
depositRefundRecordStatus
=
DepositRefundStatus
.
REFUNDARRIVAL
;
}
OrderVehicleCrosstown
crosstown
=
crosstownBiz
.
selectOne
(
new
OrderVehicleCrosstown
(){{
setOrderId
(
orderMQDTO
.
getId
());
setType
(
crosstownTypeEnum
);
}});
OrderItem
orderItem
=
orderItemBiz
.
selectOne
(
new
OrderItem
(){{
setType
(
ItemTypeEnum
.
VEHICLE_MODEL
.
getCode
());
setOrderId
(
orderMQDTO
.
getId
());
}});
if
(
null
==
crosstown
)
{
throw
new
BaseException
(
ResultCode
.
PARAM_ILLEGAL_CODE
,
Sets
.
newSet
(
"退款第一部分押金失败,获取不了还车/定损记录,订单号:"
+
orderMQDTO
.
getId
()));
}
if
(
null
==
crosstown
.
getRestDeposit
()
||
crosstown
.
getRestDeposit
().
subtract
(
illegalReserve
).
compareTo
(
BigDecimal
.
ZERO
)
<
0
){
throw
new
BaseException
(
ResultCode
.
PARAM_ILLEGAL_CODE
,
Sets
.
newSet
(
"退第一笔押金剩余金额异常,异常记录为:"
+
crosstown
.
getId
()));
}
OrderAccountDetail
oad
=
new
OrderAccountDetail
();
orderCalculateBiz
.
calculateOrderComplete
(
orderMQDTO
,
orderMQDTO
.
getOrderRentVehicleDetail
(),
oad
,
orderItem
,
orderMQDTO
.
getOrderRentVehicleDetail
().
getUsedDay
());
//还车扣除款 剩余的 钱,再减去违章预备金
oad
.
getDeductions
().
add
(
initDeduction
(
illegalReserve
,
"违章保证金"
,
DeductionTypeEnum
.
VIOLATE_TRAFFIC_KEEP
,
OrderAccountDeduction
.
ORIGIN_DEPOSIT
)
);
oad
.
getDeductions
().
add
(
initDeduction
(
crosstown
.
getDeductionCost
(),
"定损赔偿金"
,
DeductionTypeEnum
.
DAMAGES
,
OrderAccountDeduction
.
ORIGIN_DEPOSIT
)
);
//剩余押金 -
oad
.
setDepositAmount
(
oad
.
getDepositAmount
().
subtract
(
illegalReserve
).
subtract
(
crosstown
.
getDeductionCost
()));
handleCrosstownDetail
(
crosstown
,
oad
);
BigDecimal
refundAmont
=
crosstown
.
getRestDeposit
().
subtract
(
illegalReserve
);
BigDecimal
originalRefundAmount
=
crosstown
.
getRestDeposit
().
add
(
crosstown
.
getDeductionCost
()).
subtract
(
illegalReserve
);
String
refundDesc
=
"退还押金:"
+
refundAmont
.
toString
()+
"(已扣除 违章预备金:"
+
illegalReserve
.
toString
();
refundDesc
=
handleDed
(
crosstown
,
refundDesc
);
refundDesc
+=
")"
;
refundTrigger
(
orderMQDTO
,
orderMQDTO
.
getOrderRentVehicleDetail
(),
illegalReserve
,
originalRefundAmount
,
refundAmont
,
refundDesc
,
RefundStatusEnum
.
RESIDUE_ILLEGAL
.
getCode
(),
AccountTypeEnum
.
OUT_PART_DEPOSIT
,
oad
);
orderDepositRefundRecordBiz
.
completeRecordStatus
(
crosstown
.
getId
(),
depositRefundRecordStatus
);
orderMsgBiz
.
handelMsgDeposit
(
orderMQDTO
.
getOrderRentVehicleDetail
(),
orderMQDTO
,
userFeign
.
userDetailById
(
orderMQDTO
.
getUserId
()).
getData
());
}
}
private
String
handleDed
(
OrderVehicleCrosstown
crosstown
,
String
refundDesc
)
{
try
{
if
(
null
!=
crosstown
.
getDedDetail
())
{
List
<
DedDetailDTO
>
dddList
=
JSONUtil
.
toList
(
JSONUtil
.
parseArray
(
crosstown
.
getDedDetail
()),
DedDetailDTO
.
class
);
for
(
DedDetailDTO
ddd
:
dddList
)
{
refundDesc
+=
", "
+
ddd
.
getDeductions
()+
":"
+
ddd
.
getCost
();
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"crosstown.getDedDetail() crosstown id :"
+
crosstown
.
getId
()
+
" 转换失败"
);
}
return
refundDesc
;
}
private
void
handleCrosstownDetail
(
OrderVehicleCrosstown
crosstown
,
OrderAccountDetail
oad
)
{
try
{
if
(
null
!=
crosstown
.
getViolateDetail
())
{
List
<
DedDetailDTO
>
dddList
=
JSONUtil
.
toList
(
JSONUtil
.
parseArray
(
crosstown
.
getViolateDetail
()),
DedDetailDTO
.
class
);
for
(
DedDetailDTO
vio
:
dddList
)
{
if
(
OrderViolateEnum
.
BEFORE
.
getCode
().
equals
(
vio
.
getType
()))
{
for
(
OrderAccountDeduction
deduction
:
oad
.
getDeductions
())
{
if
(
DeductionTypeEnum
.
VIOLATE_ADVANCE
.
getCode
().
equals
(
deduction
.
getType
()))
{
deduction
.
setName
(
vio
.
getDeductions
());
BigDecimal
diff
=
vio
.
getCost
().
subtract
(
deduction
.
getAmount
());
//修改归还押金金额
oad
.
setDepositAmount
(
oad
.
getDepositAmount
().
subtract
(
diff
));
deduction
.
setAmount
(
vio
.
getCost
());
}
}
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"crosstown.getViolateDetail() crosstown id :"
+
crosstown
.
getId
()
+
" 转换失败"
);
}
}
}
\ No newline at end of file
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/OrderRefundBiz.java
View file @
b3928fe8
...
...
@@ -46,248 +46,286 @@ import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service
@Slf4j
public
class
OrderRefundBiz
extends
BaseBiz
<
OrderRefundMapper
,
OrderRefund
>
{
@Autowired
ThirdFeign
thirdFeign
;
@Autowired
BaseOrderBiz
baseOrderBiz
;
@Autowired
OrderRentVehicleBiz
orderRentVehicleBiz
;
@Autowired
OrderVehicleCrosstownBiz
crosstownBiz
;
@Autowired
OrderViolationBiz
orderViolationBiz
;
@Autowired
OrderMsgBiz
orderMsgBiz
;
@Autowired
UserFeign
userFeign
;
@Autowired
OrderDepositRefundRecordBiz
orderDepositRefundRecordBiz
;
/**
* 退还部分押金
* @param orderMQDTO
*/
public
void
refundPartDeposit
(
OrderMQDTO
orderMQDTO
){
Map
<
String
,
Dictionary
>
dictionaryMap
=
thirdFeign
.
dictionaryGetAll4Map
().
getData
();
BigDecimal
illegalReserve
=
new
BigDecimal
(
dictionaryMap
.
get
(
APP_ORDER
+
"_"
+
DictionaryKey
.
ILLEGAL_RESERVE
).
getDetail
());
//未退还, 进行挂起保留违章预备金 的退还
if
(
RefundStatusEnum
.
NONE
.
getCode
().
equals
(
orderMQDTO
.
getRefundStatus
()))
{
Integer
crosstownTypeEnum
;
DepositRefundStatus
depositRefundRecordStatus
;
//判断是否定损过
if
(
SYS_TRUE
.
equals
(
orderMQDTO
.
getOrderRentVehicleDetail
().
getFixedLossStatus
()))
{
crosstownTypeEnum
=
CrosstownTypeEnum
.
FIXED_LOSS
.
getCode
();
depositRefundRecordStatus
=
DepositRefundStatus
.
FIXLOSSREFUNDARRIVAL
;
}
else
{
crosstownTypeEnum
=
CrosstownTypeEnum
.
ARRIVE
.
getCode
();
depositRefundRecordStatus
=
DepositRefundStatus
.
REFUNDARRIVAL
;
}
OrderVehicleCrosstown
crosstown
=
crosstownBiz
.
selectOne
(
new
OrderVehicleCrosstown
(){{
setOrderId
(
orderMQDTO
.
getId
());
setType
(
crosstownTypeEnum
);
}});
if
(
null
==
crosstown
)
{
throw
new
BaseException
(
ResultCode
.
PARAM_ILLEGAL_CODE
,
Sets
.
newSet
(
"退款第一部分押金失败,获取不了还车/定损记录,订单号:"
+
orderMQDTO
.
getId
()));
}
if
(
null
==
crosstown
.
getRestDeposit
()
||
crosstown
.
getRestDeposit
().
subtract
(
illegalReserve
).
compareTo
(
BigDecimal
.
ZERO
)
<
0
){
throw
new
BaseException
(
ResultCode
.
PARAM_ILLEGAL_CODE
,
Sets
.
newSet
(
"退第一笔押金剩余金额异常,异常记录为:"
+
crosstown
.
getId
()));
}
//还车扣除款 剩余的 钱,再减去违章预备金
BigDecimal
refundAmont
=
crosstown
.
getRestDeposit
().
subtract
(
illegalReserve
);
BigDecimal
originalRefundAmount
=
crosstown
.
getRestDeposit
().
add
(
crosstown
.
getDeductionCost
()).
subtract
(
illegalReserve
);
String
refundDesc
=
"退还押金:"
+
refundAmont
.
toString
()+
"(已扣除 违章预备金:"
+
illegalReserve
.
toString
();
try
{
if
(
null
!=
crosstown
.
getDedDetail
())
{
List
<
DedDetailDTO
>
dddList
=
JSONUtil
.
toList
(
JSONUtil
.
parseArray
(
crosstown
.
getDedDetail
()),
DedDetailDTO
.
class
);
for
(
DedDetailDTO
ddd
:
dddList
)
{
refundDesc
+=
", "
+
ddd
.
getDeductions
()+
":"
+
ddd
.
getCost
();
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"crosstown.getDedDetail() crosstown id :"
+
crosstown
.
getId
()
+
" 转换失败"
);
}
refundDesc
+=
")"
;
refundTrigger
(
orderMQDTO
,
orderMQDTO
.
getOrderRentVehicleDetail
(),
illegalReserve
,
originalRefundAmount
,
refundAmont
,
refundDesc
,
RefundStatusEnum
.
RESIDUE_ILLEGAL
.
getCode
(),
RefundTypeEnum
.
PART_DEPOSIT
);
// DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(crosstown.getId(), depositRefundRecordStatus);
// depositRefundRecord.setIscomplete(Boolean.TRUE);
// orderDepositRefundRecordBiz.updateSelectiveById(depositRefundRecord);
orderDepositRefundRecordBiz
.
completeRecordStatus
(
crosstown
.
getId
(),
depositRefundRecordStatus
);
orderMsgBiz
.
handelMsgDeposit
(
orderMQDTO
.
getOrderRentVehicleDetail
(),
orderMQDTO
,
userFeign
.
userDetailById
(
orderMQDTO
.
getUserId
()).
getData
());
}
}
public
void
refundTrigger
(
BaseOrder
baseOrder
,
OrderRentVehicleDetail
orvd
,
BigDecimal
residueAmount
,
BigDecimal
originalRefundAmount
,
BigDecimal
refundAmont
,
String
refundDesc
,
Integer
refundStatus
,
RefundTypeEnum
refundTypeEnum
)
{
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess
(
baseOrder
,
refundDesc
,
originalRefundAmount
,
refundAmont
,
refundTypeEnum
.
getCode
(),
refundStatus
);
//设置剩余没有返还的钱
orderRentVehicleBiz
.
updateSelectiveById
(
new
OrderRentVehicleDetail
(){{
setId
(
orvd
.
getId
());
setReturnPayResidue
(
residueAmount
);
}});
}
/**
* 租车(包括旅游)退款流程
* @param baseOrder
* @param timeLag 与开始时间的时间差
* @param dicParentKey
*/
public
BigDecimal
rentRefundProcess
(
BaseOrder
baseOrder
,
Long
timeLag
,
String
dicParentKey
)
{
//计算退款金额
//商品价格 - 优惠券减免的价格
BigDecimal
originalRefundAmount
=
BigDecimal
.
ZERO
.
add
(
baseOrder
.
getGoodsAmount
().
subtract
(
baseOrder
.
getCouponAmount
()));
StringBuilder
refundDescBuilder
=
new
StringBuilder
(
"取消订单退款:"
);
BigDecimal
refundGoodsAmount
=
calculateRefund
(
originalRefundAmount
,
timeLag
,
dicParentKey
,
refundDescBuilder
);
refundGoodsAmount
=
refundGoodsAmount
.
setScale
(
2
,
RoundingMode
.
HALF_UP
);
//退款金额
BigDecimal
refundAmount
=
refundGoodsAmount
;
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess
(
baseOrder
,
refundDescBuilder
.
toString
(),
originalRefundAmount
,
refundAmount
,
RefundTypeEnum
.
ORDER_FUND
.
getCode
(),
RefundStatusEnum
.
ALL
.
getCode
());
return
refundAmount
;
}
/**
* 租车押金退款流程
* @param baseOrder
* @param depositAmount
* @param timeLag 与开始时间的时间差
* @param dicParentKey
* @param originalDeductAmount
*/
public
BigDecimal
rentRefundDepositProcess
(
BaseOrder
baseOrder
,
BigDecimal
depositAmount
,
Long
timeLag
,
String
dicParentKey
,
BigDecimal
originalDeductAmount
)
{
// 1、押金 + 租金(规则扣除)
BigDecimal
originalRefundAmount
=
BigDecimal
.
ZERO
.
add
(
depositAmount
);
BigDecimal
refundAmount
=
BigDecimal
.
ZERO
.
add
(
depositAmount
);
StringBuilder
refundDescBuilder
=
new
StringBuilder
(
"取消订单押金退款:"
);
if
(
null
!=
originalDeductAmount
&&
BigDecimal
.
ZERO
.
compareTo
(
originalDeductAmount
)
<
0
)
{
//通过原扣除款 计算剩余款
BigDecimal
residueAmount
=
calculateRefund
(
originalDeductAmount
,
timeLag
,
dicParentKey
,
refundDescBuilder
);
residueAmount
=
residueAmount
.
setScale
(
2
,
RoundingMode
.
HALF_UP
);
//退款金额 :押金 - (原扣除款 - 剩余款) 即: 押金 - (免费天数对应的钱 - 剩余款)
refundAmount
=
originalRefundAmount
.
subtract
(
originalDeductAmount
.
subtract
(
residueAmount
));
}
//触发押金退款
refundSubProcess
(
baseOrder
,
refundDescBuilder
.
toString
(),
originalRefundAmount
,
refundAmount
,
RefundTypeEnum
.
DEPOSIT
.
getCode
(),
RefundStatusEnum
.
ALL
.
getCode
());
return
refundAmount
;
}
public
BigDecimal
calculateRefund
(
BigDecimal
goodsAmount
,
Long
timeLag
,
String
dicParentKey
,
StringBuilder
refundDescBuilder
)
{
BigDecimal
refundGoodsAmount
=
goodsAmount
;
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
Integer
hourLag
=
Long
.
valueOf
(
timeLag
/(
1000L
*
60L
*
60L
)).
intValue
();
Map
<
String
,
Dictionary
>
dictionaryMap
=
thirdFeign
.
dictionaryGetAll4Map
().
getData
();
Set
<
Dictionary
>
rentRefunds
=
dictionaryMap
.
get
(
dicParentKey
).
getChildrens
();
for
(
com
.
xxfc
.
platform
.
universal
.
entity
.
Dictionary
dic
:
rentRefunds
)
{
if
(
StrUtil
.
isBlank
(
dic
.
getName
()))
{
continue
;
}
String
[]
names
=
dic
.
getName
().
split
(
"\\|"
);
if
(
names
.
length
<
2
)
{
continue
;
}
//符合范围
if
(
IntervalUtil
.
staticIsInTheInterval
(
hourLag
.
toString
(),
names
[
0
])){
refundGoodsAmount
=
new
BigDecimal
((
IntervalUtil
.
evaluate
(
dic
.
getDetail
(),
new
MapContext
(){{
//ga : goodsAmount
set
(
"ga"
,
goodsAmount
);
}})).
toString
());
refundDescBuilder
=
refundDescBuilder
.
insert
(
0
,
names
[
1
]+
","
);
break
;
}
}
return
refundGoodsAmount
;
}
/**
* 退款子流程
* @param baseOrder
* @param refundDesc
* @param refundAmount
* @param refundType
* @param refundStatus
*/
public
void
refundSubProcess
(
BaseOrder
baseOrder
,
String
refundDesc
,
BigDecimal
originalRefundAmount
,
BigDecimal
refundAmount
,
Integer
refundType
,
Integer
refundStatus
)
{
String
refundTradeNo
=
null
;
//0 小于 退款金额
if
(
BigDecimal
.
ZERO
.
compareTo
(
refundAmount
)
<
0
)
{
OrderRefundVo
orv
=
new
OrderRefundVo
();
orv
.
setAmount
(
baseOrder
.
getRealAmount
().
multiply
(
new
BigDecimal
(
"100"
)).
intValue
());
orv
.
setOrderNo
(
baseOrder
.
getNo
());
orv
.
setRefundDesc
(
refundDesc
+
refundAmount
.
toString
());
orv
.
setRefundAmount
(
refundAmount
.
multiply
(
new
BigDecimal
(
"100"
)).
intValue
());
ObjectRestResponse
<
String
>
result
=
thirdFeign
.
refund
(
orv
);
refundTradeNo
=
result
.
getData
();
if
(
null
==
refundTradeNo
)
{
log
.
error
(
"退款没有refundTradeNo,订单号为:"
+
baseOrder
.
getNo
()+
", 微服务调用结果为"
+
JSONUtil
.
toJsonStr
(
result
));
}
}
//记录订单退款记录
Integer
flag
=
addOrderRefund
(
baseOrder
.
getId
(),
refundDesc
,
originalRefundAmount
,
refundAmount
,
refundTradeNo
,
refundType
);
//更新订单的退款状态和退款时间
BaseOrder
updateBaseOrder
=
new
BaseOrder
();
updateBaseOrder
.
setId
(
baseOrder
.
getId
());
updateBaseOrder
.
setRefundStatus
(
refundStatus
);
updateBaseOrder
.
setRefundTime
(
System
.
currentTimeMillis
());
updateBaseOrder
.
setVersion
(
baseOrder
.
getVersion
());
if
(
SYS_TRUE
.
equals
(
flag
)
&&
null
!=
refundStatus
)
{
BeanUtil
.
copyProperties
(
baseOrderBiz
.
updateSelectiveByIdReT
(
updateBaseOrder
),
baseOrder
);
}
}
/**
* 记录订单退款记录
* @param orderId
* @param refundDesc
* @param refundAmount
* @param refundTradeNo
*/
private
Integer
addOrderRefund
(
Integer
orderId
,
String
refundDesc
,
BigDecimal
originalRefundAmount
,
BigDecimal
refundAmount
,
String
refundTradeNo
,
Integer
refundType
)
{
//如果返回的流水为空,则当做失败
Integer
refundStatus
=
SYS_TRUE
;
if
(
StrUtil
.
isBlank
(
refundTradeNo
))
{
refundStatus
=
SYS_FALSE
;
}
//创建订单退款记录
OrderRefund
orderRefund
=
new
OrderRefund
(){{
setOrderId
(
orderId
);
setRefundTime
(
System
.
currentTimeMillis
());
setTradeNo
(
refundTradeNo
);
setRefundType
(
RefundTypeEnum
.
ORDER_FUND
.
getCode
());
}};
orderRefund
.
setOriginalRefundAmount
(
originalRefundAmount
);
orderRefund
.
setDeductAmount
(
originalRefundAmount
.
subtract
(
refundAmount
));
orderRefund
.
setRefundAmount
(
refundAmount
);
orderRefund
.
setRefundDesc
(
refundDesc
);
orderRefund
.
setRefundStatus
(
refundStatus
);
orderRefund
.
setRefundType
(
refundType
);
insertSelective
(
orderRefund
);
return
refundStatus
;
}
// @Autowired
// ThirdFeign thirdFeign;
//
// @Autowired
// BaseOrderBiz baseOrderBiz;
//
// @Autowired
// OrderRentVehicleBiz orderRentVehicleBiz;
//
// @Autowired
// OrderVehicleCrosstownBiz crosstownBiz;
//
// @Autowired
// OrderViolationBiz orderViolationBiz;
//
// @Autowired
// OrderMsgBiz orderMsgBiz;
//
// @Autowired
// UserFeign userFeign;
//
// @Autowired
// OrderDepositRefundRecordBiz orderDepositRefundRecordBiz;
//
// /**
// * 退还部分押金
// * @param orderMQDTO
// */
// public void refundPartDeposit(OrderMQDTO orderMQDTO){
// Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
// BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ILLEGAL_RESERVE).getDetail());
//
// //未退还, 进行挂起保留违章预备金 的退还
// if(RefundStatusEnum.NONE.getCode().equals(orderMQDTO.getRefundStatus())) {
// Integer crosstownTypeEnum;
// DepositRefundStatus depositRefundRecordStatus;
// //判断是否定损过
// if(SYS_TRUE.equals(orderMQDTO.getOrderRentVehicleDetail().getFixedLossStatus())) {
// crosstownTypeEnum = CrosstownTypeEnum.FIXED_LOSS.getCode();
// depositRefundRecordStatus = DepositRefundStatus.FIXLOSSREFUNDARRIVAL;
// }else {
// crosstownTypeEnum = CrosstownTypeEnum.ARRIVE.getCode();
// depositRefundRecordStatus = DepositRefundStatus.REFUNDARRIVAL;
// }
// OrderVehicleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicleCrosstown(){{
// setOrderId(orderMQDTO.getId());
// setType(crosstownTypeEnum);
// }});
//
// if(null == crosstown) {
// throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退款第一部分押金失败,获取不了还车/定损记录,订单号:"+ orderMQDTO.getId()));
// }
//
// if(null == crosstown.getRestDeposit()
// || crosstown.getRestDeposit().subtract(illegalReserve).compareTo(BigDecimal.ZERO) < 0 ){
// throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退第一笔押金剩余金额异常,异常记录为:"+ crosstown.getId()));
// }
//
// //还车扣除款 剩余的 钱,再减去违章预备金
// BigDecimal refundAmont = crosstown.getRestDeposit().subtract(illegalReserve);
// BigDecimal originalRefundAmount = crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve);
// String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
// try{
// if(null != crosstown.getDedDetail()) {
// List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class);
// for(DedDetailDTO ddd : dddList) {
// refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost();
// }
// }
// }catch (Exception e) {
// log.error("crosstown.getDedDetail() crosstown id :"+crosstown.getId() +" 转换失败");
// }
// refundDesc += ")";
// refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), RefundTypeEnum.PART_DEPOSIT);
//
//// DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(crosstown.getId(), depositRefundRecordStatus);
//// depositRefundRecord.setIscomplete(Boolean.TRUE);
//// orderDepositRefundRecordBiz.updateSelectiveById(depositRefundRecord);
// orderDepositRefundRecordBiz.completeRecordStatus(crosstown.getId(), depositRefundRecordStatus);
// orderMsgBiz.handelMsgDeposit(orderMQDTO.getOrderRentVehicleDetail(), orderMQDTO, userFeign.userDetailById(orderMQDTO.getUserId()).getData());
// }
// }
//
// public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus, RefundTypeEnum refundTypeEnum) {
// //退款子流程: 订单基础,退款描述,退款金额
// refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, refundTypeEnum.getCode(), refundStatus);
// //设置剩余没有返还的钱
// orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{
// setId(orvd.getId());
// setReturnPayResidue(residueAmount);
// }});
// }
//
// /**
// * 租车(包括旅游)退款流程
// * @param baseOrder
// * @param timeLag 与开始时间的时间差
// * @param dicParentKey
// */
// public BigDecimal rentRefundProcess(BaseOrder baseOrder, Long timeLag, String dicParentKey) {
// //计算退款金额
// //商品价格 - 优惠券减免的价格
// BigDecimal originalRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
// StringBuilder refundDescBuilder = new StringBuilder("取消订单退款:");
// BigDecimal refundGoodsAmount = calculateRefund(originalRefundAmount, timeLag, dicParentKey, refundDescBuilder);
// refundGoodsAmount = refundGoodsAmount.setScale(2, RoundingMode.HALF_UP);
//
// //退款金额
// BigDecimal refundAmount = refundGoodsAmount;
//
// //退款子流程: 订单基础,退款描述,退款金额
// refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode());
// return refundAmount;
// }
//
// /**
// * 租车押金退款流程
// * @param baseOrder
// * @param depositAmount
// * @param timeLag 与开始时间的时间差
// * @param dicParentKey
// * @param originalDeductAmount
// */
// public BigDecimal rentRefundDepositProcess(BaseOrder baseOrder, BigDecimal depositAmount, Long timeLag, String dicParentKey, BigDecimal originalDeductAmount) {
// // 1、押金 + 租金(规则扣除)
// BigDecimal originalRefundAmount = BigDecimal.ZERO.add(depositAmount);
// BigDecimal refundAmount = BigDecimal.ZERO.add(depositAmount);
// StringBuilder refundDescBuilder = new StringBuilder("取消订单押金退款:");
// if(null != originalDeductAmount && BigDecimal.ZERO.compareTo(originalDeductAmount) < 0) {
// //通过原扣除款 计算剩余款
// BigDecimal residueAmount = calculateRefund(originalDeductAmount, timeLag, dicParentKey, refundDescBuilder);
// residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//
// //退款金额 :押金 - (原扣除款 - 剩余款) 即: 押金 - (免费天数对应的钱 - 剩余款)
// refundAmount = originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount));
// }
//
// //触发押金退款
// refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.DEPOSIT.getCode(), RefundStatusEnum.ALL.getCode());
// return refundAmount;
// }
//
// public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, StringBuilder refundDescBuilder) {
// BigDecimal refundGoodsAmount = goodsAmount;
//
// //根据时间处理goodsAmount
// //获取出发时间 到现在 距离时间
// Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
//
// Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
// Set<Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens();
//
// for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) {
// if(StrUtil.isBlank(dic.getName())) {
// continue;
// }
// String[] names = dic.getName().split("\\|");
// if(names.length < 2) {
// continue;
// }
//
// //符合范围
// if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
// refundGoodsAmount = new BigDecimal((IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
// //ga : goodsAmount
// set("ga", goodsAmount);
// }})).toString());
// refundDescBuilder = refundDescBuilder.insert(0, names[1]+ ",");
// break;
// }
// }
//
// return refundGoodsAmount;
// }
//
// /**
// * 退款子流程
// * @param baseOrder
// * @param refundDesc 退款描述
// * @param refundAmount 退款金额
// * @param refundType 退款类型
// * @param refundStatus 退款状态
// */
// public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, Integer refundType, Integer refundStatus) {
// String refundTradeNo = null;
// //0 小于 退款金额
// if(BigDecimal.ZERO.compareTo(refundAmount) < 0) {
// OrderRefundVo orv = new OrderRefundVo();
// orv.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
// orv.setOrderNo(baseOrder.getNo());
// orv.setRefundDesc(refundDesc+ refundAmount.toString());
// orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
// ObjectRestResponse<String> result = thirdFeign.refund(orv);
// refundTradeNo = result.getData();
// if(null == refundTradeNo) {
// log.error("退款没有refundTradeNo,订单号为:"+ baseOrder.getNo()+ ", 微服务调用结果为"+ JSONUtil.toJsonStr(result));
// }
// }
//
// //记录订单退款记录
// Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType);
//
// //更新订单的退款状态和退款时间
// BaseOrder updateBaseOrder = new BaseOrder();
// updateBaseOrder.setId(baseOrder.getId());
// updateBaseOrder.setRefundStatus(refundStatus);
// updateBaseOrder.setRefundTime(System.currentTimeMillis());
// updateBaseOrder.setVersion(baseOrder.getVersion());
// if(SYS_TRUE.equals(flag) && null != refundStatus) {
// BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder), baseOrder);
// }
// }
//
// /**
// * 退款子流程
// * @param baseOrder
// * @param refundDesc 退款描述
// * @param refundAmount 退款金额
// * @param refundType 退款类型
// * @param refundStatus 退款状态
// */
// public void refundSubProcessNew(BaseOrder baseOrder, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, Integer refundType, Integer refundStatus) {
// String refundTradeNo = null;
// //0 小于 退款金额
// if(BigDecimal.ZERO.compareTo(refundAmount) < 0) {
// OrderRefundVo orv = new OrderRefundVo();
// orv.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
// orv.setOrderNo(baseOrder.getNo());
// orv.setRefundDesc(refundDesc+ refundAmount.toString());
// orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
// ObjectRestResponse<String> result = thirdFeign.refund(orv);
// refundTradeNo = result.getData();
// if(null == refundTradeNo) {
// log.error("退款没有refundTradeNo,订单号为:"+ baseOrder.getNo()+ ", 微服务调用结果为"+ JSONUtil.toJsonStr(result));
// }
// }
//
// //记录订单退款记录
// Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType);
//
// //更新订单的退款状态和退款时间
// BaseOrder updateBaseOrder = new BaseOrder();
// updateBaseOrder.setId(baseOrder.getId());
// updateBaseOrder.setRefundStatus(refundStatus);
// updateBaseOrder.setRefundTime(System.currentTimeMillis());
// updateBaseOrder.setVersion(baseOrder.getVersion());
// if(SYS_TRUE.equals(flag) && null != refundStatus) {
// BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder), baseOrder);
// }
// }
//
// /**
// * 记录订单退款记录
// * @param orderId
// * @param refundDesc
// * @param refundAmount
// * @param refundTradeNo
// */
// private Integer addOrderRefund(Integer orderId, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, String refundTradeNo, Integer refundType) {
// //如果返回的流水为空,则当做失败
// Integer refundStatus = SYS_TRUE;
// if(StrUtil.isBlank(refundTradeNo)) {
// refundStatus = SYS_FALSE;
// }
//
// //创建订单退款记录
// OrderRefund orderRefund = new OrderRefund(){{
// setOrderId(orderId);
// setRefundTime(System.currentTimeMillis());
// setTradeNo(refundTradeNo);
// setRefundType(RefundTypeEnum.ORDER_FUND.getCode());
// }};
// orderRefund.setOriginalRefundAmount(originalRefundAmount);
// orderRefund.setDeductAmount(originalRefundAmount.subtract(refundAmount));
// orderRefund.setRefundAmount(refundAmount);
// orderRefund.setRefundDesc(refundDesc);
// orderRefund.setRefundStatus(refundStatus);
// orderRefund.setRefundType(refundType);
// insertSelective(orderRefund);
//
// return refundStatus;
// }
}
\ No newline at end of file
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/OrderTemplateBiz.java
View file @
b3928fe8
...
...
@@ -5,6 +5,7 @@ import cn.hutool.extra.template.Template;
import
cn.hutool.extra.template.TemplateEngine
;
import
cn.hutool.extra.template.TemplateUtil
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.google.common.collect.Maps
;
import
com.xxfc.platform.order.entity.OrderTemplate
;
import
com.xxfc.platform.order.mapper.OrderTemplateMapper
;
import
org.springframework.stereotype.Service
;
...
...
@@ -57,4 +58,17 @@ public class OrderTemplateBiz extends BaseBiz<OrderTemplateMapper,OrderTemplate>
return
template
.
render
(
map
);
}
public
static
void
main
(
String
[]
args
)
{
String
tempStr
=
"{\"key\":\"费用明细\", \"val\":\"\", \"consumeAmount\":\"${consumeAmount}\",\"children\":[${children}]}"
;
Map
map
=
Maps
.
newHashMap
();
map
.
put
(
"consumeAmount"
,
""
);
map
.
put
(
"children"
,
"{\"test\" : \"1111\" }"
);
//匹配参数 填充参数
TemplateEngine
engine
=
TemplateUtil
.
createEngine
();
Template
template
=
engine
.
getTemplate
(
tempStr
);
String
result
=
template
.
render
(
new
Dict
(
map
));
System
.
out
.
println
(
result
);
}
}
\ No newline at end of file
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/OrderVehicleCrosstownBiz.java
View file @
b3928fe8
...
...
@@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
import
cn.hutool.core.bean.copier.CopyOptions
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.github.wxiaoqi.security.admin.entity.AppUserDetail
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.admin.feign.dto.UserDTO
;
...
...
@@ -34,6 +33,9 @@ import com.xxfc.platform.vehicle.pojo.VehicleDepartureVo;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.map.HashedMap
;
import
org.apache.commons.lang3.StringUtils
;
import
org.joda.time.DateTime
;
import
org.joda.time.format.DateTimeFormat
;
import
org.joda.time.format.DateTimeFormatter
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -63,27 +65,31 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
@Autowired
UserFeign
userFeign
;
@Autowired
private
OrderRentVehicleBiz
orderRentVehicleBiz
;
OrderRentVehicleBiz
orderRentVehicleBiz
;
@Autowired
private
OrderDepositRefundRecordBiz
orderDepositRefundRecordBiz
;
OrderDepositRefundRecordBiz
orderDepositRefundRecordBiz
;
@Autowired
BaseOrderBiz
baseOrderBiz
;
@Autowired
OrderItemBiz
orderItemBiz
;
@Autowired
OrderCalculateBiz
orderCalculateBiz
;
public
OrderVehicleCrosstown
get
(
Integer
id
)
{
return
selectById
(
id
);
}
public
static
final
DateTimeFormatter
DEFAULT_DATE_TIME_FORMATTER
=
DateTimeFormat
.
forPattern
(
"yyyy-MM-dd"
);
public
List
<
OrderVehicleCrosstownDto
>
selectByOrderId
(
OrderVehicleCrosstownDto
orderVehicleCrosstownDto
)
{
List
<
OrderVehicleCrosstownDto
>
list
=
mapper
.
selectByOrderId
(
orderVehicleCrosstownDto
);
for
(
OrderVehicleCrosstownDto
value
:
list
)
{
if
(
value
!=
null
&&
value
.
getOrperaterId
()
!=
null
&&
value
.
getType
()
!=
1
)
{
if
(
value
!=
null
&&
value
.
getOrperaterId
()
!=
null
&&
value
.
getType
()
!=
1
)
{
UserDTO
userDTO
=
userFeign
.
userinfoByUid
(
value
.
getOrperaterId
()).
getData
();
if
(
userDTO
!=
null
)
{
if
(
userDTO
!=
null
)
{
CompanyDetail
branchCompany
=
vehicleFeign
.
getCompanyDetail
(
userDTO
.
getCompanyId
()).
getData
();
if
(
branchCompany
!=
null
)
{
if
(
branchCompany
!=
null
)
{
value
.
setCustomerPhone
(
branchCompany
.
getVehiceServicePhone
());
}
}
...
...
@@ -148,7 +154,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ObjectRestResponse
<
OrderVehicleCrosstownDto
>
add
(
OrderVehicleCrosstownDto
orderVehicleCrosstownDto
)
{
log
.
info
(
"
添加的
参数:orderVehicaleCrosstown = {}"
,
orderVehicleCrosstownDto
);
log
.
info
(
"
交还车
参数:orderVehicaleCrosstown = {}"
,
orderVehicleCrosstownDto
);
UserDTO
userDTO
=
userInfoBiz
.
getAdminUserInfo
();
if
(
userDTO
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResultCode
.
RSTOKEN_EXPIRED_CODE
,
"token is null or invalid"
);
...
...
@@ -161,22 +167,21 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
if
(
baseOrder
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResCode
.
ORDER_IS_NOT_EXIST
.
getCode
(),
ResCode
.
ORDER_IS_NOT_EXIST
.
getDesc
());
}
OrderRentVehicleDetail
orderRentVehicleDetail
=
orderRentVehicleBiz
.
selectById
(
baseOrder
.
getDetailId
());
if
(
orderVehicleCrosstownDto
.
getType
()
==
CrosstownTypeEnum
.
DEPARTURE
.
getCode
())
{
if
(
orderVehicleCrosstownDto
.
getType
()
==
CrosstownTypeEnum
.
DEPARTURE
.
getCode
())
{
boolean
flag
=
getTodayTime
(
orderRentVehicleDetail
.
getEndTime
());
if
(!
flag
)
{
return
ObjectRestResponse
.
createFailedResult
(
3502
,
"今日不是交车日期"
);
}
if
(
userDTO
.
getCompanyId
()
!=
orderRentVehicleDetail
.
getStartCompanyId
())
{
if
(
userDTO
.
getCompanyId
()
!=
orderRentVehicleDetail
.
getStartCompanyId
())
{
return
ObjectRestResponse
.
createFailedResult
(
3501
,
"无交车权限"
);
}
}
else
{
if
(
userDTO
.
getCompanyId
()
!=
orderRentVehicleDetail
.
getEndCompanyId
())
{
if
(
userDTO
.
getCompanyId
()
!=
orderRentVehicleDetail
.
getEndCompanyId
())
{
return
ObjectRestResponse
.
createFailedResult
(
3503
,
"无收车权限"
);
}
}
if
(
baseOrder
.
getStatus
()
!=
-
1
)
{
if
(
baseOrder
.
getStatus
()
!=
-
1
)
{
Vehicle
vehicle
=
null
;
RestResponse
<
Vehicle
>
restResponse
=
vehicleFeign
.
findById
(
orderRentVehicleDetail
.
getVehicleId
());
log
.
info
(
"获取车辆信息返回消息:{}"
,
restResponse
.
getMessage
());
...
...
@@ -186,13 +191,12 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
if
(
vehicle
==
null
)
{
return
ObjectRestResponse
.
createFailedResult
(
ResCode
.
VEHICLE_DEPARTURE_VEHICLE_UNEXIST
.
getCode
(),
ResCode
.
VEHICLE_DEPARTURE_VEHICLE_UNEXIST
.
getDesc
());
}
if
(
vehicle
.
getMileageLastUpdate
()
!=
null
)
{
if
(
vehicle
.
getMileageLastUpdate
()
!=
null
)
{
//判断车辆公里数
if
(
orderVehicleCrosstownDto
.
getMileage
()
==
null
||
orderVehicleCrosstownDto
.
getMileage
()
<=
vehicle
.
getMileageLastUpdate
())
{
return
ObjectRestResponse
.
createFailedResult
(
ResCode
.
VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED
.
getCode
(),
ResCode
.
VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED
.
getDesc
());
}
}
}
AppUserDTO
appUserDTO
=
userFeign
.
userDetailById
(
baseOrder
.
getUserId
()).
getData
();
//调用车辆管理的出车还车
...
...
@@ -204,7 +208,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
vehicleDepartureVo
.
setDepartureBranchCompanyId
(
orderRentVehicleDetail
.
getStartCompanyId
());
vehicleDepartureVo
.
setExpectArrivalBranchCompanyId
(
orderRentVehicleDetail
.
getEndCompanyId
());
vehicleDepartureVo
.
setMileage
(
orderVehicleCrosstownDto
.
getMileage
());
if
(
appUserDTO
!=
null
)
{
if
(
appUserDTO
!=
null
)
{
vehicleDepartureVo
.
setUser
(
appUserDTO
.
getNickname
());
vehicleDepartureVo
.
setUserTel
(
appUserDTO
.
getUsername
());
}
else
{
...
...
@@ -229,7 +233,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
vehicleArrivalVo
.
setMileage
(
orderVehicleCrosstownDto
.
getMileage
());
vehicleArrivalVo
.
setRecycleMan
(
userDTO
.
getName
());
vehicleArrivalVo
.
setBookRecordId
(
orderRentVehicleDetail
.
getBookRecordId
());
if
(
appUserDTO
!=
null
)
{
if
(
appUserDTO
!=
null
)
{
vehicleArrivalVo
.
setRecycleManTel
(
appUserDTO
.
getUsername
());
}
else
{
vehicleArrivalVo
.
setRecycleManTel
(
"13565235623"
);
...
...
@@ -246,21 +250,31 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
orderVehicleCrosstownDto
.
getDedDetail
());
for
(
int
i
=
0
;
i
<
jsonArray
.
size
();
i
++)
{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
jsonArray
.
get
(
i
).
toString
());
if
(
jsonObject
!=
null
)
{
if
(
jsonObject
!=
null
)
{
cost
+=
Double
.
parseDouble
(
jsonObject
.
getString
(
"cost"
));
}
}
}
BigDecimal
amount
=
new
BigDecimal
(
cost
.
toString
()).
divide
(
new
BigDecimal
(
"1"
),
2
,
BigDecimal
.
ROUND_UP
);
orderVehicleCrosstownDto
.
setDeductionCost
(
amount
);
//扣除费用
orderVehicleCrosstownDto
.
setRestDeposit
(
orderRentVehicleDetail
.
getDeposit
().
subtract
(
amount
));
if
(
orderVehicleCrosstownDto
.
getRestDeposit
().
compareTo
(
getAmount
())
==
-
1
)
{
//剩余金额小于保证金
return
ObjectRestResponse
.
createFailedResult
(
500
,
"押金不足,不能交车,请联系客服!"
);
if
(
StringUtils
.
isNotBlank
(
orderVehicleCrosstownDto
.
getViolateDetail
()))
{
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
orderVehicleCrosstownDto
.
getDedDetail
());
for
(
int
i
=
0
;
i
<
jsonArray
.
size
();
i
++)
{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
jsonArray
.
get
(
i
).
toString
());
if
(
jsonObject
!=
null
)
{
cost
+=
Double
.
parseDouble
(
jsonObject
.
getString
(
"cost"
));
}
}
}
orderVehicleCrosstownDto
.
getViolateDetail
();
BigDecimal
amount
=
new
BigDecimal
(
cost
.
toString
()).
divide
(
new
BigDecimal
(
"1"
),
2
,
BigDecimal
.
ROUND_UP
);
//出车成功后修改订单状态
List
<
OrderVehicleCrosstownDto
>
oldValue
=
orderVehicleCrosstownBiz
.
selectByOrderId
(
orderVehicleCrosstownDto
);
if
(
oldValue
.
size
()
==
1
)
{
orderVehicleCrosstownDto
.
setDeductionCost
(
oldValue
.
get
(
0
).
getDeductionCost
().
add
(
amount
));
//扣除费用
orderVehicleCrosstownDto
.
setRestDeposit
(
orderRentVehicleDetail
.
getDeposit
().
subtract
(
orderVehicleCrosstownDto
.
getDeductionCost
()));
if
(
orderVehicleCrosstownDto
.
getRestDeposit
().
compareTo
(
getAmount
())
==
-
1
)
{
//剩余金额小于保证金
return
ObjectRestResponse
.
createFailedResult
(
500
,
"押金不足,不能交车,请联系客服!"
);
}
BeanUtil
.
copyProperties
(
orderVehicleCrosstownDto
,
oldValue
.
get
(
0
),
CopyOptions
.
create
().
setIgnoreNullValue
(
true
).
setIgnoreError
(
true
));
getOrderLicense
(
orderVehicleCrosstownDto
);
handleOrderStatus
(
baseOrder
,
orderRentVehicleDetail
,
oldValue
.
get
(
0
));
...
...
@@ -271,6 +285,12 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
}
return
ObjectRestResponse
.
succ
(
oldValue
.
get
(
0
));
}
else
if
(
oldValue
.
size
()
<=
0
)
{
orderVehicleCrosstownDto
.
setDeductionCost
(
amount
);
//扣除费用
orderVehicleCrosstownDto
.
setRestDeposit
(
orderRentVehicleDetail
.
getDeposit
().
subtract
(
orderVehicleCrosstownDto
.
getDeductionCost
()));
if
(
orderVehicleCrosstownDto
.
getRestDeposit
().
compareTo
(
getAmount
())
==
-
1
)
{
//剩余金额小于保证金
return
ObjectRestResponse
.
createFailedResult
(
500
,
"押金不足,不能交车,请联系客服!"
);
}
getOrderLicense
(
orderVehicleCrosstownDto
);
orderVehicleCrosstownBiz
.
insertSelective
(
orderVehicleCrosstownDto
);
OrderVehicleCrosstown
orderVehicleCrosstown
=
orderVehicleCrosstownBiz
.
selectOne
(
orderVehicleCrosstownDto
);
...
...
@@ -286,13 +306,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
private
void
handleOrderStatus
(
BaseOrder
baseOrder
,
OrderRentVehicleDetail
orderRentVehicleDetail
,
OrderVehicleCrosstown
orderVehicleCrosstown
)
{
//交车完成 设置订单状态为出行中
BigDecimal
totalAmount
=
new
BigDecimal
(
0
);
ObjectRestResponse
<
OrderPageVO
>
objectRestResponse
=
baseOrderBiz
.
getOrderDetail
(
baseOrder
.
getNo
());
if
(
objectRestResponse
.
getData
()
!=
null
&&
objectRestResponse
.
getData
().
getOrderRentVehicleDetail
()
!=
null
)
{
//总押金-保留金
totalAmount
=
objectRestResponse
.
getData
().
getOrderRentVehicleDetail
().
getDeposit
();
}
BigDecimal
totalAmount
=
orderRentVehicleDetail
.
getDeposit
();
if
(
baseOrder
.
getStatus
()
==
OrderStatusEnum
.
ORDER_TOSTART
.
getCode
())
{
//交车
baseOrder
.
setStatus
(
OrderStatusEnum
.
ORDER_WAIT
.
getCode
());
baseOrder
=
baseOrderBiz
.
updateSelectiveByIdReT
(
baseOrder
);
...
...
@@ -341,7 +355,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
newValue
.
setId
(
null
);
orderDepositRefundRecordBiz
.
save
(
newValue
);
DepositRefundRecord
nextValue
=
orderDepositRefundRecordBiz
.
findByCrossIdAndStatus
(
orderVehicleCrosstown
.
getId
(),
DepositRefundStatus
.
FIXLOSSREFUNDARRIVAL
.
getCode
());
if
(
nextValue
!=
null
)
{
if
(
nextValue
!=
null
)
{
nextValue
.
setRestAmount
(
newValue
.
getRestAmount
());
orderDepositRefundRecordBiz
.
update
(
nextValue
);
}
...
...
@@ -377,9 +391,9 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
public
boolean
getTodayTime
(
Long
time
)
{
long
current
=
System
.
currentTimeMillis
();
if
(
current
<=
(
time
/
(
1000
*
3600
*
24
)
*
(
1000
*
3600
*
24
)
-
TimeZone
.
getDefault
().
getRawOffset
()
)
+
24
*
60
*
60
*
1000
-
1
)
{
if
(
current
<=
(
time
/
(
1000
*
3600
*
24
)
*
(
1000
*
3600
*
24
)
-
TimeZone
.
getDefault
().
getRawOffset
()
)
+
24
*
60
*
60
*
1000
-
1
)
{
return
true
;
}
return
false
;
}
}
\ No newline at end of file
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/inner/OrderCalculateBiz.java
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
biz
.
inner
;
import
cn.hutool.core.date.DateUtil
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.xxfc.platform.activity.entity.Coupon
;
import
com.xxfc.platform.activity.feign.ActivityFeign
;
import
com.xxfc.platform.app.entity.Cofig
;
import
com.xxfc.platform.app.feign.ConfigFeign
;
import
com.xxfc.platform.order.biz.OrderAccountBiz
;
import
com.xxfc.platform.order.biz.OrderItemBiz
;
import
com.xxfc.platform.order.biz.OrderRefundBiz
;
import
com.xxfc.platform.order.contant.enumerate.ItemTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.OrderTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.RefundStatusEnum
;
import
com.xxfc.platform.order.contant.enumerate.RefundTypeEnum
;
import
com.xxfc.platform.order.contant.enumerate.*
;
import
com.xxfc.platform.order.entity.*
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDeduction
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.calculate.InProgressVO
;
import
com.xxfc.platform.universal.constant.DictionaryKey
;
import
com.xxfc.platform.universal.dto.SmsTemplateDTO
;
import
com.xxfc.platform.universal.entity.Dictionary
;
import
com.xxfc.platform.universal.feign.ThirdFeign
;
import
com.xxfc.platform.vehicle.entity.BranchCompany
;
import
com.xxfc.platform.vehicle.feign.VehicleFeign
;
import
com.xxfc.platform.vehicle.pojo.CompanyDetail
;
import
lombok.extern.slf4j.Slf4j
;
import
org.assertj.core.util.Lists
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
HOUR_MINUTE_FORMATTE_HUTOOL
;
import
static
com
.
github
.
wxiaoqi
.
security
.
common
.
constant
.
CommonConstants
.
SYS_FALSE
;
import
static
com
.
xxfc
.
platform
.
universal
.
constant
.
DictionaryKey
.
APP_ORDER
;
/**
* 订单退款记录表
...
...
@@ -71,22 +54,33 @@ public class OrderCalculateBiz {
@Autowired
OrderItemBiz
orderItemBiz
;
public
InProgressVO
inProgressCalculate
(
BaseOrder
baseOrder
,
OrderItem
orderItem
,
Integer
freeDays
,
Integer
useDays
)
{
@Autowired
OrderAccountBiz
orderAccountBiz
;
public
InProgressVO
inProgressCalculate
(
BaseOrder
baseOrder
,
OrderItem
orderItem
,
Integer
freeDays
,
Integer
useDays
,
OrderAccountDetail
oad
)
{
BigDecimal
refundAmount
=
BigDecimal
.
ZERO
;
InProgressVO
inProgressVO
=
new
InProgressVO
();
inProgressVO
.
setUsedDays
(
useDays
);
inProgressVO
.
setUsedfreeDays
(
freeDays
);
inProgressVO
.
setUsedAmount
(
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
useDays
+
""
)));
inProgressVO
.
setUsedFreeDaysAmount
(
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
freeDays
+
""
)));
//计算:剩余免费天数
Integer
backFreeDays
=
freeDays
-
useDays
;
//待返还的免费天数
List
<
String
>
backCouponNos
=
Lists
.
newArrayList
();
//剩余天数
Integer
residueDays
=
orderItem
.
getTotalNum
()
-
useDays
;
//过了出发时间取消订单 ,优先使用免费天数
if
(
backFreeDays
<=
0
)
{
//大于总天数 只返回押金
if
(
useDays
>=
orderItem
.
getTotalNum
())
{
//退押金
//orderRefundBiz.rentRefundDepositProcess(hasUpdateOrder, orvd.getDeposit(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, freeDayAmount);
}
else
{
//使用天数 小于 总天数
if
(
useDays
<
orderItem
.
getTotalNum
())
{
//需要扣除订单费用
//判断是否达到优惠券条件 不符合则返还优惠券
//消费天数
Integer
consumeDays
=
0
-
backFreeDays
;
//计算使用天数的费用
//计算使用天数的费用
BigDecimal
consumeAmount
=
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
consumeDays
+
""
));
List
<
String
>
backCouponNos
=
Lists
.
newArrayList
();
List
<
BigDecimal
>
couponAmounts
=
Lists
.
newArrayList
();
for
(
String
tickerNo
:
baseOrder
.
getCouponTickerNos
().
split
(
","
))
{
BigDecimal
couponAmount
=
activityFeign
.
use
(
baseOrder
.
getUserId
(),
Lists
.
newArrayList
(
tickerNo
),
baseOrder
.
getNo
(),
Coupon
.
CHANNEL_RENT
,
consumeAmount
,
ActivityFeign
.
TYPE_CHECK
);
...
...
@@ -97,14 +91,60 @@ public class OrderCalculateBiz {
backCouponNos
.
add
(
tickerNo
);
}
}
for
(
BigDecimal
couponAmount
:
couponAmounts
)
{
consumeAmount
=
consumeAmount
.
subtract
(
couponAmount
);
}
if
(
consumeAmount
.
compareTo
(
orderItem
.
getRealAmount
())
>
0
)
{
//消费金额 大于真实的金额 增加额外费用
inProgressVO
.
setExtraAmount
(
consumeAmount
.
subtract
(
orderItem
.
getRealAmount
()));
// consumeAmount = orderItem
OrderAccountDeduction
extraDeduction
=
orderAccountBiz
.
initDeduction
(
inProgressVO
.
getExtraAmount
(),
"消费额外费用"
,
DeductionTypeEnum
.
EXTRA
,
OrderAccountDeduction
.
ORIGIN_DEPOSIT
);
oad
.
getDeductions
().
add
(
extraDeduction
);
}
else
{
//否则,设置返回钱
refundAmount
=
refundAmount
.
add
(
orderItem
.
getRealAmount
().
subtract
(
consumeAmount
));
}
}
else
{
}
}
else
{
//返回剩余免费天数,返回优惠券,订单款
refundAmount
=
refundAmount
.
add
(
orderItem
.
getRealAmount
());
inProgressVO
.
setBackFreeDays
(
backFreeDays
);
}
inProgressVO
.
setRefundOrderAmount
(
refundAmount
);
inProgressVO
.
setBackCoupons
(
backCouponNos
);
//计算违约金
//residueDays * 身份价格
if
(
residueDays
>
0
)
{
if
(
residueDays
>
2
)
{
residueDays
=
2
;
}
inProgressVO
.
setViolateAmount
(
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
((
residueDays
+
""
))));
OrderAccountDeduction
violateDeduction
=
orderAccountBiz
.
initDeduction
(
inProgressVO
.
getViolateAmount
(),
"违约金"
,
DeductionTypeEnum
.
VIOLATE_ADVANCE
,
OrderAccountDeduction
.
ORIGIN_DEPOSIT
);
oad
.
getDeductions
().
add
(
violateDeduction
);
}
else
if
(
residueDays
<
0
){
//如果订单 出发中 或者 已完成 或者定损中
if
(
OrderStatusEnum
.
ORDER_WAIT
.
equals
(
baseOrder
.
getStatus
())
||
OrderStatusEnum
.
ORDER_FINISH
.
equals
(
baseOrder
.
getStatus
())
||
OrderStatusEnum
.
ORDER_FIXED_LOSS
.
equals
(
baseOrder
.
getStatus
()))
{
Integer
overDays
=
0
-
residueDays
;
if
(
overDays
>
2
)
{
overDays
=
2
;
}
//超过的天数 * 200% * 单价
inProgressVO
.
setViolateAmount
(
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
2
+
""
)).
multiply
(
new
BigDecimal
((
overDays
+
""
))));
OrderAccountDeduction
violateDeduction
=
orderAccountBiz
.
initDeduction
(
inProgressVO
.
getViolateAmount
(),
"违约金"
,
DeductionTypeEnum
.
VIOLATE_DELAY
,
OrderAccountDeduction
.
ORIGIN_DEPOSIT
);
oad
.
getDeductions
().
add
(
violateDeduction
);
}
}
return
new
InProgressVO
()
;
return
inProgressVO
;
}
public
InProgressVO
inProgressCalculate
(
BaseOrder
baseOrder
,
Integer
useDays
)
{
...
...
@@ -113,6 +153,15 @@ public class OrderCalculateBiz {
setOrderId
(
baseOrder
.
getId
());
}});
Integer
freeDays
=
(
null
==
orderItem
.
getCutNum
())?
0
:
orderItem
.
getCutNum
();
return
inProgressCalculate
(
baseOrder
,
orderItem
,
freeDays
,
useDays
);
return
inProgressCalculate
(
baseOrder
,
orderItem
,
freeDays
,
useDays
,
null
);
}
public
InProgressVO
calculateOrderComplete
(
BaseOrder
baseOrder
,
OrderRentVehicleDetail
orvd
,
OrderAccountDetail
oad
,
OrderItem
orderItem
,
Integer
useDays
)
{
InProgressVO
inProgressVO
=
inProgressCalculate
(
baseOrder
,
orderItem
,
orvd
.
getFreeDays
(),
useDays
,
oad
);
oad
.
setDepositAmount
(
orvd
.
getDeposit
().
subtract
(
inProgressVO
.
getExtraAmount
()).
subtract
(
inProgressVO
.
getViolateAmount
()));
oad
.
setOrderAmount
(
inProgressVO
.
getRefundOrderAmount
());
oad
.
setOriginDepositAmount
(
orvd
.
getDeposit
());
oad
.
setOriginOrderAmount
(
baseOrder
.
getRealAmount
());
return
inProgressVO
;
}
}
\ No newline at end of file
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/inner/OrderCancelBiz.java
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
biz
.
inner
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.github.wxiaoqi.security.admin.feign.UserFeign
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.util.process.ResultCode
;
import
com.xxfc.platform.activity.feign.ActivityFeign
;
import
com.xxfc.platform.order.biz.*
;
import
com.xxfc.platform.order.contant.enumerate.*
;
import
com.xxfc.platform.order.entity.*
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.order.pojo.calculate.InProgressVO
;
import
com.xxfc.platform.order.pojo.mq.OrderMQDTO
;
import
com.xxfc.platform.tour.feign.TourFeign
;
import
com.xxfc.platform.universal.feign.ThirdFeign
;
...
...
@@ -55,6 +61,12 @@ public class OrderCancelBiz {
@Autowired
OrderMsgBiz
orderMsgBiz
;
@Autowired
OrderCalculateBiz
orderCalculateBiz
;
@Autowired
OrderAccountBiz
orderAccountBiz
;
@Autowired
UserFeign
userFeign
;
...
...
@@ -67,6 +79,9 @@ public class OrderCancelBiz {
@Autowired
ThirdFeign
thirdFeign
;
@Autowired
ActivityFeign
activityFeign
;
private
static
Map
<
Integer
,
List
<
Integer
>>
cancelAble
;
static
{
cancelAble
=
new
HashMap
<
Integer
,
List
<
Integer
>>();
...
...
@@ -100,6 +115,8 @@ public class OrderCancelBiz {
setVersion
(
baseOrder
.
getVersion
());
}};
BaseOrder
hasUpdateOrder
=
baseOrderBiz
.
updateSelectiveByIdReT
(
updateOrder
);
InProgressVO
inProgressVO
=
null
;
OrderAccountDetail
oad
=
new
OrderAccountDetail
();
//触发退款流程
//判断是否已支付
...
...
@@ -110,41 +127,51 @@ public class OrderCancelBiz {
setOrderId
(
baseOrder
.
getId
());
}});
OrderItem
orderItem
=
orderItemBiz
.
selectOne
(
new
OrderItem
(){{
setType
(
ItemTypeEnum
.
VEHICLE_MODEL
.
getCode
());
setOrderId
(
baseOrder
.
getId
());
}});
//原退还押金
Integer
freeDays
=
(
null
==
orderItem
.
getCutNum
())?
0
:
orderItem
.
getCutNum
();
BigDecimal
freeDayAmount
=
BigDecimal
.
ZERO
;
//判断是否使用免费天数,并且进行扣款
if
(
null
!=
orvd
.
getFreeDays
()
&&
orvd
.
getFreeDays
()
>
0
)
{
OrderItem
orderItem
=
orderItemBiz
.
selectOne
(
new
OrderItem
(){{
setType
(
ItemTypeEnum
.
VEHICLE_MODEL
.
getCode
());
setOrderId
(
baseOrder
.
getId
());
}});
freeDayAmount
=
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
orvd
.
getFreeDays
()+
""
));
}
//如果超过出发时间,不能取消订单
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
Long
timeLag
=
orvd
.
getStartTime
()
-
System
.
currentTimeMillis
();
//后面允许开始时间过后可以取消订单
// if(timeLag < 0) {
// throw new BaseException(ResultCode.FAILED_CODE, new HashSet<String>(){{
// add("已超过出发时间,不能取消订单");
// }});
// }
if
(
timeLag
<
0
)
{
//开始时间当天时间戳
Long
beginOfStartDay
=
DateUtil
.
beginOfDay
(
DateUtil
.
date
(
orvd
.
getStartTime
())).
getTime
();
//计算:使用天数 当前时间 - 开始时间的0时0分0秒
Long
useTimeLag
=
System
.
currentTimeMillis
()
-
beginOfStartDay
;
Integer
useDays
=
new
BigDecimal
(
useTimeLag
+
""
).
divide
(
new
BigDecimal
((
24
*
60
*
60
*
1000
)+
""
)).
setScale
(
0
,
BigDecimal
.
ROUND_UP
).
intValue
();
inProgressVO
=
orderCalculateBiz
.
calculateOrderComplete
(
baseOrder
,
orvd
,
oad
,
orderItem
,
useDays
);
//结合
//退款子流程: 订单基础,退款描述,退款金额
orderAccountBiz
.
refundSubProcess
(
baseOrder
,
""
,
baseOrder
.
getRealAmount
().
subtract
(
orvd
.
getDeposit
()),
oad
.
getDepositAmount
().
add
(
oad
.
getOrderAmount
()),
AccountTypeEnum
.
OUT_ORDER_FUND
.
getCode
(),
RefundStatusEnum
.
ALL
.
getCode
(),
oad
);
//退款流程
//退订单款
orderRefundBiz
.
rentRefundProcess
(
hasUpdateOrder
,
timeLag
,
APP_ORDER
+
"_"
+
RENT_REFUND
);
}
else
{
//没到出车时间
//判断是否使用免费天数,并且进行扣款
if
(
freeDays
>
0
)
{
freeDayAmount
=
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
orvd
.
getFreeDays
()+
""
));
//退押金
orderRefundBiz
.
rentRefundDepositProcess
(
hasUpdateOrder
,
orvd
.
getDeposit
(),
timeLag
,
APP_ORDER
+
"_"
+
RENT_REFUND
,
freeDayAmount
);
//违约金封顶 租车身份价 * 2天
BigDecimal
topAmount
=
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
2
+
""
));
if
(
freeDayAmount
.
compareTo
(
topAmount
)
>
0
)
{
freeDayAmount
=
freeDayAmount
;
}
}
//退款流程
orderAccountBiz
.
rentRefundProcessCancel
(
hasUpdateOrder
,
orderItem
.
getRealAmount
(),
timeLag
,
APP_ORDER
+
"_"
+
RENT_REFUND
,
orvd
.
getDeposit
(),
freeDayAmount
);
}
//已付款的取消订单发送消息
try
{
AppUserDTO
appUserDTO
=
userFeign
.
userDetailById
(
baseOrder
.
getUserId
()).
getData
();
//处理后台用户提醒短信的发送
// orderMsgBiz.handelBgUserMsg4Pay(orvd, baseOrder, appUserDTO, OrderMsgBiz.RENT_CANCEL);
orderMsgBiz
.
handelMsgCancel
(
orvd
,
otd
,
omd
,
baseOrder
,
appUserDTO
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
...
...
@@ -154,15 +181,29 @@ public class OrderCancelBiz {
otd
=
orderTourDetailBiz
.
selectOne
(
new
OrderTourDetail
(){{
setOrderId
(
baseOrder
.
getId
());
}});
Long
timeLag
=
otd
.
getStartTime
()
-
System
.
currentTimeMillis
();
OrderItem
adultItem
=
orderItemBiz
.
selectOne
(
new
OrderItem
(){{
setType
(
ItemTypeEnum
.
TOUR_ADULT
.
getCode
());
setOrderId
(
baseOrder
.
getId
());
}});
OrderItem
childItem
=
orderItemBiz
.
selectOne
(
new
OrderItem
(){{
setType
(
ItemTypeEnum
.
TOUR_CHILD
.
getCode
());
setOrderId
(
baseOrder
.
getId
());
}});
//判断是省内还是省外
String
key
=
TOUR_IN_REFUND
;
if
(
SYS_TRUE
.
equals
(
otd
.
getIsOutside
()))
{
key
=
TOUR_REFUND
;
}
//退款流程
orderRefundBiz
.
rentRefundProcess
(
hasUpdateOrder
,
timeLag
,
APP_ORDER
+
"_"
+
key
);
orderAccountBiz
.
rentRefundProcessCancel
(
hasUpdateOrder
,
adultItem
.
getRealAmount
().
add
(
childItem
.
getRealAmount
()),
timeLag
,
APP_ORDER
+
"_"
+
key
,
BigDecimal
.
ZERO
,
BigDecimal
.
ZERO
);
//站点总人数减少
tourFeign
.
updateTourGoodPersonNum
(
otd
.
getVerificationId
(),
TourFeign
.
TOTAL_PERSON
,
(
otd
.
getTotalNumber
()
*
-
1
));
}
}
...
...
@@ -183,11 +224,20 @@ public class OrderCancelBiz {
//取消租车免费天数使用
if
(
null
!=
orvd
.
getFreeDays
()
&&
orvd
.
getFreeDays
()
>
0
)
{
int
result
=
userFeign
.
memberDays
(
baseOrder
.
getUserId
(),
orvd
.
getFreeDays
(),
UserFeign
.
MEMBER_DAYS_WITHDRAW
);
Integer
freeDays
=
(
null
==
inProgressVO
)
?
orvd
.
getFreeDays
():
inProgressVO
.
getBackFreeDays
();
int
result
=
userFeign
.
memberDays
(
baseOrder
.
getUserId
(),
freeDays
,
UserFeign
.
MEMBER_DAYS_WITHDRAW
);
if
(
result
<
0
)
{
throw
new
BaseException
(
ResultCode
.
FAILED_CODE
);
}
}
//返还优惠券
if
(
StrUtil
.
isNotBlank
(
baseOrder
.
getCouponTickerNos
()))
{
List
<
String
>
backCoupons
=
(
null
==
inProgressVO
)?
inProgressVO
.
getBackCoupons
():
Convert
.
convert
(
List
.
class
,
baseOrder
.
getCouponTickerNos
().
split
(
","
));
for
(
String
backCoupon
:
backCoupons
)
{
activityFeign
.
cancelUse
(
backCoupon
);
}
}
}
else
if
(
OrderTypeEnum
.
TOUR
.
getCode
().
equals
(
baseOrder
.
getType
()))
{
otd
=
orderTourDetailBiz
.
selectOne
(
new
OrderTourDetail
(){{
setOrderId
(
baseOrder
.
getId
());
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/jobhandler/RentDepositJobHandler.java
View file @
b3928fe8
...
...
@@ -10,6 +10,7 @@ import com.xxfc.platform.order.entity.BaseOrder;
import
com.xxfc.platform.order.entity.OrderRentVehicleDetail
;
import
com.xxfc.platform.order.entity.OrderVehicleCrosstown
;
import
com.xxfc.platform.order.entity.OrderViolation
;
import
com.xxfc.platform.order.pojo.account.OrderAccountDetail
;
import
com.xxfc.platform.universal.constant.DictionaryKey
;
import
com.xxfc.platform.universal.entity.Dictionary
;
import
com.xxfc.platform.universal.feign.ThirdFeign
;
...
...
@@ -61,6 +62,9 @@ public class RentDepositJobHandler extends IJobHandler {
@Autowired
OrderRefundBiz
orderRefundBiz
;
@Autowired
OrderAccountBiz
orderAccountBiz
;
@Autowired
OrderMsgBiz
orderMsgBiz
;
...
...
@@ -120,7 +124,9 @@ public class RentDepositJobHandler extends IJobHandler {
refundAmont
=
orvd
.
getReturnPayResidue
();
refundDesc
+=
refundAmont
.
toString
();
}
orderRefundBiz
.
refundTrigger
(
baseOrder
,
orvd
,
BigDecimal
.
ZERO
,
orvd
.
getReturnPayResidue
(),
refundAmont
,
refundDesc
,
RefundStatusEnum
.
REFUND_DEPOSIT
.
getCode
(),
RefundTypeEnum
.
RESIDUE_DEPOSIT
);
OrderAccountDetail
oad
=
new
OrderAccountDetail
();
orderAccountBiz
.
refundTrigger
(
baseOrder
,
orvd
,
BigDecimal
.
ZERO
,
orvd
.
getReturnPayResidue
(),
refundAmont
,
refundDesc
,
RefundStatusEnum
.
REFUND_DEPOSIT
.
getCode
(),
AccountTypeEnum
.
OUT_RESIDUE_DEPOSIT
,
oad
);
//orderRefundBiz.refundTrigger(baseOrder, orvd, BigDecimal.ZERO, orvd.getReturnPayResidue(), refundAmont, refundDesc, RefundStatusEnum.REFUND_DEPOSIT.getCode(), RefundTypeEnum.RESIDUE_DEPOSIT);
orderDepositRefundRecordBiz
.
completeRecordStatus
(
crosstown
.
getId
(),
DepositRefundStatus
.
VIOLATIONARRIVAL
);
orderMsgBiz
.
handelMsgDeposit
(
orvd
,
baseOrder
,
userFeign
.
userDetailById
(
baseOrder
.
getUserId
()).
getData
());
}
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/mapper/OrderAccountMapper.java
0 → 100755
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
mapper
;
import
com.xxfc.platform.order.entity.OrderAccount
;
import
tk.mybatis.mapper.common.Mapper
;
/**
* 订单帐目
*
* @author zhoujw
* @email 18178966185@163.com
* @date 2019-09-09 15:51:16
*/
public
interface
OrderAccountMapper
extends
Mapper
<
OrderAccount
>
{
}
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/mqhandler/RefundMQHandler.java
View file @
b3928fe8
...
...
@@ -3,6 +3,7 @@ package com.xxfc.platform.order.mqhandler;
import
cn.hutool.json.JSONUtil
;
import
com.rabbitmq.client.Channel
;
import
com.xxfc.platform.order.biz.OrderAccountBiz
;
import
com.xxfc.platform.order.biz.OrderRefundBiz
;
import
com.xxfc.platform.order.pojo.mq.OrderMQDTO
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -27,6 +28,9 @@ public class RefundMQHandler {
@Autowired
OrderRefundBiz
orderRefundBiz
;
@Autowired
OrderAccountBiz
orderAccountBiz
;
/**
* 退款
* @param
...
...
@@ -42,7 +46,7 @@ public class RefundMQHandler {
String
msg
=
new
String
(
message
.
getBody
(),
"UTF-8"
);
OrderMQDTO
orderMQDTO
=
JSONUtil
.
toBean
(
msg
,
OrderMQDTO
.
class
);
order
Refund
Biz
.
refundPartDeposit
(
orderMQDTO
);
order
Account
Biz
.
refundPartDeposit
(
orderMQDTO
);
executorService
.
shutdown
();
Long
deliveryTag
=
(
Long
)
headers
.
get
(
AmqpHeaders
.
DELIVERY_TAG
);
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/BackStageOrderController.java
View file @
b3928fe8
...
...
@@ -214,6 +214,14 @@ public class BackStageOrderController extends CommonBaseController implements Us
dto
.
setEndTime
(
new
Date
().
getTime
());
}
}
List
<
Integer
>
userIds
=
new
ArrayList
<>();
if
(
StringUtils
.
isNotBlank
(
dto
.
getKeywords
()))
{
List
<
Integer
>
list
=
userFeign
.
getUserIdByUsername
(
dto
.
getKeywords
());
if
(
list
!=
null
)
{
userIds
.
addAll
(
list
);
}
}
dto
.
setUserIds
(
userIds
);
UserDTO
userDTO
=
getAdminUserInfo
();
if
(
userDTO
==
null
)
{
return
ObjectRestResponse
.
succ
(
new
PageDataVO
<>());
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/BaseOrderController.java
View file @
b3928fe8
...
...
@@ -311,6 +311,11 @@ public class BaseOrderController extends CommonBaseController implements UserRes
private
List
<
String
>
vehicleIds
;
//订单用户ID列表
private
List
<
Integer
>
userIds
;
//订单用户手机号或订单用户真实姓名
private
String
keywords
;
/**
* 车牌号
*/
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/OrderAccountController.java
0 → 100755
View file @
b3928fe8
package
com
.
xxfc
.
platform
.
order
.
rest
;
import
com.github.wxiaoqi.security.common.rest.BaseController
;
import
com.xxfc.platform.order.biz.OrderAccountBiz
;
import
com.xxfc.platform.order.entity.OrderAccount
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
@RequestMapping
(
"orderAccount"
)
public
class
OrderAccountController
extends
BaseController
<
OrderAccountBiz
,
OrderAccount
>
{
}
\ No newline at end of file
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/rest/OrderRefundController.java
View file @
b3928fe8
...
...
@@ -72,43 +72,43 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
switch
(
orderTypeEnum
)
{
case
RENT_VEHICLE:
orderRefundAmount
=
orderRefundBiz
.
calculateRefund
(
orderPageVO
.
getGoodsAmount
().
subtract
(
orderPageVO
.
getCouponAmount
())
,
orderPageVO
.
getOrderRentVehicleDetail
().
getStartTime
()
-
System
.
currentTimeMillis
()
,
DictionaryKey
.
APP_ORDER
+
"_"
+
RENT_REFUND
,
refundDescBuilder
);
OrderRentVehicleDetail
orvd
=
orderPageVO
.
getOrderRentVehicleDetail
();
Long
timeLag
=
orvd
.
getStartTime
()
-
System
.
currentTimeMillis
();
//原退还押金
BigDecimal
originalDeductAmount
=
BigDecimal
.
ZERO
;
BigDecimal
originalRefundAmount
=
BigDecimal
.
ZERO
.
add
(
orvd
.
getDeposit
());
//判断是否使用免费天数,并且进行扣款
if
(
null
!=
orvd
.
getFreeDays
()
&&
orvd
.
getFreeDays
()
>
0
)
{
refundDescBuilder
=
new
StringBuilder
(
""
);
OrderItem
orderItem
=
orderItemBiz
.
selectOne
(
new
OrderItem
(){{
setType
(
ItemTypeEnum
.
VEHICLE_MODEL
.
getCode
());
setOrderId
(
orderPageVO
.
getId
());
}});
originalDeductAmount
=
orderItem
.
getUnitPrice
().
multiply
(
new
BigDecimal
(
orvd
.
getFreeDays
()+
""
));
}
BigDecimal
residueAmount
=
orderRefundBiz
.
calculateRefund
(
originalDeductAmount
,
timeLag
,
APP_ORDER
+
"_"
+
RENT_REFUND
,
refundDescBuilder
);
residueAmount
=
residueAmount
.
setScale
(
2
,
RoundingMode
.
HALF_UP
);
//押金剩余款 :押金 - (原扣除款 - 剩余款)
//退款金额 :订单剩余款 + 押金剩余款
orderRefundAmount
=
orderRefundAmount
.
add
(
originalRefundAmount
.
subtract
(
originalDeductAmount
.
subtract
(
residueAmount
)));
//
orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
//
, orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis()
//
, DictionaryKey.APP_ORDER+ "_"+ RENT_REFUND
//
, refundDescBuilder);
//
OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail();
//
Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
//
//原退还押金
//
BigDecimal originalDeductAmount = BigDecimal.ZERO;
//
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(orvd.getDeposit());
//
//判断是否使用免费天数,并且进行扣款
//
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
//
refundDescBuilder = new StringBuilder("");
//
OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{
//
setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
//
setOrderId(orderPageVO.getId());
//
}});
//
originalDeductAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
//
}
//
BigDecimal residueAmount = orderRefundBiz.calculateRefund(originalDeductAmount, timeLag, APP_ORDER+ "_"+ RENT_REFUND, refundDescBuilder);
//
residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//
//
//押金剩余款 :押金 - (原扣除款 - 剩余款)
//
//退款金额 :订单剩余款 + 押金剩余款
//
orderRefundAmount = orderRefundAmount.add(originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount)));
break
;
case
TOUR:
//判断是省内还是省外
String
key
=
TOUR_IN_REFUND
;
if
(
SYS_TRUE
.
equals
(
orderPageVO
.
getOrderTourDetail
().
getIsOutside
()))
{
key
=
TOUR_REFUND
;
}
orderRefundAmount
=
orderRefundBiz
.
calculateRefund
(
orderPageVO
.
getGoodsAmount
().
subtract
(
orderPageVO
.
getCouponAmount
())
,
orderPageVO
.
getOrderTourDetail
().
getStartTime
()
-
System
.
currentTimeMillis
()
,
DictionaryKey
.
APP_ORDER
+
"_"
+
key
,
refundDescBuilder
);
break
;
//
String key = TOUR_IN_REFUND;
//
if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
//
key = TOUR_REFUND;
//
}
//
orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
//
, orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis()
//
, DictionaryKey.APP_ORDER+ "_"+ key
//
, refundDescBuilder);
//
break;
default
:
break
;
}
...
...
xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/service/OrderRentVehicleService.java
View file @
b3928fe8
...
...
@@ -219,6 +219,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal
damageSafeAmount
=
BigDecimal
.
ZERO
;
// BigDecimal modelAmount = BigDecimal.ZERO;
BigDecimal
couponAmount
=
BigDecimal
.
ZERO
;
String
couponDesc
=
""
;
Integer
vehicleDayNum
=
0
;
Integer
freeDayNum
=
0
;
...
...
@@ -314,6 +315,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail
.
getOrder
().
setCouponTickerNos
(
detail
.
getTickerNo
().
stream
().
collect
(
Collectors
.
joining
(
","
)));
detail
.
getOrder
().
setHasDiscount
(
SYS_TRUE
);
vehicleOrderItem
.
handleCouponAmount
(
couponAmount
);
couponDesc
+=
activityFeign
.
info
(
detail
.
getTickerNo
().
get
(
0
)).
getTitle
();
}
}
...
...
@@ -340,6 +342,11 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp
.
setModelAmount
(
vehicleOrderItem
.
getUnitPrice
());
rvp
.
setVehicleDayNum
(
vehicleDayNum
);
rvp
.
setFreeDayNum
(
freeDayNum
);
rvp
.
setFreeAmount
(
vehicleOrderItem
.
getCutAmount
());
rvp
.
setBuyVehicleAmount
(
vehicleOrderItem
.
getBuyAmount
());
rvp
.
setCouponDesc
(
couponDesc
);
//设置收费明细
costDetail
(
rvp
,
handleChildren
(
detail
,
vehicleDayNum
));
return
rvp
;
...
...
@@ -389,6 +396,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
if
(
DRIVER_TYPE_DAMAGE_SAFE
.
equals
(
detail
.
getDamageSafe
()))
{
childrenStr
.
append
(
",${tem_0104}"
);
}
if
(
detail
.
getFreeDays
()
>
0
)
{
childrenStr
.
append
(
",${tem_0105}"
);
}
if
(
StrUtil
.
isNotBlank
(
detail
.
getOrder
().
getCouponTickerNos
()))
{
childrenStr
.
append
(
",${tem_9901}"
);
}
...
...
@@ -433,4 +443,5 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
detail
.
setVehicleId
(
orr
.
getData
().
getVehicleId
());
detail
.
setBookRecordId
(
orr
.
getData
().
getId
());
}
}
xx-order/xx-order-server/src/main/resources/mapper/BaseOrderMapper.xml
View file @
b3928fe8
...
...
@@ -182,7 +182,7 @@
and b.user_id = #{userId}
</if>
<if
test=
"status != null and status == -1"
>
AND b.status
in (6,-1)
AND b.status
= -1
and b.refund_status in (0,2)
</if>
<if
test=
"status != null and status != -1"
>
...
...
xx-vehicle/xx-vehicle-api/src/main/java/com/xxfc/platform/vehicle/pojo/VehicleBookRecordQueryVo.java
View file @
b3928fe8
...
...
@@ -18,6 +18,11 @@ public class VehicleBookRecordQueryVo extends PageParam {
*/
private
String
numberPlate
;
/**
* 车牌和车辆编号的关键字
*/
private
String
keywords
;
/**
* 所属分支机构(id)
*/
...
...
xx-vehicle/xx-vehicle-api/src/main/java/com/xxfc/platform/vehicle/pojo/dto/VehiclePlanDto.java
View file @
b3928fe8
...
...
@@ -44,6 +44,8 @@ public class VehiclePlanDto extends PageParam {
*/
private
Integer
useType
;
private
String
keywords
;
/**
* 车型id
*/
...
...
xx-vehicle/xx-vehicle-server/src/main/java/com/xxfc/platform/vehicle/biz/VehicleBiz.java
View file @
b3928fe8
...
...
@@ -643,7 +643,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
if
(
vehicleBookRecord
==
null
)
{
return
RestResponse
.
codeAndMessage
(
ResCode
.
VEHICLE_BOOK_RECORD_IS_NOT_EXIST
.
getCode
(),
ResCode
.
VEHICLE_BOOK_RECORD_IS_NOT_EXIST
.
getDesc
());
}
//已通过审核的可以取消预定
//
//已通过审核的可以取消预定
// if (!VehicleBookRecordStatus.APPROVE.getCode().equals(vehicleBookRecord.getStatus())) {
// return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
// }
...
...
xx-vehicle/xx-vehicle-server/src/main/resources/mapper/VehicleBookRecordMapper.xml
View file @
b3928fe8
...
...
@@ -478,6 +478,9 @@
<if
test=
"bookType != null"
>
and v1.book_type = #{bookType}
</if>
<if
test=
"keywords != null and keywords != ''"
>
and (v3.code like concat("%", #{keywords},"%") or v3.number_plate like concat("%", #{keywords},"%"))
</if>
<if
test=
"companyIds != null and companyIds.size > 0"
>
and (v1.lift_company in
<foreach
collection=
"companyIds"
item=
"id"
open=
"("
separator=
","
close=
")"
>
...
...
xx-vehicle/xx-vehicle-server/src/main/resources/mapper/VehicleMapper.xml
View file @
b3928fe8
...
...
@@ -418,6 +418,9 @@
<if
test=
"code != null and code != ''"
>
and v1.code = #{code}
</if>
<if
test=
"keywords != null and keywords != ''"
>
and (v1.code like concat("%", #{keywords},"%") or v1.number_plate like concat("%", #{keywords},"%"))
</if>
<if
test=
"companyIds != null and companyIds.size > 0"
>
and v1.park_branch_company_id in
<foreach
collection=
"companyIds"
item=
"id"
open=
"("
separator=
","
close=
")"
>
...
...
@@ -482,9 +485,6 @@
<if
test=
"status != null"
>
and v1.status = #{status}
</if>
<if
test=
"code !=null"
>
and v1.code=#{code}
</if>
<if
test=
"companyIds != null and companyIds.size > 0"
>
and v1.park_branch_company_id in
<foreach
collection=
"companyIds"
item=
"id"
open=
"("
separator=
","
close=
")"
>
...
...
@@ -508,9 +508,6 @@
<if
test=
"status != null"
>
and v2.status = #{status}
</if>
<if
test=
"code !=null"
>
and v2.code=#{code}
</if>
<if
test=
"companyIds != null and companyIds.size > 0"
>
and v2.park_branch_company_id in
<foreach
collection=
"companyIds"
item=
"id"
open=
"("
separator=
","
close=
")"
>
...
...
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