diff --git a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java index 5883c44d..12a7213b 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java +++ b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java @@ -371,6 +371,12 @@ public class CoDelController { return R.ok(); } + @PostMapping("/downloadContract") + public R downloadContract(HttpServletResponse response, @RequestBody EcssDeclarationHeaderData data) { + coDelService.downloadContract(response, data); + return R.ok(); + } + @PostMapping("/saveOneClickPacking") public R saveOneClickPacking(@RequestBody EcssCoDelPalletHeaderData inData){ coDelService.saveOneClickPacking(inData); @@ -410,8 +416,8 @@ public class CoDelController { @PostMapping("/saveWalMartOrderByExcel") public R saveWalMartOrderByExcel(@RequestParam(value = "file") MultipartFile file, @ModelAttribute EcssWalMartOrder data){ - coDelService.saveWalMartOrderByExcel(file, data); - return R.ok(); + String msg = coDelService.saveWalMartOrderByExcel(file, data); + return R.ok().put("errorMsg", msg); } @PostMapping("/saveWalMartOrderData") @@ -426,4 +432,13 @@ public class CoDelController { coDelService.deleteWalMartOrder(inData); return R.ok(); } + + /** + * 获取申报单的属性值 + */ + @PostMapping("/getPropertiesListByDeclaration") + public R getPropertiesListByDeclaration(@RequestBody EcssDeclarationHeaderData inData) { + List rows = coDelService.getPropertiesListByDeclaration(inData); + return R.ok().put("rows", rows); + } } diff --git a/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationDetailData.java b/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationDetailData.java index 317edd3a..67bbd2eb 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationDetailData.java +++ b/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationDetailData.java @@ -6,4 +6,5 @@ import org.apache.ibatis.type.Alias; @Data @Alias("EcssDeclarationDetailData") public class EcssDeclarationDetailData extends EcssDeclarationDetail{ + private String brand; } diff --git a/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java b/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java index 155c3a9d..61785380 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java +++ b/src/main/java/com/xujie/sys/modules/ecss/entity/EcssDeclarationHeaderData.java @@ -24,6 +24,7 @@ public class EcssDeclarationHeaderData extends EcssDeclarationHeader{ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date endDate; private List detailList; + private List propertiesList; private String brandType; private String itemNo; private Boolean upc; @@ -52,4 +53,5 @@ public class EcssDeclarationHeaderData extends EcssDeclarationHeader{ private String hsCodeDescType;// 选择品名中文还是英文 private Boolean goodsLabel;// 货物明细 RFID LABEL等 private Boolean boxChange;// 显示箱数零头 + private String brand; } diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java b/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java index 08bdb7e4..ee8f67c3 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java @@ -105,6 +105,8 @@ public interface CoDelService { void downloadExportGoods(HttpServletResponse response, EcssDeclarationHeaderData data); + void downloadContract(HttpServletResponse response, EcssDeclarationHeaderData data); + List getNotifyPartDetail(EcssDeclarationHeaderData inData); void saveOneClickPacking(EcssCoDelPalletHeaderData inData); @@ -119,9 +121,11 @@ public interface CoDelService { PageUtils searchWalMartOrderData(EcssWalMartOrder data); - void saveWalMartOrderByExcel(MultipartFile file, EcssWalMartOrder data); + String saveWalMartOrderByExcel(MultipartFile file, EcssWalMartOrder data); void saveWalMartOrderData(EcssWalMartOrder data); void deleteWalMartOrder(EcssWalMartOrder data); + + List getPropertiesListByDeclaration(EcssDeclarationHeaderData inData); } diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java index b36aaba4..122bd97c 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java @@ -574,7 +574,7 @@ public class CoDelServiceImpl implements CoDelService { if (row.getCell(5) == null) { throw new RuntimeException("第" + j + "行的数量不能为空!"); } - + excelData.setSeqNo(getIntegerCellValue(row, 0)); // 为对象赋值 excelData.setSite(inData.getSite()); // site excelData.setBuNo(inData.getBuNo()); // bu @@ -603,66 +603,139 @@ public class CoDelServiceImpl implements CoDelService { } excelList.add(excelData); } - if (excelList.get(0).getPalletQty() == 0 || excelList.get(0).getPalletQty() == null) { - throw new RuntimeException("导入失败:第一行的托数不能为0!"); + // 如果是沃尔玛订单,按照pn分组,同一个pn是一个EcssCoDelPalletHeaderData, + // 如果是非沃尔玛订单,按照序号分组,同一个序号是一个EcssCoDelPalletHeaderData, + Map> palletListMap = new HashMap<>(); + Map> palletListMap2 = new HashMap<>(); + if (inData.getWalMartOrderFlag()!=null && inData.getWalMartOrderFlag().equals("Y")) { + for (EcssCoDelPalletData itemData : excelList){ + if (palletListMap.containsKey(itemData.getPn())) { + palletListMap.get(itemData.getPn()).add(itemData); + } else { + List palletDataList = new ArrayList<>(); + palletDataList.add(itemData); + palletListMap.put(itemData.getPn(),palletDataList); + } + } + } else { + if (excelList.get(0).getPalletQty() == 0 || excelList.get(0).getPalletQty() == null) { + throw new RuntimeException("导入失败:第一行的托数不能为0!"); + } + for (EcssCoDelPalletData itemData : excelList){ + if (palletListMap2.containsKey(itemData.getSeqNo())) { + palletListMap2.get(itemData.getSeqNo()).add(itemData); + } else { + List palletDataList = new ArrayList<>(); + palletDataList.add(itemData); + palletListMap2.put(itemData.getSeqNo(),palletDataList); + } + } } + // 关务物料属性 + List propertiesValues = coDelMapper.getPropertiesListByTypeAndCodeNo( + inData.getSite(), "ECSSPART","BG001",inData.getBuNo()); + EcssWalMartOrder task = new EcssWalMartOrder(); List headerList = new ArrayList<>(); List detailList = new ArrayList<>(); - int firstSeqNo = 0; - for (int i = 0; i < excelList.size(); i++) { - EcssCoDelPalletData thisData = excelList.get(i); - EcssCoDelPalletDetailData detailData = new EcssCoDelPalletDetailData(); - //excel里面托数有值 那么建新抬头 - if (thisData.getPalletQty() != null && thisData.getPalletQty() != 0) { - if (thisData.getLength() == null) { - throw new RuntimeException(thisData.getPalletQty() + "托那行缺少长"); - } - if (thisData.getWidth() == null) { - throw new RuntimeException(thisData.getPalletQty() + "托那行缺少宽"); - } - if (thisData.getHeight() == null) { - throw new RuntimeException(thisData.getPalletQty() + "托那行缺少高"); - } - if (thisData.getVolume() == null) { - throw new RuntimeException(thisData.getPalletQty() + "托那行缺少体积"); - } - if (thisData.getNetWeight() == null) { - throw new RuntimeException(thisData.getPalletQty() + "托那行缺少净重"); - } - if (thisData.getGrossWeight() == null) { - throw new RuntimeException(thisData.getPalletQty() + "托那行缺少毛重"); + int seqNo = 0; + // palletListMap里每一个key生成一个EcssCoDelPalletHeaderData,每一个value生成一组EcssCoDelPalletDetailData + for (Map.Entry> entry : palletListMap.entrySet()) { + seqNo++; + EcssCoDelPalletHeaderData headerData = new EcssCoDelPalletHeaderData(); + headerData.setSite(inData.getSite()); + headerData.setBuNo(inData.getBuNo()); + headerData.setDelNo(inData.getDelNo()); + headerData.setSeqNo(seqNo); + headerData.setPalletNo(inData.getDelNo() + "-" + String.format("%03d", seqNo)); + headerData.setPalletQty(entry.getValue().get(0).getPalletQty()); + headerData.setPalletRemark(entry.getValue().get(0).getPalletRemark()); + headerData.setLength(entry.getValue().get(0).getLength()); + headerData.setWidth(entry.getValue().get(0).getWidth()); + headerData.setHeight(entry.getValue().get(0).getHeight()); + headerData.setVolume(entry.getValue().get(0).getVolume()); + headerData.setCreateBy(currentUser.getUsername()); + int i=0; + BigDecimal totalGrossWeight = new BigDecimal(0); + BigDecimal boxQty = new BigDecimal(0); + for (EcssCoDelPalletData thisData : entry.getValue()) { + EcssCoDelPalletDetailData detailData = new EcssCoDelPalletDetailData(); + detailData.setSite(thisData.getSite()); + detailData.setBuNo(thisData.getBuNo()); + detailData.setDelNo(thisData.getDelNo()); + detailData.setSeqNo(seqNo); + detailData.setItemNo(i + 1); + i++; + detailData.setPartNo(thisData.getPartNo()); + detailData.setPn(thisData.getPn()); + detailData.setQty(thisData.getQty()); + task.setSku(detailData.getPn()); + task.setQty(detailData.getQty()); + List orderDataList = sqlSession.selectList("ecssMapper" + "." + "searchWalMartOrderList", task); + totalGrossWeight = totalGrossWeight.add(orderDataList.isEmpty()? new BigDecimal(0):orderDataList.get(0).getGrossWeight()); + detailData.setPoNo(thisData.getPoNo()); + if (thisData.getBoxQty()!=null && thisData.getBoxQty().intValue()>0) { + detailData.setBoxQty(thisData.getBoxQty()); + } else { + String partNo = thisData.getPartNo(); + // 每一个物料加属性对应一个属性,用来下面遍历发货通知单明细时获取具体属性值 + Map partNoAndItemNoMap = propertiesValues.stream() + .collect(Collectors.toMap(o -> o.getPartNo() + "$" + o.getPropertiesItemNo(), o -> o)); + PartSubPropertiesValueData propertiesWeight = partNoAndItemNoMap.get(partNo + "$ROLLWEIGHT");//每卷重量 + PartSubPropertiesValueData propertiesRollQty = partNoAndItemNoMap.get(partNo + "$ROLLQTY");//每卷数量 + PartSubPropertiesValueData propertiesBoxRolls = partNoAndItemNoMap.get(partNo + "$BOXROLLS");//每箱卷数 + PartSubPropertiesValueData propertiesBoxWeight = partNoAndItemNoMap.get(partNo + "$BOXWEIGHT");//箱重量 + if (propertiesWeight==null||propertiesRollQty==null||propertiesBoxRolls==null||propertiesBoxWeight==null) { + throw new RuntimeException("请先维护物料["+partNo+"]基本信息!"); + } + detailData.setBoxQty(detailData.getQty().divide( + BigDecimal.valueOf(((double) propertiesRollQty.getNumValue().intValue() * propertiesBoxRolls.getNumValue().intValue())),2, BigDecimal.ROUND_HALF_UP)); } - firstSeqNo++; - EcssCoDelPalletHeaderData headerData = new EcssCoDelPalletHeaderData(); - headerData.setSite(thisData.getSite()); - headerData.setBuNo(thisData.getBuNo()); - headerData.setDelNo(thisData.getDelNo()); - headerData.setSeqNo(firstSeqNo); - headerData.setPalletNo(thisData.getDelNo() + "-" + String.format("%03d", firstSeqNo)); - headerData.setPalletQty(thisData.getPalletQty()); - headerData.setLength(thisData.getLength()); - headerData.setWidth(thisData.getWidth()); - headerData.setHeight(thisData.getHeight()); - headerData.setVolume(thisData.getVolume()); - headerData.setNetWeight(thisData.getNetWeight()); - headerData.setGrossWeight(thisData.getGrossWeight()); - headerData.setPalletRemark(thisData.getPalletRemark()); - headerData.setCreateBy(currentUser.getUsername()); - headerList.add(headerData); + detailData.setRolls(thisData.getRolls()); + detailData.setCreateBy(currentUser.getUsername()); + detailList.add(detailData); + boxQty = boxQty.add(detailData.getBoxQty()!=null?detailData.getBoxQty():new BigDecimal(0)); + } + BigDecimal netWeight = totalGrossWeight.intValue()>0?totalGrossWeight.subtract(boxQty.divide(BigDecimal.valueOf(2),2,RoundingMode.HALF_UP)):new BigDecimal(0); + headerData.setGrossWeight(totalGrossWeight); + headerData.setNetWeight(netWeight); + headerList.add(headerData); + } + for (Map.Entry> entry : palletListMap2.entrySet()) { + seqNo++; + EcssCoDelPalletHeaderData headerData = new EcssCoDelPalletHeaderData(); + headerData.setSite(inData.getSite()); + headerData.setBuNo(inData.getBuNo()); + headerData.setDelNo(inData.getDelNo()); + headerData.setSeqNo(seqNo); + headerData.setPalletNo(inData.getDelNo() + "-" + String.format("%03d", seqNo)); + headerData.setPalletQty(entry.getValue().get(0).getPalletQty()); + headerData.setPalletRemark(entry.getValue().get(0).getPalletRemark()); + headerData.setLength(entry.getValue().get(0).getLength()); + headerData.setWidth(entry.getValue().get(0).getWidth()); + headerData.setHeight(entry.getValue().get(0).getHeight()); + headerData.setVolume(entry.getValue().get(0).getVolume()); + headerData.setGrossWeight(entry.getValue().get(0).getGrossWeight()); + headerData.setNetWeight(entry.getValue().get(0).getNetWeight()); + headerData.setCreateBy(currentUser.getUsername()); + headerList.add(headerData); + int i=0; + for (EcssCoDelPalletData thisData : entry.getValue()) { + EcssCoDelPalletDetailData detailData = new EcssCoDelPalletDetailData(); + detailData.setSite(thisData.getSite()); + detailData.setBuNo(thisData.getBuNo()); + detailData.setDelNo(thisData.getDelNo()); + detailData.setSeqNo(seqNo); + detailData.setItemNo(i + 1); + i++; + detailData.setPartNo(thisData.getPartNo()); + detailData.setPn(thisData.getPn()); + detailData.setQty(thisData.getQty()); + detailData.setPoNo(thisData.getPoNo()); + detailData.setBoxQty(thisData.getBoxQty()); + detailData.setRolls(thisData.getRolls()); + detailData.setCreateBy(currentUser.getUsername()); + detailList.add(detailData); } - detailData.setSite(thisData.getSite()); - detailData.setBuNo(thisData.getBuNo()); - detailData.setDelNo(thisData.getDelNo()); - detailData.setSeqNo(firstSeqNo); - detailData.setItemNo(i + 1); - detailData.setPartNo(thisData.getPartNo()); - detailData.setPn(thisData.getPn()); - detailData.setQty(thisData.getQty()); - detailData.setPoNo(thisData.getPoNo()); - detailData.setBoxQty(thisData.getBoxQty()); - detailData.setRolls(thisData.getRolls()); - detailData.setCreateBy(currentUser.getUsername()); - detailList.add(detailData); } for (int i = 0; i < headerList.size(); i++) { coDelMapper.saveCodelPalletHeader(headerList.get(i)); @@ -779,10 +852,7 @@ public class CoDelServiceImpl implements CoDelService { palletDetailData.setCreateBy(currentUser.getUsername()); palletDetailData.setPn(detailData.getPn()); if(inData.getWalMartOrderFlag()!=null && inData.getWalMartOrderFlag().equals("Y")) { - task.setSku(detailData.getPn()); - task.setQty(detailData.getQty()); - List orderDataList = sqlSession.selectList("ecssMapper" + "." + "searchWalMartOrderList", task); - palletDetailData.setQty(orderDataList.isEmpty()?detailData.getQty():orderDataList.get(0).getQty()); + palletDetailData.setQty(detailData.getQty()); // 数量/每箱EA palletDetailData.setBoxQty(BigDecimal.valueOf(Long.parseLong(detailData.getNocartons()))); } else { @@ -1027,6 +1097,15 @@ public class CoDelServiceImpl implements CoDelService { try { ExcelTemplate template = ExcelTemplate.load(new ClassPathResource("templates/declaration-elements-template.xlsx").getInputStream()); template.addVar("brandType", data.getBrandType()); + Map propertiesMap = new HashMap<>(); + if (data.getPropertiesList()!=null && !data.getPropertiesList().isEmpty()) { + for (int i = 0; i < data.getPropertiesList().size(); i++) { + String key =data.getPropertiesList().get(i).getHsCode()+"&"+data.getPropertiesList().get(i).getHsCodeDesc(); + if (!propertiesMap.containsKey(key)) { + propertiesMap.put(key, data.getPropertiesList().get(i).getBrand()); + } + } + } // 获取partNo列表 List partNos = coDelMapper.getDeclarationElements(data); List partNoList = partNos.stream().map(map -> map.get("partNo").toString()).collect(Collectors.toList()); @@ -1049,6 +1128,10 @@ public class CoDelServiceImpl implements CoDelService { List propertiesList = coDelMapper.getPropertiesListByPartAndCodeNo(inData); StringBuilder properties = new StringBuilder(); for (int j = 0; j < propertiesList.size(); j++) { + if (propertiesList.get(j).getItemDesc().equals(data.getBrand()) && propertiesMap.containsKey(key) + && !StringUtils.isBlank(propertiesMap.get(key))) { + propertiesList.get(j).setTextValue(propertiesMap.get(key)); + } if (j == propertiesList.size() - 1) { properties.append(propertiesList.get(j).getItemDesc()).append(": ").append(propertiesList.get(j).getTextValue()); } else { @@ -1160,13 +1243,16 @@ public class CoDelServiceImpl implements CoDelService { coDelMapper.updateEcssCoDelNotifyDetail(nData); } try { - ExcelTemplate template = ExcelTemplate.load(new ClassPathResource("templates/declaration-invoice-template.xlsx").getInputStream()); + EcssCoDelNotifyHeaderData notifyHeader = coDelMapper.getEcssCoDelNotifyHeader(data.getSite(), data.getDelNo()); + ExcelTemplate template = ExcelTemplate.load(new ClassPathResource( + notifyHeader.getBuNo().equals("04-MHM") || notifyHeader.getBuNo().equals("02-Hardtag")? + "templates/declaration-invoice2-template.xlsx": + "templates/declaration-invoice-template.xlsx").getInputStream()); template.setMoveShape(true); template.setCellStyle(true); template.setRangeStyle(true); template.setPriceRight(true); - EcssCoDelNotifyHeaderData notifyHeader = coDelMapper.getEcssCoDelNotifyHeader(data.getSite(), data.getDelNo()); List addrs = coDelMapper.getCustomerAdd(notifyHeader.getCustomerName()); template.addVar("localShipper", notifyHeader.getCustomerName()); template.addVar("localShipAddress", addrs.get(0).get("cDeliverAdd")); @@ -1594,6 +1680,64 @@ public class CoDelServiceImpl implements CoDelService { } } + /** + * 导出合同 + */ + @Override + public void downloadContract(HttpServletResponse response, EcssDeclarationHeaderData data) { + try { + ExcelTemplate template = ExcelTemplate.load(new ClassPathResource("templates/declaration-elements-template.xlsx").getInputStream()); + template.addVar("brandType", data.getBrandType()); + // 获取partNo列表 + List partNos = coDelMapper.getDeclarationElements(data); + List partNoList = partNos.stream().map(map -> map.get("partNo").toString()).collect(Collectors.toList()); + // 根据partNo获取hsCode + List hsCodes = coDelMapper.getHsCodeByPartNo(data.getSite(), partNoList); + Map hsCodeMap = new HashMap<>(); + for (int i = 0; i < hsCodes.size(); i++) { + Map eorder = hsCodes.get(i); + String key = eorder.get("hsCode")+"&"+eorder.get("hsCodeDesc"); + if (hsCodeMap.containsKey(key)) { + hsCodeMap.get(key).put("sku", hsCodeMap.get(key).get("sku")+"\n "+eorder.get("sku")); + } else { + // hscode所有属性 + PartSubPropertiesValueData inData = new PartSubPropertiesValueData(); + inData.setSite(data.getSite()); + inData.setBuNo(eorder.get("BuNo").toString()); + inData.setCodeNo(eorder.get("codeNo").toString()); + inData.setPartNo(eorder.get("hsCodeDesc").toString()); + inData.setRecordType("ECSS"); + List propertiesList = coDelMapper.getPropertiesListByPartAndCodeNo(inData); + StringBuilder properties = new StringBuilder(); + for (int j = 0; j < propertiesList.size(); j++) { + if (j == propertiesList.size() - 1) { + properties.append(propertiesList.get(j).getItemDesc()).append(": ").append(propertiesList.get(j).getTextValue()); + } else { + properties.append(propertiesList.get(j).getItemDesc()).append(": ").append(propertiesList.get(j).getTextValue()).append("\n"); + } + } + eorder.put("properties",properties); + hsCodeMap.put(key, eorder); + } + } + List list = new ArrayList<>(hsCodeMap.values()); + for (int i = 0; i < list.size(); i++) { + Map fMap = list.get(i); + fMap.put("content", "HS Code: "+fMap.get("hsCode")+ + "\n品名: "+(data.getHsCodeDescType()!=null&&data.getHsCodeDescType().equals("N")?fMap.get("hsCodeDescEn"):fMap.get("hsCodeDesc"))+ + "\n"+fMap.get("properties")+ + "\n型号: "+fMap.get("sku")); + } + template.addListVarAll(list); + template.render(response.getOutputStream()); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename=\"合同.xlsx\""); + response.flushBuffer(); + } catch (Exception e) { + e.printStackTrace(); + } + } + /** * 一键装箱 */ @@ -1769,7 +1913,7 @@ public class CoDelServiceImpl implements CoDelService { @Override @Transactional - public void saveWalMartOrderByExcel(MultipartFile file, EcssWalMartOrder inData) { + public String saveWalMartOrderByExcel(MultipartFile file, EcssWalMartOrder inData) { SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); String site = coDelMapper.getSiteByBu(inData.getBuNo()); List excelList = new ArrayList<>(); @@ -1799,6 +1943,7 @@ public class CoDelServiceImpl implements CoDelService { // 获取行数 int rows = sheet.getPhysicalNumberOfRows(); // 遍历每一行(从第二行开始) + StringBuilder sb = new StringBuilder("第"); for (int j = 1; j < rows; j++) { // 创建对象 EcssWalMartOrder task = new EcssWalMartOrder(); @@ -1815,7 +1960,13 @@ public class CoDelServiceImpl implements CoDelService { task.setQty(getNumericCellValueOrDefault(row, 2)); List orderDataList = sqlSession.selectList("ecssMapper" + "." + "searchWalMartOrderList", task); if (!orderDataList.isEmpty()) { - throw new RuntimeException("第" + j + "行的SKU和数量已存在!"); + if (sb.toString().length()>1) { + sb.append(",").append(j); + } else { + sb.append(j); + } + //throw new RuntimeException("第" + j + "行的SKU和数量已存在!"); + continue; } task.setRolls(getNumericCellValueOrDefault(row, 3)); task.setGrossWeight(getNumericCellValueOrDefault(row, 4)); @@ -1823,9 +1974,52 @@ public class CoDelServiceImpl implements CoDelService { task.setCreateBy(currentUser.getUserDisplay()); excelList.add(task); } - coDelMapper.batchSaveWalMartOrder(excelList); + if (!excelList.isEmpty()) { + coDelMapper.batchSaveWalMartOrder(excelList); + } + if (sb.toString().equals("第")) { + sb= new StringBuilder(); + } else { + sb.append("行的SKU和数量已存在!"); + } + return sb.toString(); } catch (Exception e) { throw new RuntimeException("导入失败:" + e.getMessage()); } } + + @Override + public List getPropertiesListByDeclaration(EcssDeclarationHeaderData data) { + // 获取partNo列表 + List partNos = coDelMapper.getDeclarationElements(data); + List partNoList = partNos.stream().map(map -> map.get("partNo").toString()).collect(Collectors.toList()); + // 根据partNo获取hsCode + List hsCodes = coDelMapper.getHsCodeByPartNo(data.getSite(), partNoList); + Map hsCodeMap = new HashMap<>(); + for (int i = 0; i < hsCodes.size(); i++) { + Map eorder = hsCodes.get(i); + String key = eorder.get("hsCode")+"&"+eorder.get("hsCodeDesc"); + if (hsCodeMap.containsKey(key)) { + hsCodeMap.get(key).put("sku", hsCodeMap.get(key).get("sku")+"\n "+eorder.get("sku")); + } else { + hsCodeMap.put(key, eorder); + } + } + List list = new ArrayList<>(hsCodeMap.values()); + PartSubPropertiesValueData inData = new PartSubPropertiesValueData(); + list.forEach(eorder -> { + inData.setSite(data.getSite()); + inData.setBuNo(eorder.get("BuNo").toString()); + inData.setCodeNo(eorder.get("codeNo").toString()); + inData.setPartNo(eorder.get("hsCodeDesc").toString()); + inData.setRecordType("ECSS"); + List result = coDelMapper.getPropertiesListByPartAndCodeNo(inData); + result = result.stream().filter(item -> item.getItemDesc().equals(data.getBrand())).collect(Collectors.toList()); + if (!result.isEmpty() && "Y".equals(result.get(0).getValueChooseFlag())) { + List availableList = partInformationMapper.getAvailableValueList(result.get(0)); + eorder.put("availableList", availableList); + } + }); + return list; + } } diff --git a/src/main/resources/templates/declaration-invoice2-template.xlsx b/src/main/resources/templates/declaration-invoice2-template.xlsx new file mode 100644 index 00000000..f74b692e Binary files /dev/null and b/src/main/resources/templates/declaration-invoice2-template.xlsx differ