Skip to content

Commit

Permalink
save
Browse files Browse the repository at this point in the history
  • Loading branch information
markliu2013 committed Feb 23, 2024
1 parent f8549a5 commit b80c8ff
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 36 deletions.
18 changes: 17 additions & 1 deletion src/main/java/cn/biq/mn/TestController.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,19 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.TimeZone;


@RestController
public class TestController {

@RequestMapping(method = RequestMethod.GET, value = "/version")
public BaseResponse handleVersion() {
return new DataResponse<>("93.29");
return new DataResponse<>("93.30");
}

@GetMapping("/test3")
Expand All @@ -34,4 +40,14 @@ public BaseResponse getBaseUrl(HttpServletRequest request) {
// return new DataResponse<>(61);
// }

public static void main(String[] args) {
Date ss = new Date();
SimpleDateFormat sf = new SimpleDateFormat("MM/dd/yyyy HH:mm");
ZoneId zoneId = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(8));
TimeZone timeZone = TimeZone.getTimeZone(zoneId);
sf.setTimeZone(timeZone);
System.out.println(sf.format(ss));

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ public interface BalanceFlowRepository extends BaseRepository<BalanceFlow> {

boolean existsByPayee(Payee payee);

List<BalanceFlow> findAllByBook(Book book);
List<BalanceFlow> findAllByBookOrderByCreateTimeDesc(Book book);

}
9 changes: 4 additions & 5 deletions src/main/java/cn/biq/mn/book/BookController.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,12 @@ public BaseResponse handleAddByBook(@Valid @RequestBody BookAddByBookForm form)
}

@RequestMapping(method = RequestMethod.GET, value = "/{id}/export")
public void handleExport(@PathVariable("id") Integer id, HttpServletResponse response) throws IOException {
Workbook workbook = bookService.exportFlow(id);
public void handleExport(@PathVariable("id") Integer id, @RequestParam Integer timeZoneOffset, HttpServletResponse response) throws IOException {
Workbook workbook = bookService.exportFlow(id, timeZoneOffset);
// 设置 HTTP 响应头
response.setContentType("application/vnd.ms-excel");
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
String currentDateTime = dateFormatter.format(new Date());
response.setHeader("Content-disposition", "attachment; filename=users_" + currentDateTime + ".xlsx");
String fileName = "book";
response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xlsx");
// 将工作簿写入响应流
workbook.write(response.getOutputStream());
workbook.close();
Expand Down
49 changes: 35 additions & 14 deletions src/main/java/cn/biq/mn/book/BookService.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
import cn.biq.mn.user.User;
import cn.biq.mn.user.UserRepository;
import cn.biq.mn.utils.Limitation;
import cn.biq.mn.utils.MessageSourceUtil;
import cn.biq.mn.utils.SessionUtil;
import cn.biq.mn.utils.WebUtils;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
Expand All @@ -39,6 +41,9 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.*;

@Service
Expand All @@ -58,6 +63,7 @@ public class BookService {
private final BaseService baseService;
private final CurrencyService currencyService;
private final ApplicationScopeBean applicationScopeBean;
private final MessageSourceUtil messageSourceUtil;

@Transactional(readOnly = true)
public Page<BookDetails> query(BookQueryForm form, Pageable page) {
Expand Down Expand Up @@ -312,7 +318,7 @@ private void saveCategory1(List<CategoryDetails> detailsList, Book book) {
}
}

public Workbook exportFlow(Integer id) {
public Workbook exportFlow(Integer id, Integer timeZoneOffset) {
Book book = baseService.getBookInGroup(id);
// 24小时内只能导出一次
// if (CalendarUtil.inLastDay(book.getExportAt())) {
Expand All @@ -321,20 +327,29 @@ public Workbook exportFlow(Integer id) {
// 创建一个新的工作簿
Workbook workbook = new SXSSFWorkbook();
// 创建一个新的工作表
Sheet sheet = workbook.createSheet("Data");
Sheet sheet = workbook.createSheet("Book");
// 创建表头
Row headerRow = sheet.createRow(0);
String[] headers = {
"标题", "交易类型", "金额", "时间", "账户", "分类",
"标签", "交易对象", "备注", "是否确认", "是否统计"
messageSourceUtil.getMessage("book.export.title"),
messageSourceUtil.getMessage("book.export.type"),
messageSourceUtil.getMessage("book.export.amount"),
messageSourceUtil.getMessage("book.export.time"),
messageSourceUtil.getMessage("book.export.account"),
messageSourceUtil.getMessage("book.export.category"),
messageSourceUtil.getMessage("book.export.tag"),
messageSourceUtil.getMessage("book.export.payee"),
messageSourceUtil.getMessage("book.export.note"),
messageSourceUtil.getMessage("book.export.confirm"),
messageSourceUtil.getMessage("book.export.include"),
};
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
}

// 写入数据
List<BalanceFlow> balanceFlows = balanceFlowRepository.findAllByBook(book);
List<BalanceFlow> balanceFlows = balanceFlowRepository.findAllByBookOrderByCreateTimeDesc(book);
List<BalanceFlowDetails> balanceFlowDetailsList = balanceFlows.stream().map(balanceFlowMapper::toDetails).toList();
int rowNum = 1;
for (BalanceFlowDetails item : balanceFlowDetailsList) {
Expand All @@ -343,13 +358,19 @@ public Workbook exportFlow(Integer id) {
row.createCell(1).setCellValue(item.getTypeName());
row.createCell(2).setCellValue(item.getAmount().toString());

CellStyle cellStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();
cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm"));
cellStyle.setAlignment(HorizontalAlignment.LEFT);
Cell cell = row.createCell(3);
cell.setCellValue(new Date(item.getCreateTime()));
cell.setCellStyle(cellStyle);
Date createDate = new Date(item.getCreateTime());
String lang = WebUtils.getAcceptLang();
String dateFormat;
if ("zh-CN".equals(lang)) {
dateFormat = "yyyy-MM-dd HH:mm:ss";
} else {
dateFormat = "MM/dd/yyyy HH:mm";
}
SimpleDateFormat sf = new SimpleDateFormat(dateFormat);
ZoneId zoneId = ZoneId.ofOffset("GMT", ZoneOffset.ofHours(timeZoneOffset));
TimeZone timeZone = TimeZone.getTimeZone(zoneId);
sf.setTimeZone(timeZone);
row.createCell(3).setCellValue(sf.format(createDate));

row.createCell(4).setCellValue(item.getAccountName());
row.createCell(5).setCellValue(item.getCategoryName());
Expand All @@ -362,9 +383,9 @@ public Workbook exportFlow(Integer id) {
}

row.createCell(8).setCellValue(item.getNotes());
row.createCell(9).setCellValue(item.getConfirm() ? "是" : "否");
row.createCell(9).setCellValue(item.getConfirm() ? messageSourceUtil.getMessage("yes") : messageSourceUtil.getMessage("no"));
if (item.getInclude() != null) {
row.createCell(10).setCellValue(item.getInclude() ? "是" : "否");
row.createCell(10).setCellValue(item.getInclude() ? messageSourceUtil.getMessage("yes") : messageSourceUtil.getMessage("no"));
}
}
sheet.setColumnWidth(3, 19*256);
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/cn/biq/mn/book/tpl/BookTemplateController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,11 @@
import cn.biq.mn.response.DataResponse;
import cn.biq.mn.utils.WebUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;


Expand Down
1 change: 0 additions & 1 deletion src/main/java/cn/biq/mn/currency/CurrencyService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import cn.biq.mn.utils.WebUtils;
import cn.biq.mn.bean.ApplicationScopeBean;
import lombok.RequiredArgsConstructor;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

Expand Down
6 changes: 2 additions & 4 deletions src/main/java/cn/biq/mn/user/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import com.querydsl.core.BooleanBuilder;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
Expand Down Expand Up @@ -91,9 +90,8 @@ public boolean register(RegisterForm form) {
// TODO 待优化,
Group group = new Group();
group.setName(messageSourceUtil.getMessage("user.register.default.group"));
Locale currentLocale = LocaleContextHolder.getLocale();
String currentLanguage = currentLocale.getLanguage();
if (currentLanguage.equals("zh")) {
String lang = WebUtils.getAcceptLang();
if ("zh-CN".equals(lang)) {
group.setDefaultCurrencyCode("CNY");
} else {
group.setDefaultCurrencyCode("USD");
Expand Down
14 changes: 13 additions & 1 deletion src/main/resources/i18n/messages_en_US.properties
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,16 @@ invite.user.not.exists=User not exists
invite.user.has.role=Invited or is user of group already
group.remove.user.self=Can't remove yourself
book.export.title=Title
book.export.type=Type
book.export.amount=Amount
book.export.time=Time
book.export.account=Account
book.export.category=Category
book.export.tag=Tag
book.export.payee=Payee
book.export.note=Note
book.export.confirm=Confirm
book.export.include=Include
yes=Yes
no=No
29 changes: 24 additions & 5 deletions src/main/resources/i18n/messages_zh_CN.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
DefaultException=\u7F51\u7EDC\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
ItemExistsException=\u6761\u76EE\u5DF2\u5B58\u5728
ItemNotFoundException=\u8BB0\u5F55\u4E0D\u5B58\u5728
HttpMessageNotReadableException=\u53C2\u6570\u683C\u5F0F\u9519\u8BEF


valid.fail=\u8F93\u5165\u4E0D\u5408\u6CD5
javax.validation.constraints.NotBlank.message=\u4E0D\u80FD\u4E3A\u7A7A
Expand All @@ -9,13 +9,16 @@ javax.validation.constraints.Size.message=\u957F\u5EA6\u5FC5\u987B{min} - {max}

custom.validation.constraints.NotStartsWithSpace.message=\u5F00\u5934\u4E0D\u80FD\u6709\u7A7A\u683C
custom.validation.constraints.NotEndsWithSpace.message=\u7ED3\u5C3E\u4E0D\u80FD\u6709\u7A7A\u683C
custom.validation.constraints.NotZero.message=\u4E0D\u80FD\u8F93\u51650

item.exists.exception=\u540D\u79F0\u5DF2\u5B58\u5728
item.not.found.exception=\u8BB0\u5F55\u4E0D\u5B58\u5728
error.parent.itself=\u7236\u7C7B\u4E0D\u80FD\u662F\u81EA\u5DF1

response.message.success=\u64CD\u4F5C\u6210\u529F

auth.error=\u6CA1\u6709\u6743\u9650


user.register.name.exists=\u7528\u6237\u540D\u5DF2\u5B58\u5728
user.register.invite.code.error=\u9080\u8BF7\u7801\u9519\u8BEF
Expand Down Expand Up @@ -57,6 +60,7 @@ add.flow.category.duplicated=\u5206\u7C7B\u4E0D\u80FD\u91CD\u590D
add.flow.category.empty=\u5206\u7C7B\u4E0D\u80FD\u4E3A\u7A7A
add.flow.category.overflow=\u8D85\u8FC7\u5206\u7C7B\u6570\u6700\u5927\u9650\u5236
add.flow.daily.overflow=\u64CD\u4F5C\u592A\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002
add.flow.file.fail=\u4E0A\u4F20\u6587\u4EF6\u51FA\u9519\u3002
label.expense=\u652F\u51FA
label.income=\u6536\u5165
label.transfer=\u8F6C\u8D26
Expand All @@ -66,6 +70,7 @@ group.max.count=\u8D85\u8FC7\u6700\u5927\u5206\u7EC4\u6570\u9650\u5236
role.type.own=\u6240\u6709\u8005
role.type.operator=\u64CD\u4F5C\u8005
role.type.guest=\u8BBF\u5BA2
role.type.invited=\u5DF2\u88AB\u9080\u8BF7
group.update.auth.error=\u6CA1\u6709\u6743\u9650
group.delete.has.flow=\u6709\u8D26\u5355\u7684\u5206\u7EC4\u65E0\u6CD5\u5220\u9664
group.delete.size.error=\u5FC5\u987B\u4FDD\u7559\u4E00\u4E2A\u7EC4
Expand All @@ -76,6 +81,20 @@ day=\u5929
month=\u6708
year=\u5E74




invite.user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728
invite.user.has.role=\u5DF2\u9080\u8BF7\u6216\u8BE5\u7528\u6237\u5DF2\u662F\u7EC4\u6210\u5458
group.remove.user.self=\u4E0D\u80FD\u5220\u9664\u81EA\u5DF1

book.export.title=\u6807\u9898
book.export.type=\u4EA4\u6613\u7C7B\u578B
book.export.amount=\u91D1\u989D
book.export.time=\u65F6\u95F4
book.export.account=\u8D26\u6237
book.export.category=\u5206\u7C7B
book.export.tag=\u6807\u7B7E
book.export.payee=\u4EA4\u6613\u5BF9\u8C61
book.export.note=\u5907\u6CE8
book.export.confirm=\u662F\u5426\u786E\u8BA4
book.export.include=\u662F\u5426\u7EDF\u8BA1
yes=\u662F
no=\u5426

0 comments on commit b80c8ff

Please sign in to comment.