@ -12,11 +12,9 @@ import cn.hutool.core.util.ObjectUtil;
import com.baiye.config.properties.DeliveryProperties ;
import com.baiye.constant.DefaultNumberConstants ;
import com.baiye.modules.system.domain.Company ;
import com.baiye.modules.system.domain.PayFatherTemplate ;
import com.baiye.modules.system.domain.TaskImei ;
import com.baiye.modules.system.service.CompanyService ;
import com.baiye.modules.system.service.DeliveryRecordService ;
import com.baiye.modules.system.service.PayFatherTemplateService ;
import com.baiye.modules.system.service.TaskImeiService ;
import com.baiye.modules.system.service.dto.ImeiDTO ;
import com.baiye.util.* ;
@ -53,9 +51,12 @@ public class DeliveryBalanceTask {
private final DeliveryRecordService deliveryRecordService ;
@Scheduled ( cron = "0 0/30 8-23 * * ? " )
/ * *
* 修 改 时 间 为 8 点 至 21 点
*
*
* /
@Scheduled ( cron = "0 0/30 8-21 * * ? " )
@Transactional ( rollbackFor = Exception . class )
public void cashResources ( ) {
// 查询所有未兑换的
@ -71,56 +72,55 @@ public class DeliveryBalanceTask {
Long userId = list . get ( DefaultNumberConstants . ZERO_NUMBER ) . getUserId ( ) ;
Company companyByUserId = companyService . findCompanyByUserId ( userId ) ;
if ( ObjectUtil . isNotNull ( companyByUserId )
& & ObjectUtil . isNotNull ( companyByUserId . getTemplateId ( ) ) ) {
// 判断价格
if ( ObjectUtil . isNotNull ( companyByUserId . getDeliveryCallFee ( ) ) ) {
// 每次100000 数据
List < List < TaskImei > > lists = Lists . partition
( list , DefaultNumberConstants . ONE_HUNDRED_THOUSAND ) ;
// 批量发送
for ( List < TaskImei > taskImeiList : lists ) {
// 大于100 进行兑换
if ( taskImeiList . size ( ) > = DefaultNumberConstants . ONE_HUNDRED ) {
BigDecimal decimal = NumberUtil . mul ( companyByUserId . getDeliveryCallFee ( ) , BigDecimal . valueOf ( taskImeiList . size ( ) ) ) ;
BigDecimal sub = NumberUtil . sub ( companyByUserId . getUserBalance ( ) , decimal ) ;
// 判断余额
if ( sub . compareTo ( BigDecimal . valueOf
( DefaultNumberConstants . ZERO_NUMBER ) ) < DefaultNumberConstants . ZERO_NUMBER ) {
continue ;
}
String fileUrl = deliveryProperties . getFileUrl ( ) ;
String format = DateUtil . format ( DateUtil . date ( ) , DatePattern . PURE_DATE_PATTERN ) ;
Integer num = ( Integer ) redisUtils . get ( CacheKey . DMP_REQUEST_ID . concat ( format ) ) ;
// 转换DTO
List < ImeiDTO > toList = Convert . toList ( ImeiDTO . class , taskImeiList ) ;
Integer batch = ObjectUtil . isNull ( num ) ? DefaultNumberConstants . ONE_NUMBER : num + DefaultNumberConstants . ONE_NUMBER ;
String taskImeiName = "BY" . concat ( StrPool . UNDERLINE ) . concat ( format ) . concat ( StrPool . UNDERLINE ) . concat ( String . valueOf ( batch ) ) ;
String file = fileUrl . concat ( StrPool . SLASH ) . concat ( taskImeiName ) ;
// 保存文件
String csvPath = file . concat ( ".csv" ) ;
CSVFileUtil . createCsvFile ( toList , csvPath ) ;
String zipPath = file . concat ( ".zip" ) ;
// 设置压缩文件
CompressUtil . decryptionCompression
( zipPath , csvPath , deliveryProperties . getZipPassword ( ) ) ;
// 发送邮件
MailUtil . sendMail ( deliveryProperties . getEmailAddress ( ) ,
deliveryProperties . getEmailPassword ( ) ,
deliveryProperties . getToEmailAddress ( ) , zipPath , taskImeiName ) ;
// 保存批次号
redisUtils . set ( CacheKey . DMP_REQUEST_ID . concat ( format ) , batch , DefaultNumberConstants . ONE_NUMBER , TimeUnit . DAYS ) ;
// 修改状态 修改余额
taskImeiService . updateBath ( taskId , CharSequenceUtil . EMPTY , DefaultNumberConstants . ONE_NUMBER ) ;
deliveryRecordService . saveDeliveryRecord ( zipPath , taskImeiName , taskImeiList . size ( ) , taskId , userId ) ;
companyService . updateUserBalanceByCompanyId ( sub . doubleValue ( ) , companyByUserId . getId ( ) ) ;
// 删除文件
boolean csvResult = FileUtil . del ( csvPath ) ;
boolean zipResult = FileUtil . del ( zipPath ) ;
log . info ( "=========================== the csv path as {}, zip path as {} csvResult as {} zipResult as {} ========================" , csvPath , zipPath , csvResult , zipResult ) ;
& & ObjectUtil . isNotNull ( companyByUserId . getTemplateId ( ) )
// 判断价格
& & ObjectUtil . isNotNull ( companyByUserId . getDeliveryCallFee ( ) ) ) {
// 每次100000 数据
List < List < TaskImei > > lists = Lists . partition
( list , DefaultNumberConstants . ONE_HUNDRED_THOUSAND ) ;
// 批量发送
for ( List < TaskImei > taskImeiList : lists ) {
// 大于100 进行兑换
if ( taskImeiList . size ( ) > = DefaultNumberConstants . ONE_HUNDRED ) {
BigDecimal decimal = NumberUtil . mul ( companyByUserId . getDeliveryCallFee ( ) , BigDecimal . valueOf ( taskImeiList . size ( ) ) ) ;
BigDecimal sub = NumberUtil . sub ( companyByUserId . getUserBalance ( ) , decimal ) ;
// 判断余额
if ( sub . compareTo ( BigDecimal . valueOf
( DefaultNumberConstants . ZERO_NUMBER ) ) < DefaultNumberConstants . ZERO_NUMBER ) {
continue ;
}
String fileUrl = deliveryProperties . getFileUrl ( ) ;
String format = DateUtil . format ( DateUtil . date ( ) , DatePattern . PURE_DATE_PATTERN ) ;
Integer num = ( Integer ) redisUtils . get ( CacheKey . DMP_REQUEST_ID . concat ( format ) ) ;
// 转换DTO
List < ImeiDTO > toList = Convert . toList ( ImeiDTO . class , taskImeiList ) ;
Integer batch = ObjectUtil . isNull ( num ) ? DefaultNumberConstants . ONE_NUMBER : num + DefaultNumberConstants . ONE_NUMBER ;
String taskImeiName = "BY" . concat ( StrPool . UNDERLINE ) . concat ( format ) . concat ( StrPool . UNDERLINE ) . concat ( String . valueOf ( batch ) ) ;
String file = fileUrl . concat ( StrPool . SLASH ) . concat ( taskImeiName ) ;
// 保存文件
String csvPath = file . concat ( ".csv" ) ;
CSVFileUtil . createCsvFile ( toList , csvPath ) ;
String zipPath = file . concat ( ".zip" ) ;
// 设置压缩文件
CompressUtil . decryptionCompression
( zipPath , csvPath , deliveryProperties . getZipPassword ( ) ) ;
// 发送邮件
MailUtil . sendMail ( deliveryProperties . getEmailAddress ( ) ,
deliveryProperties . getEmailPassword ( ) ,
deliveryProperties . getToEmailAddress ( ) , zipPath , taskImeiName ) ;
// 保存批次号
redisUtils . set ( CacheKey . DMP_REQUEST_ID . concat ( format ) , batch , DefaultNumberConstants . ONE_NUMBER , TimeUnit . DAYS ) ;
// 修改状态 修改余额
taskImeiService . updateBath ( taskId , CharSequenceUtil . EMPTY , DefaultNumberConstants . ONE_NUMBER ) ;
deliveryRecordService . saveDeliveryRecord ( zipPath , taskImeiName , taskImeiList . size ( ) , taskId , userId ) ;
companyService . updateUserBalanceByCompanyId ( sub . doubleValue ( ) , companyByUserId . getId ( ) ) ;
// 删除文件
boolean csvResult = FileUtil . del ( csvPath ) ;
boolean zipResult = FileUtil . del ( zipPath ) ;
log . info ( "=========================== the csv path as {}, zip path as {} csvResult as {} zipResult as {} ========================" , csvPath , zipPath , csvResult , zipResult ) ;
}
}
}