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
adbda99d
Commit
adbda99d
authored
Mar 04, 2024
by
shiyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
拍卖详情
parent
9c918cb0
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
389 additions
and
15 deletions
+389
-15
ch-admin-api/src/main/java/com/wwdz/ch/admin/controller/SysSupplierItemController.java
...m/wwdz/ch/admin/controller/SysSupplierItemController.java
+42
-0
ch-admin-api/src/main/java/com/wwdz/ch/admin/impl/SysSupplierItemServiceImpl.java
...va/com/wwdz/ch/admin/impl/SysSupplierItemServiceImpl.java
+52
-9
ch-admin-api/src/main/java/com/wwdz/ch/admin/service/SysSupplierItemService.java
...ava/com/wwdz/ch/admin/service/SysSupplierItemService.java
+14
-0
ch-core/src/main/java/com/wwdz/ch/core/consts/DistributionEnum.java
...c/main/java/com/wwdz/ch/core/consts/DistributionEnum.java
+39
-0
ch-core/src/main/java/com/wwdz/ch/core/entity/SupplierItemVo.java
...src/main/java/com/wwdz/ch/core/entity/SupplierItemVo.java
+5
-0
ch-dao/src/main/java/com/wwdz/ch/db/dao/distribution/AuctionRecordDao.java
...ava/com/wwdz/ch/db/dao/distribution/AuctionRecordDao.java
+8
-0
ch-dao/src/main/java/com/wwdz/ch/db/dao/distribution/DistributionOrderDao.java
...com/wwdz/ch/db/dao/distribution/DistributionOrderDao.java
+9
-0
ch-dao/src/main/java/com/wwdz/ch/db/dto/request/distribution/AuctionRecordRequestDto.java
.../db/dto/request/distribution/AuctionRecordRequestDto.java
+1
-1
ch-dao/src/main/java/com/wwdz/ch/db/impl/distribution/AuctionRecordDaoImpl.java
...om/wwdz/ch/db/impl/distribution/AuctionRecordDaoImpl.java
+8
-0
ch-dao/src/main/java/com/wwdz/ch/db/impl/distribution/DistributionOrderDaoImpl.java
...wdz/ch/db/impl/distribution/DistributionOrderDaoImpl.java
+9
-0
ch-dao/src/main/java/com/wwdz/ch/db/mapper/distribution/DistributionOrderMapper.java
...dz/ch/db/mapper/distribution/DistributionOrderMapper.java
+1
-1
ch-wx-api/src/main/java/com/wwdz/ch/wx/entity/vo/distribution/AuctionDetailVo.java
...om/wwdz/ch/wx/entity/vo/distribution/AuctionDetailVo.java
+13
-0
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/AuctionRecordServiceImpl.java
...wdz/ch/wx/impl/distribution/AuctionRecordServiceImpl.java
+78
-1
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/DistributionOrderServiceImpl.java
...ch/wx/impl/distribution/DistributionOrderServiceImpl.java
+55
-1
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/SupplierItemServiceImpl.java
...wwdz/ch/wx/impl/distribution/SupplierItemServiceImpl.java
+44
-2
ch-wx-api/src/main/java/com/wwdz/ch/wx/service/distribution/DistributionOrderService.java
.../ch/wx/service/distribution/DistributionOrderService.java
+8
-0
ch-wx-api/src/main/java/com/wwdz/ch/wx/web/distribution/AuctionRecordController.java
.../wwdz/ch/wx/web/distribution/AuctionRecordController.java
+3
-0
No files found.
ch-admin-api/src/main/java/com/wwdz/ch/admin/controller/SysSupplierItemController.java
View file @
adbda99d
...
...
@@ -3,6 +3,7 @@ package com.wwdz.ch.admin.controller;
import
com.alibaba.fastjson.JSON
;
import
com.wwdz.ch.admin.service.SysIMService
;
import
com.wwdz.ch.admin.service.SysSupplierItemService
;
import
com.wwdz.ch.core.consts.ResultCode
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto
;
import
com.xxdxxs.service.FormHandler
;
...
...
@@ -42,10 +43,51 @@ public class SysSupplierItemController {
}
@ApiOperation
(
value
=
"编辑商品"
)
@PostMapping
(
"/update"
)
public
Result
update
(
@RequestBody
SupplierItemRequestDto
dto
)
{
logger
.
info
(
"编辑商品,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
if
(
dto
.
getId
()
==
null
)
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
);
}
return
sysSupplierItemService
.
update
(
dto
);
}
@ApiOperation
(
value
=
"查询商品列表"
)
@PostMapping
(
"/findList"
)
public
Result
findList
(
@RequestBody
SupplierItemRequestDto
dto
)
{
logger
.
info
(
"查询商品列表,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
return
sysSupplierItemService
.
findList
(
dto
);
}
@ApiOperation
(
value
=
"查询商品详情"
)
@PostMapping
(
"/findDetail"
)
public
Result
findDetail
(
@RequestBody
SupplierItemRequestDto
dto
)
{
logger
.
info
(
"查询商品详情,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
if
(
dto
.
getId
()
==
null
)
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
);
}
return
sysSupplierItemService
.
findDetail
(
dto
);
}
@ApiOperation
(
value
=
"商品上下架"
)
@PostMapping
(
"/updateOnSale"
)
public
Result
updateOnSale
(
@RequestBody
SupplierItemRequestDto
dto
)
{
logger
.
info
(
"商品上下架,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
if
(
dto
.
getId
()
==
null
||
dto
.
getIsOnSale
()
==
null
)
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
);
}
return
sysSupplierItemService
.
updateOnSale
(
dto
);
}
@ApiOperation
(
value
=
"删除商品"
)
@PostMapping
(
"/delete"
)
public
Result
delete
(
@RequestBody
SupplierItemRequestDto
dto
)
{
logger
.
info
(
"删除商品,请求参数:{}"
,
JSON
.
toJSONString
(
dto
));
if
(
dto
.
getId
()
==
null
)
{
return
Result
.
failed
(
ResultCode
.
PARAM_ERROR
);
}
return
sysSupplierItemService
.
delete
(
dto
);
}
}
ch-admin-api/src/main/java/com/wwdz/ch/admin/impl/SysSupplierItemServiceImpl.java
View file @
adbda99d
...
...
@@ -113,10 +113,13 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
supplierItemVo
.
setSupplyPrice
(
PriceUtil
.
convertPriceFenToYuan
(
supplierItem
.
getSupplyPrice
()));
supplierItemVo
.
setDistributionPrice
(
PriceUtil
.
convertPriceFenToYuan
(
supplierItem
.
getDistributionPrice
()));
supplierItemVo
.
setHomePageImage
(
MediaUtil
.
getHomePageImage
(
supplierItem
.
getImages
(),
supplierItem
.
getVideos
()));
if
(
supplierItem
.
getBuyLimitNum
()
==
-
1
)
{
supplierItemVo
.
setIsLimitBuy
(
false
);
}
supplierItemVos
.
add
(
supplierItemVo
);
//售出数量
l
ong
selledNum
=
distributionOrderDao
.
countSelledNum
(
supplierItem
.
getId
());
supplierItemVo
.
setSelledNum
(
selledNum
);
L
ong
selledNum
=
distributionOrderDao
.
countSelledNum
(
supplierItem
.
getId
());
supplierItemVo
.
setSelledNum
(
selledNum
==
null
?
0
:
selledNum
);
});
return
Result
.
success
(
PageSearchResult
.
of
(
pageInfo
,
supplierItemVos
));
}
catch
(
Exception
e
)
{
...
...
@@ -130,10 +133,12 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
try
{
SupplierItemVo
supplierItemVo
=
new
SupplierItemVo
();
long
itemId
=
dto
.
getId
();
SupplierItem
supplierItem
=
supplierItemDao
.
findById
(
itemId
);
EntityMapper
.
copyAttribute
(
supplierItem
,
supplierItemVo
);
supplierItemVo
.
setItemId
(
supplierItem
.
getId
());
if
(
supplierItem
.
getBuyLimitNum
()
==
-
1
)
{
supplierItemVo
.
setIsLimitBuy
(
false
);
}
supplierItemVo
.
setSupplyPrice
(
PriceUtil
.
convertPriceFenToYuan
(
supplierItem
.
getSupplyPrice
()));
supplierItemVo
.
setDistributionPrice
(
PriceUtil
.
convertPriceFenToYuan
(
supplierItem
.
getDistributionPrice
()));
supplierItemVo
.
setHomePageImage
(
MediaUtil
.
getHomePageImage
(
supplierItem
.
getImages
(),
supplierItem
.
getVideos
()));
...
...
@@ -145,21 +150,59 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
}
@Override
@Transactional
public
Result
update
(
SupplierItemRequestDto
dto
)
{
return
null
;
try
{
//如果价格有改动,需要把分享的链接改为无效,先查询原来商品这使得价格
SupplierItem
oldSupplierItem
=
supplierItemDao
.
findById
(
dto
.
getId
());
long
oldDistributionPrice
=
oldSupplierItem
.
getDistributionPrice
();
if
(
oldDistributionPrice
!=
PriceUtil
.
convertPriceFromStr
(
dto
.
getDistributionPrice
()))
{
//把该商品所关联的所有分享链接都改为无效
distributorShareRecordDao
.
updateDisEnabled
(
dto
.
getId
());
logger
.
info
(
"商品 id:{} 更改价格,分享链接改为无效"
,
dto
.
getId
());
}
SupplierItem
supplierItem
=
new
SupplierItem
();
EntityMapper
.
copyAttribute
(
dto
,
supplierItem
);
supplierItem
.
setDistributionPrice
(
PriceUtil
.
convertPriceFromStr
(
dto
.
getDistributionPrice
()));
if
(
StringUtils
.
hasLength
(
dto
.
getSupplyPrice
()))
{
supplierItem
.
setSupplyPrice
(
PriceUtil
.
convertPriceFromStr
(
dto
.
getSupplyPrice
()));
}
supplierItem
.
setImages
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
dto
.
getImages
(),
";"
));
supplierItem
.
setVideos
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
join
(
dto
.
getVideos
(),
";"
));
supplierItemDao
.
update
(
supplierItem
);
return
Result
.
success
();
}
catch
(
Exception
e
)
{
logger
.
error
(
"编辑商品失败 error : {}"
,
e
);
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
}
return
Result
.
failed
();
}
public
Result
updateDistributionPrice
(
SupplierItemRequestDto
dto
)
{
@Override
public
Result
updateOnSale
(
SupplierItemRequestDto
dto
)
{
try
{
SupplierItem
supplierItem
=
new
SupplierItem
();
supplierItem
.
setId
(
dto
.
getId
());
supplierItem
.
setDistributionPrice
(
PriceUtil
.
convertPriceFromStr
(
dto
.
getDistributionPrice
()));
supplierItem
.
setIsOnSale
(
dto
.
getIsOnSale
());
supplierItemDao
.
update
(
supplierItem
);
return
Result
.
success
();
}
catch
(
Exception
e
)
{
logger
.
error
(
"商品上下架失败 error : {}"
,
e
);
}
return
Result
.
failed
();
}
@Override
public
Result
delete
(
SupplierItemRequestDto
dto
)
{
try
{
SupplierItem
supplierItem
=
new
SupplierItem
();
supplierItem
.
setId
(
dto
.
getId
());
supplierItem
.
setIsDeleted
(
true
);
supplierItemDao
.
update
(
supplierItem
);
//把该商品所关联的所有分享链接都改为无效
distributorShareRecordDao
.
updateDisEnabled
(
dto
.
getId
());
return
Result
.
success
();
}
catch
(
Exception
e
)
{
logger
.
error
(
"商品
修改供货价,设置分享链接无效
error : {}"
,
e
);
logger
.
error
(
"商品
删除失败
error : {}"
,
e
);
}
return
Result
.
failed
();
}
...
...
ch-admin-api/src/main/java/com/wwdz/ch/admin/service/SysSupplierItemService.java
View file @
adbda99d
...
...
@@ -37,6 +37,20 @@ public interface SysSupplierItemService {
Result
update
(
SupplierItemRequestDto
dto
);
/**
* 上下架
* @param dto
* @return
*/
Result
updateOnSale
(
SupplierItemRequestDto
dto
);
/**
* 删除商品
* @param dto
* @return
*/
Result
delete
(
SupplierItemRequestDto
dto
);
}
ch-core/src/main/java/com/wwdz/ch/core/consts/DistributionEnum.java
View file @
adbda99d
...
...
@@ -157,4 +157,43 @@ public class DistributionEnum {
/**
* 竞拍状态
*/
public
enum
AuctionUserStateEnum
{
PROCESS
(
1
,
"出价"
),
LEAD
(
2
,
"已领先"
),
PRE_PAY
(
3
,
"立即支付"
),
END
(
4
,
"竞拍结束"
)
;
private
int
code
;
private
String
des
;
AuctionUserStateEnum
(
int
code
,
String
des
)
{
this
.
code
=
code
;
this
.
des
=
des
;
}
public
static
String
getNameByCode
(
int
code
)
{
for
(
AuctionUserStateEnum
auctionUserStateEnum
:
AuctionUserStateEnum
.
values
())
{
if
(
code
==
auctionUserStateEnum
.
getCode
())
{
return
auctionUserStateEnum
.
getDes
();
}
}
return
null
;
}
public
int
getCode
()
{
return
code
;
}
public
String
getDes
()
{
return
des
;
}
}
}
ch-core/src/main/java/com/wwdz/ch/core/entity/SupplierItemVo.java
View file @
adbda99d
...
...
@@ -105,4 +105,9 @@ public class SupplierItemVo implements Entity {
* 商品售出的数量
*/
private
Long
selledNum
;
/**
* 是否限购
*/
private
Boolean
isLimitBuy
=
true
;
}
ch-dao/src/main/java/com/wwdz/ch/db/dao/distribution/AuctionRecordDao.java
View file @
adbda99d
...
...
@@ -24,6 +24,14 @@ public interface AuctionRecordDao {
*/
int
updateNotLead
(
long
itemId
);
/**
* 根据主键id更新记录
* 价格被反超时,设置islead字段为false
* @param id
* @return
*/
int
updateNotLeadById
(
int
id
);
/**
* 查询出价记录
* @param dto
...
...
ch-dao/src/main/java/com/wwdz/ch/db/dao/distribution/DistributionOrderDao.java
View file @
adbda99d
...
...
@@ -34,6 +34,15 @@ public interface DistributionOrderDao {
*/
DistributionOrder
findById
(
String
distributionOrderId
);
/**
* 查询该商品是否生成了订单
* 用于拍卖生成订单判断
* @param itemId
* @return
*/
DistributionOrder
findByItemId
(
long
itemId
);
/**
* 根据买家id查询
* @param buyerId
...
...
ch-dao/src/main/java/com/wwdz/ch/db/dto/request/distribution/AuctionRecordRequestDto.java
View file @
adbda99d
...
...
@@ -24,7 +24,7 @@ public class AuctionRecordRequestDto extends BaseRequestDto implements Entity {
/**
* 出价
*/
private
Lo
ng
price
;
private
Stri
ng
price
;
/**
* 出价时间
...
...
ch-dao/src/main/java/com/wwdz/ch/db/impl/distribution/AuctionRecordDaoImpl.java
View file @
adbda99d
...
...
@@ -33,6 +33,14 @@ public class AuctionRecordDaoImpl implements AuctionRecordDao {
return
auctionRecordMapper
.
updateByExampleSelective
(
auctionRecord
,
example
);
}
@Override
public
int
updateNotLeadById
(
int
id
)
{
AuctionRecord
auctionRecord
=
new
AuctionRecord
();
auctionRecord
.
setId
(
id
);
auctionRecord
.
setIsLead
(
false
);
return
auctionRecordMapper
.
updateByPrimaryKeySelective
(
auctionRecord
);
}
@Override
public
List
<
AuctionRecord
>
find
(
AuctionRecordRequestDto
dto
)
{
AuctionRecordExample
example
=
new
AuctionRecordExample
();
...
...
ch-dao/src/main/java/com/wwdz/ch/db/impl/distribution/DistributionOrderDaoImpl.java
View file @
adbda99d
...
...
@@ -43,6 +43,15 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao {
return
distributionOrderMapper
.
selectOneByExample
(
example
);
}
@Override
public
DistributionOrder
findByItemId
(
long
itemId
)
{
DistributionOrderExample
example
=
new
DistributionOrderExample
();
DistributionOrderExample
.
Criteria
criteria
=
example
.
createCriteria
();
criteria
.
andItemIdEqualTo
(
itemId
);
return
distributionOrderMapper
.
selectOneByExample
(
example
);
}
@Override
public
List
<
DistributionOrder
>
findByBuyerId
(
long
buyerId
)
{
DistributionOrderExample
example
=
new
DistributionOrderExample
();
...
...
ch-dao/src/main/java/com/wwdz/ch/db/mapper/distribution/DistributionOrderMapper.java
View file @
adbda99d
...
...
@@ -83,6 +83,6 @@ public interface DistributionOrderMapper {
List
<
DistributionOrderNum
>
countGroupByStateForUser
(
@Param
(
"buyerId"
)
Long
userId
);
Long
countSelledNum
(
@Param
(
"itemId"
)
Long
itemId
);
Long
countSelledNum
(
@Param
(
"itemId"
)
Long
itemId
);
}
\ No newline at end of file
ch-wx-api/src/main/java/com/wwdz/ch/wx/entity/vo/distribution/AuctionDetailVo.java
View file @
adbda99d
...
...
@@ -94,4 +94,17 @@ public class AuctionDetailVo implements Entity {
*/
private
String
description
;
/**
* 用户的状态
* 出价、已领先、立即支付、竞拍结束
*/
private
Integer
userState
;
private
String
userStateName
;
/**
* 是否延长
*/
private
Boolean
isExtend
;
}
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/AuctionRecordServiceImpl.java
View file @
adbda99d
...
...
@@ -7,32 +7,109 @@ import com.wwdz.ch.db.dao.distribution.AuctionConfigDao;
import
com.wwdz.ch.db.dao.distribution.AuctionRecordDao
;
import
com.wwdz.ch.db.domain.distribution.AuctionConfig
;
import
com.wwdz.ch.db.domain.distribution.AuctionRecord
;
import
com.wwdz.ch.db.domain.distribution.SupplierItem
;
import
com.wwdz.ch.db.dto.request.distribution.AuctionRecordRequestDto
;
import
com.wwdz.ch.wx.entity.vo.distribution.AuctionRecordVo
;
import
com.wwdz.ch.wx.service.distribution.AuctionRecordService
;
import
com.wwdz.ch.wx.util.RedisUtil
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
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.time.Duration
;
import
java.time.Instant
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
@Service
public
class
AuctionRecordServiceImpl
implements
AuctionRecordService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AuctionRecordServiceImpl
.
class
);
private
static
final
String
LOCK_KEY_PRE
=
"AUCTION:"
;
@Autowired
AuctionConfigDao
auctionConfigDao
;
@Autowired
AuctionRecordDao
auctionRecordDao
;
@Autowired
RedissonClient
redissonClient
;
@Override
@Transactional
public
Result
createAuctionRecord
(
AuctionRecordRequestDto
dto
)
{
return
null
;
long
itemId
=
dto
.
getItemId
();
String
itemIdKey
=
LOCK_KEY_PRE
+
itemId
;
RLock
lock
=
redissonClient
.
getLock
(
itemIdKey
);
try
{
if
(
lock
.
tryLock
(
5
,
5
,
TimeUnit
.
SECONDS
))
{
Date
now
=
new
Date
();
//查询竞拍配置信息
AuctionConfig
auctionConfig
=
auctionConfigDao
.
findByItemId
(
itemId
);
Date
endTime
=
auctionConfig
.
getRealEndTime
();
//当前查询出来的拍卖还没截拍,但是已过时间,则更新截拍的状态
if
(
auctionConfig
.
getIsValid
()
&&
now
.
after
(
endTime
))
{
auctionConfigDao
.
setEnd
(
itemId
);
return
Result
.
failed
(
"该商品已截拍"
);
}
else
if
(!
auctionConfig
.
getIsValid
())
{
return
Result
.
failed
(
"该商品已截拍"
);
}
//查询当前最新的价格
AuctionRecord
auctionRecord
=
auctionRecordDao
.
findLastedRecord
(
itemId
);
long
price
=
PriceUtil
.
convertPriceFromStr
(
dto
.
getPrice
());
if
(
auctionRecord
!=
null
)
{
long
lastedPrice
=
auctionRecord
.
getPrice
();
if
(
price
<=
lastedPrice
)
{
return
Result
.
failed
(
"当前出价已不是最高价,请刷新出价记录"
);
}
//把上次的最高价记录改为落后
auctionRecordDao
.
updateNotLeadById
(
auctionRecord
.
getId
());
}
//插入最新出价记录
AuctionRecord
addRecord
=
new
AuctionRecord
();
addRecord
.
setIsLead
(
true
);
addRecord
.
setShareRecordId
(
dto
.
getShareRecordId
());
addRecord
.
setCreateTime
(
now
);
addRecord
.
setDistributorId
(
dto
.
getDistributorId
());
addRecord
.
setItemId
(
itemId
);
addRecord
.
setPrice
(
price
);
addRecord
.
setUserId
(
dto
.
getUserId
());
auctionRecordDao
.
insert
(
addRecord
);
//如果当前时间是拍卖截止时间的最后五分钟内,则再延长五分钟
Instant
instant
=
endTime
.
toInstant
().
minus
(
Duration
.
ofMinutes
(
5
));
Date
time
=
Date
.
from
(
instant
);
if
(
now
.
after
(
time
))
{
Instant
afterInstant
=
endTime
.
toInstant
().
plus
(
Duration
.
ofMinutes
(
5
));
Date
newRealEndTime
=
Date
.
from
(
afterInstant
);
auctionConfigDao
.
updateRealEndTime
(
itemId
,
newRealEndTime
);
logger
.
info
(
"商品id:{}, 用户id:{}, 本次出价时间: {}, 原先截拍时间为:{}, 延长截拍时间为{}"
,
itemId
,
dto
.
getUserId
(),
now
,
endTime
,
newRealEndTime
);
}
return
Result
.
success
();
}
else
{
return
Result
.
failed
(
"出价者较多,稍后再试"
);
}
}
catch
(
Exception
e
)
{
logger
.
error
(
"扣减库存失败 error : {}"
,
e
);
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
}
finally
{
if
(
lock
!=
null
&&
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
}
}
return
Result
.
failed
(
"出价失败"
);
}
@Override
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/DistributionOrderServiceImpl.java
View file @
adbda99d
...
...
@@ -22,6 +22,7 @@ import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo;
import
com.wwdz.ch.wx.service.distribution.DistributionOrderService
;
import
com.wwdz.ch.wx.service.distribution.SendMsgService
;
import
com.xxdxxs.utils.EntityMapper
;
import
org.redisson.api.RedissonClient
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -76,6 +77,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Autowired
RefundOrderDao
refundOrderDao
;
@Autowired
RedissonClient
redissonClient
;
@Transactional
@Override
public
Result
createDistributionOrder
(
DistributionOrderRequestDto
dto
)
{
...
...
@@ -96,7 +100,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
return
Result
.
failed
(
"商品库存不足"
);
}
//商品限购数量
int
buyLimitNum
=
supplierItem
.
getBuyLimitNum
()
==
null
?
5
:
supplierItem
.
getBuyLimitNum
();
int
buyLimitNum
=
supplierItem
.
getBuyLimitNum
()
==
-
1
?
9999999
:
supplierItem
.
getBuyLimitNum
();
//检查该购买者是否超出限购数量
//1.查询购买者对该商品的历史购买记录
List
<
DistributionOrder
>
distributionOrders
=
distributionOrderDao
.
findValidOrderOfItemIdByBuyerId
(
dto
.
getBuyerId
(),
distributorShareRecord
.
getItemId
());
...
...
@@ -167,6 +171,56 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
}
@Override
public
Result
createAuctionOrder
(
DistributionOrderRequestDto
dto
)
{
try
{
String
shareRecordId
=
dto
.
getShareRecordId
();
String
distributionOrderId
=
IdUtils
.
getOrderNumber
(
DISTRIBUTION_ORDER_PREFIX
);
DistributionOrder
distributionOrder
=
new
DistributionOrder
();
distributionOrder
.
setItemId
(
dto
.
getItemId
());
distributionOrder
.
setItemNum
(
1
);
distributionOrder
.
setShareRecordId
(
shareRecordId
);
distributionOrder
.
setDistributionOrderId
(
distributionOrderId
);
distributionOrder
.
setBuyerId
(
dto
.
getBuyerId
());
distributionOrder
.
setBuyerOpenid
(
dto
.
getBuyerOpenid
());
distributionOrder
.
setShopId
(
dto
.
getShopId
());
distributionOrder
.
setSellerId
(
dto
.
getSellerId
());
distributionOrder
.
setAmount
(
PriceUtil
.
convertPriceFromStr
(
dto
.
getAmount
()));
distributionOrder
.
setAddressId
(
dto
.
getAddressId
());
distributionOrder
.
setReceiverAddress
(
dto
.
getReceiverAddress
());
distributionOrder
.
setReceiverName
(
dto
.
getReceiverName
());
distributionOrder
.
setReceiverPhone
(
dto
.
getReceiverPhone
());
distributionOrder
.
setCreateTime
(
new
Date
());
distributionOrder
.
setUpdateTime
(
new
Date
());
distributionOrder
.
setState
(
DistributionEnum
.
DistributionOrderStateEnum
.
PRE_PAY
.
getCode
());
distributionOrderDao
.
insert
(
distributionOrder
);
Map
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"distributionOrderId"
,
distributionOrderId
);
map
.
put
(
"prepayId"
,
null
);
//计算分销商的利润
DistributorProfit
distributorProfit
=
new
DistributorProfit
();
//供货成本价
SupplierItem
supplierItem
=
supplierItemDao
.
findById
(
dto
.
getItemId
());
//利润,该记录在用户未付款时未无效,仅用于在分销商查看订单详情时,计算预计利润
Double
profit
=
distributionOrder
.
getAmount
().
doubleValue
()
*
0.03
;
distributorProfit
.
setDistributionOrderId
(
distributionOrderId
);
distributorProfit
.
setDistributorId
(
distributionOrder
.
getSellerId
());
distributorProfit
.
setItemId
(
distributionOrder
.
getItemId
());
distributorProfit
.
setItemNum
(
distributionOrder
.
getItemNum
());
distributorProfit
.
setAmount
(
distributionOrder
.
getAmount
());
distributorProfit
.
setItemCost
(
supplierItem
.
getDistributionPrice
());
distributorProfit
.
setProfit
((
long
)
Math
.
floor
(
profit
));
distributorProfit
.
setCreateTime
(
new
Date
());
distributorProfit
.
setIsValid
(
false
);
distributorProfitDao
.
insert
(
distributorProfit
);
return
Result
.
success
(
map
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"创建拍卖分销订单失败 error : {}"
,
e
);
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
}
return
Result
.
failed
(
"拍卖分销订单下单失败"
);
}
@Override
public
Result
buySample
(
DistributionOrderRequestDto
dto
)
{
try
{
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/SupplierItemServiceImpl.java
View file @
adbda99d
...
...
@@ -12,10 +12,12 @@ import com.wwdz.ch.db.dao.distribution.*;
import
com.wwdz.ch.db.domain.Switch
;
import
com.wwdz.ch.db.domain.distribution.*
;
import
com.wwdz.ch.db.dto.request.distribution.AuctionRecordRequestDto
;
import
com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto
;
import
com.wwdz.ch.db.dto.request.distribution.DistributorShareRecordRequestDto
;
import
com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto
;
import
com.wwdz.ch.core.entity.SupplierItemVo
;
import
com.wwdz.ch.wx.entity.vo.distribution.AuctionDetailVo
;
import
com.wwdz.ch.wx.service.distribution.DistributionOrderService
;
import
com.wwdz.ch.wx.service.distribution.SupplierItemService
;
import
com.xxdxxs.utils.DateUtils
;
import
com.xxdxxs.utils.EntityMapper
;
...
...
@@ -68,6 +70,8 @@ public class SupplierItemServiceImpl implements SupplierItemService {
@Autowired
AuctionRecordDao
auctionRecordDao
;
@Autowired
DistributionOrderService
distributionOrderService
;
@Override
public
Result
findList
(
SupplierItemRequestDto
dto
)
{
...
...
@@ -276,6 +280,7 @@ public class SupplierItemServiceImpl implements SupplierItemService {
public
Result
findAuctionDetail
(
SupplierItemRequestDto
dto
)
{
try
{
AuctionDetailVo
auctionDetailVo
=
new
AuctionDetailVo
();
Date
now
=
new
Date
();
long
itemId
=
0
;
String
shareRecordId
=
dto
.
getShareRecordId
();
DistributorShareRecord
distributorShareRecord
=
null
;
...
...
@@ -293,18 +298,30 @@ public class SupplierItemServiceImpl implements SupplierItemService {
}
//查询商品竞拍信息
AuctionConfig
auctionConfig
=
auctionConfigDao
.
findByItemId
(
itemId
);
//查询商品竞拍记录
AuctionRecordRequestDto
auctionRecordRequestDto
=
new
AuctionRecordRequestDto
();
auctionRecordRequestDto
.
setItemId
(
itemId
);
auctionRecordRequestDto
.
setPage
(
dto
.
getPage
());
auctionRecordRequestDto
.
setLimit
(
dto
.
getLimit
());
List
<
AuctionRecord
>
auctionRecordList
=
auctionRecordDao
.
findByPage
(
auctionRecordRequestDto
);
AuctionRecord
lastedRecord
=
auctionRecordDao
.
findLastedRecord
(
itemId
);
//当前价
if
(
CollectionUtils
.
isEmpty
(
auctionRecordList
))
{
auctionDetailVo
.
setUserState
(
DistributionEnum
.
AuctionUserStateEnum
.
PROCESS
.
getCode
());
auctionDetailVo
.
setUserStateName
(
DistributionEnum
.
AuctionUserStateEnum
.
PROCESS
.
getDes
());
auctionDetailVo
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
auctionConfig
.
getStartPrice
()));
}
else
{
AuctionRecord
lastedRecord
=
auctionRecordDao
.
findLastedRecord
(
itemId
);
auctionDetailVo
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
lastedRecord
.
getPrice
()));
//如果最高价是自己出的,用户状态显示已领先
if
(
lastedRecord
.
getUserId
().
longValue
()
==
dto
.
getUserId
().
longValue
())
{
auctionDetailVo
.
setUserState
(
DistributionEnum
.
AuctionUserStateEnum
.
LEAD
.
getCode
());
auctionDetailVo
.
setUserStateName
(
DistributionEnum
.
AuctionUserStateEnum
.
LEAD
.
getDes
());
}
else
{
auctionDetailVo
.
setUserState
(
DistributionEnum
.
AuctionUserStateEnum
.
PROCESS
.
getCode
());
auctionDetailVo
.
setUserStateName
(
DistributionEnum
.
AuctionUserStateEnum
.
PROCESS
.
getDes
());
}
}
auctionDetailVo
.
setAuctionRecordList
(
auctionRecordList
);
SupplierItem
supplierItem
=
supplierItemDao
.
findById
(
itemId
);
...
...
@@ -323,13 +340,32 @@ public class SupplierItemServiceImpl implements SupplierItemService {
auctionDetailVo
.
setStartTime
(
startTime
);
auctionDetailVo
.
setEndTime
(
auctionConfig
.
getEndTime
());
auctionDetailVo
.
setRealEndTime
(
realEndTime
);
Date
now
=
new
Date
();
DistributionOrder
distributionOrder
=
distributionOrderDao
.
findByItemId
(
itemId
);
if
(
now
.
before
(
startTime
))
{
auctionDetailVo
.
setState
(
DistributionEnum
.
AuctionStateEnum
.
NOT_START
.
getCode
());
auctionDetailVo
.
setStateName
(
DistributionEnum
.
AuctionStateEnum
.
NOT_START
.
getDes
());
}
else
if
(
now
.
after
(
realEndTime
))
{
auctionDetailVo
.
setState
(
DistributionEnum
.
AuctionStateEnum
.
END
.
getCode
());
auctionDetailVo
.
setStateName
(
DistributionEnum
.
AuctionStateEnum
.
END
.
getDes
());
auctionDetailVo
.
setUserState
(
DistributionEnum
.
AuctionUserStateEnum
.
END
.
getCode
());
auctionDetailVo
.
setUserStateName
(
DistributionEnum
.
AuctionUserStateEnum
.
END
.
getDes
());
//如果当前时间已经超过截拍时间,并且竞拍配置还未改成无效,则进行修改
if
(
auctionConfig
.
getIsValid
())
{
auctionConfigDao
.
setEnd
(
itemId
);
}
//如果是该用户竞拍成功,还没生成订单则用户状态为立即支付
if
(
lastedRecord
.
getUserId
().
longValue
()
==
dto
.
getUserId
().
longValue
())
{
//竞拍结束后未生成订单
if
(
distributionOrder
==
null
||
distributionOrder
.
getPayTime
()
==
null
)
{
auctionDetailVo
.
setUserState
(
DistributionEnum
.
AuctionUserStateEnum
.
PRE_PAY
.
getCode
());
auctionDetailVo
.
setUserStateName
(
DistributionEnum
.
AuctionUserStateEnum
.
PRE_PAY
.
getDes
());
}
else
{
//竞拍结束页生成了订单并支付过了就显示竞拍结束
auctionDetailVo
.
setUserState
(
DistributionEnum
.
AuctionUserStateEnum
.
END
.
getCode
());
auctionDetailVo
.
setUserStateName
(
DistributionEnum
.
AuctionUserStateEnum
.
END
.
getDes
());
}
}
}
else
{
auctionDetailVo
.
setState
(
DistributionEnum
.
AuctionStateEnum
.
IN_AUCTION
.
getCode
());
auctionDetailVo
.
setStateName
(
DistributionEnum
.
AuctionStateEnum
.
IN_AUCTION
.
getDes
());
...
...
@@ -339,6 +375,12 @@ public class SupplierItemServiceImpl implements SupplierItemService {
"奖励则归属于第一个分享给买家的分销商。"
+
"(举例:某拍品最终成拍价是1000元,有4个分销商参与分销,则中拍买家的分销商分得30元佣金,其余3个分销商没人分得10元佣金)"
);
auctionDetailVo
.
setDescription
(
supplierItem
.
getDescription
());
//是否延迟截拍的标识
if
(!
auctionConfig
.
getEndTime
().
equals
(
auctionConfig
.
getRealEndTime
()))
{
auctionDetailVo
.
setIsExtend
(
true
);
}
else
{
auctionDetailVo
.
setIsExtend
(
false
);
}
return
Result
.
success
(
auctionDetailVo
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"查询拍卖商品详情 error : {}"
,
e
);
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/service/distribution/DistributionOrderService.java
View file @
adbda99d
...
...
@@ -13,6 +13,14 @@ public interface DistributionOrderService {
Result
createDistributionOrder
(
DistributionOrderRequestDto
dto
);
/**
* 创建拍卖分销单
* @param dto
* @return
*/
Result
createAuctionOrder
(
DistributionOrderRequestDto
dto
);
/**
* 分销商购买样品
* @param dto
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/web/distribution/AuctionRecordController.java
View file @
adbda99d
...
...
@@ -45,6 +45,8 @@ public class AuctionRecordController {
Validator
validator
=
new
Validator
(
FormHandler
.
ofEntity
(
dto
));
validator
.
set
(
"itemId"
,
"商品id"
).
must
().
number
()
.
set
(
"price"
,
"出价"
).
must
().
string
()
.
set
(
"userId"
,
"userId"
).
must
().
number
()
.
set
(
"shareRecordId"
,
"分享id"
).
must
().
string
()
.
end
();
if
(!
validator
.
isValid
())
{
return
Result
.
failed
(
validator
.
getErrorInfo
());
...
...
@@ -54,4 +56,5 @@ public class AuctionRecordController {
}
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