Compare commits
No commits in common. "cad5340ede3b213827d4f8623312c79fe9dcbdbd" and "a7e481ca4c4027263543b8f36ba7dbbfdf7e6e87" have entirely different histories.
cad5340ede
...
a7e481ca4c
|
@ -10,14 +10,12 @@ public class RedisUserConstant {
|
|||
// 过期时间
|
||||
public static final Long REDIS_EXPIRATION_TIME = 7L;// 7 天/分钟 Redis过期
|
||||
public static final Integer Cookie_EXPIRATION_TIME = 5 * 60 * 60;// cookies 过期时间 5 分钟
|
||||
public static final String WEB_CONFIG_KEY = "webConfig::platformConfig";// web配置
|
||||
|
||||
private static final String ADMIN_LOGIN_INFO_PREFIX = "admin::login_info::";
|
||||
private static final String ADMIN_EMAIL_CODE_PREFIX = "admin::email_code::";
|
||||
private static final String USER_LOGIN_INFO_PREFIX = "user::login_info::";
|
||||
private static final String USER_EMAIL_CODE_PREFIX = "user::email_code::";
|
||||
|
||||
|
||||
public static String getAdminLoginInfoPrefix(String adminUser) {
|
||||
return ADMIN_LOGIN_INFO_PREFIX + adminUser;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import lombok.NoArgsConstructor;
|
|||
public class CategoryAddDto {
|
||||
|
||||
@Schema(name = "userId", title = "绑定的用户id")
|
||||
@NotNull(message = "用户不能为空")
|
||||
private Long userId;
|
||||
|
||||
@Schema(name = "categoryName", title = "分类名称")
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
package cn.bunny.dao.vo.configuration;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Schema(name = "WebConfigurationVo对象", title = "前端配置获取返回结果", description = "前端配置获取返回结果")
|
||||
public class WebConfigurationVo {
|
||||
|
||||
@Schema(name = "Version", description = "应用程序的版本")
|
||||
@JSONField(name = "Version")
|
||||
private String version;
|
||||
|
||||
@Schema(name = "Title", description = "应用程序的标题")
|
||||
@JSONField(name = "Title")
|
||||
private String title;
|
||||
|
||||
@Schema(name = "Copyright", description = "版权信息")
|
||||
@JSONField(name = "Copyright")
|
||||
private String copyright;
|
||||
|
||||
@Schema(name = "FixedHeader", description = "头部是否固定")
|
||||
@JSONField(name = "FixedHeader")
|
||||
private boolean fixedHeader;
|
||||
|
||||
@Schema(name = "HiddenSideBar", description = "侧边栏是否隐藏")
|
||||
@JSONField(name = "HiddenSideBar")
|
||||
private boolean hiddenSideBar;
|
||||
|
||||
@Schema(name = "MultiTagsCache", description = "是否缓存多个标签")
|
||||
@JSONField(name = "MultiTagsCache")
|
||||
private boolean multiTagsCache;
|
||||
|
||||
@Schema(name = "KeepAlive", description = "是否持久化")
|
||||
@JSONField(name = "KeepAlive")
|
||||
private boolean keepAlive;
|
||||
|
||||
@Schema(name = "Locale", description = "语言类型")
|
||||
@JSONField(name = "Locale")
|
||||
private String locale;
|
||||
|
||||
@Schema(name = "Layout", description = "应用程序的布局")
|
||||
@JSONField(name = "Layout")
|
||||
private String layout;
|
||||
|
||||
@Schema(name = "Theme", description = "应用程序的主题")
|
||||
@JSONField(name = "Theme")
|
||||
private String theme;
|
||||
|
||||
@Schema(name = "DarkMode", description = "是否启用深色模式")
|
||||
@JSONField(name = "DarkMode")
|
||||
private boolean darkMode;
|
||||
|
||||
@Schema(name = "OverallStyle", description = "应用程序的整体样式")
|
||||
@JSONField(name = "OverallStyle")
|
||||
private String overallStyle;
|
||||
|
||||
@Schema(name = "Grey", description = "是否启用灰色模式")
|
||||
@JSONField(name = "Grey")
|
||||
private boolean grey;
|
||||
|
||||
@Schema(name = "Weak", description = "色弱模式")
|
||||
@JSONField(name = "Weak")
|
||||
private boolean weak;
|
||||
|
||||
@Schema(name = "HideTabs", description = "是否隐藏选项卡")
|
||||
@JSONField(name = "HideTabs")
|
||||
private boolean hideTabs;
|
||||
|
||||
@Schema(name = "HideFooter", description = "是否隐藏页脚")
|
||||
@JSONField(name = "HideFooter")
|
||||
private boolean hideFooter;
|
||||
|
||||
@Schema(name = "Stretch", description = "是否拉伸显示")
|
||||
@JSONField(name = "Stretch")
|
||||
private boolean stretch;
|
||||
|
||||
@Schema(name = "SidebarStatus", description = "侧边栏的状态")
|
||||
@JSONField(name = "SidebarStatus")
|
||||
private boolean sidebarStatus;
|
||||
|
||||
@Schema(name = "EpThemeColor", description = "主题颜色")
|
||||
@JSONField(name = "EpThemeColor")
|
||||
private String epThemeColor;
|
||||
|
||||
@Schema(name = "ShowLogo", description = "是否显示logo")
|
||||
@JSONField(name = "ShowLogo")
|
||||
private boolean showLogo;
|
||||
|
||||
@Schema(name = "ShowModel", description = "要显示的模型")
|
||||
@JSONField(name = "ShowModel")
|
||||
private String showModel;
|
||||
|
||||
@Schema(name = "MenuArrowIconNoTransition", description = "菜单箭头图标是否没有过渡效果")
|
||||
@JSONField(name = "MenuArrowIconNoTransition")
|
||||
private boolean menuArrowIconNoTransition;
|
||||
|
||||
@Schema(name = "CachingAsyncRoutes", description = "是否缓存异步路由")
|
||||
@JSONField(name = "CachingAsyncRoutes")
|
||||
private boolean cachingAsyncRoutes;
|
||||
|
||||
@Schema(name = "TooltipEffect", description = "工具提示的效果")
|
||||
@JSONField(name = "TooltipEffect")
|
||||
private String tooltipEffect;
|
||||
|
||||
@Schema(name = "ResponsiveStorageNameSpace", description = "响应式存储的命名空间")
|
||||
@JSONField(name = "ResponsiveStorageNameSpace")
|
||||
private String responsiveStorageNameSpace;
|
||||
|
||||
@Schema(name = "MenuSearchHistory", description = "菜单搜索历史")
|
||||
@JSONField(name = "MenuSearchHistory")
|
||||
private int menuSearchHistory;
|
||||
|
||||
}
|
|
@ -32,12 +32,6 @@
|
|||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-test</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<scope>runtime</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<!-- 消除service utils黄色 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
|
|
@ -2,6 +2,7 @@ package cn.bunny.services.controller.configuration;
|
|||
|
||||
import cn.bunny.dao.dto.system.configuration.WebConfigurationDto;
|
||||
import cn.bunny.dao.model.configuration.WebConfiguration;
|
||||
import cn.bunny.dao.vo.configuration.WebConfigurationVo;
|
||||
import cn.bunny.dao.vo.result.Result;
|
||||
import cn.bunny.dao.vo.result.ResultCodeEnum;
|
||||
import cn.bunny.services.aop.annotation.ExcludeRequestLog;
|
||||
|
@ -31,9 +32,9 @@ public class ConfigurationController {
|
|||
@ExcludeRequestLog
|
||||
@Operation(summary = "获取修改web配置文件", description = "获取修改web配置文件")
|
||||
@GetMapping("getWebConfig")
|
||||
public Result<WebConfiguration> getWebConfig() {
|
||||
WebConfiguration webConfiguration = configurationService.webConfig();
|
||||
return Result.success(webConfiguration);
|
||||
public Mono<Result<WebConfigurationVo>> getWebConfig() {
|
||||
WebConfigurationVo webConfiguration = configurationService.getWebConfig();
|
||||
return Mono.just(Result.success(webConfiguration));
|
||||
}
|
||||
|
||||
@Operation(summary = "更新web配置文件", description = "更新web配置文件")
|
||||
|
|
|
@ -1,17 +1,23 @@
|
|||
package cn.bunny.services.factory;
|
||||
|
||||
import cn.bunny.common.service.utils.minio.MinioProperties;
|
||||
import cn.bunny.common.service.utils.minio.MinioUtil;
|
||||
import cn.bunny.dao.constant.LocalDateTimeConstant;
|
||||
import cn.bunny.dao.constant.MinioConstant;
|
||||
import cn.bunny.dao.dto.financial.bill.BillDto;
|
||||
import cn.bunny.dao.dto.financial.bill.IncomeExpenseQueryDto;
|
||||
import cn.bunny.dao.dto.financial.bill.excel.BillExportDto;
|
||||
import cn.bunny.dao.entity.mysql.system.AdminUser;
|
||||
import cn.bunny.dao.entity.mysql.system.EmailTemplate;
|
||||
import cn.bunny.dao.entity.mysql.system.Files;
|
||||
import cn.bunny.dao.enums.EmailTemplateEnums;
|
||||
import cn.bunny.dao.model.excel.BillExportExcelByUser;
|
||||
import cn.bunny.dao.model.file.MinioFilePath;
|
||||
import cn.bunny.dao.vo.financial.admin.BillVo;
|
||||
import cn.bunny.dao.vo.financial.user.expendAndIncome.ExpendWithIncome;
|
||||
import cn.bunny.services.mapper.email.EmailTemplateMapper;
|
||||
import cn.bunny.services.mapper.financial.BillMapper;
|
||||
import cn.bunny.services.mapper.system.FilesMapper;
|
||||
import cn.bunny.services.mapper.system.UserMapper;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.ExcelWriter;
|
||||
|
@ -21,8 +27,11 @@ import jakarta.servlet.http.HttpServletResponse;
|
|||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.net.URLEncoder;
|
||||
|
@ -48,9 +57,18 @@ public class BillFactory {
|
|||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
@Autowired
|
||||
private FilesMapper filesMapper;
|
||||
|
||||
@Autowired
|
||||
private EmailFactory emailFactory;
|
||||
|
||||
@Autowired
|
||||
private MinioUtil minioUtil;
|
||||
|
||||
@Autowired
|
||||
private MinioProperties minioProperties;
|
||||
|
||||
public void exportBill(BillExportDto dto, HttpServletResponse response) {
|
||||
LocalDate startDate = dto.getStartDate();
|
||||
LocalDate endDate = dto.getEndDate();
|
||||
|
@ -210,4 +228,26 @@ public class BillFactory {
|
|||
|
||||
emailFactory.sendEmailTemplate(adminUser.getEmail(), emailTemplate, hashMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步上传账单导入文件
|
||||
*
|
||||
* @param file 账单Excel导入文件
|
||||
* @throws IOException 上窜错误异常
|
||||
*/
|
||||
@Async
|
||||
public void uploadBillExcelWithAsync(MultipartFile file) throws IOException {
|
||||
// 上传文件到Minio
|
||||
MinioFilePath minioFilePath = minioUtil.uploadObjectReturnFilePath(file, MinioConstant.billExcel);
|
||||
|
||||
// 将文件信息存入数据库
|
||||
Files files = new Files();
|
||||
files.setFileType(file.getContentType());
|
||||
files.setFileSize(file.getSize());
|
||||
files.setFilepath("/" + minioProperties.getBucketName() + minioFilePath.getFilepath());
|
||||
files.setFilename(minioFilePath.getFilename());
|
||||
files.setDownloadCount(0);
|
||||
|
||||
filesMapper.insert(files);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package cn.bunny.services.service.configuration;
|
|||
|
||||
import cn.bunny.dao.dto.system.configuration.WebConfigurationDto;
|
||||
import cn.bunny.dao.model.configuration.WebConfiguration;
|
||||
import cn.bunny.dao.vo.configuration.WebConfigurationVo;
|
||||
|
||||
public interface ConfigurationService {
|
||||
|
||||
|
@ -19,4 +20,10 @@ public interface ConfigurationService {
|
|||
*/
|
||||
WebConfiguration webConfig();
|
||||
|
||||
/**
|
||||
* 获取修改web配置文件
|
||||
*
|
||||
* @return 要修改前端配置文件
|
||||
*/
|
||||
WebConfigurationVo getWebConfig();
|
||||
}
|
|
@ -1,27 +1,41 @@
|
|||
package cn.bunny.services.service.configuration.impl;
|
||||
|
||||
import cn.bunny.common.service.exception.AuthCustomerException;
|
||||
import cn.bunny.dao.constant.RedisUserConstant;
|
||||
import cn.bunny.dao.dto.system.configuration.WebConfigurationDto;
|
||||
import cn.bunny.dao.model.configuration.WebConfiguration;
|
||||
import cn.bunny.dao.vo.configuration.WebConfigurationVo;
|
||||
import cn.bunny.dao.vo.result.ResultCodeEnum;
|
||||
import cn.bunny.services.service.configuration.ConfigurationService;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class ConfigurationServiceImpl implements ConfigurationService {
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate<String, Object> redisTemplate;
|
||||
@Value("${bunny.bashPath}")
|
||||
private String bashPath;
|
||||
|
||||
private static @NotNull String getWebConfigString(InputStream inputStream, Path templatePath) throws IOException {
|
||||
if (inputStream == null) throw new AuthCustomerException(ResultCodeEnum.MISSING_TEMPLATE_FILES);
|
||||
|
||||
// 判断web模板文件是否存在,不存在进行复制
|
||||
boolean exists = Files.exists(templatePath);
|
||||
if (!exists) Files.copy(inputStream, templatePath);
|
||||
|
||||
// 将读取文件返回
|
||||
byte[] bytes = Files.readAllBytes(templatePath);
|
||||
return new String(bytes);
|
||||
}
|
||||
|
||||
/**
|
||||
* * 更新web配置
|
||||
|
@ -29,14 +43,26 @@ public class ConfigurationServiceImpl implements ConfigurationService {
|
|||
* @param dto 前端配置选项
|
||||
*/
|
||||
@Override
|
||||
@CacheEvict(cacheNames = "webConfig", key = "'platformConfig'", beforeInvocation = true, cacheManager = "cacheManagerWithMouth")
|
||||
public void updateWebConfiguration(WebConfigurationDto dto) {
|
||||
redisTemplate.delete(RedisUserConstant.WEB_CONFIG_KEY);
|
||||
try {
|
||||
// 系统模板文件位置
|
||||
Path templatePath = Path.of(bashPath + "/platform-config.json");
|
||||
|
||||
// 提交表单转换
|
||||
WebConfiguration webConfiguration = new WebConfiguration();
|
||||
BeanUtils.copyProperties(dto, webConfiguration);
|
||||
// 提交表单转换
|
||||
WebConfiguration webConfiguration = new WebConfiguration();
|
||||
BeanUtils.copyProperties(dto, webConfiguration);
|
||||
|
||||
redisTemplate.opsForValue().set(RedisUserConstant.WEB_CONFIG_KEY, webConfiguration);
|
||||
// 将表单转成存储的类型
|
||||
WebConfigurationVo webConfigurationVo = new WebConfigurationVo();
|
||||
BeanUtils.copyProperties(webConfiguration, webConfigurationVo);
|
||||
|
||||
// 将文件写入
|
||||
String jsonString = JSON.toJSONString(webConfigurationVo);
|
||||
Files.writeString(templatePath, jsonString);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -45,24 +71,32 @@ public class ConfigurationServiceImpl implements ConfigurationService {
|
|||
* @return 前端配置文件
|
||||
*/
|
||||
@Override
|
||||
@Cacheable(cacheNames = "webConfig", key = "'platformConfig'", cacheManager = "cacheManagerWithMouth")
|
||||
public WebConfiguration webConfig() {
|
||||
// 判断Redis中是否存在
|
||||
Object object = redisTemplate.opsForValue().get(RedisUserConstant.WEB_CONFIG_KEY);
|
||||
if (object != null) {
|
||||
String jsonString = JSON.toJSONString(object);
|
||||
return JSON.parseObject(jsonString, WebConfiguration.class);
|
||||
}
|
||||
// 系统模板文件位置
|
||||
Path templatePath = Path.of(bashPath + "/platform-config.json");
|
||||
|
||||
// 不存在从文件中获取
|
||||
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("static/platform-config.json")) {
|
||||
if (inputStream == null) throw new AuthCustomerException(ResultCodeEnum.MISSING_TEMPLATE_FILES);
|
||||
String string = getWebConfigString(inputStream, templatePath);
|
||||
return JSON.parseObject(string, WebConfiguration.class);
|
||||
} catch (IOException exception) {
|
||||
throw new AuthCustomerException(exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 读取文件返回并存入Redis
|
||||
byte[] bytes = inputStream.readAllBytes();
|
||||
WebConfiguration webConfiguration = JSON.parseObject(new String(bytes), WebConfiguration.class);
|
||||
redisTemplate.opsForValue().set(RedisUserConstant.WEB_CONFIG_KEY, webConfiguration);
|
||||
/**
|
||||
* 获取修改web配置文件
|
||||
*
|
||||
* @return 要修改前端配置文件
|
||||
*/
|
||||
@Override
|
||||
public WebConfigurationVo getWebConfig() {
|
||||
// 系统模板文件位置
|
||||
Path templatePath = Path.of(bashPath + "/platform-config.json");
|
||||
|
||||
return webConfiguration;
|
||||
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("static/platform-config.json")) {
|
||||
String string = getWebConfigString(inputStream, templatePath);
|
||||
return JSON.parseObject(string, WebConfigurationVo.class);
|
||||
} catch (IOException exception) {
|
||||
throw new AuthCustomerException(exception.getMessage());
|
||||
}
|
||||
|
|
|
@ -2,9 +2,6 @@ package cn.bunny.services.service.financial.impl;
|
|||
|
||||
import cn.bunny.common.service.context.BaseContext;
|
||||
import cn.bunny.common.service.exception.AuthCustomerException;
|
||||
import cn.bunny.common.service.utils.minio.MinioProperties;
|
||||
import cn.bunny.common.service.utils.minio.MinioUtil;
|
||||
import cn.bunny.dao.constant.MinioConstant;
|
||||
import cn.bunny.dao.dto.financial.bill.BillDto;
|
||||
import cn.bunny.dao.dto.financial.bill.IncomeExpenseQueryDto;
|
||||
import cn.bunny.dao.dto.financial.bill.admin.BillAddDto;
|
||||
|
@ -16,9 +13,7 @@ import cn.bunny.dao.dto.financial.bill.user.BillUpdateByUserDto;
|
|||
import cn.bunny.dao.entity.mysql.financial.Bill;
|
||||
import cn.bunny.dao.entity.mysql.system.AdminUser;
|
||||
import cn.bunny.dao.entity.mysql.system.EmailTemplate;
|
||||
import cn.bunny.dao.entity.mysql.system.Files;
|
||||
import cn.bunny.dao.enums.EmailTemplateEnums;
|
||||
import cn.bunny.dao.model.file.MinioFilePath;
|
||||
import cn.bunny.dao.vo.financial.admin.BillVo;
|
||||
import cn.bunny.dao.vo.financial.user.BillUserVo;
|
||||
import cn.bunny.dao.vo.financial.user.expendAndIncome.CategoryAmount;
|
||||
|
@ -34,7 +29,6 @@ import cn.bunny.services.mapper.financial.BillMapper;
|
|||
import cn.bunny.services.mapper.financial.CategoryMapper;
|
||||
import cn.bunny.services.mapper.message.MessageMapper;
|
||||
import cn.bunny.services.mapper.message.MessageReceivedMapper;
|
||||
import cn.bunny.services.mapper.system.FilesMapper;
|
||||
import cn.bunny.services.mapper.system.UserMapper;
|
||||
import cn.bunny.services.service.financial.BillService;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
|
@ -76,12 +70,6 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
|
|||
@Autowired
|
||||
private BillFactory billFactory;
|
||||
|
||||
@Autowired
|
||||
private MinioUtil minioUtil;
|
||||
|
||||
@Autowired
|
||||
private MinioProperties minioProperties;
|
||||
|
||||
@Autowired
|
||||
private CategoryMapper categoryMapper;
|
||||
|
||||
|
@ -97,9 +85,6 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
|
|||
@Autowired
|
||||
private EmailTemplateMapper emailTemplateMapper;
|
||||
|
||||
@Autowired
|
||||
private FilesMapper filesMapper;
|
||||
|
||||
|
||||
/**
|
||||
* * 账单信息 服务实现类
|
||||
|
@ -298,18 +283,8 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
|
|||
public void importBill(MultipartFile file) {
|
||||
EasyExcel.read(file.getInputStream(), BillImportByUserDto.class, new BillAddUserListener(categoryMapper, messageMapper, messageReceivedMapper, this)).sheet().doRead();
|
||||
|
||||
// 上传文件到Minio
|
||||
MinioFilePath minioFilePath = minioUtil.uploadObjectReturnFilePath(file, MinioConstant.billExcel);
|
||||
|
||||
// 将文件信息存入数据库
|
||||
Files files = new Files();
|
||||
files.setFileType(file.getContentType());
|
||||
files.setFileSize(file.getSize());
|
||||
files.setFilepath("/" + minioProperties.getBucketName() + minioFilePath.getFilepath());
|
||||
files.setFilename(minioFilePath.getFilename());
|
||||
files.setDownloadCount(0);
|
||||
|
||||
filesMapper.insert(files);
|
||||
// 上传文件
|
||||
billFactory.uploadBillExcelWithAsync(file);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,7 +4,4 @@
|
|||
| |_) | |_| | | | | | | | |_| | | | (_| |\ V | (_| |
|
||||
|_.__/ \__,_|_| |_|_| |_|\__, | _/ |\__,_| \_/ \__,_|
|
||||
|___/ |__/
|
||||
|
||||
${spring-boot.formatted-version}
|
||||
${application.title}
|
||||
SpringBoot Version: ${spring-boot.version}${spring-boot.formatted-version}
|
||||
|
|
Loading…
Reference in New Issue