入库导入

main
huojin\hj 2025-07-29 16:30:06 +08:00
parent 3e27fc399a
commit 8d901caf5f
14 changed files with 493 additions and 146 deletions

View File

@ -24,8 +24,8 @@ import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.List;
/** /**
* @website https://eladmin.vip
* @author houjianlan * @author houjianlan
* @website https://eladmin.vip
* @date 2023-08-16 * @date 2023-08-16
**/ **/
public interface ItemRepository extends JpaRepository<Item, Long>, JpaSpecificationExecutor<Item> { public interface ItemRepository extends JpaRepository<Item, Long>, JpaSpecificationExecutor<Item> {
@ -37,4 +37,7 @@ public interface ItemRepository extends JpaRepository<Item, Long>, JpaSpecificat
@Query(value = "SELECT DISTINCT b.* FROM `data_item_key` a INNER JOIN `base_item` b on a.item_id = b.id", nativeQuery = true) @Query(value = "SELECT DISTINCT b.* FROM `data_item_key` a INNER JOIN `base_item` b on a.item_id = b.id", nativeQuery = true)
List<Item> quryOneItemAll(); List<Item> quryOneItemAll();
@Query("from Item i where i.code in (:itemCodes) and i.enabled=true ")
List<Item> queryByItemCodes(List<String> itemCodes);
} }

View File

@ -40,6 +40,7 @@ import com.youchain.businessdata.service.dto.AsnDto;
import com.youchain.config.FileProperties; import com.youchain.config.FileProperties;
import com.youchain.exception.BadRequestException; import com.youchain.exception.BadRequestException;
import com.youchain.exception.handler.ApiError; import com.youchain.exception.handler.ApiError;
import com.youchain.exception.handler.ApiResult;
import com.youchain.modules.system.domain.DictDetail; import com.youchain.modules.system.domain.DictDetail;
import com.youchain.modules.system.service.DictDetailService; import com.youchain.modules.system.service.DictDetailService;
import com.youchain.modules.system.service.dto.DictQueryCriteria; import com.youchain.modules.system.service.dto.DictQueryCriteria;
@ -67,6 +68,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.OK;
/** /**
* @website https://eladmin.vip * @website https://eladmin.vip
@ -237,4 +241,19 @@ public class ImportDataController {
List<Map<String, Object>> readAll = reader.readAll(); List<Map<String, Object>> readAll = reader.readAll();
return readAll; return readAll;
} }
@PostMapping("/importAsn")
@Log("导入asn")
@ApiOperation("导入asn")
@AnonymousAccess
public ResponseEntity<Object> importAsn(@RequestParam("file") MultipartFile file, @RequestParam("templateType") String templateType) {
try {
log.info("导入开始");
importDataService.importAsn(file, templateType);
return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(ApiResult.success(BAD_REQUEST.value(), e.getMessage(), null), HttpStatus.BAD_REQUEST);
}
}
} }

View File

@ -55,4 +55,12 @@ public interface ImportDataService {
void importPickInstruction(List<Map<String, Object>> readAll); void importPickInstruction(List<Map<String, Object>> readAll);
void importCountMoveDetail(Long countId,List<Map<String, Object>> readAll); void importCountMoveDetail(Long countId,List<Map<String, Object>> readAll);
/**
*
*
* @param file
*/
void importAsn(MultipartFile file, String templateType);
} }

View File

@ -112,4 +112,8 @@ public interface ItemService {
*/ */
Item existItem(String itemCode); Item existItem(String itemCode);
List<Item> queryByItemCodes(List<String> itemCodes);
Map<String, Item> queryByItemCodesToMap(List<String> itemCodes);
} }

View File

