导入配置

main
暴炳林 2024-09-25 14:07:50 +08:00
parent 557ed2a9f6
commit 8f046ea905
16 changed files with 864 additions and 10 deletions

View File

@ -0,0 +1,96 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.domain;
import com.youchain.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @website https://eladmin.vip
* @description /
* @author baobl
* @date 2024-09-14
**/
@Entity
@Data
@Table(name="sys_excel_config")
public class ExcelConfig extends BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "`id`")
@ApiModelProperty(value = "主键")
private Long id;
@Column(name = "`table_name`")
@ApiModelProperty(value = "table表名")
private String tableName;
@Column(name = "`excel_column_name`")
@ApiModelProperty(value = "Excel列名")
private String excelColumnName;
@Column(name = "`table_column_name`")
@ApiModelProperty(value = "table字段名")
private String tableColumnName;
@Column(name = "`dict_name`")
@ApiModelProperty(value = "关联字典")
private String dictName;
@OneToOne
@JoinColumn(name = "ec_key_id")
@ApiModelProperty(value = "关联外键")
private ExcelConfigKey ecKey;
@Column(name = "`table_column_type`")
@ApiModelProperty(value = "table字段类型")
private String tableColumnType;
@Column(name = "`glb_type`")
@ApiModelProperty(value = "关联表类型")
private Integer glbType=0;
@Column(name = "`only_flag`")
@ApiModelProperty(value = "唯一标识")
private Boolean onlyFlag=false;
@Column(name = "`default_value`")
@ApiModelProperty(value = "默认值")
private String defaultValue;
@Column(name = "`work_type`")
@ApiModelProperty(value = "导入规则")
private String workType="1";
public void copy(ExcelConfig source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
public Object getFormat(Object value,String columnType) {
switch (columnType){
case "string":
value="'"+value+"'";
break;
case "long":
value=Long.valueOf(value+"");
break;
}
return value;
}
}

View File

