|
|
@@ -840,8 +840,17 @@ public class SaleInvoiceController {
|
|
|
@RequiresPermissions("saleCode:sale_invoice:exportXls")
|
|
|
@RequestMapping(value = "/exportXls")
|
|
|
public ModelAndView exportXls(HttpServletRequest request, SaleInvoice saleInvoice) {
|
|
|
+
|
|
|
+ String organize = saleInvoice.getOrganize();
|
|
|
+ saleInvoice.setOrganize(null);
|
|
|
+
|
|
|
// Step.1 组装查询条件查询数据
|
|
|
QueryWrapper<SaleInvoice> queryWrapper = QueryGenerator.initQueryWrapper(saleInvoice, request.getParameterMap());
|
|
|
+
|
|
|
+ if(StringUtils.isNotBlank(organize)){
|
|
|
+ queryWrapper.likeRight("organize",organize);
|
|
|
+ }
|
|
|
+
|
|
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
|
|
|
|
//配置选中数据查询条件
|
|
|
@@ -849,68 +858,123 @@ public class SaleInvoiceController {
|
|
|
if (oConvertUtils.isNotEmpty(selections)) {
|
|
|
List<String> selectionList = Arrays.asList(selections.split(","));
|
|
|
queryWrapper.in("id", selectionList);
|
|
|
- }else{
|
|
|
-
|
|
|
+ } else {
|
|
|
String dept = sysUser.getOrgCode();
|
|
|
- String userName = sysUser.getUsername();
|
|
|
- if(!userName.equals("admin") && !userName.equals("jack") && !userName.equals("max") && !"A02A05".equals(dept)){
|
|
|
+ String userName = sysUser.getUsername();
|
|
|
+ if (!userName.equals("admin") && !userName.equals("jack") && !userName.equals("max") && !"A02A05".equals(dept)) {
|
|
|
throw new JeecgBootException("请勾选要导出的数据");
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- }
|
|
|
- //Step.2 获取导出数据
|
|
|
+ // Step.2 获取导出数据
|
|
|
List<SaleInvoice> saleInvoiceList = saleInvoiceService.list(queryWrapper);
|
|
|
|
|
|
- System.out.println("============1===============");
|
|
|
- // Step.3 组装pageList
|
|
|
- List<SaleInvoicePage> pageList = new ArrayList<SaleInvoicePage>();
|
|
|
- for (SaleInvoice main : saleInvoiceList) {
|
|
|
+ // ==== 批量预加载关联数据,消除 N+1 查询 ====
|
|
|
+ Set<String> invoiceIdSet = new HashSet<>();
|
|
|
+ Set<String> sourceCodeSet = new HashSet<>();
|
|
|
+ Set<String> sourceCode2Set = new HashSet<>();
|
|
|
+ for (SaleInvoice inv : saleInvoiceList) {
|
|
|
+ invoiceIdSet.add(inv.getId());
|
|
|
+ if (StringUtils.isNotBlank(inv.getSourceCode())) {
|
|
|
+ sourceCodeSet.add(inv.getSourceCode());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(inv.getSourceCode2())) {
|
|
|
+ // sourceCode2 可能是逗号分隔的,需要拆分扁平化
|
|
|
+ for (String code : inv.getSourceCode2().split(",")) {
|
|
|
+ if (StringUtils.isNotBlank(code)) {
|
|
|
+ sourceCode2Set.add(code.trim());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2.1 批量查 SaleInvoiceShip,按 headId 分组
|
|
|
+ Map<String, List<SaleInvoiceShip>> shipMap = new HashMap<>();
|
|
|
+ if (!invoiceIdSet.isEmpty()) {
|
|
|
+ List<SaleInvoiceShip> allShips = saleInvoiceShipService.list(
|
|
|
+ new QueryWrapper<SaleInvoiceShip>().in("head_id", invoiceIdSet));
|
|
|
+ shipMap = allShips.stream().collect(Collectors.groupingBy(SaleInvoiceShip::getHeadId));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2.2 批量查 SaleDelivery,按 billCode 分组
|
|
|
+ Map<String, SaleDelivery> deliveryMap = new HashMap<>();
|
|
|
+ Set<String> deliverySourceCodeSet = new HashSet<>();
|
|
|
+ if (!sourceCodeSet.isEmpty()) {
|
|
|
+ List<SaleDelivery> allDeliveries = saleDeliveryService.list(
|
|
|
+ new QueryWrapper<SaleDelivery>().in("bill_code", sourceCodeSet));
|
|
|
+ deliveryMap = allDeliveries.stream()
|
|
|
+ .collect(Collectors.toMap(SaleDelivery::getBillCode, d -> d, (a, b) -> a));
|
|
|
+ // 收集 SaleDelivery 的 sourceCode 用于查 SaleOrder
|
|
|
+ for (SaleDelivery d : allDeliveries) {
|
|
|
+ if (StringUtils.isNotBlank(d.getSourceCode())) {
|
|
|
+ deliverySourceCodeSet.add(d.getSourceCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- main.setCreateBy(null);
|
|
|
- main.setSysOrgCode(null);
|
|
|
- main.setNotes(null);
|
|
|
+ // 2.3 批量查 SaleOrder,按 billCode 分组
|
|
|
+ Map<String, SaleOrder> orderMap = new HashMap<>();
|
|
|
+ if (!deliverySourceCodeSet.isEmpty()) {
|
|
|
+ List<SaleOrder> allOrders = saleOrderService.list(
|
|
|
+ new QueryWrapper<SaleOrder>().in("bill_code", deliverySourceCodeSet));
|
|
|
+ orderMap = allOrders.stream()
|
|
|
+ .collect(Collectors.toMap(SaleOrder::getBillCode, o -> o, (a, b) -> a));
|
|
|
+ }
|
|
|
|
|
|
+ // 2.4 批量查 PlatCommissionOrder,按 billCode 分组
|
|
|
+ Map<String, PlatCommissionOrder> commissionMap = new HashMap<>();
|
|
|
+ if (!sourceCode2Set.isEmpty()) {
|
|
|
+ List<PlatCommissionOrder> allCommissions = platCommissionOrderService.list(
|
|
|
+ new QueryWrapper<PlatCommissionOrder>().in("bill_code", sourceCode2Set));
|
|
|
+ commissionMap = allCommissions.stream()
|
|
|
+ .collect(Collectors.toMap(PlatCommissionOrder::getBillCode, c -> c, (a, b) -> a));
|
|
|
+ }
|
|
|
+ // ==== 批量预加载结束 ====
|
|
|
+
|
|
|
+ // Step.3 组装pageList(直接从 Map 取值,无 DB 查询)
|
|
|
+ List<SaleInvoicePage> pageList = new ArrayList<SaleInvoicePage>();
|
|
|
+ for (SaleInvoice main : saleInvoiceList) {
|
|
|
SaleInvoicePage vo = new SaleInvoicePage();
|
|
|
BeanUtils.copyProperties(main, vo);
|
|
|
- List<SaleInvoiceShip> saleInvoiceShipList = saleInvoiceShipService.selectByMainId(main.getId());
|
|
|
- List<String> shipNames = saleInvoiceShipList.stream()
|
|
|
+
|
|
|
+ // 船名
|
|
|
+ List<SaleInvoiceShip> ships = shipMap.getOrDefault(main.getId(), Collections.emptyList());
|
|
|
+ List<String> shipNames = ships.stream()
|
|
|
.map(SaleInvoiceShip::getShipName)
|
|
|
.collect(Collectors.toList());
|
|
|
- if(shipNames.size() > 0){
|
|
|
-
|
|
|
- String result = String.join(",", shipNames);
|
|
|
- vo.setNotes(result);
|
|
|
-
|
|
|
+ if (!shipNames.isEmpty()) {
|
|
|
+ vo.setNotes(String.join(",", shipNames));
|
|
|
}
|
|
|
- String sourceCode = main.getSourceCode();
|
|
|
- if(StringUtils.isNotBlank(sourceCode)){
|
|
|
- SaleDelivery saleDelivery = saleDeliveryService.getByBillCode(sourceCode);
|
|
|
- if(saleDelivery !=null && StringUtils.isNotBlank(saleDelivery.getSourceCode())){
|
|
|
- SaleOrder saleOrder = saleOrderService.getByBillCode(saleDelivery.getSourceCode());
|
|
|
|
|
|
- if(saleOrder !=null){
|
|
|
+ // 从 SaleDelivery → SaleOrder 链路取 createBy / sysOrgCode
|
|
|
+ String sourceCode = main.getSourceCode();
|
|
|
+ if (StringUtils.isNotBlank(sourceCode)) {
|
|
|
+ SaleDelivery saleDelivery = deliveryMap.get(sourceCode);
|
|
|
+ if (saleDelivery != null && StringUtils.isNotBlank(saleDelivery.getSourceCode())) {
|
|
|
+ SaleOrder saleOrder = orderMap.get(saleDelivery.getSourceCode());
|
|
|
+ if (saleOrder != null) {
|
|
|
vo.setCreateBy(saleOrder.getCreateBy());
|
|
|
vo.setSysOrgCode(saleOrder.getSysOrgCode());
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- String sourceCode2 = main.getSourceCode2();
|
|
|
|
|
|
+ // 从 PlatCommissionOrder 取 createBy / sysOrgCode
|
|
|
+ String sourceCode2 = main.getSourceCode2();
|
|
|
if (oConvertUtils.isNotEmpty(sourceCode2)) {
|
|
|
- LambdaQueryWrapper<PlatCommissionOrder> deliveryLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- deliveryLambdaQueryWrapper.eq(PlatCommissionOrder::getBillCode, sourceCode2);
|
|
|
- PlatCommissionOrder delivery = platCommissionOrderService.getOne(deliveryLambdaQueryWrapper);
|
|
|
- if (delivery != null){
|
|
|
- vo.setCreateBy(delivery.getCreateBy());
|
|
|
- vo.setSysOrgCode(delivery.getSysOrgCode());
|
|
|
+ // 逗号分隔的 sourceCode2,取第一个匹配的佣金订单
|
|
|
+ for (String code : sourceCode2.split(",")) {
|
|
|
+ if (StringUtils.isNotBlank(code.trim())) {
|
|
|
+ PlatCommissionOrder commission = commissionMap.get(code.trim());
|
|
|
+ if (commission != null) {
|
|
|
+ vo.setCreateBy(commission.getCreateBy());
|
|
|
+ vo.setSysOrgCode(commission.getSysOrgCode());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-// vo.setSaleInvoiceShipList(saleInvoiceShipList);
|
|
|
-// List<SaleInvoiceProduct> saleInvoiceProductList = saleInvoiceProductService.selectByMainId(main.getId());
|
|
|
-// vo.setSaleInvoiceProductList(saleInvoiceProductList);
|
|
|
pageList.add(vo);
|
|
|
}
|
|
|
|
|
|
@@ -920,7 +984,6 @@ public class SaleInvoiceController {
|
|
|
mv.addObject(NormalExcelConstants.CLASS, SaleInvoicePage.class);
|
|
|
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("销售发票数据", "导出人:" + sysUser.getRealname(), "销售发票"));
|
|
|
mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
|
|
|
- System.out.println("===========================");
|
|
|
return mv;
|
|
|
}
|
|
|
|