@ -17,6 +17,7 @@ package com.youchain.basicdata.service.impl;
import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelUtil;
import cn.idev.excel.FastExcel;
import com.sun.org.apache.xpath.internal.operations.Bool; import com.sun.org.apache.xpath.internal.operations.Bool;
import com.youchain.basicdata.domain.*; import com.youchain.basicdata.domain.*;
import com.youchain.basicdata.repository.*; import com.youchain.basicdata.repository.*;
@ -26,9 +27,8 @@ import com.youchain.basicdata.service.dto.AreaQueryCriteria;
import com.youchain.basicdata.service.mapstruct.AreaMapper; import com.youchain.basicdata.service.mapstruct.AreaMapper;
import com.youchain.basicdata.service.mapstruct.PointMapper; import com.youchain.basicdata.service.mapstruct.PointMapper;
import com.youchain.businessdata.domain.*; import com.youchain.businessdata.domain.*;
import com.youchain.businessdata.repository.CountMoveRepository; import com.youchain.businessdata.inputJson.imports.AsnImportForm;
import com.youchain.businessdata.repository.InventoryRepository; import com.youchain.businessdata.repository.*;
import com.youchain.businessdata.repository.ItemKeyRepository;
import com.youchain.businessdata.service.*; import com.youchain.businessdata.service.*;
import com.youchain.config.FileProperties; import com.youchain.config.FileProperties;
import com.youchain.exception.BadRequestException; import com.youchain.exception.BadRequestException;
@ -37,6 +37,9 @@ import com.youchain.modules.system.repository.DictDetailRepository;
import com.youchain.modules.system.repository.DictRepository; import com.youchain.modules.system.repository.DictRepository;
import com.youchain.utils.*; import com.youchain.utils.*;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@ -51,6 +54,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author HJL * @author HJL
@ -60,6 +64,7 @@ import java.util.*;
**/ **/
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class ImportDataServiceImpl implements ImportDataService { public class ImportDataServiceImpl implements ImportDataService {
private final FileProperties properties; private final FileProperties properties;
private final BigItemRepository bigItemRepository; private final BigItemRepository bigItemRepository;
@ -67,6 +72,8 @@ public class ImportDataServiceImpl implements ImportDataService {
private final ItemRepository itemRepository; private final ItemRepository itemRepository;
private final DictDetailRepository dictDetailRepository; private final DictDetailRepository dictDetailRepository;
private final PointRepository pointRepository; private final PointRepository pointRepository;
private final AsnRepository asnRepository;
private final AsnDetailRepository asnDetailRepository;
private final PointService pointService; private final PointService pointService;
private final AreaService areaService; private final AreaService areaService;
private final BomAccountRepository bomAccountRepository; private final BomAccountRepository bomAccountRepository;
@ -425,4 +432,166 @@ public class ImportDataServiceImpl implements ImportDataService {
} }
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void importAsn(MultipartFile file, String templateType) {
// 验证模板类型
if (StringUtils.isEmpty(templateType)) {
throw new BadRequestException("模板类型不能为空");
}
// 验证模板类型是否有效
if (!isValidTemplateType(templateType)) {
throw new BadRequestException("无效的模板类型: " + templateType);
}
List<AsnImportForm> dataList;
try {
dataList = FastExcel.read(file.getInputStream()).head(AsnImportForm.class)
.sheet()
.doReadSync();
} catch (IOException e) {
throw new BadRequestException("数据格式存在问题,无法读取");
}
if (CollectionUtils.isEmpty(dataList)) {
throw new BadRequestException("数据为空");
}
// 根据模板类型进行不同的处理
switch (templateType) {
case "template1":
template1Import(dataList);
break;
case "template2":
template2Import(dataList);
break;
case "template3":
template3Import(dataList);
break;
default:
throw new BadRequestException("不支持的模板类型: " + templateType);
}
}
/**
*
*/
private boolean isValidTemplateType(String templateType) {
return "template1".equals(templateType) ||
"template2".equals(templateType) ||
"template3".equals(templateType);
}
/**
*
*/
private void template1Import(List<AsnImportForm> dataList) {
// TODO: 实现标准导入逻辑
log.info("处理标准导入,数据条数: {}", dataList.size());
//获取文件中所有的品番
List<String> itemCodes = dataList.stream().map(AsnImportForm::getPartNo).collect(Collectors.toList());
//验证品番
Map<String, Item> exitItemMap = validateItem(itemCodes);
//获取文件中所有的托盘号
List<String> codes = dataList.stream().map(AsnImportForm::getCNo).collect(Collectors.toList());
//验证托盘号
validateAsn(codes);
Map<String, Asn> asnMap = new HashMap<>();
List<Asn> insertToAsn=new ArrayList<>();//批量新增ASN
List<AsnDetail> insertToAsnDetail=new ArrayList<>();
for (AsnImportForm data : dataList) {
String relatedBill1 = data.getInvoiceNo();//发票号
String propC2 = data.getBoi();//税别
String po = data.getPoNo();//订单号
String itemCode = data.getPartNo();//品番
String remark = data.getDescription();//描述
Double orderQty = data.getQty();//数量
String code = data.getCNo();//托盘号
Asn asn = null;
if (asnMap.containsKey(code)) {
asn=asnMap.get(code);
asn.setOrderQuantity(asn.getOrderQuantity() + orderQty);
}else{
asn = Asn.builder()
.relatedBill1(relatedBill1)
.code(code)
.status(BizStatus.OPEN)
.orderDate(new Timestamp(new Date().getTime()))
.orderQuantity(orderQty)
.build();
asnMap.put(code, asn);
insertToAsn.add(asn);
}
AsnDetail asnDetail = AsnDetail.builder()
.propC2(propC2)
.po(po)
.item(exitItemMap.get(itemCode))
.remark( remark)
.orderQty(orderQty)
.asn(asn)
.build();
insertToAsnDetail.add(asnDetail);
}
if(!insertToAsn.isEmpty()){
asnRepository.saveAll(insertToAsn);
}
if(!insertToAsnDetail.isEmpty()){
asnDetailRepository.saveAll(insertToAsnDetail);
}
}
/**
*
*/
private void template2Import(List<AsnImportForm> dataList) {
// TODO: 实现大物导入逻辑
log.info("处理大物导入,数据条数: {}", dataList.size());
// 这里添加大物导入的具体业务逻辑
}
/**
*
*/
private void template3Import(List<AsnImportForm> dataList) {
// TODO: 实现发票箱单导入逻辑
log.info("处理发票箱单导入,数据条数: {}", dataList.size());
// 这里添加发票箱单导入的具体业务逻辑
}
//验证品番
private Map<String, Item> validateItem(List<String> itemCodes) {
Map<String, Item> exitItemMap = itemService.queryByItemCodesToMap(itemCodes);
if (exitItemMap.isEmpty()) {
throw new BadRequestException(itemCodes + "品番不存在或已失效");
}
List<String> existingItemCodes = new ArrayList<>(exitItemMap.keySet());
// 获取两个集合的非交集说明品番不存在或失效,直接提示
List<String> difference = SmartStringUtil.getDifference(itemCodes, existingItemCodes);
if (CollectionUtils.isNotEmpty(difference)) {
throw new BadRequestException(difference + "品番不存在或已失效");
}
return exitItemMap;
}
//验证ASN单号
private void validateAsn(List<String> codes) {
Map<String, Asn> exitAsnMap = asnService.queryByasnCodesToMap(codes);
List<String> existingAsnCodes = new ArrayList<>(exitAsnMap.keySet());
// 获取两个集合的交集说明ASN重复导入了直接提示
List<String> difference = SmartStringUtil.getIntersection(codes, existingAsnCodes);
if (CollectionUtils.isNotEmpty(difference)) {
throw new BadRequestException(difference + "托盘号已导入,请勿重复导入");
}
}
} }