@ -0,0 +1,61 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.domain;
import com.youchain.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @website https://eladmin.vip
* @description /
* @author baobl
* @date 2024-09-20
**/
@Entity
@Data
@Table(name="sys_excel_config_key")
public class ExcelConfigKey extends BaseEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "`id`")
@ApiModelProperty(value = "主键")
private Long id;
@Column(name = "`table_name`")
@ApiModelProperty(value = "关联表")
private String tableName;
@Column(name = "`key_name`")
@ApiModelProperty(value = "映射字段")
private String keyName;
@Column(name = "`table_column_name`")
@ApiModelProperty(value = "关联表字段名")
private String tableColumnName;
@Column(name = "`table_column_type`")
@ApiModelProperty(value = "关联表字段类型")
private String tableColumnType;
public void copy(ExcelConfigKey source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -0,0 +1,32 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.repository;
import com.youchain.domain.ExcelConfig;
import com.youchain.domain.ExcelConfigKey;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* @website https://eladmin.vip
* @author baobl
* @date 2024-09-14
**/
public interface ExcelConfigKeyRepository extends JpaRepository<ExcelConfigKey, Long>, JpaSpecificationExecutor<ExcelConfigKey> {
}

View File

@ -0,0 +1,35 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.repository;
import com.youchain.domain.ExcelConfig;
import com.youchain.domain.ExcelConfigKey;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* @website https://eladmin.vip
* @author baobl
* @date 2024-09-14
**/
public interface ExcelConfigRepository extends JpaRepository<ExcelConfig, Long>, JpaSpecificationExecutor<ExcelConfig> {
@Query(value = "SELECT e FROM ExcelConfig e where e.tableName=?1",nativeQuery = false)
List<ExcelConfig> findByTableName(String tableName);
List<ExcelConfig> findByTableNameAndTableColumnName(String tableName, String tableColumnName);
}

View File

@ -0,0 +1,258 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.rest;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.config.FileProperties;
import com.youchain.domain.ExcelConfig;
import com.youchain.domain.ExcelConfigKey;
import com.youchain.exception.BadRequestException;
import com.youchain.exception.handler.ApiError;
import com.youchain.exception.handler.ApiResult;
import com.youchain.repository.ExcelConfigKeyRepository;
import com.youchain.repository.ExcelConfigRepository;
import com.youchain.service.ExcelConfigService;
import com.youchain.service.dto.ExcelConfigDto;
import com.youchain.service.dto.ExcelConfigQueryCriteria;
import com.youchain.utils.FileUtil;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.data.domain.Pageable;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.persistence.*;
import javax.servlet.http.HttpServletResponse;
/**
* @website https://eladmin.vip
* @author baobl
* @date 2024-09-14
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "excel_config管理")
@RequestMapping("/api/excelConfig")
public class ExcelConfigController {
private final FileProperties properties;
private final ExcelConfigService excelConfigService;
private final ExcelConfigKeyRepository excelConfigKeyRepository;
@PersistenceContext
private EntityManager entityManager;
private final ExcelConfigRepository excelConfigRepository;
@ApiOperation("导出数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('excelConfig:list')")
public void exportExcelConfig(HttpServletResponse response, ExcelConfigQueryCriteria criteria) throws Exception {
excelConfigService.download(excelConfigService.queryAll(criteria), response);
}
@GetMapping
@ApiOperation("查询excel_config")
@PreAuthorize("@el.check('excelConfig:list')")
public ResponseEntity<Object> queryExcelConfig(ExcelConfigQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(excelConfigService.queryAll(criteria,pageable),HttpStatus.OK);
}
@PostMapping
@ApiOperation("新增excel_config")
@PreAuthorize("@el.check('excelConfig:add')")
public ResponseEntity<Object> createExcelConfig(@Validated @RequestBody ExcelConfigDto resources){
return new ResponseEntity<>(excelConfigService.create(resources),HttpStatus.CREATED);
}
@PutMapping
@ApiOperation("修改excel_config")
@PreAuthorize("@el.check('excelConfig:edit')")
public ResponseEntity<Object> updateExcelConfig(@Validated @RequestBody ExcelConfigDto resources){
excelConfigService.create(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@DeleteMapping
@ApiOperation("删除excel_config")
@PreAuthorize("@el.check('excelConfig:del')")
public ResponseEntity<Object> deleteExcelConfig(@RequestBody Long[] ids) {
excelConfigService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping(value = "/import")
@ApiOperation("导入点位")
@AnonymousAccess
@Transactional
public ResponseEntity<Object> importPoint(@RequestParam("file") MultipartFile multipartFile,@RequestParam("tableName") String tableNames) {
/*通过权限匹配对应的数据库表*/
String tableName = getTableName(tableNames);
FileUtil.checkSize(properties.getMaxSize(), multipartFile.getSize());
String suffix = FileUtil.getExtensionName(multipartFile.getOriginalFilename());
String type = FileUtil.getFileType(suffix);
File file = FileUtil.upload(multipartFile, properties.getPath().getPath() + type + File.separator);
// Dept dept = UserUtils.getDept();
// 编码、描述、库区、存储类型
ExcelReader reader = ExcelUtil.getReader(file);
int edit_len = 0;
int new_len = 0;
int i = 0;
StringBuffer sqlBf=new StringBuffer();
/* 获取导入模板*/
List<ExcelConfig> excelConfigList=excelConfigRepository.findByTableName(tableName);
List<Map<String, Object>> readAll = reader.readAll();
for (i = 0; i < readAll.size(); i++) {
ExcelConfig editEI=null;//0 新增 1 修改
StringBuffer columns=new StringBuffer();/* 字段集*/
StringBuffer values=new StringBuffer();/* 数据集*/
StringBuffer editValues=new StringBuffer();/* 修改*/
Map<String, Object> readMap=readAll.get(i);
for (int j = 0; j < excelConfigList.size(); j++) {
ExcelConfig EI=excelConfigList.get(j);
/* 唯一判定*/
if (EI.getOnlyFlag()==true){
if (readMap.get(EI.getExcelColumnName())==null){
throw new BadRequestException(EI.getExcelColumnName()+"本字段不能为空");
}else {
Object value=readMap.get(EI.getExcelColumnName());
String hql ="select * from "+tableName+" where "+EI.getTableColumnName()+"="+ EI.getFormat(value,EI.getTableColumnType());
// System.out.println(hql);
Query query = entityManager.createNativeQuery(hql);
List<T> qL= query.getResultList();
if (qL.size()<1){
//新增
}else {
//修改
editEI=EI;
}
}
}
if (readMap.get(EI.getExcelColumnName())!=null||(EI.getDefaultValue()!=null&&EI.getDefaultValue().length()>0)){
/* 获取导入值*/
Object value;
if (readMap.get(EI.getExcelColumnName())!=null){
value = readMap.get(EI.getExcelColumnName());
}else {
value=EI.getDefaultValue();
}
/*添加到sql字段集*/
if (EI.getGlbType()==1){
/* 外键关联*/
ExcelConfigKey excelConfigKey=EI.getEcKey();
if (excelConfigKey!=null){
/*获取外键id*/
String hql ="select "+excelConfigKey.getKeyName()+" from "+excelConfigKey.getTableName()+" where "+excelConfigKey.getTableColumnName()+"="+ EI.getFormat(value,excelConfigKey.getTableColumnType());
// System.out.println(hql);
Query query = entityManager.createNativeQuery(hql);
List<T> qL= query.getResultList();
if (qL.size()>0){
value=qL.get(0);
}else {
value=null;
}
}
}else
if (EI.getGlbType()==2){
/*关联字典*/
String hql =" select dd.`value` from sys_dict_detail dd "
+" left join sys_dict d on dd.dict_id=d.dict_id "
+" where d.`name`='"+EI.getDictName()+"' and dd.label='"+value+"' ";
Query query = entityManager.createNativeQuery(hql);
List<T> qL= query.getResultList();
if (qL.size()<1){
throw new BadRequestException("未找到字典:"+EI.getExcelColumnName()+","+value);
}
value=qL.get(0);
}
if (columns.toString().length() < 1) {
columns.append(EI.getTableColumnName());
} else {
columns.append("," + EI.getTableColumnName());
}
if (values.toString().length() < 1) {
values.append(EI.getFormat(value,EI.getTableColumnType()));
} else {
values.append("," + EI.getFormat(value,EI.getTableColumnType()));
}
}
}
String sql;
if (editEI==null){
sql = "INSERT INTO "+tableName+" ("+columns+") VALUES ("+values+")"+";";
}else {
String[] columnArr=columns.toString().split(",");
String[] valuesArr=values.toString().split(",");
for (int j = 0; j < columnArr.length; j++) {
if (editValues.length()<1){
editValues.append(columnArr[j]+"="+valuesArr[j]);
}else {
editValues.append(","+columnArr[j]+"="+valuesArr[j]);
}
}
sql = "UPDATE "+tableName+" SET "+editValues+" WHERE "+editEI.getTableColumnName()+"="+editEI.getFormat(readMap.get(editEI.getExcelColumnName()),editEI.getTableColumnType())+";";
}
sqlBf.append(sql);
System.out.println(sql);
entityManager.createNativeQuery(sql)
.executeUpdate();
}
/*System.out.println(sqlBf);
*//* 执行sql语句*//*
entityManager.createNativeQuery(sqlBf.toString())
.executeUpdate();*/
ApiError apiError = ApiError.errorJosn(HttpStatus.OK.value(), "导入成功:" + (i) + "行 新增(" + new_len + ")修改(" + edit_len + ")");
return new ResponseEntity(apiError, HttpStatus.valueOf(apiError.getStatus()));
}
private String getTableName(String tableNames) {
String tableName="";
String[] tableNameList= tableNames.split(",");
StringBuilder tableNameSql = new StringBuilder();
tableNameSql.append("(");
for (int i = 0; i < tableNameList.length; i++) {
tableNameSql.append("'").append(tableNameList[i]).append("'");
if (i < tableNameList.length - 1) {
tableNameSql.append(",");
}
}
tableNameSql.append(")");
String hql =" select dd.`value` from sys_dict_detail dd "
+" left join sys_dict d on dd.dict_id=d.dict_id "
+" where d.`name`='per_table_config' and dd.label in "+tableNameSql+" ";
Query query = entityManager.createNativeQuery(hql);
List<T> qL= query.getResultList();
if (qL.size()<1){
throw new BadRequestException("未匹配到权限表");
}else {
tableName=qL.get(0)+"";
}
return tableName;
}
}

