Showing
6 changed files
with
118 additions
and
9 deletions
xingyun-sc/src/main/java/com/lframework/xingyun/sc/controller/order/PurchaseOrderInfoController.java
| ... | ... | @@ -459,6 +459,7 @@ public class PurchaseOrderInfoController extends DefaultBaseController { |
| 459 | 459 | dataMap.put("performanceance", data.getPerformance()); |
| 460 | 460 | dataMap.put("packaging", data.getPackaging()); |
| 461 | 461 | dataMap.put("shippingCost", data.getShippingCost()); |
| 462 | + dataMap.put("destination", ExcelUtil.buildPrintDestination(data.getContractType(), data.getDestination(), data.getForeignDestination())); | |
| 462 | 463 | dataMap.put("remarks", data.getRemarks()); |
| 463 | 464 | dataMap.put("createUser", data.getCreateBy()); |
| 464 | 465 | dataMap.put("element", data.getElement()); | ... | ... |
| ... | ... | @@ -258,6 +258,7 @@ public class BusinessDataExportHandler implements ExportHandler { |
| 258 | 258 | dataMap.put("performanceance", orderInfo.getPerformance()); |
| 259 | 259 | dataMap.put("packaging", orderInfo.getPackaging()); |
| 260 | 260 | dataMap.put("shippingCost", orderInfo.getShippingCost()); |
| 261 | + dataMap.put("destination", ExcelUtil.buildPrintDestination(orderInfo.getContractType(), orderInfo.getDestination(), orderInfo.getForeignDestination())); | |
| 261 | 262 | dataMap.put("remarks", orderInfo.getRemarks()); |
| 262 | 263 | dataMap.put("createUser", orderInfo.getCreateBy()); |
| 263 | 264 | dataMap.put("element", orderInfo.getElement()); | ... | ... |
| ... | ... | @@ -131,8 +131,12 @@ public class PurchaseOrderInfoServiceImpl extends BaseMpServiceImpl<PurchaseOrde |
| 131 | 131 | |
| 132 | 132 | @Override |
| 133 | 133 | public PurchaseOrderInfo findById(String id) { |
| 134 | - | |
| 135 | - return getBaseMapper().findById(id); | |
| 134 | + PurchaseOrderInfo data = getBaseMapper().findById(id); | |
| 135 | + if (data == null) { | |
| 136 | + return null; | |
| 137 | + } | |
| 138 | + fillContractDestination(data); | |
| 139 | + return data; | |
| 136 | 140 | } |
| 137 | 141 | |
| 138 | 142 | @Override |
| ... | ... | @@ -763,17 +767,46 @@ public class PurchaseOrderInfoServiceImpl extends BaseMpServiceImpl<PurchaseOrde |
| 763 | 767 | } |
| 764 | 768 | Map<String, ContractDistributorStandard> contractMap = contractList.stream().collect(Collectors.toMap(ContractDistributorStandard::getId, Function.identity())); |
| 765 | 769 | for (PurchaseOrderInfo orderInfo : orderInfoList) { |
| 766 | - String contractId = orderInfo.getContractId(); | |
| 767 | - ContractDistributorStandard contract = contractMap.get(contractId); | |
| 768 | - if (contract == null) { | |
| 769 | - continue; | |
| 770 | - } | |
| 771 | - orderInfo.setDestination(contract.getDestination()); | |
| 772 | - orderInfo.setForeignDestination(contract.getForeignDestination()); | |
| 770 | + fillContractDestination(orderInfo, contractMap); | |
| 773 | 771 | } |
| 774 | 772 | return orderInfoList; |
| 775 | 773 | } |
| 776 | 774 | |
| 775 | + /** | |
| 776 | + * 回填订货单上的合同目的地字段,供打印等场景使用。 | |
| 777 | + * | |
| 778 | + * @param orderInfo 订货单 | |
| 779 | + */ | |
| 780 | + private void fillContractDestination(PurchaseOrderInfo orderInfo) { | |
| 781 | + if (orderInfo == null || StringUtils.isBlank(orderInfo.getContractId())) { | |
| 782 | + return; | |
| 783 | + } | |
| 784 | + ContractDistributorStandard contract = contractDistributorStandardService.findById(orderInfo.getContractId()); | |
| 785 | + if (contract == null) { | |
| 786 | + return; | |
| 787 | + } | |
| 788 | + orderInfo.setDestination(contract.getDestination()); | |
| 789 | + orderInfo.setForeignDestination(contract.getForeignDestination()); | |
| 790 | + } | |
| 791 | + | |
| 792 | + /** | |
| 793 | + * 根据合同映射批量回填订货单上的合同目的地字段。 | |
| 794 | + * | |
| 795 | + * @param orderInfo 订货单 | |
| 796 | + * @param contractMap 合同映射 | |
| 797 | + */ | |
| 798 | + private void fillContractDestination(PurchaseOrderInfo orderInfo, Map<String, ContractDistributorStandard> contractMap) { | |
| 799 | + if (orderInfo == null || contractMap == null || StringUtils.isBlank(orderInfo.getContractId())) { | |
| 800 | + return; | |
| 801 | + } | |
| 802 | + ContractDistributorStandard contract = contractMap.get(orderInfo.getContractId()); | |
| 803 | + if (contract == null) { | |
| 804 | + return; | |
| 805 | + } | |
| 806 | + orderInfo.setDestination(contract.getDestination()); | |
| 807 | + orderInfo.setForeignDestination(contract.getForeignDestination()); | |
| 808 | + } | |
| 809 | + | |
| 777 | 810 | @Override |
| 778 | 811 | public List<PurchaseOrderInfo> listByCustomerIds(List<String> customerIds) { |
| 779 | 812 | if (CollectionUtils.isEmpty(customerIds)) { | ... | ... |
| 1 | 1 | package com.lframework.xingyun.sc.utils; |
| 2 | 2 | |
| 3 | +import com.lframework.starter.web.core.utils.ApplicationUtil; | |
| 4 | +import com.lframework.starter.web.inner.dto.dic.city.DicCityDto; | |
| 5 | +import com.lframework.starter.web.inner.service.DicCityService; | |
| 3 | 6 | import lombok.extern.slf4j.Slf4j; |
| 7 | +import org.apache.commons.lang3.StringUtils; | |
| 4 | 8 | import org.apache.poi.ss.usermodel.*; |
| 5 | 9 | import org.apache.poi.ss.util.CellRangeAddress; |
| 6 | 10 | |
| ... | ... | @@ -41,6 +45,76 @@ public class ExcelUtil { |
| 41 | 45 | } |
| 42 | 46 | } |
| 43 | 47 | |
| 48 | + /** | |
| 49 | + * 构建打印使用的目的地文本。 | |
| 50 | + * 外贸合同直接展示外贸目的地,其他合同将层级地址中的斜杠替换为中文逗号。 | |
| 51 | + * | |
| 52 | + * @param contractType 合同类型 | |
| 53 | + * @param destination 普通目的地 | |
| 54 | + * @param foreignDestination 外贸目的地 | |
| 55 | + * @return 打印使用的目的地文本 | |
| 56 | + */ | |
| 57 | + public static String buildPrintDestination(String contractType, String destination, String foreignDestination) { | |
| 58 | + if (isForeignContractType(contractType)) { | |
| 59 | + return StringUtils.defaultString(foreignDestination).trim(); | |
| 60 | + } | |
| 61 | + | |
| 62 | + String domesticDestination = buildDomesticDestination(destination); | |
| 63 | + if (StringUtils.isNotBlank(domesticDestination)) { | |
| 64 | + return domesticDestination; | |
| 65 | + } else { | |
| 66 | + return ""; | |
| 67 | + } | |
| 68 | + } | |
| 69 | + | |
| 70 | + /** | |
| 71 | + * 将国内目的地城市ID转换为中文地址路径。 | |
| 72 | + * | |
| 73 | + * @param destination 目的地ID | |
| 74 | + * @return 中文地址路径 | |
| 75 | + */ | |
| 76 | + private static String buildDomesticDestination(String destination) { | |
| 77 | + if (StringUtils.isBlank(destination)) { | |
| 78 | + return ""; | |
| 79 | + } | |
| 80 | + | |
| 81 | + try { | |
| 82 | + DicCityService dicCityService = ApplicationUtil.getBean(DicCityService.class); | |
| 83 | + List<DicCityDto> allCity = dicCityService.getAll(); | |
| 84 | + List<DicCityDto> fullPath = dicCityService.getFullPath(destination, allCity); | |
| 85 | + if (fullPath == null || fullPath.isEmpty()) { | |
| 86 | + return ""; | |
| 87 | + } | |
| 88 | + | |
| 89 | + StringBuilder builder = new StringBuilder(); | |
| 90 | + for (DicCityDto cityDto : fullPath) { | |
| 91 | + if (cityDto == null || StringUtils.isBlank(cityDto.getName())) { | |
| 92 | + continue; | |
| 93 | + } | |
| 94 | + if (builder.length() > 0) { | |
| 95 | + builder.append(","); | |
| 96 | + } | |
| 97 | + builder.append(cityDto.getName()); | |
| 98 | + } | |
| 99 | + return builder.toString(); | |
| 100 | + } catch (Exception e) { | |
| 101 | + log.warn("转换国内目的地失败, destination={}", destination, e); | |
| 102 | + return ""; | |
| 103 | + } | |
| 104 | + } | |
| 105 | + | |
| 106 | + /** | |
| 107 | + * 判断是否为外贸合同类型。 | |
| 108 | + * | |
| 109 | + * @param contractType 合同类型 | |
| 110 | + * @return true=外贸合同 | |
| 111 | + */ | |
| 112 | + private static boolean isForeignContractType(String contractType) { | |
| 113 | + return "INTL_STD_CONTRACT".equals(contractType) | |
| 114 | + || "INTL_INVENTORY_AGMT".equals(contractType) | |
| 115 | + || "INTL_OPEN_SPEC_AGMT".equals(contractType); | |
| 116 | + } | |
| 117 | + | |
| 44 | 118 | |
| 45 | 119 | /** |
| 46 | 120 | * 解析占位符 | ... | ... |
No preview for this file type
No preview for this file type