Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
D
draw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
draw
draw
Commits
27dbf3e1
Commit
27dbf3e1
authored
Dec 12, 2022
by
邓吉芬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 添加商户信息
2. 支持人本超市抽奖,改造接口 3. 修改相关业务代码
parent
fa87c65e
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
742 additions
and
45 deletions
+742
-45
RedisController.java
src/main/java/com/miya/draw/controller/RedisController.java
+20
-4
Activity.java
src/main/java/com/miya/draw/entity/Activity.java
+6
-0
SyncRecord.java
src/main/java/com/miya/draw/entity/SyncRecord.java
+3
-0
SyncTrade.java
src/main/java/com/miya/draw/entity/SyncTrade.java
+4
-0
TradeRbcs.java
src/main/java/com/miya/draw/entity/TradeRbcs.java
+113
-0
WinnerRbcs.java
src/main/java/com/miya/draw/entity/WinnerRbcs.java
+66
-0
ActivityStoreAndGoodsStatusEnum.java
.../com/miya/draw/enums/ActivityStoreAndGoodsStatusEnum.java
+5
-3
DrawManagerImpl.java
src/main/java/com/miya/draw/manager/DrawManagerImpl.java
+30
-22
SyncTradeMapper.java
src/main/java/com/miya/draw/mapper/SyncTradeMapper.java
+3
-3
TradeRbcsMapper.java
src/main/java/com/miya/draw/mapper/TradeRbcsMapper.java
+14
-0
WinnerRbcsMapper.java
src/main/java/com/miya/draw/mapper/WinnerRbcsMapper.java
+28
-0
SyncTradeConfigModel.java
src/main/java/com/miya/draw/model/SyncTradeConfigModel.java
+4
-0
IActivityService.java
src/main/java/com/miya/draw/service/IActivityService.java
+9
-0
ISyncTradeService.java
src/main/java/com/miya/draw/service/ISyncTradeService.java
+2
-1
ITradeRbcsService.java
src/main/java/com/miya/draw/service/ITradeRbcsService.java
+29
-0
IWinnerRbcsService.java
src/main/java/com/miya/draw/service/IWinnerRbcsService.java
+21
-0
ActivityServiceImpl.java
.../java/com/miya/draw/service/impl/ActivityServiceImpl.java
+12
-0
ITradeRbcsServiceImpl.java
...ava/com/miya/draw/service/impl/ITradeRbcsServiceImpl.java
+66
-0
IWinnerRbcsServiceImpl.java
...va/com/miya/draw/service/impl/IWinnerRbcsServiceImpl.java
+34
-0
SyncTradeServiceImpl.java
...java/com/miya/draw/service/impl/SyncTradeServiceImpl.java
+20
-5
DrawResultSyncJob.java
src/main/java/com/miya/draw/xxljob/DrawResultSyncJob.java
+13
-0
RbcsDrawResultSyncJob.java
...main/java/com/miya/draw/xxljob/RbcsDrawResultSyncJob.java
+98
-0
RbcsTradeSyncJob.java
src/main/java/com/miya/draw/xxljob/RbcsTradeSyncJob.java
+128
-0
TradeSyncJob.java
src/main/java/com/miya/draw/xxljob/TradeSyncJob.java
+14
-7
No files found.
src/main/java/com/miya/draw/controller/RedisController.java
View file @
27dbf3e1
...
...
@@ -2,6 +2,9 @@ package com.miya.draw.controller;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.collect.Sets
;
import
com.miya.draw.xxljob.RbcsDrawResultSyncJob
;
import
com.miya.draw.xxljob.RbcsTradeSyncJob
;
import
com.miya.draw.xxljob.TradeSyncJob
;
import
io.swagger.annotations.Api
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -9,11 +12,9 @@ import org.springframework.data.redis.connection.RedisConnection;
import
org.springframework.data.redis.core.Cursor
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.ScanOptions
;
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
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.Objects
;
import
java.util.Set
;
...
...
@@ -88,4 +89,19 @@ public class RedisController {
return
keys
;
}
@Resource
private
RbcsDrawResultSyncJob
rbcsDrawResultSyncJob
;
@Resource
private
RbcsTradeSyncJob
rbcsTradeSyncJob
;
@Resource
private
TradeSyncJob
tradeSyncJob
;
@GetMapping
(
"job"
)
public
void
test
()
throws
Exception
{
rbcsDrawResultSyncJob
.
execute
(
null
);
}
}
src/main/java/com/miya/draw/entity/Activity.java
View file @
27dbf3e1
...
...
@@ -29,6 +29,9 @@ public class Activity implements Serializable {
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
value
=
"商户Id"
)
private
Long
mchId
;
@ApiModelProperty
(
value
=
"活动名称"
)
private
String
name
;
...
...
@@ -59,6 +62,9 @@ public class Activity implements Serializable {
@ApiModelProperty
(
value
=
"0 不限制门店 1限制门店"
)
private
Integer
activityStoreStatus
;
@ApiModelProperty
(
value
=
"0 不限商品 1限制商品 2剔除商品"
)
private
Integer
activityGoodsStatus
;
@ApiModelProperty
(
value
=
"开始时间"
)
private
Date
startTime
;
...
...
src/main/java/com/miya/draw/entity/SyncRecord.java
View file @
27dbf3e1
...
...
@@ -27,6 +27,9 @@ public class SyncRecord implements Serializable {
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
value
=
"商户Id"
)
private
Long
mchId
;
@ApiModelProperty
(
value
=
"上次同步到的时间"
)
private
LocalDateTime
lastSyncTime
;
...
...
src/main/java/com/miya/draw/entity/SyncTrade.java
View file @
27dbf3e1
...
...
@@ -28,6 +28,10 @@ public class SyncTrade implements Serializable {
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
value
=
"商户Id"
)
private
Long
mchId
;
@ApiModelProperty
(
value
=
"十足同步表的主键"
)
private
Long
billNo
;
...
...
src/main/java/com/miya/draw/entity/TradeRbcs.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
/**
* @author :djf
* @date :2022-12-09
* @description:
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ApiModel
(
value
=
"trade_rbcs对象"
,
description
=
""
)
public
class
TradeRbcs
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"序号"
)
@TableId
(
value
=
"billno"
,
type
=
IdType
.
AUTO
)
private
Integer
billno
;
@ApiModelProperty
(
value
=
"交易ID"
)
@TableField
(
"tradeIdId"
)
private
String
tradeidid
;
@ApiModelProperty
(
value
=
"流水id"
)
private
String
uuid
;
@ApiModelProperty
(
value
=
"门店号"
)
@TableField
(
"storeId"
)
private
String
storeid
;
@ApiModelProperty
(
value
=
"门店名称"
)
@TableField
(
"storeName"
)
private
String
storename
;
@ApiModelProperty
(
value
=
"小票号"
)
@TableField
(
"tradeNo"
)
private
String
tradeno
;
@ApiModelProperty
(
value
=
"POS机号"
)
@TableField
(
"posNo"
)
private
String
posno
;
@ApiModelProperty
(
value
=
"交易类型"
)
private
String
type
;
@ApiModelProperty
(
value
=
"交易时间"
)
@TableField
(
"tranTime"
)
private
LocalDateTime
trantime
;
@ApiModelProperty
(
value
=
"货号"
)
private
String
code
;
@ApiModelProperty
(
value
=
"条码"
)
private
String
barcode
;
@ApiModelProperty
(
value
=
"商品名称"
)
private
String
name
;
@ApiModelProperty
(
value
=
"品牌"
)
@TableField
(
"brandCode"
)
private
String
brandcode
;
@ApiModelProperty
(
value
=
"类别"
)
@TableField
(
"categoryCode"
)
private
String
categorycode
;
@ApiModelProperty
(
value
=
"包装规格"
)
@TableField
(
"qpcStr"
)
private
String
qpcstr
;
@ApiModelProperty
(
value
=
"价格"
)
private
BigDecimal
price
;
@ApiModelProperty
(
value
=
"数量"
)
private
Integer
qty
;
@ApiModelProperty
(
value
=
"原总金额"
)
@TableField
(
"stdAmount"
)
private
BigDecimal
stdamount
;
@ApiModelProperty
(
value
=
"优惠金额"
)
@TableField
(
"favAmount"
)
private
BigDecimal
favamount
;
@ApiModelProperty
(
value
=
"会员id"
)
@TableField
(
"memberId"
)
private
String
memberid
;
@ApiModelProperty
(
value
=
"手机号"
)
@TableField
(
"identityId"
)
private
String
identityid
;
@ApiModelProperty
(
value
=
"插入时间"
)
private
LocalDateTime
sendtime
;
@ApiModelProperty
(
value
=
"更新状态"
)
private
String
status
;
@ApiModelProperty
(
value
=
"更新时间"
)
private
LocalDateTime
updatetime
;
}
src/main/java/com/miya/draw/entity/WinnerRbcs.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* @author :djf
* @date :2022-12-12
* @description:
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ApiModel
(
value
=
"winner_rbcs对象"
,
description
=
""
)
public
class
WinnerRbcs
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键"
)
@TableId
(
value
=
"winner_id"
,
type
=
IdType
.
AUTO
)
private
Long
winnerId
;
@ApiModelProperty
(
value
=
"账号名称"
)
private
String
accountName
;
@ApiModelProperty
(
value
=
"账户手机"
)
private
String
accountPhone
;
@ApiModelProperty
(
value
=
"奖品id"
)
private
Long
prizeId
;
@ApiModelProperty
(
value
=
"奖品名称"
)
private
String
prizeName
;
@ApiModelProperty
(
value
=
"奖品类型 1实物 2虚拟"
)
private
Integer
prizeType
;
@ApiModelProperty
(
value
=
"收件人姓名"
)
private
String
consigneeName
;
@ApiModelProperty
(
value
=
"收件人手机"
)
private
String
consigneePhone
;
@ApiModelProperty
(
value
=
"收件人地址"
)
private
String
consigneeAddress
;
@ApiModelProperty
(
value
=
"收件人身份证号"
)
private
String
consigneeIdcard
;
@ApiModelProperty
(
value
=
"同步id 用于后续更新"
)
private
Long
syncId
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
createTime
;
@ApiModelProperty
(
value
=
"更新时间"
)
private
LocalDateTime
updateTime
;
}
src/main/java/com/miya/draw/enums/ActivityStoreStatusEnum.java
→
src/main/java/com/miya/draw/enums/ActivityStore
AndGoods
StatusEnum.java
View file @
27dbf3e1
...
...
@@ -8,17 +8,19 @@ import lombok.Getter;
* @description:活动限制门店状态
*/
@Getter
public
enum
ActivityStore
StatusEnum
{
public
enum
ActivityStoreAndGoods
StatusEnum
{
NO_CONFINE
(
0
,
"不限制"
),
CONFINE
(
1
,
"限制"
);
CONFINE
(
1
,
"限制"
),
ELIMINATE
(
2
,
"剔除"
);
private
int
code
;
private
String
name
;
ActivityStoreStatusEnum
(
int
code
,
String
name
)
{
ActivityStore
AndGoods
StatusEnum
(
int
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
...
...
src/main/java/com/miya/draw/manager/DrawManagerImpl.java
View file @
27dbf3e1
...
...
@@ -87,19 +87,11 @@ public class DrawManagerImpl implements IDrawManager {
start
=
LocalDateTimeUtil
.
beginOfDay
(
start
);
LocalDateTime
end
=
LocalDateTimeUtil
.
endOfDay
(
nowTime
);
Integer
maxDrawCountLimit
=
activity
.
getDrawMaxCount
();
Long
mchId
=
activity
.
getMchId
();
//获取已抽奖信息
Integer
alreadyDrawCount
=
accountPrizeService
.
gainAlreadyDrawCount
(
request
.
getPhone
(),
activity
.
getId
(),
start
,
end
);
List
<
String
>
goodCodeList
=
activityGoodsService
.
listAllActivityGoods
(
activity
.
getId
());
//获取订单信息
List
<
SyncTrade
>
buyGoodList
;
if
(
activity
.
getActivityStoreStatus
()
==
ActivityStoreStatusEnum
.
NO_CONFINE
.
getCode
()
){
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
request
.
getPhone
(),
start
,
end
,
null
,
goodCodeList
);
}
else
{
List
<
String
>
storeIdList
=
activityStoreService
.
listAllActivityStoreId
(
activity
.
getId
());
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
request
.
getPhone
(),
start
,
end
,
storeIdList
,
goodCodeList
);
}
List
<
SyncTrade
>
buyGoodList
=
getTradeInfo
(
request
.
getPhone
(),
start
,
end
,
activity
);
BigDecimal
buyTotal
=
gainBuyTotal
(
buyGoodList
);
Long
purchasedAmount
=
buyTotal
.
multiply
(
BigDecimal
.
valueOf
(
100
)).
longValue
();
Integer
drawCountTotal
=
0
;
...
...
@@ -210,18 +202,8 @@ public class DrawManagerImpl implements IDrawManager {
LocalDateTime
start
=
nowTime
.
minusDays
(
activity
.
getValidTime
()-
1
);
start
=
LocalDateTimeUtil
.
beginOfDay
(
start
);
LocalDateTime
end
=
LocalDateTimeUtil
.
endOfDay
(
nowTime
);
List
<
SyncTrade
>
buyGoodList
;
if
(
activity
.
getActivityStoreStatus
()
==
ActivityStoreStatusEnum
.
NO_CONFINE
.
getCode
()
){
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
null
,
activityGoodsService
.
listAllActivityGoods
(
activityId
));
}
else
{
//限制门店的情况
List
<
String
>
storeCodeList
=
activityStoreService
.
listAllActivityStoreId
(
activityId
);
if
(
CollectionUtils
.
isEmpty
(
storeCodeList
))
{
buyGoodList
=
Lists
.
newArrayList
();
}
else
{
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
storeCodeList
,
activityGoodsService
.
listAllActivityGoods
(
activityId
));
}
}
Long
mchId
=
activity
.
getMchId
();
List
<
SyncTrade
>
buyGoodList
=
getTradeInfo
(
phone
,
start
,
end
,
activity
);
int
drawCountTotal
=
0
;
//3 判断抽奖方式
//足量抽奖
...
...
@@ -301,6 +283,32 @@ public class DrawManagerImpl implements IDrawManager {
}
/**
* 获取参与活动用户的订单数据
* @return
*/
public
List
<
SyncTrade
>
getTradeInfo
(
String
phone
,
LocalDateTime
start
,
LocalDateTime
end
,
Activity
activity
){
Long
mchId
=
activity
.
getMchId
();
Long
activityId
=
activity
.
getId
();
/**
* 活动商品
*/
List
<
String
>
listAllActivityGoods
=
null
;
List
<
String
>
storeCodeList
=
null
;
//限制商品时获取限制或要剔除的商品
if
(
activity
.
getActivityGoodsStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
CONFINE
.
getCode
()
||
activity
.
getActivityGoodsStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
ELIMINATE
.
getCode
()){
listAllActivityGoods
=
activityGoodsService
.
listAllActivityGoods
(
activityId
);
}
if
(
activity
.
getActivityStoreStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
CONFINE
.
getCode
()
||
activity
.
getActivityStoreStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
ELIMINATE
.
getCode
()){
storeCodeList
=
activityStoreService
.
listAllActivityStoreId
(
activityId
);
}
return
syncTradeService
.
listCanDrawGoods
(
mchId
,
phone
,
start
,
end
,
storeCodeList
,
listAllActivityGoods
,
activity
);
}
/**
* 用户限中奖品后重新获取奖品List
* 1. 获取限制的奖品Id
...
...
src/main/java/com/miya/draw/mapper/SyncTradeMapper.java
View file @
27dbf3e1
...
...
@@ -18,12 +18,12 @@ import java.util.List;
public
interface
SyncTradeMapper
extends
BaseMapper
<
SyncTrade
>
{
@Select
(
"<script>"
+
"INSERT INTO sync_trade (bill_no,trade_id_id, uuid, type, pos_no, phone, member_id, trade_no, store_id, store_name, tran_time, code, name, barcode, price, qty, std_amount, fav_amount ) VALUES "
+
"INSERT INTO sync_trade (
mch_id,
bill_no,trade_id_id, uuid, type, pos_no, phone, member_id, trade_no, store_id, store_name, tran_time, code, name, barcode, price, qty, std_amount, fav_amount ) VALUES "
+
"<foreach item='item' collection='list' separator=',' >"
+
"(#{item.billNo},#{item.tradeIdId},#{item.uuid},#{item.type},#{item.posNo},#{item.phone},#{item.memberId},#{item.tradeNo},#{item.storeId},#{item.storeName},#{item.tranTime},#{item.code},#{item.name},#{item.barcode},#{item.price},#{item.qty},#{item.stdAmount},#{item.favAmount})"
+
"(#{item.
mchId},#{item.
billNo},#{item.tradeIdId},#{item.uuid},#{item.type},#{item.posNo},#{item.phone},#{item.memberId},#{item.tradeNo},#{item.storeId},#{item.storeName},#{item.tranTime},#{item.code},#{item.name},#{item.barcode},#{item.price},#{item.qty},#{item.stdAmount},#{item.favAmount})"
+
"</foreach>"
+
" ON DUPLICATE KEY UPDATE "
+
"store_id = VALUES(store_id), tran_time = VALUES(tran_time),code=VALUES(code),barcode=VALUES(barcode),std_amount = VALUES(std_amount),fav_amount = VALUES(fav_amount) "
+
"
mch_id =VALUES(mch_id),
store_id = VALUES(store_id), tran_time = VALUES(tran_time),code=VALUES(code),barcode=VALUES(barcode),std_amount = VALUES(std_amount),fav_amount = VALUES(fav_amount) "
+
"</script>"
)
Integer
saveOrUpdateBatchByUniqKey
(
@Param
(
"list"
)
List
<
SyncTrade
>
syncTrades
);
}
src/main/java/com/miya/draw/mapper/TradeRbcsMapper.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.miya.draw.entity.TradeRbcs
;
/**
* @author :djf
* @date :2022-12-09
* @description:人本超市订单
*/
public
interface
TradeRbcsMapper
extends
BaseMapper
<
TradeRbcs
>
{
}
src/main/java/com/miya/draw/mapper/WinnerRbcsMapper.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.miya.draw.entity.Winner
;
import
com.miya.draw.entity.WinnerRbcs
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Select
;
import
java.util.List
;
/**
* @author :djf
* @date :2022-12-12
* @description:
*/
public
interface
WinnerRbcsMapper
extends
BaseMapper
<
WinnerRbcs
>
{
@Select
(
"<script>"
+
"INSERT INTO winner_rbcs(account_name, account_phone, prize_id, prize_type, prize_name, consignee_name, consignee_phone, consignee_address, consignee_idcard, sync_id) VALUES "
+
"<foreach item='item' collection='list' separator=',' >"
+
"(#{item.accountName},#{item.accountPhone},#{item.prizeId},#{item.prizeType},#{item.prizeName},#{item.consigneeName},#{item.consigneePhone},#{item.consigneeAddress},#{item.consigneeIdcard},#{item.syncId})"
+
"</foreach>"
+
" ON DUPLICATE KEY UPDATE "
+
"consignee_name = VALUES(consignee_name), consignee_phone = VALUES(consignee_phone),consignee_address=VALUES(consignee_address),consignee_idcard=VALUES(consignee_idcard) "
+
"</script>"
)
Integer
saveOrUpdateBatchByDulpKe
(
@Param
(
"list"
)
List
<
Winner
>
winnerList
);
}
src/main/java/com/miya/draw/model/SyncTradeConfigModel.java
View file @
27dbf3e1
...
...
@@ -10,6 +10,10 @@ import lombok.Data;
@Data
public
class
SyncTradeConfigModel
{
/**
* 商户Id
*/
private
Long
mchId
;
/**
* 每次读取多少条
*/
...
...
src/main/java/com/miya/draw/service/IActivityService.java
View file @
27dbf3e1
...
...
@@ -2,6 +2,8 @@ package com.miya.draw.service;
import
com.miya.draw.entity.Activity
;
import
java.util.List
;
/**
* @author :djf
* @date :2022-10-25
...
...
@@ -15,4 +17,11 @@ public interface IActivityService {
* @return
*/
Activity
getById
(
Long
id
);
/**
* 根据商户获取活动Id
* @param mchId
* @return
*/
List
<
Long
>
getActivityIdByMchId
(
Long
mchId
);
}
src/main/java/com/miya/draw/service/ISyncTradeService.java
View file @
27dbf3e1
package
com
.
miya
.
draw
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.miya.draw.entity.Activity
;
import
com.miya.draw.entity.SyncTrade
;
import
java.time.LocalDateTime
;
...
...
@@ -26,7 +27,7 @@ public interface ISyncTradeService extends IService<SyncTrade> {
* @param goodCodeList 参加活动的商品
* @return
*/
List
<
SyncTrade
>
listCanDrawGoods
(
String
phone
,
LocalDateTime
start
,
LocalDateTime
end
,
List
<
String
>
storeIdList
,
List
<
String
>
goodCodeList
);
List
<
SyncTrade
>
listCanDrawGoods
(
Long
mchId
,
String
phone
,
LocalDateTime
start
,
LocalDateTime
end
,
List
<
String
>
storeIdList
,
List
<
String
>
goodCodeList
,
Activity
activity
);
/**
* 按唯一键进行批量更新
...
...
src/main/java/com/miya/draw/service/ITradeRbcsService.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.miya.draw.entity.SyncTrade
;
import
com.miya.draw.entity.TradeRbcs
;
import
java.util.List
;
/**
* @author :djf
* @date :2022-12-09
* @description:人本超市服务类
*/
public
interface
ITradeRbcsService
extends
IService
<
TradeRbcs
>
{
/**
* 获取订单的同步数据
* @param maxId
* @param maxSize
* @return
*/
List
<
TradeRbcs
>
listByNeedSize
(
Long
maxId
,
Integer
maxSize
);
/**
* 修改同步状态
* @param syncTrades
*/
boolean
updateBatchByIdNoTrans
(
List
<
SyncTrade
>
syncTrades
);
}
src/main/java/com/miya/draw/service/IWinnerRbcsService.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.miya.draw.entity.Winner
;
import
com.miya.draw.entity.WinnerRbcs
;
import
java.util.List
;
/**
* @author :djf
* @date :2022-12-12
* @description:人本超市中奖信息
*/
public
interface
IWinnerRbcsService
extends
IService
<
WinnerRbcs
>
{
/**
*
* @param winnerList
*/
Integer
saveOrUpdateBatchByDulpKey
(
List
<
Winner
>
winnerList
);
}
src/main/java/com/miya/draw/service/impl/ActivityServiceImpl.java
View file @
27dbf3e1
...
...
@@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author :djf
...
...
@@ -27,4 +28,15 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
wrapper
.
eq
(
Activity:
:
getId
,
id
);
return
baseMapper
.
selectOne
(
wrapper
);
}
@Override
public
List
<
Long
>
getActivityIdByMchId
(
Long
mchId
)
{
LambdaQueryWrapper
<
Activity
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
Activity:
:
getMchId
,
mchId
);
List
<
Activity
>
list
=
baseMapper
.
selectList
(
wrapper
);
if
(
CollectionUtils
.
isEmpty
(
list
)){
return
null
;
}
return
list
.
stream
().
map
(
Activity:
:
getId
).
collect
(
Collectors
.
toList
());
}
}
src/main/java/com/miya/draw/service/impl/ITradeRbcsServiceImpl.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.miya.draw.entity.SyncTrade
;
import
com.miya.draw.entity.Trade
;
import
com.miya.draw.entity.TradeRbcs
;
import
com.miya.draw.mapper.TradeRbcsMapper
;
import
com.miya.draw.service.ITradeRbcsService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author :djf
* @date :2022-12-09
* @description:人本超市订单
*/
@Service
@DS
(
"db2"
)
@Slf4j
@Transactional
(
propagation
=
Propagation
.
NOT_SUPPORTED
)
public
class
ITradeRbcsServiceImpl
extends
ServiceImpl
<
TradeRbcsMapper
,
TradeRbcs
>
implements
ITradeRbcsService
{
@Resource
private
TradeRbcsMapper
tradeRbcsMapper
;
@Override
public
List
<
TradeRbcs
>
listByNeedSize
(
Long
maxId
,
Integer
maxSize
)
{
LambdaQueryWrapper
<
TradeRbcs
>
wrapper
=
new
LambdaQueryWrapper
();
wrapper
.
gt
(
TradeRbcs:
:
getBillno
,
maxId
);
// wrapper.ge(Trade::getTrantime, LocalDateTimeUtil.beginOfDay(LocalDateTime.now()));
wrapper
.
isNotNull
(
TradeRbcs:
:
getIdentityid
);
wrapper
.
last
(
"limit "
+
maxSize
);
return
tradeRbcsMapper
.
selectList
(
wrapper
);
}
@Override
public
boolean
updateBatchByIdNoTrans
(
List
<
SyncTrade
>
syncTrades
)
{
// 更新十足数据库出错了也就出错了
List
<
TradeRbcs
>
batchTrade
=
new
ArrayList
<>();
TradeRbcs
trade
;
try
{
for
(
SyncTrade
syncTrade
:
syncTrades
)
{
trade
=
new
TradeRbcs
();
trade
.
setBillno
(
Math
.
toIntExact
(
syncTrade
.
getBillNo
()));
trade
.
setStatus
(
"Y"
);
trade
.
setUpdatetime
(
LocalDateTime
.
now
());
batchTrade
.
add
(
trade
);
}
return
updateBatchById
(
batchTrade
);
}
catch
(
Exception
e
)
{
log
.
error
(
"回调更新十足数据库状态出错:{} list={}"
,
e
.
getMessage
(),
JSON
.
toJSON
(
syncTrades
));
}
return
false
;
}
}
src/main/java/com/miya/draw/service/impl/IWinnerRbcsServiceImpl.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
service
.
impl
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.miya.draw.entity.Winner
;
import
com.miya.draw.entity.WinnerRbcs
;
import
com.miya.draw.mapper.WinnerMapper
;
import
com.miya.draw.mapper.WinnerRbcsMapper
;
import
com.miya.draw.service.IWinnerRbcsService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* @author :djf
* @date :2022-12-12
* @description:
*/
@Service
@Slf4j
@DS
(
"db2"
)
public
class
IWinnerRbcsServiceImpl
extends
ServiceImpl
<
WinnerRbcsMapper
,
WinnerRbcs
>
implements
IWinnerRbcsService
{
@Resource
private
WinnerRbcsMapper
winnerRbcsMapper
;
@Override
public
Integer
saveOrUpdateBatchByDulpKey
(
List
<
Winner
>
winnerList
)
{
return
winnerRbcsMapper
.
saveOrUpdateBatchByDulpKe
(
winnerList
);
}
}
\ No newline at end of file
src/main/java/com/miya/draw/service/impl/SyncTradeServiceImpl.java
View file @
27dbf3e1
...
...
@@ -2,7 +2,9 @@ package com.miya.draw.service.impl;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.google.common.collect.Lists
;
import
com.miya.draw.entity.Activity
;
import
com.miya.draw.entity.SyncTrade
;
import
com.miya.draw.enums.ActivityStoreAndGoodsStatusEnum
;
import
com.miya.draw.mapper.SyncTradeGoodMapper
;
import
com.miya.draw.mapper.SyncTradeMapper
;
import
com.miya.draw.service.ISyncTradeService
;
...
...
@@ -34,15 +36,28 @@ public class SyncTradeServiceImpl extends ServiceImpl<SyncTradeMapper, SyncTrade
private
SyncTradeMapper
syncTradeMapper
;
@Override
public
List
<
SyncTrade
>
listCanDrawGoods
(
String
phone
,
LocalDateTime
start
,
LocalDateTime
end
,
List
<
String
>
storeIdList
,
List
<
String
>
goodCodeList
)
{
public
List
<
SyncTrade
>
listCanDrawGoods
(
Long
mchId
,
String
phone
,
LocalDateTime
start
,
LocalDateTime
end
,
List
<
String
>
storeIdList
,
List
<
String
>
goodCodeList
,
Activity
activity
)
{
if
(
CollectionUtils
.
isEmpty
(
goodCodeList
))
{
return
Lists
.
newArrayList
();
}
LambdaQueryWrapper
<
SyncTrade
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
SyncTrade:
:
getPhone
,
phone
)
.
between
(
SyncTrade:
:
getTranTime
,
start
,
end
)
.
in
(
CollectionUtils
.
isNotEmpty
(
storeIdList
),
SyncTrade:
:
getStoreId
,
storeIdList
)
.
in
(
SyncTrade:
:
getCode
,
goodCodeList
);
wrapper
.
eq
(
SyncTrade:
:
getMchId
,
mchId
)
.
eq
(
SyncTrade:
:
getPhone
,
phone
)
.
between
(
SyncTrade:
:
getTranTime
,
start
,
end
);
//限制门店
if
(
activity
.
getActivityStoreStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
CONFINE
.
getCode
()){
wrapper
.
in
(
SyncTrade:
:
getStoreId
,
storeIdList
);
//剔除门店
}
else
if
(
activity
.
getActivityStoreStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
ELIMINATE
.
getCode
()){
wrapper
.
notIn
(
SyncTrade:
:
getStoreId
,
storeIdList
);
}
//限制商品
if
(
activity
.
getActivityGoodsStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
CONFINE
.
getCode
()){
wrapper
.
in
(
SyncTrade:
:
getCode
,
storeIdList
);
//剔除商品
}
else
if
(
activity
.
getActivityGoodsStatus
()
==
ActivityStoreAndGoodsStatusEnum
.
ELIMINATE
.
getCode
()){
wrapper
.
notIn
(
SyncTrade:
:
getCode
,
goodCodeList
);
}
return
syncTradeMapper
.
selectList
(
wrapper
);
}
...
...
src/main/java/com/miya/draw/xxljob/DrawResultSyncJob.java
View file @
27dbf3e1
...
...
@@ -8,6 +8,7 @@ import com.miya.draw.enums.PrizeTypeEnum;
import
com.miya.draw.enums.YesOrNoEnum
;
import
com.miya.draw.model.SyncTradeConfigModel
;
import
com.miya.draw.service.IAccountPrizeService
;
import
com.miya.draw.service.IActivityService
;
import
com.miya.draw.service.IWinnerService
;
import
com.miya.draw.util.OrikaUtil
;
import
com.xxl.job.core.biz.model.ReturnT
;
...
...
@@ -45,9 +46,14 @@ public class DrawResultSyncJob extends IJobHandler {
*/
private
Integer
maxSize
=
500
;
private
Long
mchId
=
14229L
;
@Autowired
private
IAccountPrizeService
accountPrizeService
;
@Autowired
private
IActivityService
activityService
;
@Autowired
private
IWinnerService
winnerService
;
...
...
@@ -58,10 +64,17 @@ public class DrawResultSyncJob extends IJobHandler {
if
(
StringUtils
.
isNotBlank
(
s
))
{
SyncTradeConfigModel
model
=
JSON
.
parseObject
(
s
,
SyncTradeConfigModel
.
class
);
maxSize
=
model
.
getMaxSize
();
mchId
=
model
.
getMchId
();
}
List
<
Long
>
activityIds
=
activityService
.
getActivityIdByMchId
(
mchId
);
if
(
CollectionUtils
.
isEmpty
(
activityIds
)){
XxlJobLogger
.
log
(
"该商户没有抽奖活动"
);
return
null
;
}
LambdaQueryWrapper
<
AccountPrize
>
wrapper
=
new
LambdaQueryWrapper
();
wrapper
.
ne
(
AccountPrize:
:
getPrizeType
,
PrizeTypeEnum
.
NO_COUPON
.
getCode
());
wrapper
.
eq
(
AccountPrize:
:
getSyncStatus
,
YesOrNoEnum
.
NO
);
wrapper
.
in
(
AccountPrize:
:
getActivityId
,
activityIds
);
wrapper
.
orderByDesc
(
AccountPrize:
:
getId
);
wrapper
.
last
(
"limit "
+
maxSize
);
List
<
AccountPrize
>
accountPrizeList
=
accountPrizeService
.
list
(
wrapper
);
...
...
src/main/java/com/miya/draw/xxljob/RbcsDrawResultSyncJob.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
xxljob
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.miya.draw.entity.AccountPrize
;
import
com.miya.draw.entity.Winner
;
import
com.miya.draw.enums.PrizeTypeEnum
;
import
com.miya.draw.enums.YesOrNoEnum
;
import
com.miya.draw.model.SyncTradeConfigModel
;
import
com.miya.draw.service.IAccountPrizeService
;
import
com.miya.draw.service.IActivityService
;
import
com.miya.draw.service.IWinnerRbcsService
;
import
com.miya.draw.service.IWinnerService
;
import
com.miya.draw.util.OrikaUtil
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.log.XxlJobLogger
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* 十足抽奖结果同步
*
* @author jack
*/
@Slf4j
@JobHandler
(
"rbcsDrawResultSyncJob"
)
@Component
public
class
RbcsDrawResultSyncJob
extends
IJobHandler
{
static
{
OrikaUtil
.
classMap
(
AccountPrize
.
class
,
Winner
.
class
)
.
field
(
"id"
,
"syncId"
)
.
byDefault
().
register
();
}
/**
* 一次最多取多少数据
*/
private
Integer
maxSize
=
500
;
private
Long
mchId
=
14230L
;
@Autowired
private
IAccountPrizeService
accountPrizeService
;
@Autowired
private
IActivityService
activityService
;
@Autowired
private
IWinnerRbcsService
winnerRbcsService
;
@Override
public
ReturnT
<
String
>
execute
(
String
s
)
throws
Exception
{
XxlJobLogger
.
log
(
"向十足同步开始:{}"
+
LocalDateTime
.
now
().
toString
());
log
.
info
(
"向十足同步开始:{}"
+
LocalDateTime
.
now
().
toString
());
if
(
StringUtils
.
isNotBlank
(
s
))
{
SyncTradeConfigModel
model
=
JSON
.
parseObject
(
s
,
SyncTradeConfigModel
.
class
);
maxSize
=
model
.
getMaxSize
();
mchId
=
model
.
getMchId
();
}
List
<
Long
>
activityIds
=
activityService
.
getActivityIdByMchId
(
mchId
);
if
(
CollectionUtils
.
isEmpty
(
activityIds
)){
XxlJobLogger
.
log
(
"该商户没有抽奖活动"
);
return
null
;
}
LambdaQueryWrapper
<
AccountPrize
>
wrapper
=
new
LambdaQueryWrapper
();
wrapper
.
ne
(
AccountPrize:
:
getPrizeType
,
PrizeTypeEnum
.
NO_COUPON
.
getCode
());
wrapper
.
eq
(
AccountPrize:
:
getSyncStatus
,
YesOrNoEnum
.
NO
);
wrapper
.
in
(
AccountPrize:
:
getActivityId
,
activityIds
);
wrapper
.
orderByDesc
(
AccountPrize:
:
getId
);
wrapper
.
last
(
"limit "
+
maxSize
);
List
<
AccountPrize
>
accountPrizeList
=
accountPrizeService
.
list
(
wrapper
);
if
(
CollectionUtils
.
isNotEmpty
(
accountPrizeList
))
{
XxlJobLogger
.
log
(
"同步内容:{}"
,
accountPrizeList
.
stream
().
map
(
AccountPrize:
:
getId
).
collect
(
Collectors
.
toList
()));
log
.
info
(
"同步内容:{}"
,
accountPrizeList
.
stream
().
map
(
AccountPrize:
:
getId
).
collect
(
Collectors
.
toList
()));
List
<
Winner
>
winnerList
=
OrikaUtil
.
convertList
(
accountPrizeList
,
Winner
.
class
);
winnerRbcsService
.
saveOrUpdateBatchByDulpKey
(
winnerList
);
accountPrizeList
.
forEach
(
accountPrize
->
accountPrize
.
setSyncStatus
(
YesOrNoEnum
.
YES
.
getCode
())
);
accountPrizeService
.
updateBatchById
(
accountPrizeList
);
}
XxlJobLogger
.
log
(
"向十足同步结束:"
+
LocalDateTime
.
now
().
toString
());
log
.
info
(
"向十足同步结束:"
+
LocalDateTime
.
now
().
toString
());
return
ReturnT
.
SUCCESS
;
}
}
src/main/java/com/miya/draw/xxljob/RbcsTradeSyncJob.java
0 → 100644
View file @
27dbf3e1
package
com
.
miya
.
draw
.
xxljob
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.google.common.collect.Lists
;
import
com.miya.draw.entity.SyncRecord
;
import
com.miya.draw.entity.SyncTrade
;
import
com.miya.draw.entity.Trade
;
import
com.miya.draw.entity.TradeRbcs
;
import
com.miya.draw.model.SyncTradeConfigModel
;
import
com.miya.draw.service.ISyncRecordService
;
import
com.miya.draw.service.ISyncTradeService
;
import
com.miya.draw.service.ITradeRbcsService
;
import
com.miya.draw.service.ITradeService
;
import
com.miya.draw.util.OrikaUtil
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.log.XxlJobLogger
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.time.LocalDateTime
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
/**
* @author :djf
* @date :2022-12-08
* @description:人本超市订单数据同步
*/
@Slf4j
@JobHandler
(
"rbcsTradeSyncJob"
)
@Component
public
class
RbcsTradeSyncJob
extends
IJobHandler
{
static
{
OrikaUtil
.
classMap
(
TradeRbcs
.
class
,
SyncTrade
.
class
)
.
field
(
"billno"
,
"billNo"
)
.
field
(
"tradeidid"
,
"tradeIdId"
)
.
field
(
"storeid"
,
"storeId"
)
.
field
(
"storename"
,
"storeName"
)
.
field
(
"tradeno"
,
"tradeNo"
)
.
field
(
"posno"
,
"posNo"
)
.
field
(
"trantime"
,
"tranTime"
)
.
field
(
"stdamount"
,
"stdAmount"
)
.
field
(
"favamount"
,
"favAmount"
)
.
field
(
"memberid"
,
"memberId"
)
.
field
(
"identityid"
,
"phone"
)
.
byDefault
().
register
();
}
@Autowired
private
ITradeRbcsService
tradeRbcsService
;
@Autowired
private
ISyncTradeService
syncTradeService
;
@Autowired
private
ISyncRecordService
syncRecordService
;
/**
* 一次最多取多少数据
*/
private
Integer
maxSize
=
2000
;
/**
* 每次存多少条数据
*/
private
Integer
writeUnit
=
500
;
/**
* 商户Id
*/
private
Long
mchId
=
14230L
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ReturnT
<
String
>
execute
(
String
s
)
throws
Exception
{
XxlJobLogger
.
log
(
"十足同步开始:"
+
LocalDateTime
.
now
().
toString
());
if
(
StringUtils
.
isNotBlank
(
s
))
{
SyncTradeConfigModel
model
=
JSON
.
parseObject
(
s
,
SyncTradeConfigModel
.
class
);
maxSize
=
model
.
getMaxSize
();
writeUnit
=
model
.
getWriteUnit
();
mchId
=
model
.
getMchId
();
}
LambdaQueryWrapper
<
SyncRecord
>
wrapper
=
new
LambdaQueryWrapper
();
wrapper
.
eq
(
SyncRecord:
:
getMchId
,
mchId
);
wrapper
.
orderByDesc
(
SyncRecord:
:
getId
);
wrapper
.
last
(
"LIMIT 1"
);
SyncRecord
syncRecord
=
syncRecordService
.
getOne
(
wrapper
);
Long
maxId
=
Objects
.
isNull
(
syncRecord
)
?
0
:
syncRecord
.
getLastSyncId
();
List
<
TradeRbcs
>
tradeList
=
tradeRbcsService
.
listByNeedSize
(
maxId
,
maxSize
);
List
<
SyncTrade
>
syncTradeList
=
OrikaUtil
.
convertList
(
tradeList
,
SyncTrade
.
class
);
// 升序
syncTradeList
=
syncTradeList
.
stream
().
sorted
(
Comparator
.
comparing
(
SyncTrade:
:
getBillNo
))
.
collect
(
Collectors
.
toList
());
Long
finalMchId
=
mchId
;
syncTradeList
.
forEach
(
trade
->
trade
.
setMchId
(
finalMchId
));
// 分割
List
<
List
<
SyncTrade
>>
syncTradeParts
=
Lists
.
partition
(
syncTradeList
,
writeUnit
);
if
(
Objects
.
isNull
(
syncRecord
))
{
syncRecord
=
new
SyncRecord
();
}
for
(
List
<
SyncTrade
>
syncTrades
:
syncTradeParts
)
{
// 批量更新
syncTradeService
.
saveOrUpdateBatchByUniqKey
(
syncTrades
);
// 更新记录
SyncTrade
last
=
syncTrades
.
get
(
syncTrades
.
size
()
-
1
);
syncRecord
.
setMchId
(
mchId
);
syncRecord
.
setLastSyncId
(
last
.
getBillNo
());
syncRecord
.
setLastSyncTime
(
last
.
getTranTime
());
syncRecord
.
setUpdateTime
(
LocalDateTime
.
now
());
syncRecordService
.
saveOrUpdate
(
syncRecord
);
// 回写十足库
tradeRbcsService
.
updateBatchByIdNoTrans
(
syncTrades
);
}
XxlJobLogger
.
log
(
"十足同步结束:"
+
LocalDateTime
.
now
().
toString
());
return
ReturnT
.
SUCCESS
;
}
}
src/main/java/com/miya/draw/xxljob/TradeSyncJob.java
View file @
27dbf3e1
...
...
@@ -71,27 +71,34 @@ public class TradeSyncJob extends IJobHandler {
* 每次存多少条数据
*/
private
Integer
writeUnit
=
500
;
/**
* 商户Id
*/
private
Long
mchId
=
14229L
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ReturnT
<
String
>
execute
(
String
s
)
throws
Exception
{
XxlJobLogger
.
log
(
"十足同步开始:"
+
LocalDateTime
.
now
().
toString
());
LambdaQueryWrapper
<
SyncRecord
>
wrapper
=
new
LambdaQueryWrapper
();
wrapper
.
orderByDesc
(
SyncRecord:
:
getId
);
wrapper
.
last
(
"LIMIT 1"
);
SyncRecord
syncRecord
=
syncRecordService
.
getOne
(
wrapper
);
Long
maxId
=
Objects
.
isNull
(
syncRecord
)
?
0
:
syncRecord
.
getLastSyncId
();
if
(
StringUtils
.
isNotBlank
(
s
))
{
SyncTradeConfigModel
model
=
JSON
.
parseObject
(
s
,
SyncTradeConfigModel
.
class
);
maxSize
=
model
.
getMaxSize
();
writeUnit
=
model
.
getWriteUnit
();
mchId
=
model
.
getMchId
();
}
LambdaQueryWrapper
<
SyncRecord
>
wrapper
=
new
LambdaQueryWrapper
();
wrapper
.
eq
(
SyncRecord:
:
getMchId
,
mchId
);
wrapper
.
orderByDesc
(
SyncRecord:
:
getId
);
wrapper
.
last
(
"LIMIT 1"
);
SyncRecord
syncRecord
=
syncRecordService
.
getOne
(
wrapper
);
Long
maxId
=
Objects
.
isNull
(
syncRecord
)
?
0
:
syncRecord
.
getLastSyncId
();
List
<
Trade
>
tradeList
=
tradeService
.
ListNeedSyncTrade
(
maxId
,
maxSize
);
List
<
SyncTrade
>
syncTradeList
=
OrikaUtil
.
convertList
(
tradeList
,
SyncTrade
.
class
);
// 升序
syncTradeList
=
syncTradeList
.
stream
().
sorted
(
Comparator
.
comparing
(
SyncTrade:
:
getBillNo
))
.
collect
(
Collectors
.
toList
());
Long
finalMchId
=
mchId
;
syncTradeList
.
forEach
(
trade
->
trade
.
setMchId
(
finalMchId
));
// 分割
List
<
List
<
SyncTrade
>>
syncTradeParts
=
Lists
.
partition
(
syncTradeList
,
writeUnit
);
if
(
Objects
.
isNull
(
syncRecord
))
{
...
...
@@ -101,9 +108,9 @@ public class TradeSyncJob extends IJobHandler {
for
(
List
<
SyncTrade
>
syncTrades
:
syncTradeParts
)
{
// 批量更新
syncTradeService
.
saveOrUpdateBatchByUniqKey
(
syncTrades
);
// 更新记录
SyncTrade
last
=
syncTrades
.
get
(
syncTrades
.
size
()
-
1
);
syncRecord
.
setMchId
(
mchId
);
syncRecord
.
setLastSyncId
(
last
.
getBillNo
());
syncRecord
.
setLastSyncTime
(
last
.
getTranTime
());
syncRecord
.
setUpdateTime
(
LocalDateTime
.
now
());
...
...
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