View File

@ -15,6 +15,7 @@
*/ */
package com.youchain.basicdata.service.impl; package com.youchain.basicdata.service.impl;
import com.google.common.collect.Maps;
import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.domain.Item;
import com.youchain.basicdata.domain.Point; import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.service.dto.ItemSmallDto; import com.youchain.basicdata.service.dto.ItemSmallDto;
@ -25,25 +26,25 @@ import com.youchain.basicdata.service.ItemService;
import com.youchain.basicdata.service.dto.ItemDto; import com.youchain.basicdata.service.dto.ItemDto;
import com.youchain.basicdata.service.dto.ItemQueryCriteria; import com.youchain.basicdata.service.dto.ItemQueryCriteria;
import com.youchain.basicdata.service.mapstruct.ItemMapper; import com.youchain.basicdata.service.mapstruct.ItemMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map; import java.util.*;
import java.io.IOException; import java.io.IOException;
import java.util.stream.Collectors;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.Query; import javax.persistence.Query;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import org.springframework.data.domain.Example; import org.springframework.data.domain.Example;
import java.util.Optional;
/** /**
* @author houjianlan
* @website https://eladmin.vip * @website https://eladmin.vip
* @description * @description
* @author houjianlan
* @date 2023-08-07 * @date 2023-08-07
**/ **/
@Service @Service
@ -79,6 +80,7 @@ public class ItemServiceImpl implements ItemService {
Item item = itemRepository.findById(id).orElseGet(Item::new); Item item = itemRepository.findById(id).orElseGet(Item::new);
return item; return item;
} }
@Override @Override
@Transactional @Transactional
public ItemDto findByCode(String itemCode) { public ItemDto findByCode(String itemCode) {
@ -138,4 +140,25 @@ public class ItemServiceImpl implements ItemService {
return null; return null;
} }
@Override
public List<Item> queryByItemCodes(List<String> itemCodes) {
if (CollectionUtils.isEmpty(itemCodes)) {
return Collections.emptyList();
}
//去重
itemCodes = itemCodes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
return itemRepository.queryByItemCodes(itemCodes);
}
@Override
public Map<String, Item> queryByItemCodesToMap(List<String> itemCodes) {
List<Item> items = queryByItemCodes(itemCodes);
//封装成map
Map<String, Item> itemMap = Maps.newHashMap();
for (Item item : items) {
itemMap.put(item.getCode(), item);
}
return itemMap;
}
} }

