Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Q
qk_backend
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
quanku
qk_backend
Commits
19b13468
Commit
19b13468
authored
Jan 05, 2024
by
shiyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
后台新增寄售退回功能
parent
2308b6ef
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
788 additions
and
64 deletions
+788
-64
ch-admin-api/src/main/java/com/wwdz/ch/admin/config/ShiroConfig.java
...i/src/main/java/com/wwdz/ch/admin/config/ShiroConfig.java
+1
-0
ch-admin-api/src/main/java/com/wwdz/ch/admin/controller/ReturnOrderController.java
...a/com/wwdz/ch/admin/controller/ReturnOrderController.java
+72
-0
ch-admin-api/src/main/java/com/wwdz/ch/admin/entity/vo/ReturnOrderDetailVo.java
...java/com/wwdz/ch/admin/entity/vo/ReturnOrderDetailVo.java
+74
-0
ch-admin-api/src/main/java/com/wwdz/ch/admin/entity/vo/ReturnOrderRecordVo.java
...java/com/wwdz/ch/admin/entity/vo/ReturnOrderRecordVo.java
+37
-0
ch-admin-api/src/main/java/com/wwdz/ch/admin/impl/ConsignSaleServiceImpl.java
...n/java/com/wwdz/ch/admin/impl/ConsignSaleServiceImpl.java
+1
-1
ch-admin-api/src/main/java/com/wwdz/ch/admin/impl/ReturnOrderServiceImpl.java
...n/java/com/wwdz/ch/admin/impl/ReturnOrderServiceImpl.java
+316
-0
ch-admin-api/src/main/java/com/wwdz/ch/admin/service/ReturnOrderService.java
...in/java/com/wwdz/ch/admin/service/ReturnOrderService.java
+36
-0
ch-core/src/main/java/com/wwdz/ch/core/consts/ReturnOrderEnum.java
...rc/main/java/com/wwdz/ch/core/consts/ReturnOrderEnum.java
+5
-6
ch-core/src/main/java/com/wwdz/ch/core/entity/ReturnOrderVo.java
.../src/main/java/com/wwdz/ch/core/entity/ReturnOrderVo.java
+25
-0
ch-dao/src/main/java/com/wwdz/ch/db/dao/ReturnOrderDao.java
ch-dao/src/main/java/com/wwdz/ch/db/dao/ReturnOrderDao.java
+1
-0
ch-dao/src/main/java/com/wwdz/ch/db/domain/UserVo.java
ch-dao/src/main/java/com/wwdz/ch/db/domain/UserVo.java
+1
-0
ch-wx-api/src/main/java/com/wwdz/ch/wx/config/WebMvcConfiguration.java
.../main/java/com/wwdz/ch/wx/config/WebMvcConfiguration.java
+2
-1
ch-wx-api/src/main/java/com/wwdz/ch/wx/entity/vo/ReturnOrderAppletVo.java
...in/java/com/wwdz/ch/wx/entity/vo/ReturnOrderAppletVo.java
+5
-0
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/ConsignSaleServiceImpl.java
...main/java/com/wwdz/ch/wx/impl/ConsignSaleServiceImpl.java
+31
-8
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/ReturnOrderServiceImpl.java
...main/java/com/wwdz/ch/wx/impl/ReturnOrderServiceImpl.java
+134
-40
ch-wx-api/src/main/java/com/wwdz/ch/wx/service/ReturnOrderService.java
.../main/java/com/wwdz/ch/wx/service/ReturnOrderService.java
+17
-0
ch-wx-api/src/main/java/com/wwdz/ch/wx/web/ReturnOrderController.java
...c/main/java/com/wwdz/ch/wx/web/ReturnOrderController.java
+25
-8
ch-wx-api/src/test/java/com/wwdz/ch/wx/impl/UserAddressServiceTest.java
...test/java/com/wwdz/ch/wx/impl/UserAddressServiceTest.java
+5
-0
No files found.
ch-admin-api/src/main/java/com/wwdz/ch/admin/config/ShiroConfig.java
View file @
19b13468
...
@@ -118,6 +118,7 @@ public class ShiroConfig {
...
@@ -118,6 +118,7 @@ public class ShiroConfig {
filterChainDefinitionMap
.
put
(
"/admin/sysAiAssistant/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/sysAiAssistant/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/sysIMRecord/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/sysIMRecord/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/consignSaleManage/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/consignSaleManage/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/returnOrderManage/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/invitationCode/**"
,
"anon"
);
filterChainDefinitionMap
.
put
(
"/admin/invitationCode/**"
,
"anon"
);
// filterChainDefinitionMap.put("/admin/**", "anon");
// filterChainDefinitionMap.put("/admin/**", "anon");
...
...
ch-admin-api/src/main/java/com/wwdz/ch/admin/controller/ReturnOrderController.java
0 → 100644
View file @
19b13468
package
com.wwdz.ch.admin.controller
;
import
com.alibaba.fastjson.JSON
;
import
com.wwdz.ch.admin.service.ConsignSaleService
;
import
com.wwdz.ch.admin.service.ReturnOrderService
;
import
com.wwdz.ch.core.consts.ResultCode
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRecordRequestDto
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRequestDto
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
import
com.xxdxxs.service.FormHandler
;
import
com.xxdxxs.utils.StringUtils
;
import
com.xxdxxs.validation.Validator
;
import
io.swagger.annotations.ApiOperation
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* 退货单
*/
@RestController
@RequestMapping
(
"/admin/returnOrderManage"
)
public
class
ReturnOrderController
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ReturnOrderController
.
class
);
@Autowired
ReturnOrderService
returnOrderService
;
@ApiOperation
(
value
=
"查询退货单"
)
@PostMapping
(
"/findList"
)
public
Result
findList
(
@RequestBody
ReturnOrderRequestDto
dto
)
{
logger
.
info
(
"【请求开始】查询退货单,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
return
returnOrderService
.
findList
(
dto
);
}
@ApiOperation
(
value
=
"查询退货单详情"
)
@PostMapping
(
"/findDetail"
)
public
Result
findDetail
(
@RequestBody
ReturnOrderRequestDto
dto
)
{
logger
.
info
(
"【请求开始】查询退货单详情,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
validator
.
set
(
"returnOrderId"
,
"退货单号"
).
must
().
string
()
.
end
();
if
(!
validator
.
isValid
())
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
.
getCode
(),
validator
.
getErrorInfo
());
}
return
returnOrderService
.
findDetail
(
dto
);
}
@ApiOperation
(
value
=
"平台寄出商品"
)
@PostMapping
(
"/send"
)
public
Result
send
(
@RequestBody
ReturnOrderRequestDto
dto
)
{
logger
.
info
(
"【请求开始】平台寄出商品,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
validator
.
set
(
"logisticsCode"
,
"快递公司编码"
).
must
().
string
()
.
set
(
"waybill"
,
"运单号"
).
must
().
string
()
.
set
(
"returnOrderId"
,
"退货单号"
).
must
().
string
()
.
end
();
if
(!
validator
.
isValid
())
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
.
getCode
(),
validator
.
getErrorInfo
());
}
return
returnOrderService
.
send
(
dto
);
}
}
ch-admin-api/src/main/java/com/wwdz/ch/admin/entity/vo/ReturnOrderDetailVo.java
0 → 100644
View file @
19b13468
package
com.wwdz.ch.admin.entity.vo
;
import
com.wwdz.ch.db.domain.UserVo
;
import
com.xxdxxs.entity.Entity
;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.List
;
@Data
public
class
ReturnOrderDetailVo
implements
Entity
{
/**
* 退货单号
*/
private
String
returnOrderId
;
/**
* 对应寄售单号
*/
private
String
consignSaledId
;
/**
* 退货单状态
*/
private
Integer
state
;
/**
* 退货单状态
*/
private
String
stateName
;
/**
* 取消寄售的时间
*/
private
Date
cancelTime
;
/**
* 取消寄售类型
*/
private
Integer
cancelType
;
/**
* 取消寄售类型
*/
private
String
cancelTypeName
;
/**
* 取消寄售原因
*/
private
String
remark
;
/**
* 货品信息
*/
private
CoinVo
itemVo
;
/**
* 是否已经寄回
*/
private
Boolean
isSended
;
/**
* 退货单时间线信息
*/
private
List
<
ReturnOrderRecordVo
>
returnOrderRecordVoList
;
/**
* 发布人信息
*/
private
UserVo
userVo
;
}
ch-admin-api/src/main/java/com/wwdz/ch/admin/entity/vo/ReturnOrderRecordVo.java
0 → 100644
View file @
19b13468
package
com.wwdz.ch.admin.entity.vo
;
import
com.xxdxxs.entity.Entity
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
ReturnOrderRecordVo
implements
Entity
{
/**
* 退货单
*/
private
String
saleId
;
/**
* 操作时间
*/
private
Date
createTime
;
/**
* 操作内容
*/
private
String
content
;
/**
* 操作理由或成交平台
*/
private
String
remark
;
/**
* 操作类型
*/
private
Integer
type
;
private
String
typeName
;
}
ch-admin-api/src/main/java/com/wwdz/ch/admin/impl/ConsignSaleServiceImpl.java
View file @
19b13468
...
@@ -326,7 +326,7 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
...
@@ -326,7 +326,7 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
consignSaleRecordDao
.
insert
(
dto
.
getSaleId
(),
""
,
ConsignSaleEnum
.
OperateTypeEnum
.
CONFIRM_RECEIVE
.
getCode
(),
null
);
consignSaleRecordDao
.
insert
(
dto
.
getSaleId
(),
""
,
ConsignSaleEnum
.
OperateTypeEnum
.
CONFIRM_RECEIVE
.
getCode
(),
null
);
return
Result
.
success
();
return
Result
.
success
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
info
(
"用户寄出商品 error : {}"
,
e
);
logger
.
info
(
"
平台确认签收
用户寄出商品 error : {}"
,
e
);
}
}
return
Result
.
failed
();
return
Result
.
failed
();
}
}
...
...
ch-admin-api/src/main/java/com/wwdz/ch/admin/impl/ReturnOrderServiceImpl.java
0 → 100644
View file @
19b13468
package
com.wwdz.ch.admin.impl
;
import
com.alibaba.dubbo.config.annotation.Reference
;
import
com.github.pagehelper.PageInfo
;
import
com.wwdz.ch.admin.entity.vo.*
;
import
com.wwdz.ch.admin.service.ItemService
;
import
com.wwdz.ch.admin.service.ReturnOrderService
;
import
com.wwdz.ch.core.consts.ConsignSaleEnum
;
import
com.wwdz.ch.core.consts.LogisticsEnum
;
import
com.wwdz.ch.core.consts.ReturnOrderEnum
;
import
com.wwdz.ch.core.entity.ReturnOrderVo
;
import
com.wwdz.ch.core.type.PageSearchResult
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.util.CacheUtil
;
import
com.wwdz.ch.core.util.MediaUtil
;
import
com.wwdz.ch.core.util.PriceUtil
;
import
com.wwdz.ch.db.dao.ConsignSaleRecordDao
;
import
com.wwdz.ch.db.dao.ItemDao
;
import
com.wwdz.ch.db.dao.ReturnOrderDao
;
import
com.wwdz.ch.db.dao.ReturnOrderRecordDao
;
import
com.wwdz.ch.db.domain.*
;
import
com.wwdz.ch.db.dto.request.CoinRequestDto
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
import
com.wwdz.mall.common.vo.response.CloudServerResponse
;
import
com.wwdz.user.api.dto.res.address.UserAddressDTO
;
import
com.wwdz.user.api.service.address.UserAddressReadService
;
import
com.xxdxxs.utils.EntityMapper
;
import
com.xxdxxs.utils.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
org.springframework.util.CollectionUtils
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
@Service
public
class
ReturnOrderServiceImpl
implements
ReturnOrderService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ReturnOrderServiceImpl
.
class
);
@Autowired
ReturnOrderDao
returnOrderDao
;
@Autowired
ReturnOrderRecordDao
returnOrderRecordDao
;
@Autowired
ItemDao
itemDao
;
@Reference
UserAddressReadService
userAddressReadService
;
@Autowired
ConsignSaleRecordDao
consignSaleRecordDao
;
@Autowired
CacheUtil
cacheUtil
;
@Autowired
ItemService
itemService
;
@Override
public
Result
findList
(
ReturnOrderRequestDto
dto
)
{
try
{
//检查退货单商品寄出是否超过7天未确认,只检查一页的数据,并非全量数据
checkTimeOutForReturnSigned
();
List
<
ReturnOrder
>
list
=
returnOrderDao
.
findByPage
(
dto
);
PageInfo
<
ReturnOrder
>
pageInfo
=
new
PageInfo
<>(
list
);
if
(
CollectionUtils
.
isEmpty
(
list
))
{
return
Result
.
success
();
}
List
<
Long
>
itemIds
=
list
.
stream
().
map
(
ReturnOrder:
:
getItemId
).
collect
(
Collectors
.
toList
());
//查询商品的信息
List
<
Item
>
itemList
=
itemDao
.
findDetails
(
itemIds
);
Map
<
Long
,
Item
>
itemMap
=
itemList
.
stream
().
collect
(
Collectors
.
toMap
(
Item:
:
getId
,
Function
.
identity
()));
List
<
ReturnOrderVo
>
returnOrderVos
=
new
ArrayList
<>();
list
.
forEach
(
returnOrder
->
{
Item
item
=
itemMap
.
get
(
returnOrder
.
getItemId
());
ReturnOrderVo
returnOrderVo
=
new
ReturnOrderVo
();
if
(
StringUtils
.
hasLength
(
item
.
getImages
()))
{
String
[]
image
=
item
.
getImages
().
split
(
";"
);
returnOrderVo
.
setItemImg
(
image
[
0
]);
}
//查询退货单节点
String
returnOrderId
=
returnOrder
.
getReturnOrderId
();
List
<
ReturnOrderRecord
>
returnOrderRecordList
=
returnOrderRecordDao
.
findByReturnOrderId
(
returnOrderId
);
//查询addressId对应地址
CloudServerResponse
<
UserAddressDTO
>
cloudServerResponse
=
userAddressReadService
.
getAddressByAddressId
(
returnOrder
.
getAddressId
());
//成功的code = 1001
if
(
cloudServerResponse
.
getCode
()
==
1001
&&
cloudServerResponse
.
getResult
()
!=
null
)
{
UserAddressDTO
userAddressDTO
=
cloudServerResponse
.
getResult
();
StringBuffer
stringBuffer
=
new
StringBuffer
();
stringBuffer
.
append
(
userAddressDTO
.
getUserName
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getUserPhone
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getArea
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getAddress
());
returnOrderVo
.
setReturnAddress
(
stringBuffer
.
toString
());
}
returnOrderVo
.
setSaleId
(
returnOrder
.
getSaleId
());
returnOrderVo
.
setHomePageImage
(
MediaUtil
.
getHomePageImage
(
item
.
getImages
(),
item
.
getVideos
()));
returnOrderVo
.
setItemName
(
item
.
getName
());
returnOrderVo
.
setState
(
returnOrder
.
getState
());
returnOrderVo
.
setStateName
(
ReturnOrderEnum
.
StateEnum
.
getNameByCode
(
returnOrder
.
getState
()));
//设置取消寄售的时间
List
<
ConsignSaleRecord
>
consignSaleRecordList
=
consignSaleRecordDao
.
find
(
returnOrder
.
getSaleId
());
List
<
Integer
>
cancelTypes
=
Arrays
.
asList
(
ConsignSaleEnum
.
OperateTypeEnum
.
SYS_CANCEL
.
getCode
(),
ConsignSaleEnum
.
OperateTypeEnum
.
CUSTOM_CANCEL
.
getCode
(),
ConsignSaleEnum
.
OperateTypeEnum
.
TIME_OUT_CANCEL
.
getCode
());
ConsignSaleRecord
consignSaleRecord
=
consignSaleRecordList
.
stream
().
filter
(
record
->
cancelTypes
.
contains
(
record
.
getType
())).
findFirst
().
orElse
(
null
);
returnOrderVo
.
setCancelTime
(
consignSaleRecord
.
getCreateTime
());
//设置物流信息
returnOrderVo
.
setLogisticsCode
(
returnOrder
.
getLogisticsCode
());
returnOrderVo
.
setLogisticsName
(
LogisticsEnum
.
getNameByCode
(
returnOrder
.
getLogisticsCode
()));
returnOrderVo
.
setWaybill
(
returnOrder
.
getWaybill
());
if
(
returnOrder
.
getState
()
==
ReturnOrderEnum
.
StateEnum
.
FINISH
.
getCode
())
{
List
<
Integer
>
operateType
=
returnOrderRecordList
.
stream
().
map
(
ReturnOrderRecord:
:
getType
).
collect
(
Collectors
.
toList
());
if
(
operateType
.
contains
(
ReturnOrderEnum
.
OperateTypeEnum
.
USER_SIGNED
.
getCode
()))
{
returnOrderVo
.
setSignedType
(
ReturnOrderEnum
.
OperateTypeEnum
.
USER_SIGNED
.
getCode
());
returnOrderVo
.
setSignedTypeName
(
"用户确认"
);
returnOrderVo
.
setRemark
(
"用户确认"
);
}
else
{
returnOrderVo
.
setSignedType
(
ReturnOrderEnum
.
OperateTypeEnum
.
SYSTEM_SIGNED
.
getCode
());
returnOrderVo
.
setSignedTypeName
(
"超时系统自动确认"
);
returnOrderVo
.
setRemark
(
"超时系统自动确认"
);
}
}
returnOrderVos
.
add
(
returnOrderVo
);
});
PageSearchResult
pageSearchResult
=
PageSearchResult
.
of
(
pageInfo
,
returnOrderVos
);
return
Result
.
success
(
pageSearchResult
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"查询寄售单列表 error:{}"
,
e
);
}
return
Result
.
failed
();
}
@Override
public
Result
findDetail
(
ReturnOrderRequestDto
dto
)
{
try
{
//检查退货单是否确认签收超时
checkConfirmSignedTimeOut
(
dto
.
getReturnOrderId
());
ReturnOrderDetailVo
returnOrderDetailVo
=
new
ReturnOrderDetailVo
();
ReturnOrder
returnOrder
=
returnOrderDao
.
findById
(
dto
.
getReturnOrderId
());
returnOrderDetailVo
.
setReturnOrderId
(
dto
.
getReturnOrderId
());
long
itemId
=
returnOrder
.
getItemId
();
CoinRequestDto
coinRequestDto
=
new
CoinRequestDto
();
coinRequestDto
.
setId
(
itemId
);
Result
<
CoinVo
>
itemResult
=
itemService
.
findDetails
(
coinRequestDto
);
if
(!
itemResult
.
getSuccess
())
{
return
itemResult
;
}
long
userId
=
returnOrder
.
getUserId
();
User
user
=
cacheUtil
.
getAppletUsers
(
userId
);
UserVo
userVo
=
new
UserVo
();
userVo
.
setNickname
(
user
.
getNickname
());
userVo
.
setPhone
(
user
.
getMobile
());
//查询addressId对应地址
CloudServerResponse
<
UserAddressDTO
>
cloudServerResponse
=
userAddressReadService
.
getAddressByAddressId
(
returnOrder
.
getAddressId
());
//成功的code = 1001
if
(
cloudServerResponse
.
getCode
()
==
1001
&&
cloudServerResponse
.
getResult
()
!=
null
)
{
UserAddressDTO
userAddressDTO
=
cloudServerResponse
.
getResult
();
StringBuffer
stringBuffer
=
new
StringBuffer
();
stringBuffer
.
append
(
userAddressDTO
.
getUserName
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getUserPhone
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getArea
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getAddress
());
userVo
.
setAddress
(
stringBuffer
.
toString
());
}
returnOrderDetailVo
.
setUserVo
(
userVo
);
returnOrderDetailVo
.
setConsignSaledId
(
returnOrder
.
getSaleId
());
returnOrderDetailVo
.
setState
(
returnOrder
.
getState
());
returnOrderDetailVo
.
setStateName
(
ReturnOrderEnum
.
StateEnum
.
getNameByCode
(
returnOrder
.
getState
()));
returnOrderDetailVo
.
setItemVo
(
itemResult
.
getData
());
//查询寄售单取消类型和理由
List
<
ConsignSaleRecord
>
consignSaleRecords
=
consignSaleRecordDao
.
find
(
returnOrder
.
getSaleId
());
List
<
Integer
>
cancelTypes
=
Arrays
.
asList
(
ConsignSaleEnum
.
OperateTypeEnum
.
SYS_CANCEL
.
getCode
(),
ConsignSaleEnum
.
OperateTypeEnum
.
CUSTOM_CANCEL
.
getCode
(),
ConsignSaleEnum
.
OperateTypeEnum
.
TIME_OUT_CANCEL
.
getCode
());
ConsignSaleRecord
consignSaleRecord
=
consignSaleRecords
.
stream
().
filter
(
record
->
cancelTypes
.
contains
(
record
.
getType
())).
findFirst
().
orElse
(
null
);
returnOrderDetailVo
.
setCancelTime
(
consignSaleRecord
.
getCreateTime
());
returnOrderDetailVo
.
setCancelType
(
consignSaleRecord
.
getType
());
returnOrderDetailVo
.
setCancelTypeName
(
consignSaleRecord
.
getContent
());
returnOrderDetailVo
.
setRemark
(
consignSaleRecord
.
getRemark
());
//查询退货单操作信息
List
<
ReturnOrderRecord
>
returnOrderRecords
=
returnOrderRecordDao
.
findByReturnOrderId
(
dto
.
getReturnOrderId
());
List
<
ReturnOrderRecordVo
>
returnOrderRecordVoList
=
new
ArrayList
<>();
//加入初始节点-取消寄售
ReturnOrderRecordVo
firstRecordVo
=
new
ReturnOrderRecordVo
();
firstRecordVo
.
setCreateTime
(
consignSaleRecord
.
getCreateTime
());
firstRecordVo
.
setTypeName
(
"取消寄售"
);
firstRecordVo
.
setContent
(
consignSaleRecord
.
getContent
()
+
";"
+
consignSaleRecord
.
getRemark
());
returnOrderRecordVoList
.
add
(
firstRecordVo
);
returnOrderRecords
.
forEach
(
returnOrderRecord
->
{
ReturnOrderRecordVo
returnOrderRecordVo
=
new
ReturnOrderRecordVo
();
EntityMapper
.
copyAttribute
(
returnOrderRecord
,
returnOrderRecordVo
);
returnOrderRecordVo
.
setTypeName
(
ReturnOrderEnum
.
OperateTypeEnum
.
getNameByCode
(
returnOrderRecord
.
getType
()));
returnOrderRecordVoList
.
add
(
returnOrderRecordVo
);
});
returnOrderDetailVo
.
setReturnOrderRecordVoList
(
returnOrderRecordVoList
);
return
Result
.
success
(
returnOrderDetailVo
);
}
catch
(
Exception
e
)
{
logger
.
info
(
"查询退货单详情error:{}"
,
e
);
}
return
Result
.
failed
();
}
@Override
public
Result
send
(
ReturnOrderRequestDto
dto
)
{
try
{
//平台寄出要退回的商品,状态改为已寄出
ReturnOrder
returnOrder
=
new
ReturnOrder
();
returnOrder
.
setReturnOrderId
(
dto
.
getReturnOrderId
());
returnOrder
.
setLogisticsCode
(
dto
.
getLogisticsCode
());
returnOrder
.
setWaybill
(
dto
.
getWaybill
());
returnOrder
.
setState
(
ReturnOrderEnum
.
StateEnum
.
SENDED
.
getCode
());
returnOrderDao
.
update
(
returnOrder
);
//插入操作记录
StringBuffer
stringBuffer
=
new
StringBuffer
();
stringBuffer
.
append
(
"平台寄出,"
);
stringBuffer
.
append
(
"物流公司:"
);
stringBuffer
.
append
(
LogisticsEnum
.
getNameByCode
(
dto
.
getLogisticsCode
())
+
"; "
);
stringBuffer
.
append
(
"快递单号:"
);
stringBuffer
.
append
(
dto
.
getWaybill
());
returnOrderRecordDao
.
insert
(
dto
.
getReturnOrderId
(),
stringBuffer
.
toString
(),
ReturnOrderEnum
.
OperateTypeEnum
.
SEND_RETURN
.
getCode
(),
null
);
return
Result
.
success
();
}
catch
(
Exception
e
)
{
logger
.
info
(
"平台寄回商品 error : {}"
,
e
);
}
return
Result
.
failed
();
}
/**
* 退货发出超过7天,系统默认已签收
*/
private
void
checkTimeOutForReturnSigned
()
{
//查询商品已寄出的退货单
ReturnOrderRequestDto
returnOrderRequestDto
=
new
ReturnOrderRequestDto
();
returnOrderRequestDto
.
setState
(
ReturnOrderEnum
.
StateEnum
.
SENDED
.
getCode
());
List
<
ReturnOrder
>
waitConfirmList
=
returnOrderDao
.
findByPage
(
returnOrderRequestDto
);
for
(
ReturnOrder
returnOrder
:
waitConfirmList
)
{
//查询退货寄回的时间
ReturnOrderRecord
returnOrderRecord
=
returnOrderRecordDao
.
findByType
(
returnOrder
.
getReturnOrderId
(),
ReturnOrderEnum
.
OperateTypeEnum
.
SEND_RETURN
.
getCode
());
Date
startTime
=
returnOrderRecord
.
getCreateTime
();
Date
endTime
=
new
Date
();
long
diffInMillies
=
Math
.
abs
(
endTime
.
getTime
()
-
startTime
.
getTime
());
long
diffInHours
=
diffInMillies
/
(
60
*
60
*
1000
);
if
(
diffInHours
>=
(
24
*
7
))
{
//超时未签收
timeOutSystemSigned
(
returnOrder
.
getReturnOrderId
());
logger
.
info
(
">>>>>> 退货单号: {} 退货发出超过7天,系统默认已签收,更改退货单状态为已完成,并记录操作节点 <<<<<<<"
,
returnOrder
.
getReturnOrderId
());
}
}
}
/**
* 确认超时系统默认签收
* @param returnOrderId
* @return
*/
@Transactional
public
Result
timeOutSystemSigned
(
String
returnOrderId
)
{
try
{
ReturnOrder
returnOrder
=
new
ReturnOrder
();
returnOrder
.
setReturnOrderId
(
returnOrderId
);
returnOrder
.
setState
(
ReturnOrderEnum
.
StateEnum
.
FINISH
.
getCode
());
returnOrderDao
.
update
(
returnOrder
);
//寄出超过7天,系统默认签收
returnOrderRecordDao
.
insert
(
returnOrderId
,
"用户未确认,超过7天系统自动确认收货"
,
ReturnOrderEnum
.
OperateTypeEnum
.
SYSTEM_SIGNED
.
getCode
(),
""
);
return
Result
.
success
();
}
catch
(
Exception
e
)
{
logger
.
error
(
"用户未确认,超过7天系统自动确认收货 error : {}"
,
e
);
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
}
return
Result
.
failed
();
}
/**
* 检查该退货单是否寄出确认收货超时
* @param returnOrderId
*/
private
void
checkConfirmSignedTimeOut
(
String
returnOrderId
){
//查询退货单
ReturnOrder
returnOrder
=
returnOrderDao
.
findById
(
returnOrderId
);
if
(
returnOrder
.
getState
()
==
ReturnOrderEnum
.
StateEnum
.
SENDED
.
getCode
())
{
ReturnOrderRecord
returnOrderRecord
=
returnOrderRecordDao
.
findByType
(
returnOrderId
,
ReturnOrderEnum
.
OperateTypeEnum
.
SEND_RETURN
.
getCode
());
if
(
returnOrderRecord
!=
null
&&
returnOrderRecord
.
getCreateTime
()
!=
null
)
{
Date
startTime
=
returnOrderRecord
.
getCreateTime
();
Date
endTime
=
new
Date
();
long
diffInMillies
=
Math
.
abs
(
endTime
.
getTime
()
-
startTime
.
getTime
());
long
diffInHours
=
diffInMillies
/
(
60
*
60
*
1000
);
if
(
diffInHours
>=
(
24
*
7
))
{
timeOutSystemSigned
(
returnOrderId
);
logger
.
info
(
">>>>>> 检测到退货单号:{} 寄出待用户确认收货超时,更改退货单状态为已完成,并记录操作节点 <<<<<<<"
,
returnOrderId
);
}
}
}
}
}
ch-admin-api/src/main/java/com/wwdz/ch/admin/service/ReturnOrderService.java
0 → 100644
View file @
19b13468
package
com.wwdz.ch.admin.service
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRecordRequestDto
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRequestDto
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
public
interface
ReturnOrderService
{
/**
* 查询退货单
* @param dto
* @return
*/
Result
findList
(
ReturnOrderRequestDto
dto
);
/**
* 查询退货单详情
* @param dto
* @return
*/
Result
findDetail
(
ReturnOrderRequestDto
dto
);
/**
/**
* 寄出退货商品
* @param dto
* @return
*/
Result
send
(
ReturnOrderRequestDto
dto
);
}
ch-core/src/main/java/com/wwdz/ch/core/consts/ReturnOrderEnum.java
View file @
19b13468
...
@@ -7,7 +7,7 @@ public class ReturnOrderEnum {
...
@@ -7,7 +7,7 @@ public class ReturnOrderEnum {
*/
*/
public
enum
StateEnum
{
public
enum
StateEnum
{
WAIT_RETURN
(
10
,
"待退回"
),
WAIT_RETURN
(
10
,
"待退回"
),
OUTBOUND
(
20
,
"已出库
"
),
SENDED
(
20
,
"已寄出
"
),
FINISH
(
30
,
"完成退货"
),
FINISH
(
30
,
"完成退货"
),
;
;
...
@@ -20,10 +20,9 @@ public class ReturnOrderEnum {
...
@@ -20,10 +20,9 @@ public class ReturnOrderEnum {
}
}
public
static
String
getNameByCode
(
int
code
)
{
public
static
String
getNameByCode
(
int
code
)
{
for
(
ReturnOrderEnum
.
StateEnum
stateEnum
:
ReturnOrderEnum
.
StateEnum
.
values
())
{
for
(
ConsignSaleEnum
.
SaleForUserStateEnum
saleForUserStateEnum
:
ConsignSaleEnum
.
SaleForUserStateEnum
.
values
())
{
if
(
code
==
stateEnum
.
getCode
())
{
if
(
code
==
saleForUserStateEnum
.
getCode
())
{
return
stateEnum
.
getDes
();
return
saleForUserStateEnum
.
getDes
();
}
}
}
}
return
null
;
return
null
;
...
@@ -61,7 +60,7 @@ public class ReturnOrderEnum {
...
@@ -61,7 +60,7 @@ public class ReturnOrderEnum {
}
}
public
static
String
getNameByCode
(
int
code
)
{
public
static
String
getNameByCode
(
int
code
)
{
for
(
ConsignSaleEnum
.
OperateTypeEnum
operateTypeEnum
:
ConsignSale
Enum
.
OperateTypeEnum
.
values
())
{
for
(
ReturnOrderEnum
.
OperateTypeEnum
operateTypeEnum
:
ReturnOrder
Enum
.
OperateTypeEnum
.
values
())
{
if
(
code
==
operateTypeEnum
.
getCode
())
{
if
(
code
==
operateTypeEnum
.
getCode
())
{
return
operateTypeEnum
.
getDes
();
return
operateTypeEnum
.
getDes
();
}
}
...
...
ch-core/src/main/java/com/wwdz/ch/core/entity/ReturnOrderVo.java
View file @
19b13468
...
@@ -58,6 +58,11 @@ public class ReturnOrderVo implements Entity {
...
@@ -58,6 +58,11 @@ public class ReturnOrderVo implements Entity {
*/
*/
private
Date
createTime
;
private
Date
createTime
;
/**
* 取消寄售的时间
*/
private
Date
cancelTime
;
/**
/**
* 原因
* 原因
...
@@ -78,4 +83,24 @@ public class ReturnOrderVo implements Entity {
...
@@ -78,4 +83,24 @@ public class ReturnOrderVo implements Entity {
* 快递单号
* 快递单号
*/
*/
private
String
waybill
;
private
String
waybill
;
/**
* 是否已经寄出快递
*/
private
Boolean
isSended
;
/**
* 退货地址
*/
private
String
returnAddress
;
/**
* 签收类型
*/
private
Integer
signedType
;
/**
* 签收类型
*/
private
String
signedTypeName
;
}
}
ch-dao/src/main/java/com/wwdz/ch/db/dao/ReturnOrderDao.java
View file @
19b13468
...
@@ -52,4 +52,5 @@ public interface ReturnOrderDao {
...
@@ -52,4 +52,5 @@ public interface ReturnOrderDao {
*/
*/
long
countByState
(
long
userId
,
List
<
Integer
>
filterStates
);
long
countByState
(
long
userId
,
List
<
Integer
>
filterStates
);
}
}
ch-dao/src/main/java/com/wwdz/ch/db/domain/UserVo.java
View file @
19b13468
...
@@ -8,5 +8,6 @@ public class UserVo implements Entity {
...
@@ -8,5 +8,6 @@ public class UserVo implements Entity {
private
String
nickname
;
private
String
nickname
;
private
String
avatar
;
private
String
avatar
;
private
String
phone
;
private
String
phone
;
private
String
address
;
}
}
ch-wx-api/src/main/java/com/wwdz/ch/wx/config/WebMvcConfiguration.java
View file @
19b13468
...
@@ -41,7 +41,8 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
...
@@ -41,7 +41,8 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
,
"/wx/user/loginByWx"
,
"/wx/user/finishLogin"
,
"/wx/user/loginByMobile"
,
"/wx/user/loginRegCaptcha"
,
"/wx/user/updateRegCaptcha"
,
"/wx/user/login"
,
"/wx/user/fillCode"
,
,
"/wx/user/loginByWx"
,
"/wx/user/finishLogin"
,
"/wx/user/loginByMobile"
,
"/wx/user/loginRegCaptcha"
,
"/wx/user/updateRegCaptcha"
,
"/wx/user/login"
,
"/wx/user/fillCode"
,
"/officialAccountCallback/**"
,
"/officialAccountCallback/**"
,
"/imCallback/**"
,
"/wx/category/**"
,
"/imCallback/**"
,
"/wx/category/**"
,
"/wx/consignSale/**"
,
"/wx/item/**"
"/wx/consignSale/**"
,
"/wx/item/**"
,
"/wx/returnOrder/**"
/* "/wx/officialAccount/**",
/* "/wx/officialAccount/**",
"/wx/item/**",
"/wx/item/**",
"/wx/aiAssistant/**",
"/wx/aiAssistant/**",
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/entity/vo/ReturnOrderAppletVo.java
View file @
19b13468
...
@@ -82,6 +82,11 @@ public class ReturnOrderAppletVo implements Entity {
...
@@ -82,6 +82,11 @@ public class ReturnOrderAppletVo implements Entity {
*/
*/
private
Date
finishTime
;
private
Date
finishTime
;
/**
* 退货地址
*/
private
String
returnAddress
;
/**
/**
* 寄售单状态时间线
* 寄售单状态时间线
*/
*/
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/ConsignSaleServiceImpl.java
View file @
19b13468
...
@@ -13,19 +13,14 @@ import com.wwdz.ch.core.type.Result;
...
@@ -13,19 +13,14 @@ import com.wwdz.ch.core.type.Result;
import
com.wwdz.ch.core.util.IdUtils
;
import
com.wwdz.ch.core.util.IdUtils
;
import
com.wwdz.ch.core.util.MediaUtil
;
import
com.wwdz.ch.core.util.MediaUtil
;
import
com.wwdz.ch.core.util.RegexUtil
;
import
com.wwdz.ch.core.util.RegexUtil
;
import
com.wwdz.ch.db.dao.ConsignSaleDao
;
import
com.wwdz.ch.db.dao.*
;
import
com.wwdz.ch.db.dao.ConsignSaleRecordDao
;
import
com.wwdz.ch.db.domain.*
;
import
com.wwdz.ch.db.dao.ItemDao
;
import
com.wwdz.ch.db.dao.UserDao
;
import
com.wwdz.ch.db.domain.ConsignSale
;
import
com.wwdz.ch.db.domain.ConsignSaleRecord
;
import
com.wwdz.ch.db.domain.Item
;
import
com.wwdz.ch.db.domain.User
;
import
com.wwdz.ch.db.dto.request.CoinRequestDto
;
import
com.wwdz.ch.db.dto.request.CoinRequestDto
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRequestDto
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRequestDto
;
import
com.wwdz.ch.wx.entity.vo.AppletStateNodeVo
;
import
com.wwdz.ch.wx.entity.vo.AppletStateNodeVo
;
import
com.wwdz.ch.wx.entity.vo.ConsignSaleAppletVo
;
import
com.wwdz.ch.wx.entity.vo.ConsignSaleAppletVo
;
import
com.wwdz.ch.wx.service.ConsignSaleService
;
import
com.wwdz.ch.wx.service.ConsignSaleService
;
import
com.wwdz.ch.wx.service.ReturnOrderService
;
import
com.wwdz.user.api.service.user.UserReadService
;
import
com.wwdz.user.api.service.user.UserReadService
;
import
com.xxdxxs.utils.DateUtils
;
import
com.xxdxxs.utils.DateUtils
;
import
com.xxdxxs.utils.EntityMapper
;
import
com.xxdxxs.utils.EntityMapper
;
...
@@ -65,6 +60,12 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
...
@@ -65,6 +60,12 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
@Autowired
@Autowired
UserDao
userDao
;
UserDao
userDao
;
@Autowired
ReturnOrderService
returnOrderService
;
@Autowired
ReturnOrderRecordDao
returnOrderRecordDao
;
@Override
@Override
public
Result
createConsignSaleOrder
(
ConsignSaleRequestDto
dto
)
{
public
Result
createConsignSaleOrder
(
ConsignSaleRequestDto
dto
)
{
...
@@ -166,6 +167,13 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
...
@@ -166,6 +167,13 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
//超时未确认取消
//超时未确认取消
timeOutForCancel
(
dto
);
timeOutForCancel
(
dto
);
logger
.
info
(
">>>>>> 查询寄售单列表,检测到寄售单号:{} 实物鉴定超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<"
,
consignSale
.
getSaleId
());
logger
.
info
(
">>>>>> 查询寄售单列表,检测到寄售单号:{} 实物鉴定超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<"
,
consignSale
.
getSaleId
());
//创建退货单
ReturnOrder
returnOrder
=
new
ReturnOrder
();
returnOrder
.
setUserId
(
consignSale
.
getUserId
());
returnOrder
.
setItemId
(
consignSale
.
getItemId
());
returnOrder
.
setAddressId
(
consignSale
.
getAddressId
());
returnOrder
.
setSaleId
(
consignSale
.
getSaleId
());
returnOrderService
.
create
(
returnOrder
);
}
}
}
}
if
(
StringUtils
.
hasLength
(
dto
.
getSearchParam
()))
{
if
(
StringUtils
.
hasLength
(
dto
.
getSearchParam
()))
{
...
@@ -436,6 +444,14 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
...
@@ -436,6 +444,14 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
timeOutForCancel
(
dto
);
timeOutForCancel
(
dto
);
consignSaleRecordVo
.
setCustomState
(
ConsignSaleEnum
.
SaleForUserStateEnum
.
CANCEL
.
getCode
());
consignSaleRecordVo
.
setCustomState
(
ConsignSaleEnum
.
SaleForUserStateEnum
.
CANCEL
.
getCode
());
logger
.
info
(
">>>>>> 寄售单实物鉴定超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<"
);
logger
.
info
(
">>>>>> 寄售单实物鉴定超时未确认,更改寄售单状态为已取消,并记录操作节点 <<<<<<<"
);
//创建退货单
ReturnOrder
returnOrder
=
new
ReturnOrder
();
returnOrder
.
setUserId
(
consignSale
.
getUserId
());
returnOrder
.
setItemId
(
consignSale
.
getItemId
());
returnOrder
.
setAddressId
(
consignSale
.
getAddressId
());
returnOrder
.
setSaleId
(
consignSale
.
getSaleId
());
returnOrderService
.
create
(
returnOrder
);
logger
.
info
(
">>>>>> 寄售单实物鉴定超时未确认,取消寄售创建退货单 <<<<<<<"
);
}
else
{
}
else
{
logger
.
info
(
">>>>>> 寄售单号:{} , 查看实物鉴定详情,已是取消状态 <<<<<<<"
,
saleId
);
logger
.
info
(
">>>>>> 寄售单号:{} , 查看实物鉴定详情,已是取消状态 <<<<<<<"
,
saleId
);
}
}
...
@@ -570,6 +586,13 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
...
@@ -570,6 +586,13 @@ public class ConsignSaleServiceImpl implements ConsignSaleService {
//插入操作记录,用户不满意建议零售价
//插入操作记录,用户不满意建议零售价
consignSaleRecordDao
.
insert
(
dto
.
getSaleId
(),
"取消类型:用户主动取消"
,
ConsignSaleEnum
.
OperateTypeEnum
.
CUSTOM_CANCEL
.
getCode
(),
"理由:不满意建议寄售价"
);
consignSaleRecordDao
.
insert
(
dto
.
getSaleId
(),
"取消类型:用户主动取消"
,
ConsignSaleEnum
.
OperateTypeEnum
.
CUSTOM_CANCEL
.
getCode
(),
"理由:不满意建议寄售价"
);
//创建退货单
ReturnOrder
returnOrder
=
new
ReturnOrder
();
returnOrder
.
setUserId
(
consignSaleInfo
.
getUserId
());
returnOrder
.
setItemId
(
consignSaleInfo
.
getItemId
());
returnOrder
.
setAddressId
(
consignSaleInfo
.
getAddressId
());
returnOrder
.
setSaleId
(
consignSaleInfo
.
getSaleId
());
returnOrderService
.
create
(
returnOrder
);
}
}
return
Result
.
success
();
return
Result
.
success
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/ReturnOrderServiceImpl.java
View file @
19b13468
package
com.wwdz.ch.wx.impl
;
package
com.wwdz.ch.wx.impl
;
import
com.alibaba.dubbo.config.annotation.Reference
;
import
com.github.pagehelper.PageInfo
;
import
com.github.pagehelper.PageInfo
;
import
com.wwdz.ch.core.consts.ConsignSaleEnum
;
import
com.wwdz.ch.core.consts.ConsignSaleEnum
;
import
com.wwdz.ch.core.consts.LogisticsEnum
;
import
com.wwdz.ch.core.consts.LogisticsEnum
;
import
com.wwdz.ch.core.consts.ReturnOrderEnum
;
import
com.wwdz.ch.core.consts.ReturnOrderEnum
;
import
com.wwdz.ch.core.entity.ConsignSaleVo
;
import
com.wwdz.ch.core.entity.ReturnOrderVo
;
import
com.wwdz.ch.core.entity.ReturnOrderVo
;
import
com.wwdz.ch.core.type.PageSearchResult
;
import
com.wwdz.ch.core.type.PageSearchResult
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.util.IdUtils
;
import
com.wwdz.ch.core.util.MediaUtil
;
import
com.wwdz.ch.core.util.MediaUtil
;
import
com.wwdz.ch.core.util.RegexUtil
;
import
com.wwdz.ch.core.util.RegexUtil
;
import
com.wwdz.ch.db.dao.ConsignSaleRecordDao
;
import
com.wwdz.ch.db.dao.ItemDao
;
import
com.wwdz.ch.db.dao.ItemDao
;
import
com.wwdz.ch.db.dao.ReturnOrderDao
;
import
com.wwdz.ch.db.dao.ReturnOrderDao
;
import
com.wwdz.ch.db.dao.ReturnOrderRecordDao
;
import
com.wwdz.ch.db.dao.ReturnOrderRecordDao
;
import
com.wwdz.ch.db.domain.*
;
import
com.wwdz.ch.db.domain.*
;
import
com.wwdz.ch.db.dto.request.CoinRequestDto
;
import
com.wwdz.ch.db.dto.request.CoinRequestDto
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRequestDto
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
import
com.wwdz.ch.wx.entity.vo.AppletStateNodeVo
;
import
com.wwdz.ch.wx.entity.vo.AppletStateNodeVo
;
import
com.wwdz.ch.wx.entity.vo.ReturnOrderAppletVo
;
import
com.wwdz.ch.wx.entity.vo.ReturnOrderAppletVo
;
import
com.wwdz.ch.wx.service.ReturnOrderService
;
import
com.wwdz.ch.wx.service.ReturnOrderService
;
import
com.wwdz.mall.common.vo.response.CloudServerResponse
;
import
com.wwdz.user.api.dto.res.address.UserAddressDTO
;
import
com.wwdz.user.api.enums.UserAddressTypeEnum
;
import
com.wwdz.user.api.service.address.UserAddressReadService
;
import
com.xxdxxs.utils.EntityMapper
;
import
com.xxdxxs.utils.EntityMapper
;
import
com.xxdxxs.utils.JsonUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.util.StringUtils
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.function.Function
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -39,6 +42,8 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
...
@@ -39,6 +42,8 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ReturnOrderServiceImpl
.
class
);
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ReturnOrderServiceImpl
.
class
);
private
static
final
String
RUTURN_ORDER_PREFIX
=
"RB"
;
@Autowired
@Autowired
ReturnOrderDao
returnOrderDao
;
ReturnOrderDao
returnOrderDao
;
...
@@ -48,6 +53,30 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
...
@@ -48,6 +53,30 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
@Autowired
@Autowired
ItemDao
itemDao
;
ItemDao
itemDao
;
@Autowired
ConsignSaleRecordDao
consignSaleRecordDao
;
@Reference
UserAddressReadService
userAddressReadService
;
@Override
public
Result
create
(
ReturnOrder
returnOrder
)
{
try
{
String
returnOrderId
=
IdUtils
.
getOrderNumber
(
RUTURN_ORDER_PREFIX
);
returnOrder
.
setReturnOrderId
(
returnOrderId
);
Date
now
=
new
Date
();
returnOrder
.
setCreateTime
(
now
);
returnOrder
.
setUpdateTime
(
now
);
returnOrder
.
setState
(
ReturnOrderEnum
.
StateEnum
.
WAIT_RETURN
.
getCode
());
returnOrderDao
.
insert
(
returnOrder
);
//插入待退回节点
returnOrderRecordDao
.
insert
(
returnOrderId
,
ReturnOrderEnum
.
NodeDescEnum
.
WAIT_RETURN
.
getDes
(),
ReturnOrderEnum
.
OperateTypeEnum
.
WAIT_RETURN
.
getCode
(),
null
);
return
Result
.
success
();
}
catch
(
Exception
e
)
{
logger
.
error
(
"创建退货单error:{}"
,
e
);
}
return
Result
.
failed
();
}
@Override
@Override
public
Result
findList
(
ReturnOrderRequestDto
dto
)
{
public
Result
findList
(
ReturnOrderRequestDto
dto
)
{
...
@@ -100,15 +129,30 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
...
@@ -100,15 +129,30 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
@Override
@Override
public
Result
findDetail
(
ReturnOrderRequestDto
dto
)
{
public
Result
findDetail
(
ReturnOrderRequestDto
dto
)
{
try
{
String
returnOrderId
=
dto
.
getReturnOrderId
();
String
returnOrderId
=
dto
.
getReturnOrderId
();
List
<
ReturnOrderRecord
>
returnOrderRecordList
=
returnOrderRecordDao
.
findByReturnOrderId
(
returnOrderId
);
List
<
ReturnOrderRecord
>
returnOrderRecordList
=
returnOrderRecordDao
.
findByReturnOrderId
(
returnOrderId
);
ReturnOrder
returnOrder
=
returnOrderDao
.
findById
(
returnOrderId
);
ReturnOrder
returnOrder
=
returnOrderDao
.
findById
(
returnOrderId
);
long
itemId
=
returnOrder
.
getItemId
();
long
itemId
=
returnOrder
.
getItemId
();
String
saleId
=
returnOrder
.
getSaleId
();
long
addressId
=
returnOrder
.
getAddressId
();
Item
item
=
itemDao
.
findById
(
itemId
);
Item
item
=
itemDao
.
findById
(
itemId
);
ReturnOrderAppletVo
returnOrderAppletVo
=
new
ReturnOrderAppletVo
();
ReturnOrderAppletVo
returnOrderAppletVo
=
new
ReturnOrderAppletVo
();
//查询id对应地址
CloudServerResponse
<
UserAddressDTO
>
cloudServerResponse
=
userAddressReadService
.
getAddressByAddressId
(
addressId
);
//成功的code = 1001
if
(
cloudServerResponse
.
getCode
()
==
1001
&&
cloudServerResponse
.
getResult
()
!=
null
)
{
UserAddressDTO
userAddressDTO
=
cloudServerResponse
.
getResult
();
StringBuffer
stringBuffer
=
new
StringBuffer
();
stringBuffer
.
append
(
userAddressDTO
.
getUserName
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getUserPhone
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getArea
());
stringBuffer
.
append
(
","
+
userAddressDTO
.
getAddress
());
returnOrderAppletVo
.
setReturnAddress
(
stringBuffer
.
toString
());
}
returnOrderAppletVo
.
setSaleId
(
returnOrder
.
getSaleId
());
returnOrderAppletVo
.
setSaleId
(
returnOrder
.
getSaleId
());
returnOrderAppletVo
.
setReturnOrderId
(
returnOrderId
);
returnOrderAppletVo
.
setReturnOrderId
(
returnOrderId
);
returnOrderAppletVo
.
setHomePageImage
(
MediaUtil
.
getHomePageImage
(
item
.
getImages
(),
item
.
getVideos
()));
returnOrderAppletVo
.
setHomePageImage
(
MediaUtil
.
getHomePageImage
(
item
.
getImages
(),
item
.
getVideos
()));
...
@@ -119,23 +163,73 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
...
@@ -119,23 +163,73 @@ public class ReturnOrderServiceImpl implements ReturnOrderService {
returnOrderAppletVo
.
setWaybill
(
returnOrder
.
getWaybill
());
returnOrderAppletVo
.
setWaybill
(
returnOrder
.
getWaybill
());
returnOrderAppletVo
.
setState
(
returnOrder
.
getState
());
returnOrderAppletVo
.
setState
(
returnOrder
.
getState
());
returnOrderAppletVo
.
setStateName
(
ReturnOrderEnum
.
StateEnum
.
getNameByCode
(
returnOrder
.
getState
()));
returnOrderAppletVo
.
setStateName
(
ReturnOrderEnum
.
StateEnum
.
getNameByCode
(
returnOrder
.
getState
()));
//货品寄回时间
returnOrderAppletVo
.
setSendTime
(
returnOrder
.
getCreateTime
());
//货品寄回签收
returnOrderAppletVo
.
setSignedTime
(
null
);
ReturnOrderRecord
sendRecord
=
returnOrderRecordList
.
stream
().
filter
(
returnOrderRecord
->
returnOrderRecord
.
getType
()
==
ReturnOrderEnum
.
OperateTypeEnum
.
SEND_RETURN
.
getCode
()).
findFirst
().
orElse
(
null
);
//货品寄回时间
returnOrderAppletVo
.
setSendTime
(
sendRecord
==
null
?
null
:
sendRecord
.
getCreateTime
());
ReturnOrderRecord
signedRecord
=
returnOrderRecordList
.
stream
().
filter
(
returnOrderRecord
->
returnOrderRecord
.
getType
()
==
ReturnOrderEnum
.
OperateTypeEnum
.
USER_SIGNED
.
getCode
()).
findFirst
().
orElse
(
null
);
if
(
signedRecord
==
null
)
{
signedRecord
=
returnOrderRecordList
.
stream
().
filter
(
returnOrderRecord
->
returnOrderRecord
.
getType
()
==
ReturnOrderEnum
.
OperateTypeEnum
.
SYSTEM_SIGNED
.
getCode
()).
findFirst
().
orElse
(
null
);
}
//货品寄回签收
returnOrderAppletVo
.
setSignedTime
(
signedRecord
==
null
?
null
:
signedRecord
.
getCreateTime
());
List
<
AppletStateNodeVo
>
appletStateNodeVoList
=
new
ArrayList
<>();
List
<
AppletStateNodeVo
>
appletStateNodeVoList
=
new
ArrayList
<>();
ReturnOrderEnum
.
NodeDescEnum
[]
nodeDescEnums
=
ReturnOrderEnum
.
NodeDescEnum
.
values
();
ReturnOrderEnum
.
NodeDescEnum
[]
nodeDescEnums
=
ReturnOrderEnum
.
NodeDescEnum
.
values
();
List
<
ReturnOrderEnum
.
NodeDescEnum
>
nodeDescEnumList
=
Arrays
.
stream
(
nodeDescEnums
).
collect
(
Collectors
.
toList
());
List
<
ReturnOrderEnum
.
NodeDescEnum
>
nodeDescEnumList
=
Arrays
.
stream
(
nodeDescEnums
).
collect
(
Collectors
.
toList
());
for
(
ReturnOrderEnum
.
NodeDescEnum
nodeDescEnum
:
nodeDescEnumList
)
{
for
(
ReturnOrderEnum
.
NodeDescEnum
nodeDescEnum
:
nodeDescEnumList
)
{
AppletStateNodeVo
appletStateNodeVo
=
new
AppletStateNodeVo
();
AppletStateNodeVo
appletStateNodeVo
=
new
AppletStateNodeVo
();
appletStateNodeVo
.
setNode
(
nodeDescEnum
.
getNode
());
appletStateNodeVo
.
setNode
(
nodeDescEnum
.
getNode
());
appletStateNodeVo
.
setDesc
(
appletStateNodeVo
.
getDesc
());
appletStateNodeVo
.
setDesc
(
nodeDescEnum
.
getDes
());
appletStateNodeVo
.
setPassed
(
false
);
appletStateNodeVo
.
setPassed
(
false
);
appletStateNodeVoList
.
add
(
appletStateNodeVo
);
appletStateNodeVoList
.
add
(
appletStateNodeVo
);
}
}
//拼接退货详情中的节点时间线
//取消寄售节点
appletStateNodeVoList
.
get
(
0
).
setPassed
(
true
);
List
<
ConsignSaleRecord
>
consignSaleRecordList
=
consignSaleRecordDao
.
find
(
saleId
);
List
<
Integer
>
cancelTypes
=
Arrays
.
asList
(
ConsignSaleEnum
.
OperateTypeEnum
.
SYS_CANCEL
.
getCode
(),
ConsignSaleEnum
.
OperateTypeEnum
.
CUSTOM_CANCEL
.
getCode
(),
ConsignSaleEnum
.
OperateTypeEnum
.
TIME_OUT_CANCEL
.
getCode
());
ConsignSaleRecord
consignSaleRecord
=
consignSaleRecordList
.
stream
().
filter
(
record
->
cancelTypes
.
contains
(
record
.
getType
())).
findFirst
().
orElse
(
null
);
appletStateNodeVoList
.
get
(
0
).
setDesc
(
consignSaleRecord
.
getContent
()
+
";"
+
(
consignSaleRecord
.
getRemark
()
==
null
?
""
:
consignSaleRecord
.
getRemark
()));
//货品待退回
appletStateNodeVoList
.
get
(
1
).
setPassed
(
true
);
for
(
ReturnOrderRecord
returnOrderRecord
:
returnOrderRecordList
)
{
//货品已出库
if
(
returnOrderRecord
.
getType
()
==
ReturnOrderEnum
.
OperateTypeEnum
.
SEND_RETURN
.
getCode
())
{
appletStateNodeVoList
.
get
(
2
).
setPassed
(
true
);
appletStateNodeVoList
.
get
(
2
).
setDesc
(
returnOrderRecord
.
getContent
());
}
//货品已签收
if
(
returnOrderRecord
.
getType
()
==
ReturnOrderEnum
.
OperateTypeEnum
.
USER_SIGNED
.
getCode
()
||
returnOrderRecord
.
getType
()
==
ReturnOrderEnum
.
OperateTypeEnum
.
SYSTEM_SIGNED
.
getCode
())
{
appletStateNodeVoList
.
get
(
3
).
setPassed
(
true
);
appletStateNodeVoList
.
get
(
3
).
setDesc
(
returnOrderRecord
.
getContent
());
}
}
returnOrderAppletVo
.
setNodeVoList
(
appletStateNodeVoList
);
return
Result
.
success
(
returnOrderAppletVo
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"查询退货单详情error:{}"
,
e
);
}
return
Result
.
failed
();
}
return
null
;
@Override
public
Result
userConfirmSigned
(
ReturnOrderRequestDto
dto
)
{
try
{
//用户确认签收退货商品
ReturnOrder
returnOrder
=
new
ReturnOrder
();
returnOrder
.
setReturnOrderId
(
dto
.
getReturnOrderId
());
returnOrder
.
setState
(
ReturnOrderEnum
.
StateEnum
.
FINISH
.
getCode
());
returnOrderDao
.
update
(
returnOrder
);
returnOrderRecordDao
.
insert
(
dto
.
getSaleId
(),
"用户确认签收"
,
ReturnOrderEnum
.
OperateTypeEnum
.
USER_SIGNED
.
getCode
(),
null
);
return
Result
.
success
();
}
catch
(
Exception
e
)
{
logger
.
info
(
"用户确认签收退货商品 error : {}"
,
e
);
}
return
Result
.
failed
();
}
}
}
}
ch-wx-api/src/main/java/com/wwdz/ch/wx/service/ReturnOrderService.java
View file @
19b13468
package
com.wwdz.ch.wx.service
;
package
com.wwdz.ch.wx.service
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.db.domain.ReturnOrder
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
public
interface
ReturnOrderService
{
public
interface
ReturnOrderService
{
/**
* 查询退货单
* @param returnOrder
* @return
*/
Result
create
(
ReturnOrder
returnOrder
);
/**
/**
* 查询退货单
* 查询退货单
* @param dto
* @param dto
...
@@ -19,5 +29,12 @@ public interface ReturnOrderService {
...
@@ -19,5 +29,12 @@ public interface ReturnOrderService {
*/
*/
Result
findDetail
(
ReturnOrderRequestDto
dto
);
Result
findDetail
(
ReturnOrderRequestDto
dto
);
/**
* 用户确认签收退货商品
* @param dto
* @return
*/
Result
userConfirmSigned
(
ReturnOrderRequestDto
dto
);
}
}
ch-wx-api/src/main/java/com/wwdz/ch/wx/web/ReturnOrderController.java
View file @
19b13468
...
@@ -5,9 +5,12 @@ import com.wwdz.ch.core.consts.LogisticsEnum;
...
@@ -5,9 +5,12 @@ import com.wwdz.ch.core.consts.LogisticsEnum;
import
com.wwdz.ch.core.consts.ResultCode
;
import
com.wwdz.ch.core.consts.ResultCode
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRequestDto
;
import
com.wwdz.ch.db.dto.request.ConsignSaleRequestDto
;
import
com.wwdz.ch.db.dto.request.ReturnOrderRequestDto
;
import
com.wwdz.ch.wx.entity.request.ItemRequestDto
;
import
com.wwdz.ch.wx.entity.request.ItemRequestDto
;
import
com.wwdz.ch.wx.impl.ReturnOrderServiceImpl
;
import
com.wwdz.ch.wx.service.ConsignSaleService
;
import
com.wwdz.ch.wx.service.ConsignSaleService
;
import
com.wwdz.ch.wx.service.ItemService
;
import
com.wwdz.ch.wx.service.ItemService
;
import
com.wwdz.ch.wx.service.ReturnOrderService
;
import
com.xxdxxs.service.FormHandler
;
import
com.xxdxxs.service.FormHandler
;
import
com.xxdxxs.utils.StringUtils
;
import
com.xxdxxs.utils.StringUtils
;
import
com.xxdxxs.validation.Validator
;
import
com.xxdxxs.validation.Validator
;
...
@@ -33,7 +36,7 @@ public class ReturnOrderController {
...
@@ -33,7 +36,7 @@ public class ReturnOrderController {
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ReturnOrderController
.
class
);
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
ReturnOrderController
.
class
);
@Autowired
@Autowired
ConsignSaleService
consignSale
Service
;
ReturnOrderService
returnOrder
Service
;
@Autowired
@Autowired
ItemService
itemService
;
ItemService
itemService
;
...
@@ -41,29 +44,43 @@ public class ReturnOrderController {
...
@@ -41,29 +44,43 @@ public class ReturnOrderController {
@ApiOperation
(
value
=
"用户查询退货单"
)
@ApiOperation
(
value
=
"用户查询退货单"
)
@PostMapping
(
"/findList"
)
@PostMapping
(
"/findList"
)
public
Result
findList
(
@RequestBody
ConsignSale
RequestDto
dto
)
{
public
Result
findList
(
@RequestBody
ReturnOrder
RequestDto
dto
)
{
logger
.
info
(
"【请求开始】用户查询
寄售
单,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
logger
.
info
(
"【请求开始】用户查询
退货
单,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
validator
.
set
(
"userId"
,
"用户id"
).
must
().
number
()
validator
.
set
(
"userId"
,
"用户id"
).
must
().
number
()
.
end
();
.
end
();
if
(!
validator
.
isValid
())
{
if
(!
validator
.
isValid
())
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
.
getCode
(),
validator
.
getErrorInfo
());
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
.
getCode
(),
validator
.
getErrorInfo
());
}
}
return
consignSale
Service
.
findList
(
dto
);
return
returnOrder
Service
.
findList
(
dto
);
}
}
@ApiOperation
(
value
=
"用户查询退货单详情"
)
@ApiOperation
(
value
=
"用户查询退货单详情"
)
@PostMapping
(
"/findDetail"
)
@PostMapping
(
"/findDetail"
)
public
Result
findDetail
(
@RequestBody
ConsignSale
RequestDto
dto
)
{
public
Result
findDetail
(
@RequestBody
ReturnOrder
RequestDto
dto
)
{
logger
.
info
(
"【请求开始】用户查询
寄售单详情
,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
logger
.
info
(
"【请求开始】用户查询
退货单
,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
validator
.
set
(
"
saleId"
,
"寄售
单号"
).
must
().
string
()
validator
.
set
(
"
returnOrderId"
,
"退货
单号"
).
must
().
string
()
.
end
();
.
end
();
if
(!
validator
.
isValid
())
{
if
(!
validator
.
isValid
())
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
.
getCode
(),
validator
.
getErrorInfo
());
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
.
getCode
(),
validator
.
getErrorInfo
());
}
}
return
consignSaleService
.
findDetail
(
dto
);
return
returnOrderService
.
findDetail
(
dto
);
}
@ApiOperation
(
value
=
"用户确认签收退货商品"
)
@PostMapping
(
"/userConfirmSigned"
)
public
Result
userConfirmSigned
(
@RequestBody
ReturnOrderRequestDto
dto
)
{
logger
.
info
(
"【请求开始】用户确认签收退货商品,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
validator
.
set
(
"returnOrderId"
,
"退货单号"
).
must
().
string
()
.
end
();
if
(!
validator
.
isValid
())
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
.
getCode
(),
validator
.
getErrorInfo
());
}
return
returnOrderService
.
userConfirmSigned
(
dto
);
}
}
...
...
ch-wx-api/src/test/java/com/wwdz/ch/wx/impl/UserAddressServiceTest.java
View file @
19b13468
...
@@ -32,5 +32,10 @@ public class UserAddressServiceTest {
...
@@ -32,5 +32,10 @@ public class UserAddressServiceTest {
CloudServerResponse
<
UserAddressDTO
>
cloudServerResponse
=
userAddressReadService
.
getDefaultByType
(
userId
,
UserAddressTypeEnum
.
RECEIVE_ADDRESS
.
getType
());
CloudServerResponse
<
UserAddressDTO
>
cloudServerResponse
=
userAddressReadService
.
getDefaultByType
(
userId
,
UserAddressTypeEnum
.
RECEIVE_ADDRESS
.
getType
());
logger
.
info
(
"cloudServerResponse = {}"
,
cloudServerResponse
);
logger
.
info
(
"cloudServerResponse = {}"
,
cloudServerResponse
);
logger
.
info
(
"result = {}"
,
JsonUtils
.
from
(
cloudServerResponse
.
getResult
()));
logger
.
info
(
"result = {}"
,
JsonUtils
.
from
(
cloudServerResponse
.
getResult
()));
long
addressId
=
1231000111
;
CloudServerResponse
<
UserAddressDTO
>
addressDTOCloudServerResponse
=
userAddressReadService
.
getAddressByAddressId
(
addressId
);
logger
.
info
(
"addressDTOCloudServerResponse = {}"
,
addressDTOCloudServerResponse
);
logger
.
info
(
"addressDTOCloudServerResponse result = {}"
,
JsonUtils
.
from
(
addressDTOCloudServerResponse
.
getResult
()));
}
}
}
}
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