View File

@ -15,6 +15,7 @@
*/
package com.youchain.rest;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.exception.BadRequestException;
import com.youchain.utils.PageUtil;
import io.swagger.annotations.Api;
@ -61,6 +62,13 @@ public class GeneratorController {
int[] startEnd = PageUtil.transToStartEnd(page, size);
return new ResponseEntity<>(generatorService.getTables(name,startEnd), HttpStatus.OK);
}
@ApiOperation("查询数据库所有表")
@GetMapping(value = "/tablesList")
@AnonymousAccess
public ResponseEntity<Object> tableList(){
int[] startEnd = PageUtil.transToStartEnd(0, 1000);
return new ResponseEntity<>(generatorService.getTables(null,startEnd), HttpStatus.OK);
}
@ApiOperation("查询字段数据")
@GetMapping(value = "/columns")
@ -68,7 +76,6 @@ public class GeneratorController {
List<ColumnInfo> columnInfos = generatorService.getColumns(tableName);
return new ResponseEntity<>(PageUtil.toPage(columnInfos,columnInfos.size()), HttpStatus.OK);
}
@ApiOperation("保存字段数据")
@PutMapping
public ResponseEntity<HttpStatus> saveColumn(@RequestBody List<ColumnInfo> columnInfos){

View File

@ -0,0 +1,83 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.service;
import com.youchain.domain.ExcelConfig;
import com.youchain.service.dto.ExcelConfigDto;
import com.youchain.service.dto.ExcelConfigQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @website https://eladmin.vip
* @description
* @author baobl
* @date 2024-09-14
**/
public interface ExcelConfigService {
/**
*
* @param criteria
* @param pageable
* @return Map<String,Object>
*/
Map<String,Object> queryAll(ExcelConfigQueryCriteria criteria, Pageable pageable);
/**
*
* @param criteria
* @return List<ExcelConfigDto>
*/
List<ExcelConfigDto> queryAll(ExcelConfigQueryCriteria criteria);
/**
* ID
* @param id ID
* @return ExcelConfigDto
*/
ExcelConfigDto findById(Long id);
/**
*
* @param resources /
* @return ExcelConfigDto
*/
ExcelConfigDto create(ExcelConfigDto resources);
/**
*
* @param resources /
*/
void update(ExcelConfig resources);
/**
*
* @param ids /
*/
void deleteAll(Long[] ids);
/**
*
* @param all
* @param response /
* @throws Exception /
*/
void download(List<ExcelConfigDto> all, HttpServletResponse response) throws Exception;
}

View File

@ -0,0 +1,65 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.service.dto;
import com.youchain.domain.ExcelConfigKey;
import lombok.Data;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @website https://eladmin.vip
* @description /
* @author baobl
* @date 2024-09-14
**/
@Data
public class ExcelConfigDto implements Serializable {
/** 主键 */
private Long id;
/** table表名 */
private String tableName;
/** Excel列名 */
private String excelColumnName;
/** table字段名 */
private String tableColumnName;
/** table字段类型 */
private String tableColumnType;
/** 关联表类型 */
private Integer glbType=0;
/** 唯一标识 */
private Boolean onlyFlag=false;
/** 默认值 */
private String defaultValue;
/** 关联字典value */
private String dictName;
/** 关联外键表名 */
private String keyTableName;
/** 表列名 */
private String keyColumnName;
/** 字段类型 */
private String keyColumnType;
/** 字段映射 */
private String keyName;
private ExcelConfigKey ecKey;
}

View File

@ -0,0 +1,31 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.service.dto;
import lombok.Data;
import java.util.List;
import com.youchain.annotation.Query;
/**
* @website https://eladmin.vip
* @author baobl
* @date 2024-09-14
**/
@Data
public class ExcelConfigQueryCriteria{
@Query(type = Query.Type.EQUAL)
private String tableName;
}

View File

@ -0,0 +1,146 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.service.impl;
import com.youchain.domain.ExcelConfig;
import com.youchain.domain.ExcelConfigKey;
import com.youchain.repository.ExcelConfigKeyRepository;
import com.youchain.utils.FileUtil;
import com.youchain.utils.PageUtil;
import com.youchain.utils.QueryHelp;
import com.youchain.utils.ValidationUtil;
import lombok.RequiredArgsConstructor;
import com.youchain.repository.ExcelConfigRepository;
import com.youchain.service.ExcelConfigService;
import com.youchain.service.dto.ExcelConfigDto;
import com.youchain.service.dto.ExcelConfigQueryCriteria;
import com.youchain.service.mapstruct.ExcelConfigMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
/**
* @website https://eladmin.vip
* @description
* @author baobl
* @date 2024-09-14
**/
@Service
@RequiredArgsConstructor
public class ExcelConfigServiceImpl implements ExcelConfigService {
private final ExcelConfigRepository excelConfigRepository;
private final ExcelConfigKeyRepository excelConfigKeyRepository;
private final ExcelConfigMapper excelConfigMapper;
@Override
public Map<String,Object> queryAll(ExcelConfigQueryCriteria criteria, Pageable pageable){
Page<ExcelConfig> page = excelConfigRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(excelConfigMapper::toDto));
}
@Override
public List<ExcelConfigDto> queryAll(ExcelConfigQueryCriteria criteria){
return excelConfigMapper.toDto(excelConfigRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
@Transactional
public ExcelConfigDto findById(Long id) {
ExcelConfig excelConfig = excelConfigRepository.findById(id).orElseGet(ExcelConfig::new);
ValidationUtil.isNull(excelConfig.getId(),"ExcelConfig","id",id);
return excelConfigMapper.toDto(excelConfig);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ExcelConfigDto create(ExcelConfigDto resources) {
ExcelConfig excelConfig=new ExcelConfig();
if (resources.getId()!=null){
excelConfig=excelConfigRepository.getById(resources.getId());
}
/*List<ExcelConfig> excelConfigList=excelConfigRepository.findByTableNameAndTableColumnName(resources.getTableName(),resources.getTableColumnName());
if (excelConfigList.size()>0){
excelConfig=excelConfigList.get(0);
}*/
excelConfig.setDictName(resources.getDictName());
excelConfig.setTableName(resources.getTableName());
excelConfig.setTableColumnName(resources.getTableColumnName());
excelConfig.setTableColumnType(resources.getTableColumnType());
excelConfig.setExcelColumnName(resources.getExcelColumnName());
excelConfig.setGlbType(resources.getGlbType());
excelConfig.setOnlyFlag(resources.getOnlyFlag());
excelConfig.setDefaultValue(resources.getDefaultValue());
excelConfigRepository.save(excelConfig);
if (excelConfig.getGlbType()!=null&&excelConfig.getGlbType()==1){
/* 外键控制*/
ExcelConfigKey key=excelConfig.getEcKey();
if (key==null){
key=new ExcelConfigKey();
}
key.setTableName(resources.getEcKey().getTableName());
key.setTableColumnName(resources.getEcKey().getTableColumnName());
key.setTableColumnType(resources.getEcKey().getTableColumnType());
key.setKeyName(resources.getEcKey().getKeyName());
excelConfigKeyRepository.save(key);
excelConfig.setEcKey(key);
excelConfigRepository.save(excelConfig);
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(ExcelConfig resources) {
ExcelConfig excelConfig = excelConfigRepository.findById(resources.getId()).orElseGet(ExcelConfig::new);
ValidationUtil.isNull( excelConfig.getId(),"ExcelConfig","id",resources.getId());
excelConfig.copy(resources);
excelConfigRepository.save(excelConfig);
}
@Override
public void deleteAll(Long[] ids) {
for (Long id : ids) {
ExcelConfig excelConfig=excelConfigRepository.getById(id);
ExcelConfigKey excelConfigKey=excelConfig.getEcKey();
if (excelConfigKey!=null) {
excelConfigKeyRepository.deleteById(excelConfigKey.getId());
}
excelConfigRepository.deleteById(id);
}
}
@Override
public void download(List<ExcelConfigDto> all, HttpServletResponse response) throws Exception {
List<Map<String, Object>> list = new ArrayList<>();
for (ExcelConfigDto excelConfig : all) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("table表名", excelConfig.getTableName());
map.put("Excel列名", excelConfig.getExcelColumnName());
map.put("table字段名", excelConfig.getTableColumnName());
map.put("table字段类型", excelConfig.getTableColumnType());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
}

View File

@ -0,0 +1,32 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.youchain.service.mapstruct;
import com.youchain.base.BaseMapper;
import com.youchain.domain.ExcelConfig;
import com.youchain.service.dto.ExcelConfigDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @website https://eladmin.vip
* @author baobl
* @date 2024-09-14
**/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ExcelConfigMapper extends BaseMapper<ExcelConfigDto, ExcelConfig> {
}

View File

@ -21,7 +21,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.annotation.Log;
import com.youchain.basicdata.domain.Area;
import com.youchain.basicdata.domain.Item;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.repository.ItemRepository;
@ -35,7 +34,6 @@ import com.youchain.businessdata.service.dto.InventoryQueryCriteria;
import com.youchain.config.FileProperties;
import com.youchain.exception.handler.ApiError;
import com.youchain.modules.system.domain.Dept;
import com.youchain.utils.BaseStatus;
import com.youchain.utils.FileUtil;
import com.youchain.utils.UserUtils;
import lombok.extern.slf4j.Slf4j;
@ -50,16 +48,12 @@ import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
/**
* @author liuxue
* @website https://eladmin.vip
@ -107,7 +101,7 @@ public class PointController {
int new_len = 0;
List<Map<String, Object>> readAll = reader.readAll();
for (i = 0; i < readAll.size(); i++) {
String code = readAll.get(i).get("编码").toString().trim();
/*String code = readAll.get(i).get("编码").toString().trim();
String types = readAll.get(i).get("存储类型").toString().trim();
String areaCode = readAll.get(i).get("库区").toString().trim();
String ccTYPE = readAll.get(i).get("描述") == null ? "" : readAll.get(i).get("描述").toString().trim();
@ -142,7 +136,8 @@ public class PointController {
pointService.create(point);
}else {
pointService.update(point);
}
}*/
// ExcelImportParam
}
ApiError apiError = ApiError.errorJosn(HttpStatus.OK.value(), "导入成功:" + (i) + "行 新增(" + new_len + ")修改(" + edit_len + ")");
return new ResponseEntity(apiError, HttpStatus.valueOf(apiError.getStatus()));

View File

@ -47,6 +47,8 @@ public class DictDetail extends BaseEntity implements Serializable {
@ApiModelProperty(value = "字典标签")
private String label;
@ApiModelProperty(value = "描述")
private String description;
@ApiModelProperty(value = "字典值")
private String value;

View File

@ -15,6 +15,8 @@
*/
package com.youchain.modules.system.rest;
import com.youchain.modules.system.domain.Dict;
import com.youchain.modules.system.repository.DictRepository;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@ -47,6 +49,7 @@ import java.util.Map;
public class DictDetailController {
private final DictDetailService dictDetailService;
private final DictRepository dictRepository;
private static final String ENTITY_NAME = "dictDetail";
@ApiOperation("查询字典详情")
@ -75,6 +78,12 @@ public class DictDetailController {
if (resources.getId() != null) {
throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID");
}
if (resources.getDict()!=null&&resources.getDict().getName()!=null){
Dict dict=dictRepository.getDictDescription(resources.getDict().getName());
if (dict!=null){
resources.setDict(dict);
}
}
dictDetailService.create(resources);
return new ResponseEntity<>(HttpStatus.CREATED);
}

View File

@ -35,6 +35,7 @@ public class DictDetailDto extends BaseDTO implements Serializable {
private String label;
private String value;
private String description;
private Integer dictSort;
}

View File

@ -114,7 +114,8 @@ public class DictDetailServiceImpl implements DictDetailService {
}
public void delCaches(DictDetail dictDetail){
Dict dict = dictRepository.findById(dictDetail.getDict().getId()).orElseGet(Dict::new);
Dict dict;
dict = dictRepository.findById(dictDetail.getDict().getId()).orElseGet(Dict::new);
redisUtils.del(CacheKey.DICT_NAME + dict.getName());
}
}