View File

@ -19,10 +19,14 @@ import com.youchain.base.BaseEntity;
import com.youchain.basicdata.domain.Area; import com.youchain.basicdata.domain.Area;
import com.youchain.basicdata.domain.BillType; import com.youchain.basicdata.domain.BillType;
import com.youchain.modules.system.domain.Dept; import com.youchain.modules.system.domain.Dept;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import java.sql.Timestamp; import java.sql.Timestamp;
@ -36,6 +40,9 @@ import java.io.Serializable;
**/ **/
@Entity @Entity
@Data @Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name="data_asn") @Table(name="data_asn")
public class Asn extends BaseEntity implements Serializable { public class Asn extends BaseEntity implements Serializable {

View File

@ -21,10 +21,13 @@ import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.domain.Stock; import com.youchain.basicdata.domain.Stock;
import com.youchain.basicdata.domain.StockType; import com.youchain.basicdata.domain.StockType;
import com.youchain.modules.system.domain.Dept; import com.youchain.modules.system.domain.Dept;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.*; import javax.validation.constraints.*;
@ -39,6 +42,9 @@ import java.io.Serializable;
**/ **/
@Entity @Entity
@Data @Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "data_asn_detail") @Table(name = "data_asn_detail")
public class AsnDetail extends BaseEntity implements Serializable { public class AsnDetail extends BaseEntity implements Serializable {

View File

@ -0,0 +1,28 @@
package com.youchain.businessdata.inputJson.imports;
import cn.idev.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class AsnImportForm {
@ExcelProperty("INVOICE NO.")
private String invoiceNo;
@ExcelProperty("BOI")
private String boi;
@ExcelProperty("PO&LN NO.")
private String poNo;
@ExcelProperty("PART NO.")
private String partNo;
@ExcelProperty("DESCRIPTION")
private String description;
@ExcelProperty("Q'TY")
private Double qty;
@ExcelProperty("C/NO.")
private String cNo;
}

View File

@ -39,4 +39,6 @@ public interface AsnRepository extends JpaRepository<Asn, Long>, JpaSpecificatio
@Query(value = "SELECT * FROM `data_asn` asn ORDER BY asn.create_time DESC LIMIT 0,1", nativeQuery = true) @Query(value = "SELECT * FROM `data_asn` asn ORDER BY asn.create_time DESC LIMIT 0,1", nativeQuery = true)
Asn queryMaxCode(); Asn queryMaxCode();
@Query("from Asn asn where asn.code in (:asnCodes) ")
List<Asn> queryByAsnCodes(List<String> asnCodes);
} }

View File

@ -22,6 +22,7 @@ import com.youchain.businessdata.domain.Asn;
import com.youchain.businessdata.repository.AsnRepository; import com.youchain.businessdata.repository.AsnRepository;
import com.youchain.businessdata.service.AsnService; import com.youchain.businessdata.service.AsnService;
import com.youchain.businessdata.service.dto.AsnQueryCriteria; import com.youchain.businessdata.service.dto.AsnQueryCriteria;
import com.youchain.exception.handler.ApiResult;
import com.youchain.utils.CodeUtils; import com.youchain.utils.CodeUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@ -32,6 +33,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -39,6 +41,9 @@ import java.util.Date;
import java.util.Objects; import java.util.Objects;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
/** /**
* @author JiangKun * @author JiangKun
* @website https://eladmin.vip * @website https://eladmin.vip
@ -82,7 +87,6 @@ public class AsnController {
} }
@GetMapping("/getIdByAsn") @GetMapping("/getIdByAsn")
@Log("查询asn") @Log("查询asn")
@ApiOperation("查询asn") @ApiOperation("查询asn")

View File

@ -15,10 +15,13 @@
*/ */
package com.youchain.businessdata.service; package com.youchain.businessdata.service;
import com.youchain.basicdata.domain.Item;
import com.youchain.businessdata.domain.Asn; import com.youchain.businessdata.domain.Asn;
import com.youchain.businessdata.service.dto.AsnDto; import com.youchain.businessdata.service.dto.AsnDto;
import com.youchain.businessdata.service.dto.AsnQueryCriteria; import com.youchain.businessdata.service.dto.AsnQueryCriteria;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map; import java.util.Map;
import java.util.List; import java.util.List;
import java.io.IOException; import java.io.IOException;
@ -82,4 +85,8 @@ public interface AsnService {
* @throws Exception / * @throws Exception /
*/ */
void download(List<AsnDto> all, HttpServletResponse response) throws Exception, Exception; void download(List<AsnDto> all, HttpServletResponse response) throws Exception, Exception;
List<Asn> queryByAsnCodes(List<String> asnCodes);
Map<String, Asn> queryByasnCodesToMap(List<String> asnCodes);
} }

View File

@ -15,10 +15,15 @@
*/ */
package com.youchain.businessdata.service.impl; package com.youchain.businessdata.service.impl;
import cn.idev.excel.FastExcel;
import com.google.common.collect.Maps;
import com.youchain.basicdata.domain.Item;
import com.youchain.businessdata.domain.Asn; import com.youchain.businessdata.domain.Asn;
import com.youchain.businessdata.domain.AsnDetail; import com.youchain.businessdata.domain.AsnDetail;
import com.youchain.businessdata.inputJson.imports.AsnImportForm;
import com.youchain.businessdata.repository.AsnDetailRepository; import com.youchain.businessdata.repository.AsnDetailRepository;
import com.youchain.businessdata.service.AsnDetailService; import com.youchain.businessdata.service.AsnDetailService;
import com.youchain.exception.BadRequestException;
import com.youchain.utils.*; import com.youchain.utils.*;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import com.youchain.businessdata.repository.AsnRepository; import com.youchain.businessdata.repository.AsnRepository;
@ -27,16 +32,20 @@ import com.youchain.businessdata.service.dto.AsnDto;
import com.youchain.businessdata.service.dto.AsnQueryCriteria; import com.youchain.businessdata.service.dto.AsnQueryCriteria;
import com.youchain.businessdata.service.mapstruct.AsnMapper; import com.youchain.businessdata.service.mapstruct.AsnMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
/** /**
@ -147,4 +156,27 @@ public class AsnServiceImpl implements AsnService {
} }
FileUtil.downloadExcel(list, response); FileUtil.downloadExcel(list, response);
} }
@Override
public List<Asn> queryByAsnCodes(List<String> asnCodes) {
if (CollectionUtils.isEmpty(asnCodes)) {
return Collections.emptyList();
}
//去重
asnCodes = asnCodes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
return asnRepository.queryByAsnCodes(asnCodes);
}
@Override
public Map<String, Asn> queryByasnCodesToMap(List<String> asnCodes) {
List<Asn> asnList = queryByAsnCodes(asnCodes);
//封装成map
Map<String, Asn> asnMap = Maps.newHashMap();
for (Asn asn : asnList) {
asnMap.put(asn.getCode(), asn);
}
return asnMap;
}
} }

View File

@ -0,0 +1,35 @@
package com.youchain.utils;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class SmartStringUtil {
/**
*
*
* @param list1
* @param list2
* @return
*/
public static List<String> getIntersection(List<String> list1, List<String> list2) {
return list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
}
/**
* list1 list2
*
* @param list1
* @param list2
* @return
*/
public static List<String> getDifference(List<String> list1, List<String> list2) {
Set<String> existingLocationCodesSet = new HashSet<>(list2);
return list1.stream()
.filter(code -> !existingLocationCodesSet.contains(code))
.collect(Collectors.toList());
}
}