Merge remote-tracking branch 'origin/develop' into develop
# Conflicts: # nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/TokenUtil.java # nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/config/MysqlDataSourceConfig.java
This commit is contained in:
commit
28b54385df
|
|
@ -10,7 +10,7 @@
|
|||
<artifactId>nflg-mobilebroken-admin</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<name>服务-管理端服务</name>
|
||||
<description>菜单等公用功能接口</description>
|
||||
<description>管理端的功能接口</description>
|
||||
<packaging>jar</packaging>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
|
@ -71,10 +71,6 @@
|
|||
<groupId>jakarta.validation</groupId>
|
||||
<artifactId>jakarta.validation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.nflg</groupId>
|
||||
<artifactId>nflg-mobilebroken-starter</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,210 @@
|
|||
package com.nflg.mobilebroken.admin.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.nflg.mobilebroken.common.constant.STATE;
|
||||
import com.nflg.mobilebroken.common.exception.NflgException;
|
||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.DictionaryItemTranslateDTO;
|
||||
import com.nflg.mobilebroken.common.pojo.request.DictionaryItemSearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.DictionarySearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.SaveDictionaryItemRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.SaveDictionaryRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryItemTranslateVO;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryItemVO;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryVO;
|
||||
import com.nflg.mobilebroken.common.util.EecExcelUtil;
|
||||
import com.nflg.mobilebroken.common.util.TokenUtil;
|
||||
import com.nflg.mobilebroken.common.util.VUtils;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
import com.nflg.mobilebroken.repository.entity.Language;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryItemService;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryService;
|
||||
import com.nflg.mobilebroken.repository.service.ILanguageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 字典相关
|
||||
*
|
||||
* @author 曹鹏飞
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/dictionary")
|
||||
public class DictionaryController {
|
||||
|
||||
@Resource
|
||||
private IDictionaryService dictionaryService;
|
||||
|
||||
@Resource
|
||||
private IDictionaryItemService dictionaryItemService;
|
||||
|
||||
@Resource
|
||||
private IDictionaryItemTranslateService dictionaryItemTranslateService;
|
||||
|
||||
@Resource
|
||||
private ILanguageService languageService;
|
||||
|
||||
/**
|
||||
* 搜索字典
|
||||
*
|
||||
* @param request 请求参数
|
||||
* @return 字典列表
|
||||
*/
|
||||
@PostMapping("searchDictionary")
|
||||
public ApiResult<PageData<DictionaryVO>> searchDictionary(@RequestBody DictionarySearchRequest request) {
|
||||
IPage<DictionaryVO> page = new Page<>();
|
||||
page.setCurrent(request.getPageNum());
|
||||
page.setSize(request.getPageSize());
|
||||
dictionaryService.search(request, page);
|
||||
return ApiResult.success(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存字典
|
||||
*
|
||||
* @param request 请求参数
|
||||
*/
|
||||
@PostMapping("saveDictionary")
|
||||
public ApiResult<Void> saveDictionary(@Valid @RequestBody SaveDictionaryRequest request) {
|
||||
dictionaryService.save(request);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除字典
|
||||
*
|
||||
* @param ids id列表
|
||||
*/
|
||||
@PostMapping("deleteDictionary")
|
||||
public ApiResult<Void> deleteDictionary(@Valid @RequestBody @NotEmpty List<Integer> ids) {
|
||||
dictionaryService.removeBatchByIds(ids);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索字典值
|
||||
*
|
||||
* @param request 请求参数
|
||||
* @return 字典列表
|
||||
*/
|
||||
@PostMapping("searchDictionaryItem")
|
||||
public ApiResult<PageData<DictionaryItemVO>> searchDictionaryItem(@RequestBody DictionaryItemSearchRequest request) {
|
||||
IPage<DictionaryItemVO> page = new Page<>();
|
||||
page.setCurrent(request.getPageNum());
|
||||
page.setSize(request.getPageSize());
|
||||
dictionaryItemService.search(request, page);
|
||||
return ApiResult.success(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存字典值
|
||||
*
|
||||
* @param request 请求参数
|
||||
*/
|
||||
@PostMapping("saveDictionaryItem")
|
||||
public ApiResult<Void> saveDictionaryItem(@Valid @RequestBody SaveDictionaryItemRequest request) {
|
||||
dictionaryItemService.save(request);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除字典值
|
||||
*
|
||||
* @param ids id列表
|
||||
*/
|
||||
@PostMapping("deleteDictionaryItem")
|
||||
public ApiResult<Void> deleteDictionaryItem(@Valid @RequestBody @NotEmpty List<Integer> ids) {
|
||||
dictionaryItemService.removeBatchByIds(ids);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字典值翻译列表
|
||||
*
|
||||
* @param id 字典值id
|
||||
* @return 字典值翻译列表
|
||||
*/
|
||||
@GetMapping("getDictionaryItemTranslateList")
|
||||
public ApiResult<List<DictionaryItemTranslateVO>> getDictionaryItemTranslateList(@Valid @RequestParam @NotNull Integer id) {
|
||||
return ApiResult.success(dictionaryItemTranslateService.getListByDictionaryItemId(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出字典值翻译列表
|
||||
*
|
||||
* @param dictionaryItemIds 字典值id列表
|
||||
*/
|
||||
@GetMapping("exportDictionaryItemTranslates")
|
||||
public void exportDictionaryItemTranslates(HttpServletResponse response
|
||||
, @Validated @RequestParam @NotEmpty List<Integer> dictionaryItemIds) throws IOException {
|
||||
List<DictionaryItemTranslateDTO> datas = dictionaryItemTranslateService.getAllLanguageByDictionaryItemIds(dictionaryItemIds);
|
||||
EecExcelUtil.export("字典翻译", "sheet1", datas, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入字典值翻译列表
|
||||
*
|
||||
* @param file 文件
|
||||
*/
|
||||
@PostMapping("importDictionaryItemTranslates")
|
||||
public ApiResult<Void> importDictionaryItemTranslates(@RequestParam("file") MultipartFile file) {
|
||||
if (file.isEmpty()) {
|
||||
return ApiResult.error("请选择一个文件上传!");
|
||||
}
|
||||
try {
|
||||
List<DictionaryItemTranslateDTO> datas = EecExcelUtil.readTo(file.getInputStream(), DictionaryItemTranslateDTO.class);
|
||||
List<Language> languages = languageService.getLanguages();
|
||||
List<DictionaryItemTranslate> forAdd = new ArrayList<>();
|
||||
List<DictionaryItemTranslate> forUpdate = new ArrayList<>();
|
||||
for (DictionaryItemTranslateDTO dto : datas) {
|
||||
Integer dictionaryItemId = dictionaryItemService.getId(dto.getDictionaryName(), dto.getDictionaryItemName());
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(dictionaryItemId)).throwMessage("字典数据不存在:" + dto.getDictionaryName() + "-" + dto.getDictionaryItemName());
|
||||
Language language = languages.stream().filter(l -> StrUtil.equals(l.getName(), dto.getLanguageName())).findFirst().orElse(null);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(language)).throwMessage("语言不存在:" + dto.getLanguageName());
|
||||
Integer translateId = dictionaryItemTranslateService.getId(dictionaryItemId, language.getCode());
|
||||
DictionaryItemTranslate translate = new DictionaryItemTranslate();
|
||||
translate.setValue(dto.getTranslateValue());
|
||||
if (Objects.isNull(translateId)) {
|
||||
translate.setLanguageCode(language.getCode())
|
||||
.setDictionaryItemId(dictionaryItemId)
|
||||
.setCreateBy(TokenUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
forAdd.add(translate);
|
||||
} else {
|
||||
translate.setUpdateBy(TokenUtil.getUserName())
|
||||
.setUpdateTime(LocalDateTime.now())
|
||||
.setId(translateId);
|
||||
forUpdate.add(translate);
|
||||
}
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(forAdd)) {
|
||||
dictionaryItemTranslateService.saveBatch(forAdd);
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(forUpdate)) {
|
||||
dictionaryItemTranslateService.updateBatchById(forUpdate);
|
||||
}
|
||||
return ApiResult.success();
|
||||
} catch (IOException e) {
|
||||
throw new NflgException(STATE.BusinessError, "文件处理失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
package com.nflg.mobilebroken.admin.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||
import com.nflg.mobilebroken.common.pojo.request.DictionarySearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryVO;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryService;
|
||||
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 javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 平台管理
|
||||
* @author 曹鹏飞
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/platform")
|
||||
public class PlatformController {
|
||||
|
||||
@Resource
|
||||
private IDictionaryService dictionaryService;
|
||||
|
||||
/**
|
||||
* 搜索字典
|
||||
* @param request 请求参数
|
||||
* @return 字典列表
|
||||
*/
|
||||
@PostMapping("search")
|
||||
public ApiResult<PageData<DictionaryVO>> search(@RequestBody DictionarySearchRequest request){
|
||||
IPage<DictionaryVO> page=new Page<>();
|
||||
page.setCurrent(request.getPageNum());
|
||||
page.setSize(request.getPageSize());
|
||||
dictionaryService.search(request,page);
|
||||
PageData<DictionaryVO> pageData=new PageData<>();
|
||||
pageData.setPage(page.getCurrent());
|
||||
pageData.setPageSize(page.getSize());
|
||||
pageData.setTotal(page.getTotal());
|
||||
pageData.setItems(page.getRecords());
|
||||
return ApiResult.success(pageData);
|
||||
}
|
||||
}
|
||||
|
|
@ -9,7 +9,8 @@ import org.springframework.data.mongodb.repository.config.EnableMongoRepositorie
|
|||
|
||||
@SpringBootApplication
|
||||
@MapperScan("com.nflg.mobilebroken.repository.mapper")
|
||||
@ComponentScan(basePackages = {"com.nflg.mobilebroken"})
|
||||
@ComponentScan(basePackages = {"com.nflg.mobilebroken.repository.service","com.nflg.mobilebroken.cfs.controller"
|
||||
,"com.nflg.mobilebroken.starter"})
|
||||
@EnableMongoRepositories(basePackages = "com.nflg.mobilebroken.repository.service")
|
||||
@EnableDiscoveryClient
|
||||
public class CfsApplication {
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public class MessageController {
|
|||
* @param request 请求参数
|
||||
* @return 分页的消息列表
|
||||
*/
|
||||
@GetMapping("searchMessages")
|
||||
@PostMapping("searchMessages")
|
||||
public ApiResult<PageData<MessageVO>> searchMessages(@RequestBody MessageSearchRequest request){
|
||||
IPage<MessageVO> page=new Page<>();
|
||||
page.setCurrent(request.getPageNum());
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ public class TiketController {
|
|||
* @param request 搜索条件
|
||||
* @return 工单列表
|
||||
**/
|
||||
@GetMapping("searchTickets")
|
||||
@PostMapping("searchTickets")
|
||||
public ApiResult<PageData<TicketVO>> searchTickets(@Valid @RequestBody TicketSearchRequest request){
|
||||
IPage<TicketVO> page=new Page<>();
|
||||
page.setCurrent(request.getPageNum());
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
spring.application.name=cfs-app
|
||||
spring.profiles.active=dev
|
||||
server.port=8080
|
||||
server.port=8083
|
||||
# 设置最大文件大小 (默认为1MB)
|
||||
spring.servlet.multipart.max-file-size=100MB
|
||||
# 设置所有文件总大小 (默认为10MB)
|
||||
|
|
|
|||
|
|
@ -40,7 +40,15 @@
|
|||
<dependency>
|
||||
<groupId>org.ttzero</groupId>
|
||||
<artifactId>eec</artifactId>
|
||||
<version>0.4.14</version>
|
||||
<version>0.5.21</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-web</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
package com.nflg.mobilebroken.common.pojo;
|
||||
|
||||
import cn.hutool.db.Page;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.nflg.mobilebroken.common.constant.STATE;
|
||||
import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
|
@ -41,6 +40,19 @@ public class ApiResult<T> implements Serializable {
|
|||
return vo;
|
||||
}
|
||||
|
||||
public static <T> ApiResult<PageData<T>> success(IPage<T> page) {
|
||||
ApiResult<PageData<T>> vo = new ApiResult<>();
|
||||
PageData<T> pageData = new PageData<>();
|
||||
pageData.setPage(page.getCurrent());
|
||||
pageData.setPageSize(page.getSize());
|
||||
pageData.setTotal(page.getTotal());
|
||||
pageData.setItems(page.getRecords());
|
||||
vo.setCode(STATE.Success.getState());
|
||||
vo.setType(STATE.Success.getType());
|
||||
vo.setResult(pageData);
|
||||
return vo;
|
||||
}
|
||||
|
||||
|
||||
public static <T> ApiResult<T> error(int state,String msg,T value) {
|
||||
ApiResult<T> vo = new ApiResult<>();
|
||||
|
|
@ -68,8 +80,11 @@ public class ApiResult<T> implements Serializable {
|
|||
return vo;
|
||||
}
|
||||
|
||||
public static <T> ApiResult<T> success() {
|
||||
return ApiResult.success(null);
|
||||
public static ApiResult<Void> success() {
|
||||
ApiResult<Void> vo = new ApiResult<>();
|
||||
vo.code = STATE.Success.getState();
|
||||
vo.type = STATE.Success.getType();
|
||||
return vo;
|
||||
}
|
||||
public static <T> ApiResult<T> error(STATE code, String msg) {
|
||||
return error(code.getState(),code.getType(), msg);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
package com.nflg.mobilebroken.common.pojo.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.ttzero.excel.annotation.ExcelColumn;
|
||||
|
||||
@Data
|
||||
public class DictionaryItemTranslateDTO {
|
||||
|
||||
@ExcelColumn("字典名称")
|
||||
private String dictionaryName;
|
||||
|
||||
@ExcelColumn("字典值名称")
|
||||
private String dictionaryItemName;
|
||||
|
||||
@ExcelColumn("语言名称")
|
||||
private String languageName;
|
||||
|
||||
@ExcelColumn("翻译内容")
|
||||
private String translateValue;
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package com.nflg.mobilebroken.common.pojo.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DictionaryItemSearchRequest extends PageRequest {
|
||||
|
||||
//字典名称
|
||||
private String name;
|
||||
|
||||
//字典编码
|
||||
private String code;
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.nflg.mobilebroken.common.pojo.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class SaveDictionaryItemRequest {
|
||||
|
||||
//字典值id
|
||||
private Integer id;
|
||||
|
||||
//字典值名称
|
||||
@NotBlank(message = "字典名称不能为空")
|
||||
private String name;
|
||||
|
||||
//字典值编码
|
||||
@NotBlank(message = "字典编码不能为空")
|
||||
private String code;
|
||||
|
||||
//属性值
|
||||
@NotBlank(message = "属性值不能为空")
|
||||
private String value;
|
||||
|
||||
//多语言翻译
|
||||
private List<TranslateMap> languages;
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package com.nflg.mobilebroken.common.pojo.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Data
|
||||
public class SaveDictionaryRequest {
|
||||
|
||||
//字典id
|
||||
private Integer id;
|
||||
|
||||
//字典名称
|
||||
@NotBlank(message = "字典名称不能为空")
|
||||
private String name;
|
||||
|
||||
//字典编码
|
||||
@NotBlank(message = "字典编码不能为空")
|
||||
private String code;
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.nflg.mobilebroken.common.pojo.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TranslateMap {
|
||||
|
||||
//翻译id
|
||||
private Integer id;
|
||||
|
||||
//语言代码
|
||||
private String code;
|
||||
|
||||
//翻译值
|
||||
private String value;
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.nflg.mobilebroken.common.pojo.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DictionaryItemTranslateVO {
|
||||
|
||||
private Integer id;
|
||||
|
||||
//语言代码
|
||||
private String code;
|
||||
|
||||
//语言名称
|
||||
private String name;
|
||||
|
||||
//翻译内容
|
||||
private String value;
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
package com.nflg.mobilebroken.common.pojo.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class DictionaryItemVO {
|
||||
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 字典值名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 字典值编码
|
||||
*/
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 属性值
|
||||
*/
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private String createBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 最后更新人
|
||||
*/
|
||||
private String updateBy;
|
||||
|
||||
/**
|
||||
* 最后更新时间
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
}
|
||||
|
|
@ -3,8 +3,9 @@ package com.nflg.mobilebroken.common.util;
|
|||
|
||||
import com.nflg.mobilebroken.common.constant.STATE;
|
||||
import com.nflg.mobilebroken.common.exception.NflgException;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.ttzero.excel.entity.ListSheet;
|
||||
|
||||
import org.ttzero.excel.entity.Workbook;
|
||||
import org.ttzero.excel.reader.ExcelReader;
|
||||
import org.ttzero.excel.reader.Row;
|
||||
|
|
@ -13,9 +14,8 @@ import org.ttzero.excel.reader.Sheet;
|
|||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
|
@ -30,10 +30,9 @@ import java.util.stream.Collectors;
|
|||
*/
|
||||
public class EecExcelUtil {
|
||||
|
||||
public static void setResponseExcelHeader(HttpServletResponse response, String fileName) throws UnsupportedEncodingException {
|
||||
response.setHeader("content-Type", "application/octet-stream");
|
||||
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "utf-8"));
|
||||
|
||||
public static void setResponseExcelHeader(HttpServletResponse response, String fileName) {
|
||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
public static void eecExcel(String fileName, List<ListSheet> sheets, HttpServletResponse response) throws IOException {
|
||||
|
|
@ -45,6 +44,26 @@ public class EecExcelUtil {
|
|||
workbook.writeTo(response.getOutputStream());
|
||||
}
|
||||
|
||||
public static <T> void export(String fileName, String sheetName, List<T> sheets, HttpServletResponse response) throws IOException {
|
||||
setResponseExcelHeader(response, fileName);
|
||||
new Workbook()
|
||||
.setAutoSize(true)
|
||||
.addSheet(new ListSheet<>(sheetName, sheets))
|
||||
.writeTo(response.getOutputStream());
|
||||
}
|
||||
|
||||
public static <T> List<T> readTo(InputStream stream, Class<T> clazz) {
|
||||
try (ExcelReader reader = ExcelReader.read(stream)) {
|
||||
return reader.sheet(0) // 读取第1个Sheet页
|
||||
.header(1) // 指定第6行为表头
|
||||
.rows() // 读取数据行
|
||||
.map(row -> row.to(clazz))// 将每行数据转换为User对象
|
||||
.collect(Collectors.toList()); // 收集数据进行后续处理
|
||||
} catch (IOException e) {
|
||||
throw new NflgException(STATE.BusinessError, "读取EXCEL失败,请检查模板是否正确:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 行读取excel sheet 0
|
||||
*
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ public class TokenUtil {
|
|||
public static Integer getUserId(){
|
||||
try {
|
||||
//TODO 待实现
|
||||
return 111;
|
||||
return 1;
|
||||
//return StpUtil.getLoginIdAsInt();
|
||||
}catch (Exception ex){
|
||||
throw new NflgException(STATE.LoginError,"请登录");
|
||||
|
|
@ -28,11 +28,18 @@ public class TokenUtil {
|
|||
}
|
||||
}
|
||||
|
||||
public static String getUserNo(){
|
||||
return "test";
|
||||
public static String getUserName() {
|
||||
try {
|
||||
//TODO 待实现
|
||||
return "admin";
|
||||
//return StpUtil.getLoginIdAsInt();
|
||||
} catch (Exception ex) {
|
||||
throw new NflgException(STATE.LoginError, "请登录");
|
||||
}
|
||||
}
|
||||
|
||||
public static String getUserName(){
|
||||
return "test";
|
||||
public static String getUserNo(){
|
||||
return "admin";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
package com.nflg.mobilebroken.repository.mapper;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -13,4 +15,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||
*/
|
||||
public interface DictionaryItemMapper extends BaseMapper<DictionaryItem> {
|
||||
|
||||
@Select("SELECT di.id FROM dictionary_item di INNER JOIN dictionary d ON di.dictionary_id=d.id WHERE d.`name`=#{dictionaryName} AND di.`name`=#{dictionaryItemName}")
|
||||
Integer getId(@Param("dictionaryName") String dictionaryName, @Param("dictionaryItemName") String dictionaryItemName);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package com.nflg.mobilebroken.repository.mapper;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryItemTranslateVO;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||
*/
|
||||
public interface DictionaryItemTranslateMapper extends BaseMapper<DictionaryItemTranslate> {
|
||||
|
||||
List<DictionaryItemTranslateVO> getListByDictionaryItemId(Integer id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package com.nflg.mobilebroken.repository.service;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.nflg.mobilebroken.common.pojo.request.DictionaryItemSearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.SaveDictionaryItemRequest;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||
*/
|
||||
public interface IDictionaryItemService extends IService<DictionaryItem> {
|
||||
|
||||
void search(DictionaryItemSearchRequest request, IPage page);
|
||||
|
||||
void save(SaveDictionaryItemRequest request);
|
||||
|
||||
Integer getId(String dictionaryName, String dictionaryItemName);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,14 @@
|
|||
package com.nflg.mobilebroken.repository.service;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.DictionaryItemTranslateDTO;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryItemTranslateVO;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -13,4 +20,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||
*/
|
||||
public interface IDictionaryItemTranslateService extends IService<DictionaryItemTranslate> {
|
||||
|
||||
List<DictionaryItemTranslateVO> getListByDictionaryItemId(@Valid @NotNull Integer id);
|
||||
|
||||
List<DictionaryItemTranslateDTO> getAllLanguageByDictionaryItemIds(@NotEmpty List<Integer> dictionaryItemIds);
|
||||
|
||||
Integer getId(Integer dictionaryItemId, String code);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
package com.nflg.mobilebroken.repository.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.nflg.mobilebroken.common.pojo.request.DictionarySearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.SaveDictionaryRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryVO;
|
||||
import com.nflg.mobilebroken.repository.entity.Dictionary;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -17,4 +18,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||
public interface IDictionaryService extends IService<Dictionary> {
|
||||
|
||||
void search(DictionarySearchRequest request, IPage<DictionaryVO> page);
|
||||
|
||||
void save(SaveDictionaryRequest request);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,28 @@
|
|||
package com.nflg.mobilebroken.repository.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.mobilebroken.common.pojo.request.DictionaryItemSearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.SaveDictionaryItemRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.TranslateMap;
|
||||
import com.nflg.mobilebroken.common.util.TokenUtil;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
import com.nflg.mobilebroken.repository.mapper.DictionaryItemMapper;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryItemService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -17,4 +35,83 @@ import org.springframework.stereotype.Service;
|
|||
@Service
|
||||
public class DictionaryItemServiceImpl extends ServiceImpl<DictionaryItemMapper, DictionaryItem> implements IDictionaryItemService {
|
||||
|
||||
@Resource
|
||||
private IDictionaryItemTranslateService dictionaryItemTranslateService;
|
||||
|
||||
@Override
|
||||
public void search(DictionaryItemSearchRequest request, IPage page) {
|
||||
LambdaQueryWrapper<DictionaryItem> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StrUtil.isNotBlank(request.getName())) {
|
||||
queryWrapper.like(DictionaryItem::getName, request.getName());
|
||||
}
|
||||
if (StrUtil.isNotBlank(request.getCode())) {
|
||||
queryWrapper.like(DictionaryItem::getCode, request.getCode());
|
||||
}
|
||||
queryWrapper.orderByDesc(DictionaryItem::getId);
|
||||
baseMapper.selectPage(page, queryWrapper);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public boolean removeBatchByIds(Collection<?> list) {
|
||||
super.removeBatchByIds(list);
|
||||
dictionaryItemTranslateService.remove(new LambdaQueryWrapper<DictionaryItemTranslate>()
|
||||
.in(DictionaryItemTranslate::getDictionaryItemId, list));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(SaveDictionaryItemRequest request) {
|
||||
Integer id = request.getId();
|
||||
if (Objects.isNull(request.getId())) {
|
||||
DictionaryItem dictionary = new DictionaryItem()
|
||||
.setName(request.getName())
|
||||
.setCode(request.getCode())
|
||||
.setValue(request.getValue())
|
||||
.setCreateBy(TokenUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
save(dictionary);
|
||||
id = dictionary.getId();
|
||||
} else {
|
||||
DictionaryItem dictionary = new DictionaryItem()
|
||||
.setId(request.getId())
|
||||
.setName(request.getName())
|
||||
.setCode(request.getCode())
|
||||
.setValue(request.getValue())
|
||||
.setUpdateBy(TokenUtil.getUserName())
|
||||
.setUpdateTime(LocalDateTime.now());
|
||||
updateById(dictionary);
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(request.getLanguages())) {
|
||||
dictionaryItemTranslateService.remove(new LambdaQueryWrapper<DictionaryItemTranslate>()
|
||||
.eq(DictionaryItemTranslate::getDictionaryItemId, id));
|
||||
List<DictionaryItemTranslate> forAdd = new ArrayList<>();
|
||||
List<DictionaryItemTranslate> forUpdate = new ArrayList<>();
|
||||
for (TranslateMap translate : request.getLanguages()) {
|
||||
DictionaryItemTranslate t = new DictionaryItemTranslate()
|
||||
.setDictionaryItemId(id)
|
||||
.setLanguageCode(translate.getCode())
|
||||
.setValue(translate.getValue());
|
||||
if (Objects.isNull(translate.getId())) {
|
||||
t.setCreateBy(TokenUtil.getUserName()).setCreateTime(LocalDateTime.now());
|
||||
forAdd.add(t);
|
||||
} else {
|
||||
t.setId(translate.getId()).setUpdateBy(TokenUtil.getUserName()).setUpdateTime(LocalDateTime.now());
|
||||
forUpdate.add(t);
|
||||
}
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(forAdd)) {
|
||||
dictionaryItemTranslateService.saveBatch(forAdd);
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(forUpdate)) {
|
||||
dictionaryItemTranslateService.updateBatchById(forUpdate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getId(String dictionaryName, String dictionaryItemName) {
|
||||
return baseMapper.getId(dictionaryName, dictionaryItemName);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,27 @@
|
|||
package com.nflg.mobilebroken.repository.service.impl;
|
||||
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
import com.nflg.mobilebroken.repository.mapper.DictionaryItemTranslateMapper;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.DictionaryItemTranslateDTO;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DictionaryItemTranslateVO;
|
||||
import com.nflg.mobilebroken.common.util.VUtils;
|
||||
import com.nflg.mobilebroken.repository.entity.Dictionary;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItem;
|
||||
import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate;
|
||||
import com.nflg.mobilebroken.repository.entity.Language;
|
||||
import com.nflg.mobilebroken.repository.mapper.DictionaryItemTranslateMapper;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryItemService;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryService;
|
||||
import com.nflg.mobilebroken.repository.service.ILanguageService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 字典值翻译 服务实现类
|
||||
|
|
@ -17,4 +33,51 @@ import org.springframework.stereotype.Service;
|
|||
@Service
|
||||
public class DictionaryItemTranslateServiceImpl extends ServiceImpl<DictionaryItemTranslateMapper, DictionaryItemTranslate> implements IDictionaryItemTranslateService {
|
||||
|
||||
@Resource
|
||||
private ILanguageService languageService;
|
||||
|
||||
@Resource
|
||||
private IDictionaryItemService dictionaryItemService;
|
||||
|
||||
@Resource
|
||||
private IDictionaryService dictionaryService;
|
||||
|
||||
@Override
|
||||
public List<DictionaryItemTranslateVO> getListByDictionaryItemId(Integer id) {
|
||||
return baseMapper.getListByDictionaryItemId(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DictionaryItemTranslateDTO> getAllLanguageByDictionaryItemIds(List<Integer> dictionaryItemIds) {
|
||||
List<DictionaryItem> dictionaryItems = dictionaryItemService.lambdaQuery().in(DictionaryItem::getId, dictionaryItemIds).list();
|
||||
VUtils.trueThrowBusinessError(CollectionUtil.isEmpty(dictionaryItems)).throwMessage("字典值不存在");
|
||||
Dictionary dictionary = dictionaryService.getById(dictionaryItems.get(0).getDictionaryId());
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(dictionary)).throwMessage("字典不存在");
|
||||
List<DictionaryItemTranslate> dictionaryItemTranslates = lambdaQuery().in(DictionaryItemTranslate::getDictionaryItemId, dictionaryItemIds).list();
|
||||
List<Language> languages = languageService.getLanguages();
|
||||
List<DictionaryItemTranslateDTO> vos = new ArrayList<>();
|
||||
dictionaryItems.forEach(di -> {
|
||||
languages.forEach(l -> {
|
||||
DictionaryItemTranslateDTO vo = new DictionaryItemTranslateDTO();
|
||||
vo.setDictionaryName(dictionary.getName());
|
||||
vo.setDictionaryItemName(di.getName());
|
||||
vo.setLanguageName(l.getName());
|
||||
DictionaryItemTranslate it = dictionaryItemTranslates.stream().filter(t -> Objects.equals(di.getId(), t.getDictionaryItemId())
|
||||
&& StrUtil.equals(t.getLanguageCode(), l.getCode())).findFirst().orElse(null);
|
||||
if (Objects.nonNull(it)) {
|
||||
vo.setTranslateValue(it.getValue());
|
||||
}
|
||||
vos.add(vo);
|
||||
});
|
||||
});
|
||||
return vos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getId(Integer dictionaryItemId, String code) {
|
||||
DictionaryItemTranslate translate = lambdaQuery()
|
||||
.eq(DictionaryItemTranslate::getDictionaryItemId, dictionaryItemId).eq(DictionaryItemTranslate::getLanguageCode, code)
|
||||
.one();
|
||||
return Objects.isNull(translate) ? null : translate.getId();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,11 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.mobilebroken.common.pojo.request.DictionarySearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.SaveDictionaryRequest;
|
||||
import com.nflg.mobilebroken.common.util.TokenUtil;
|
||||
import com.nflg.mobilebroken.repository.entity.Dictionary;
|
||||
import com.nflg.mobilebroken.repository.mapper.DictionaryMapper;
|
||||
import com.nflg.mobilebroken.repository.service.IDictionaryService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 字典 服务实现类
|
||||
|
|
@ -33,4 +38,24 @@ public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, Diction
|
|||
queryWrapper.orderByDesc(Dictionary::getId);
|
||||
baseMapper.selectPage(page,queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(SaveDictionaryRequest request) {
|
||||
if (Objects.isNull(request.getId())) {
|
||||
Dictionary dictionary = new Dictionary()
|
||||
.setName(request.getName())
|
||||
.setCode(request.getCode())
|
||||
.setCreateBy(TokenUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
save(dictionary);
|
||||
} else {
|
||||
Dictionary dictionary = new Dictionary()
|
||||
.setId(request.getId())
|
||||
.setName(request.getName())
|
||||
.setCode(request.getCode())
|
||||
.setUpdateBy(TokenUtil.getUserName())
|
||||
.setUpdateTime(LocalDateTime.now());
|
||||
updateById(dictionary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,4 +2,11 @@
|
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.DictionaryItemTranslateMapper">
|
||||
|
||||
<select id="getListByDictionaryItemId"
|
||||
resultType="com.nflg.mobilebroken.common.pojo.vo.DictionaryItemTranslateVO">
|
||||
SELECT t.id,l.`code`,l.`name`,t.`value`
|
||||
FROM dictionary_item_translate t
|
||||
LEFT JOIN language l ON t.language_code=l.`code`
|
||||
WHERE t.dictionary_item_id=#{id}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue