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
7fde94ae
Commit
7fde94ae
authored
Mar 12, 2024
by
shiyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
发送短信
parent
8a8f2d45
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
220 additions
and
36 deletions
+220
-36
ch-core/src/main/java/com/wwdz/ch/core/notify/AliSmsSender.java
...e/src/main/java/com/wwdz/ch/core/notify/AliSmsSender.java
+27
-10
ch-core/src/main/java/com/wwdz/ch/core/util/CacheUtil.java
ch-core/src/main/java/com/wwdz/ch/core/util/CacheUtil.java
+14
-0
ch-wx-api/src/main/java/com/wwdz/ch/wx/entity/AuctionOfferNoticeMsg.java
...ain/java/com/wwdz/ch/wx/entity/AuctionOfferNoticeMsg.java
+1
-1
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/AuctionRecordServiceImpl.java
...wdz/ch/wx/impl/distribution/AuctionRecordServiceImpl.java
+29
-16
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/DistributionOrderServiceImpl.java
...ch/wx/impl/distribution/DistributionOrderServiceImpl.java
+31
-9
ch-wx-api/src/main/java/com/wwdz/ch/wx/job/AutoSendMsgJob.java
...-api/src/main/java/com/wwdz/ch/wx/job/AutoSendMsgJob.java
+118
-0
No files found.
ch-core/src/main/java/com/wwdz/ch/core/notify/AliSmsSender.java
View file @
7fde94ae
package
com.wwdz.ch.core.notify
;
package
com.wwdz.ch.core.notify
;
import
com.aliyun.dysmsapi20170525.models.SendSmsResponse
;
import
com.aliyun.dysmsapi20170525.models.SendSmsResponse
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.util.CacheUtil
;
import
com.wwdz.ch.db.domain.User
;
import
com.xxdxxs.utils.JsonUtils
;
import
com.xxdxxs.utils.JsonUtils
;
import
com.xxdxxs.utils.StringUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
okhttp3.Cache
;
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.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -29,6 +35,9 @@ public class AliSmsSender implements SmsSender {
...
@@ -29,6 +35,9 @@ public class AliSmsSender implements SmsSender {
@Value
(
"${dts.notify.alisms.templateCode}"
)
@Value
(
"${dts.notify.alisms.templateCode}"
)
private
String
templateCode
;
private
String
templateCode
;
@Autowired
CacheUtil
cacheUtil
;
//短信API产品名称(短信产品名固定,无需修改)
//短信API产品名称(短信产品名固定,无需修改)
final
String
product
=
"Dysmsapi"
;
final
String
product
=
"Dysmsapi"
;
...
@@ -83,10 +92,18 @@ public class AliSmsSender implements SmsSender {
...
@@ -83,10 +92,18 @@ public class AliSmsSender implements SmsSender {
}
}
public
SmsResult
sendAuctionWithTemplate
(
String
phone
,
String
itemName
)
{
public
Result
sendAuctionWithTemplate
(
long
userId
,
String
msg
)
{
try
{
try
{
User
user
=
cacheUtil
.
appletUserInfoCache
.
getIfPresent
(
userId
).
get
();
String
phone
=
user
.
getMobile
();
if
(
StringUtils
.
isEmpty
(
phone
))
{
logger
.
error
(
"======== userId:{},手机号为空不能发送短信 ========"
,
userId
);
return
Result
.
failed
(
"手机号为空"
);
}
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"msg"
,
"您参与拍卖的商品\""
+
itemName
+
"\",已中拍。"
);
map
.
put
(
"msg"
,
msg
);
logger
.
info
(
"拍卖通知发送内容 : {} "
,
msg
);
com
.
aliyun
.
dysmsapi20170525
.
Client
client
=
createClient
();
com
.
aliyun
.
dysmsapi20170525
.
Client
client
=
createClient
();
com
.
aliyun
.
dysmsapi20170525
.
models
.
SendSmsRequest
sendSmsRequest
=
new
com
.
aliyun
.
dysmsapi20170525
.
models
.
SendSmsRequest
()
com
.
aliyun
.
dysmsapi20170525
.
models
.
SendSmsRequest
sendSmsRequest
=
new
com
.
aliyun
.
dysmsapi20170525
.
models
.
SendSmsRequest
()
.
setPhoneNumbers
(
phone
)
.
setPhoneNumbers
(
phone
)
...
@@ -94,18 +111,18 @@ public class AliSmsSender implements SmsSender {
...
@@ -94,18 +111,18 @@ public class AliSmsSender implements SmsSender {
.
setTemplateParam
(
JsonUtils
.
fromMap
(
map
))
.
setTemplateParam
(
JsonUtils
.
fromMap
(
map
))
.
setSignName
(
"玩物得志"
);
.
setSignName
(
"玩物得志"
);
SendSmsResponse
sendSmsResponse
=
client
.
sendSmsWithOptions
(
sendSmsRequest
,
new
com
.
aliyun
.
teautil
.
models
.
RuntimeOptions
());
SendSmsResponse
sendSmsResponse
=
client
.
sendSmsWithOptions
(
sendSmsRequest
,
new
com
.
aliyun
.
teautil
.
models
.
RuntimeOptions
());
logger
.
info
(
"
短线验证
发送结果 : {} "
,
JsonUtils
.
from
(
sendSmsResponse
));
logger
.
info
(
"
拍卖通知
发送结果 : {} "
,
JsonUtils
.
from
(
sendSmsResponse
));
if
(
"OK"
.
equals
(
sendSmsResponse
.
getBody
().
code
))
{
if
(
"OK"
.
equals
(
sendSmsResponse
.
getBody
().
code
))
{
SmsResult
smsResult
=
new
SmsResult
();
return
Result
.
success
();
smsResult
.
setSuccessful
(
true
);
smsResult
.
setResult
(
itemName
);
return
smsResult
;
}
}
throw
new
RuntimeException
(
"验证码发送失败"
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
"AliSmsSender.sendWithTemplate(),mobile={}"
,
phone
,
e
);
logger
.
error
(
"AliSmsSender.sendWithTemplate(),userId={}, error:{}"
,
userId
,
e
);
throw
new
RuntimeException
(
"验证码发送失败"
);
}
}
return
Result
.
failed
();
}
}
public
static
void
main
(
String
[]
args
)
{
}
}
}
ch-core/src/main/java/com/wwdz/ch/core/util/CacheUtil.java
View file @
7fde94ae
...
@@ -164,6 +164,20 @@ public class CacheUtil {
...
@@ -164,6 +164,20 @@ public class CacheUtil {
return map.get(key);
return map.get(key);
}*/
}*/
/**
* 查询小程序用户手机号
*
* @return
*/
public
String
getAppletUserPhoneList
(
long
key
)
{
User
user
=
dtsUserDao
.
findById
(
key
);
return
user
.
getMobile
();
/* List<User> userList = dtsUserDao.findAll();
Map<Long, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getNickname, (k1, k2) -> k2));
return map.get(key);*/
}
/**
/**
* 查询小程序会员
* 查询小程序会员
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/entity/AuctionOfferNoticeMsg.java
View file @
7fde94ae
...
@@ -24,7 +24,7 @@ public class AuctionOfferNoticeMsg implements Entity {
...
@@ -24,7 +24,7 @@ public class AuctionOfferNoticeMsg implements Entity {
/**
/**
* 商品id
* 商品id
*/
*/
private
Stri
ng
itemId
;
private
Lo
ng
itemId
;
/**
/**
* 商品名称
* 商品名称
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/AuctionRecordServiceImpl.java
View file @
7fde94ae
...
@@ -5,6 +5,7 @@ import com.wwdz.ch.core.api.OfficialAccountApi;
...
@@ -5,6 +5,7 @@ import com.wwdz.ch.core.api.OfficialAccountApi;
import
com.wwdz.ch.core.api.wxpay.WxPayServiceApi
;
import
com.wwdz.ch.core.api.wxpay.WxPayServiceApi
;
import
com.wwdz.ch.core.consts.CommConsts
;
import
com.wwdz.ch.core.consts.CommConsts
;
import
com.wwdz.ch.core.consts.DistributionEnum
;
import
com.wwdz.ch.core.consts.DistributionEnum
;
import
com.wwdz.ch.core.notify.AliSmsSender
;
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.MediaUtil
;
import
com.wwdz.ch.core.util.MediaUtil
;
...
@@ -21,6 +22,7 @@ import com.wwdz.ch.wx.entity.vo.distribution.AuctionRecordRowVo;
...
@@ -21,6 +22,7 @@ import com.wwdz.ch.wx.entity.vo.distribution.AuctionRecordRowVo;
import
com.wwdz.ch.wx.entity.vo.distribution.AuctionRecordVo
;
import
com.wwdz.ch.wx.entity.vo.distribution.AuctionRecordVo
;
import
com.wwdz.ch.wx.service.distribution.AuctionRecordService
;
import
com.wwdz.ch.wx.service.distribution.AuctionRecordService
;
import
com.wwdz.ch.wx.service.distribution.SendMsgService
;
import
com.wwdz.ch.wx.service.distribution.SendMsgService
;
import
com.xxdxxs.utils.DateUtils
;
import
com.xxdxxs.utils.EntityMapper
;
import
com.xxdxxs.utils.EntityMapper
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.redisson.api.RedissonClient
;
...
@@ -77,6 +79,9 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
...
@@ -77,6 +79,9 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
@Autowired
@Autowired
SendMsgService
sendMsgService
;
SendMsgService
sendMsgService
;
@Autowired
AliSmsSender
aliSmsSender
;
@Override
@Override
@Transactional
@Transactional
...
@@ -103,7 +108,7 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
...
@@ -103,7 +108,7 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
logger
.
info
(
"======== 拍卖出价,对应分享id = {}, 无效 ========"
,
shareRecordId
);
logger
.
info
(
"======== 拍卖出价,对应分享id = {}, 无效 ========"
,
shareRecordId
);
return
Result
.
failed
(
"该商品分享链接已失效"
);
return
Result
.
failed
(
"该商品分享链接已失效"
);
}
}
SupplierItem
supplierItem
=
supplierItemDao
.
findById
(
itemId
);
//查询当前最新的价格
//查询当前最新的价格
AuctionRecord
auctionRecord
=
auctionRecordDao
.
findLastedRecord
(
itemId
);
AuctionRecord
auctionRecord
=
auctionRecordDao
.
findLastedRecord
(
itemId
);
long
price
=
PriceUtil
.
convertPriceFromStr
(
dto
.
getPrice
());
long
price
=
PriceUtil
.
convertPriceFromStr
(
dto
.
getPrice
());
...
@@ -115,21 +120,23 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
...
@@ -115,21 +120,23 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
//把上次的最高价记录改为落后
//把上次的最高价记录改为落后
auctionRecordDao
.
updateNotLeadById
(
auctionRecord
.
getId
());
auctionRecordDao
.
updateNotLeadById
(
auctionRecord
.
getId
());
//发送模板消息,提示用户出价被超越
//发送模板消息,提示用户出价被超越
User
user
=
userDao
.
queryById
(
auctionRecord
.
getUserId
());
String
openId
=
sendMsgService
.
getOpenIdByUserId
(
auctionRecord
.
getUserId
());
String
unionId
=
user
.
getWeixinUnionid
();
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
openId
))
{
OfficialAccountSubscribeRecord
officialAccountSubscribeRecord
=
officialAccountSubscribeRecordDao
.
findOne
(
unionId
);
//没有订阅
if
(
officialAccountSubscribeRecord
==
null
||
officialAccountSubscribeRecord
.
getEnabled
().
intValue
()
==
0
)
{
logger
.
info
(
">>>>>>>>>> 用户id = {}, unionId = {} ,尚未订阅公众号,无法推送消息 <<<<<<<<<<<"
,
auctionRecord
.
getUserId
(),
unionId
);
//发送短信
}
else
{
SupplierItem
supplierItem
=
supplierItemDao
.
findById
(
auctionRecord
.
getItemId
());
String
openId
=
officialAccountSubscribeRecord
.
getOpenid
();
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
auctionOfferNoticeMsg
.
setItemId
(
supplierItem
.
getId
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
price
));
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
price
));
auctionOfferNoticeMsg
.
setOpenId
(
openId
);
auctionOfferNoticeMsg
.
setOpenId
(
openId
);
sendMsgService
.
sendAuctionOfferOutMsg
(
auctionOfferNoticeMsg
);
Result
result
=
sendMsgService
.
sendAuctionOfferOutMsg
(
auctionOfferNoticeMsg
);
if
(!
result
.
getSuccess
())
{
String
msg
=
"您出价过的拍品"
+
supplierItem
.
getName
()
+
"的价格被其他人超越了, 当前价是"
+
PriceUtil
.
convertPriceFenToYuan
(
price
)
+
"元,竞拍截止时间是"
+
DateUtils
.
toString
(
endTime
)
+
", 请前往\"换藏小程序\"查看"
;
aliSmsSender
.
sendAuctionWithTemplate
(
auctionRecord
.
getUserId
(),
msg
);
}
}
else
{
String
msg
=
"您出价过的拍品"
+
supplierItem
.
getName
()
+
"的价格被其他人超越了, 当前价是"
+
PriceUtil
.
convertPriceFenToYuan
(
price
)
+
"元,竞拍截止时间是"
+
DateUtils
.
toString
(
endTime
)
+
", 请前往\"换藏小程序\"查看"
;
aliSmsSender
.
sendAuctionWithTemplate
(
auctionRecord
.
getUserId
(),
msg
);
}
}
}
}
//插入最新出价记录
//插入最新出价记录
...
@@ -154,18 +161,24 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
...
@@ -154,18 +161,24 @@ public class AuctionRecordServiceImpl implements AuctionRecordService {
}
}
//发送消息通知对应的分销商有用户出价
//发送消息通知对应的分销商有用户出价
SupplierItem
supplierItem
=
supplierItemDao
.
findById
(
dto
.
getItemId
());
String
openId
=
sendMsgService
.
getOpenIdByUserId
(
distributorShareRecord
.
getDistributorId
());
String
openId
=
sendMsgService
.
getOpenIdByUserId
(
distributorShareRecord
.
getDistributorId
());
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
openId
))
{
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
openId
))
{
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
auctionOfferNoticeMsg
.
setItemId
(
supplierItem
.
getId
());
auctionOfferNoticeMsg
.
setOpenId
(
openId
);
auctionOfferNoticeMsg
.
setOpenId
(
openId
);
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
price
));
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
price
));
sendMsgService
.
offerNoticeToDistributorMsg
(
auctionOfferNoticeMsg
);
Result
result
=
sendMsgService
.
offerNoticeToDistributorMsg
(
auctionOfferNoticeMsg
);
if
(!
result
.
getSuccess
())
{
String
msg
=
"您分销的拍品"
+
supplierItem
.
getName
()
+
"有人成出价"
+
PriceUtil
.
convertPriceFenToYuan
(
price
)
+
"元,请前往\"换藏小程序\"查看"
;
aliSmsSender
.
sendAuctionWithTemplate
(
distributorShareRecord
.
getDistributorId
(),
msg
);
}
}
else
{
}
else
{
logger
.
info
(
">>>>> 分销商id :{}, 获取openid失败,无法通知分销商有用户出价 <<<<<"
,
distributorShareRecord
.
getDistributorId
());
String
msg
=
"您分销的拍品"
+
supplierItem
.
getName
()
+
"有人成出价"
+
PriceUtil
.
convertPriceFenToYuan
(
price
)
+
"元,请前往\"换藏小程序\"查看"
;
aliSmsSender
.
sendAuctionWithTemplate
(
distributorShareRecord
.
getDistributorId
(),
msg
);
}
}
return
Result
.
success
();
return
Result
.
success
();
}
else
{
}
else
{
return
Result
.
failed
(
"出价者较多,请刷新出价记录"
);
return
Result
.
failed
(
"出价者较多,请刷新出价记录"
);
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/impl/distribution/DistributionOrderServiceImpl.java
View file @
7fde94ae
...
@@ -8,10 +8,12 @@ import com.wwdz.ch.core.consts.DistributionEnum;
...
@@ -8,10 +8,12 @@ import com.wwdz.ch.core.consts.DistributionEnum;
import
com.wwdz.ch.core.consts.LogisticsEnum
;
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.entity.wxPay.DistributionOrderRefundRequestDto
;
import
com.wwdz.ch.core.entity.wxPay.DistributionOrderRefundRequestDto
;
import
com.wwdz.ch.core.notify.AliSmsSender
;
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.*
;
import
com.wwdz.ch.core.util.*
;
import
com.wwdz.ch.db.dao.distribution.*
;
import
com.wwdz.ch.db.dao.distribution.*
;
import
com.wwdz.ch.db.domain.User
;
import
com.wwdz.ch.db.domain.distribution.*
;
import
com.wwdz.ch.db.domain.distribution.*
;
import
com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto
;
import
com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto
;
import
com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto
;
import
com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto
;
...
@@ -22,6 +24,7 @@ import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo;
...
@@ -22,6 +24,7 @@ import com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderDetailVo;
import
com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo
;
import
com.wwdz.ch.wx.entity.vo.distribution.DistributionOrderVo
;
import
com.wwdz.ch.wx.service.distribution.DistributionOrderService
;
import
com.wwdz.ch.wx.service.distribution.DistributionOrderService
;
import
com.wwdz.ch.wx.service.distribution.SendMsgService
;
import
com.wwdz.ch.wx.service.distribution.SendMsgService
;
import
com.xxdxxs.utils.DateUtils
;
import
com.xxdxxs.utils.EntityMapper
;
import
com.xxdxxs.utils.EntityMapper
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.redisson.api.RedissonClient
;
...
@@ -90,6 +93,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
...
@@ -90,6 +93,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Autowired
@Autowired
AuctionConfigDao
auctionConfigDao
;
AuctionConfigDao
auctionConfigDao
;
@Autowired
AliSmsSender
aliSmsSender
;
@Transactional
@Transactional
@Override
@Override
public
Result
createDistributionOrder
(
DistributionOrderRequestDto
dto
)
{
public
Result
createDistributionOrder
(
DistributionOrderRequestDto
dto
)
{
...
@@ -263,35 +269,51 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
...
@@ -263,35 +269,51 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
averageProfitRecord
.
setIsValid
(
false
);
averageProfitRecord
.
setIsValid
(
false
);
distributorProfitDao
.
insert
(
averageProfitRecord
);
distributorProfitDao
.
insert
(
averageProfitRecord
);
//通知每一个分享参与出价的分销商
//通知每一个分享参与出价的分销商
String
userOpenId
=
sendMsgService
.
getOpenIdByUserId
(
auctionRecord
.
getUse
rId
());
String
distributorOpenId
=
sendMsgService
.
getOpenIdByUserId
(
record
.
getDistributo
rId
());
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
use
rOpenId
))
{
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
distributo
rOpenId
))
{
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
auctionRecord
.
getPrice
()));
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
auctionRecord
.
getPrice
()));
auctionOfferNoticeMsg
.
setOpenId
(
userOpenId
);
auctionOfferNoticeMsg
.
setOpenId
(
distributorOpenId
);
auctionOfferNoticeMsg
.
setItemId
(
supplierItem
.
getId
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
distributionOrder
.
getAmount
()));
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
distributionOrder
.
getAmount
()));
auctionOfferNoticeMsg
.
setAuctionEndTime
(
auctionConfig
.
getRealEndTime
());
auctionOfferNoticeMsg
.
setAuctionEndTime
(
auctionConfig
.
getRealEndTime
());
sendMsgService
.
auctionSuccessForDistributorsMsg
(
auctionOfferNoticeMsg
);
Result
result
=
sendMsgService
.
auctionSuccessForDistributorsMsg
(
auctionOfferNoticeMsg
);
if
(!
result
.
getSuccess
())
{
String
msg
=
"您分销的拍品"
+
supplierItem
.
getName
()
+
"已成拍,成交价是"
+
PriceUtil
.
convertPriceFenToYuan
(
distributionOrder
.
getAmount
())
+
"元,您预计获得利润"
+
PriceUtil
.
convertDoubleToString
(
Math
.
floor
(
averageProfit
))
+
"元。请前往\"换藏小程序\"查看"
;
aliSmsSender
.
sendAuctionWithTemplate
(
record
.
getDistributorId
(),
msg
);
}
}
else
{
}
else
{
logger
.
info
(
">>>>> 分销商id :{}, 获取openid失败,无法通知参与分享的分销商拍品成交的信息 <<<<<"
,
distributionOrder
.
getSellerId
());
String
msg
=
"您分销的拍品"
+
supplierItem
.
getName
()
+
"已成拍,成交价是"
+
PriceUtil
.
convertPriceFenToYuan
(
distributionOrder
.
getAmount
())
+
"元,您预计获得利润"
+
PriceUtil
.
convertDoubleToString
(
Math
.
floor
(
averageProfit
))
+
"元。请前往\"换藏小程序\"查看"
;
aliSmsSender
.
sendAuctionWithTemplate
(
record
.
getDistributorId
(),
msg
);
}
}
}
}
//把该拍卖配置信息改为已处理
//把该拍卖配置信息改为已处理
auctionConfigDao
.
setDeal
(
dto
.
getItemId
());
auctionConfigDao
.
setDeal
(
dto
.
getItemId
());
//发送中拍信息给用户
//发送中拍信息给用户
String
userOpenId
=
sendMsgService
.
getOpenIdByUserId
(
auctionRecord
.
getUserId
());
String
userOpenId
=
sendMsgService
.
getOpenIdByUserId
(
auctionRecord
.
getUserId
());
Instant
instant
=
now
.
toInstant
().
plus
(
Duration
.
ofHours
(
24
));
Date
payEndTime
=
Date
.
from
(
instant
);
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
userOpenId
))
{
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
userOpenId
))
{
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
auctionRecord
.
getPrice
()));
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
auctionRecord
.
getPrice
()));
auctionOfferNoticeMsg
.
setOpenId
(
userOpenId
);
auctionOfferNoticeMsg
.
setOpenId
(
userOpenId
);
auctionOfferNoticeMsg
.
setItemId
(
supplierItem
.
getId
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setDistributionOrderId
(
distributionOrderId
);
auctionOfferNoticeMsg
.
setDistributionOrderId
(
distributionOrderId
);
Instant
instant
=
now
.
toInstant
().
plus
(
Duration
.
ofHours
(
24
));
Date
payEndTime
=
Date
.
from
(
instant
);
auctionOfferNoticeMsg
.
setPayEndTime
(
payEndTime
);
auctionOfferNoticeMsg
.
setPayEndTime
(
payEndTime
);
sendMsgService
.
auctionSuccessMsg
(
auctionOfferNoticeMsg
);
Result
result
=
sendMsgService
.
auctionSuccessMsg
(
auctionOfferNoticeMsg
);
if
(!
result
.
getSuccess
())
{
String
msg
=
"您已中拍"
+
supplierItem
.
getName
()
+
",成交价是"
+
PriceUtil
.
convertPriceFenToYuan
(
distributionOrder
.
getAmount
())
+
"元,请在"
+
DateUtils
.
toString
(
payEndTime
)
+
"前完成付款,请前往\"换藏小程序\"查看。"
;
aliSmsSender
.
sendAuctionWithTemplate
(
auctionRecord
.
getUserId
(),
msg
);
}
}
else
{
}
else
{
logger
.
info
(
">>>>> 分销商id :{}, 获取openid失败,无法发送模板信息 <<<<<"
,
distributionOrder
.
getSellerId
());
String
msg
=
"您已中拍"
+
supplierItem
.
getName
()
+
",成交价是"
+
PriceUtil
.
convertPriceFenToYuan
(
distributionOrder
.
getAmount
())
+
"元,请在"
+
DateUtils
.
toString
(
payEndTime
)
+
"前完成付款,请前往\"换藏小程序\"查看。"
;
aliSmsSender
.
sendAuctionWithTemplate
(
auctionRecord
.
getUserId
(),
msg
);
}
}
return
Result
.
success
(
map
);
return
Result
.
success
(
map
);
}
else
{
}
else
{
...
...
ch-wx-api/src/main/java/com/wwdz/ch/wx/job/AutoSendMsgJob.java
0 → 100644
View file @
7fde94ae
package
com.wwdz.ch.wx.job
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.util.PriceUtil
;
import
com.wwdz.ch.core.util.StringUtil
;
import
com.wwdz.ch.db.dao.distribution.AuctionConfigDao
;
import
com.wwdz.ch.db.dao.distribution.AuctionRecordDao
;
import
com.wwdz.ch.db.dao.distribution.DistributionOrderDao
;
import
com.wwdz.ch.db.dao.distribution.SupplierItemDao
;
import
com.wwdz.ch.db.domain.distribution.AuctionConfig
;
import
com.wwdz.ch.db.domain.distribution.AuctionRecord
;
import
com.wwdz.ch.db.domain.distribution.DistributionOrder
;
import
com.wwdz.ch.db.domain.distribution.SupplierItem
;
import
com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto
;
import
com.wwdz.ch.wx.entity.AuctionOfferNoticeMsg
;
import
com.wwdz.ch.wx.service.distribution.DistributionOrderService
;
import
com.wwdz.ch.wx.service.distribution.SendMsgService
;
import
com.xxdxxs.utils.StringUtils
;
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.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* 发送模板信息
*/
@Component
public
class
AutoSendMsgJob
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AutoSendMsgJob
.
class
);
private
final
static
String
QUANKU_AUTO_SEND_MSG_KEY
=
"QUANKU_AUTO_SEND_MSG_KEY"
;
@Autowired
DistributionOrderService
distributionOrderService
;
@Autowired
DistributionOrderDao
distributionOrderDao
;
@Autowired
RedissonClient
redissonClient
;
@Autowired
AuctionConfigDao
auctionConfigDao
;
@Autowired
AuctionRecordDao
auctionRecordDao
;
@Autowired
SupplierItemDao
supplierItemDao
;
@Autowired
SendMsgService
sendMsgService
;
/**
* 隔5分钟运行一次
*/
// @Scheduled(fixedDelay = 1000 * 60 * 5)
public
void
execute
()
{
RLock
lock
=
redissonClient
.
getLock
(
QUANKU_AUTO_SEND_MSG_KEY
);
if
(!
lock
.
tryLock
())
{
logger
.
warn
(
"自动发送拍卖通知任务,当前服务实例获取锁成功: {} 获取锁失败,锁被占用不执行"
,
Thread
.
currentThread
().
getId
());
return
;
}
logger
.
info
(
">>>>>>>>>>>>>>>>>>>>>>> 自动发送拍卖通知任务,开始执行 <<<<<<<<<<<<<<<<<<<<<"
);
try
{
//查询一小时内拍卖截拍的商品,通知参与过出价的用户即将截拍
List
<
AuctionConfig
>
auctionConfigList
=
auctionConfigDao
.
findEndList
();
auctionConfigList
.
forEach
(
auctionConfig
->
{
long
itemId
=
auctionConfig
.
getItemId
();
//查询该商品所有出价记录
List
<
AuctionRecord
>
auctionRecordList
=
auctionRecordDao
.
findByItemId
(
itemId
);
if
(!
CollectionUtils
.
isEmpty
(
auctionRecordList
))
{
//用户id去重
List
<
Long
>
userIds
=
auctionRecordList
.
stream
()
.
filter
(
StringUtil
.
distinctByKey
(
AuctionRecord:
:
getUserId
))
.
map
(
AuctionRecord:
:
getUserId
)
.
collect
(
Collectors
.
toList
());
SupplierItem
supplierItem
=
supplierItemDao
.
findById
(
itemId
);
AuctionRecord
lastRecord
=
auctionRecordDao
.
findLastedRecord
(
itemId
);
for
(
long
userId
:
userIds
)
{
String
userOpenId
=
sendMsgService
.
getOpenIdByUserId
(
userId
);
if
(
com
.
xxdxxs
.
utils
.
StringUtils
.
hasLength
(
userOpenId
))
{
AuctionOfferNoticeMsg
auctionOfferNoticeMsg
=
new
AuctionOfferNoticeMsg
();
auctionOfferNoticeMsg
.
setCurrentPrice
(
PriceUtil
.
convertPriceFenToYuan
(
lastRecord
.
getPrice
()));
auctionOfferNoticeMsg
.
setOpenId
(
userOpenId
);
auctionOfferNoticeMsg
.
setItemId
(
supplierItem
.
getId
());
auctionOfferNoticeMsg
.
setItemName
(
supplierItem
.
getName
());
auctionOfferNoticeMsg
.
setAuctionEndTime
(
auctionConfig
.
getRealEndTime
());
sendMsgService
.
aboutToEndMsg
(
auctionOfferNoticeMsg
);
}
else
{
logger
.
info
(
">>>>> 用户id :{}, 获取openid失败,无法通知参与出价的用户即将截拍的信息 <<<<<"
,
userId
);
//发送短信
}
}
}
});
//
}
catch
(
Exception
e
)
{
logger
.
error
(
"同步item增量数据到ES error {}"
,
e
);
}
finally
{
if
(
lock
!=
null
&&
lock
.
isHeldByCurrentThread
())
{
lock
.
unlock
();
logger
.
info
(
"======================== 线程id: {} , 检测截拍的商品,自动创建订单执行结束, 释放锁成功 ========================"
,
Thread
.
currentThread
().
getId
());
}
}
}
}
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