admin/src/main/resources/application-custom.yml
@@ -15,7 +15,7 @@ userLockExpireTime: 60 #上传下载 相关配置 upload: profile: /Users/xiongbenda/Desktop/temp/uploadPath #上传目录 profile: D:\temp\uploadPath #上传目录 temp: temp #临时文件夹 multipart: max-file-size: 2GB # 单个文件大小 service/src/main/java/com/ruoyi/cwgl/controller/DispatchOrderController.java
@@ -85,6 +85,18 @@ dispatchOrderService.export(dispatchOrder,exportKey); return AjaxResult.success("导出请求成功,请稍后点击下载...!"); } /** * 导出调度单列表 * @param dispatchOrder 查询条件对象 */ @PreAuthorize("@ss.hasPermi('cwgl:dispatchOrder:export')") @Log(title = "调度单", businessType = BusinessType.EXPORT) @GetMapping("/export2") public AjaxResult export2(DispatchOrder dispatchOrder,String exportKey) { dispatchOrderService.export2(dispatchOrder,exportKey); return AjaxResult.success("导出请求成功,请稍后点击下载...!"); } service/src/main/java/com/ruoyi/cwgl/domain/DispatchOrder.java
@@ -24,9 +24,10 @@ /** 调度单号 */ @Excel(name = "调度单号") @TableField("dispatch_no") @TableField("dispatch_no") private String dispatchNo; @TableField("customer_name") private String customerName; /** 运输方式 */ service/src/main/java/com/ruoyi/cwgl/domain/vo/DispatchOrderItemVo.java
@@ -17,7 +17,7 @@ @Data public class DispatchOrderItemVo { private String dispatchNo; /** 费用类型 */ private String feeItem; service/src/main/java/com/ruoyi/cwgl/domain/vo/DispatchOrderVo.java
New file @@ -0,0 +1,199 @@ package com.ruoyi.cwgl.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.Excel; import lombok.Data; import org.apache.poi.ss.usermodel.IndexedColors; import java.math.BigDecimal; import java.util.Date; /** * 调度单对象 dispatch_order * * @author ruoyi * @date 2025-07-29 */ @Data public class DispatchOrderVo { @Excel(name = "序号") private Integer id; @Excel(name = "系统调度单号") private String dispatchNo; @Excel(name = "系统子单号") private String subOrderNo; @Excel(name = "订单日期", width = 30, dateFormat = "yyyy-MM-dd") private Date createTime; @Excel(name = "客户名称") private String customerName; @Excel(name = "项目名称") private String projectName; @Excel(name = "业务类型") private String businessType; @Excel(name = "大陆车牌") private String licensePlateNumber; @Excel(name = "港澳车牌") private String hkPlateNo; @Excel(name = "大陆司机") private String mainDriverName; @Excel(name = "港澳司机") private String hkDriver; @Excel(name = "托架/柜号") private String vehiclePlateId; @Excel(name = "订单需求车型") private String vehicleType; @Excel(name = "运输供应商") private String transportSupplier; @Excel(name = "无缝申报单位") private String seamlessDeclarationUnit; @Excel(name = "无缝号") private String seamlessNo; @Excel(name = "装货地点") private String loadingPlace; @Excel(name = "通关口岸") private String customsPort; @Excel(name = "卸货地点") private String unloadingPlaces; @Excel(name = "多点卸货数量") private Integer unloadingPointCount; @Excel(name = "构件号") private String componentNo; @Excel(name = "构件尺寸") private String componentSize; @Excel(name = "卸货时间", width = 30, dateFormat = "yyyy-MM-dd") private Date unloadingTime; @Excel(name = "国内骑司及超时情况") private String delayStatus; @Excel(name = "备注") private String remark; // ------------------- 客户费用(人民币) ------------------- @Excel(name = "客户港车运费(人民币)",defaultValue = "0",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerHkFeeRmb; @Excel(name = "客户大陆车运费(人民币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerMainlandFeeRmb; @Excel(name = "客户报关费(人民币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerCustomFeeRmb; @Excel(name = "客户多点装货(人民币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerMultiLoadFeeRmb; @Excel(name = "客户超宽费(人民币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerOverWidthFeeRmb; @Excel(name = "客户压夜超时(人民币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerOvernightFeeRmb; @Excel(name = "客户杂费(人民币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerMiscFeeRmb; @Excel(name = "客户合计(人民币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerTotalRmb; // ------------------- 客户费用(港币) ------------------- @Excel(name = "客户港车运费(港币)",defaultValue = "0",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerHkFeeHkd; @Excel(name = "客户大陆车运费(港币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerMainlandFeeHkd; @Excel(name = "客户报关费(港币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerCustomFeeHkd; @Excel(name = "客户多点装货(港币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerMultiLoadFeeHkd; @Excel(name = "客户超宽费(港币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerOverWidthFeeHkd; @Excel(name = "客户压夜超时(港币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerOvernightFeeHkd; @Excel(name = "客户杂费(港币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerMiscFeeHkd; @Excel(name = "客户合计(港币)",backgroundColor = IndexedColors.DARK_YELLOW) private BigDecimal customerTotalHkd; // ------------------- 供应商费用 ------------------- @Excel(name = "供应商名称",backgroundColor = IndexedColors.GREY_25_PERCENT) private String carrierName; // 人民币 @Excel(name = "供应商港车运费(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierHkFeeRmb; @Excel(name = "供应商大陆车运费(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierMainlandFeeRmb; @Excel(name = "供应商报关费(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierCustomFeeRmb; @Excel(name = "供应商多点装货(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierMultiLoadFeeRmb; @Excel(name = "供应商超宽费(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierOverWidthFeeRmb; @Excel(name = "供应商压夜超时(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierOvernightFeeRmb; @Excel(name = "供应商杂费(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierMiscFeeRmb; @Excel(name = "供应商合计(人民币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierTotalRmb; // 港币 @Excel(name = "供应商港车运费(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierHkFeeHkd; @Excel(name = "供应商大陆车运费(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierMainlandFeeHkd; @Excel(name = "供应商报关费(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierCustomFeeHkd; @Excel(name = "供应商多点装货(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierMultiLoadFeeHkd; @Excel(name = "供应商超宽费(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierOverWidthFeeHkd; @Excel(name = "供应商压夜超时(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierOvernightFeeHkd; @Excel(name = "供应商杂费(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierMiscFeeHkd; @Excel(name = "供应商合计(港币)",backgroundColor = IndexedColors.GREY_25_PERCENT) private BigDecimal supplierTotalHkd; } service/src/main/java/com/ruoyi/cwgl/enums/FeeTypeEnums.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.cwgl.enums; import lombok.Getter; public enum FeeTypeEnums { FREIGHT("运费", "MainlandFee"), CUSTOM("报关费", "CustomFee"), MULTI_LOAD("多点装货", "MultiLoadFee"), OVER_WIDTH("超宽费", "OverWidthFee"), OVERNIGHT("压夜超时", "OvernightFee"), MISC("其他", "MiscFee"); private final String label; @Getter private final String fieldSuffix; FeeTypeEnums(String label, String fieldSuffix) { this.label = label; this.fieldSuffix = fieldSuffix; } public static FeeTypeEnums from(String feeItem) { for (FeeTypeEnums t : values()) { if (t.label.equals(feeItem)) return t; } return MISC; } } service/src/main/java/com/ruoyi/cwgl/mapper/DispatchOrderMapper.java
@@ -1,10 +1,13 @@ package com.ruoyi.cwgl.mapper; import java.util.List; import java.util.Set; import com.ruoyi.cwgl.domain.DispatchOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.cwgl.domain.DispatchOrderItem; import com.ruoyi.cwgl.domain.vo.DispatchOrderAttachmentVo; import org.apache.ibatis.annotations.Param; /** @@ -89,6 +92,7 @@ public int deleteDispatchOrderByIds(Integer[] ids); List<DispatchOrderItem> selectDispatchOrderItemByNo(String no); List<DispatchOrderItem> selectDispatchOrderItemByNos(@Param("nos") Set< String> nos); List<DispatchOrderAttachmentVo> selectDispatchOrderAttachment(String no); } service/src/main/java/com/ruoyi/cwgl/service/IDispatchOrderService.java
@@ -47,6 +47,7 @@ * @return 调度单集合 */ public void export(DispatchOrder dispatchOrder, String exportKey) ; public void export2(DispatchOrder dispatchOrder, String exportKey) ; /** service/src/main/java/com/ruoyi/cwgl/service/impl/DispatchOrderServiceImpl.java
@@ -1,11 +1,29 @@ package com.ruoyi.cwgl.service.impl; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.PageUtil; import com.github.pagehelper.Page; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.file.DownloadExportUtil; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.cwgl.domain.vo.DispatchOrderVo; import com.ruoyi.cwgl.enums.FeeTypeEnums; import org.springframework.beans.factory.annotation.Autowired; import com.ruoyi.cwgl.domain.DispatchOrderItem; import com.ruoyi.cwgl.domain.vo.DispatchOrderAttachmentVo; @@ -39,7 +57,8 @@ protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private DispatchOrderMapper dispatchOrderMapper; @Autowired private RedisCache redisCache; /** * 查询调度单 @@ -99,17 +118,219 @@ * @param exportKey 导出功能的唯一标识 * @return 调度单集合 */ @DataSource(DataSourceType.SLAVE) @DataSource(DataSourceType.CWSJ) @Async @Override public void export(DispatchOrder dispatchOrder,String exportKey) { super.export(DispatchOrder.class,exportKey,"dispatchOrderData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectDispatchOrderList(dispatchOrder); return selectDispatchOrderList2(dispatchOrder); }); } @DataSource(DataSourceType.CWSJ) @Async @Override public void export2(DispatchOrder dispatchOrder,String exportKey) { //查询并导出数据文件 String fileName =selectListExport(dispatchOrder, "台账信息"); //设置文件缓存 DownloadExportUtil.setDownloadFile(redisCache, exportKey, fileName); } @DataSource(DataSourceType.CWSJ) public String selectListExport(DispatchOrder dispatchOrder, String fileName) { fileName =ExcelUtil.encodeFileName(fileName); //数据集合 List<DispatchOrder> dataList = new ArrayList<>(); //导出表格对象 ExcelUtil<DispatchOrderVo> excelUtil = new ExcelUtil<>(DispatchOrderVo.class); excelUtil.initialize("台账信息", null, Excel.Type.EXPORT); List<DispatchOrderVo> exportList;//导出的数组 int pageNum =1,i = 1; boolean have=true; //region循环分页获取数据 while (have) { Page<Object> page = PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); List<DispatchOrder> dispatchOrders = selectDispatchOrderList2(dispatchOrder); if (dispatchOrders != null && !dispatchOrders.isEmpty()) { // 导出当前页的数据 exportList=structureData(dispatchOrders,i); excelUtil.exportExcel(exportList); pageNum++; } else { // 没有数据时退出 have = false; } } excelUtil.finishExport(fileName); return fileName; } /** * 封装数据 * @param list * @return */ @DataSource(DataSourceType.CWSJ) private List<DispatchOrderVo> structureData(List<DispatchOrder> list,int i) { List<DispatchOrderVo> exportList = new ArrayList<>(); Set<String> dispatchNos = list.stream().map(DispatchOrder::getDispatchNo).collect(Collectors.toSet()); Map<String, List<DispatchOrderItemVo>> itemMap = selectDispatchOrderItems(dispatchNos) .stream().collect(Collectors.groupingBy(DispatchOrderItemVo::getDispatchNo)); for (DispatchOrder order : list) { try { DispatchOrderVo vo = BeanUtil.copyProperties(order, DispatchOrderVo.class); vo.setId(i++); // 初始化费用结构:Map<角色_币种, Map<费用类型, 金额>> Map<String, Map<FeeTypeEnums, BigDecimal>> feeMap = initFeeMap(); Map<String, BigDecimal> totalMap = initTotalMap(); List<DispatchOrderItemVo> items = itemMap.get(order.getDispatchNo()); if (items != null) { for (DispatchOrderItemVo item : items) { if (!StringUtils.isNotEmpty(item.getFeeItem()) || item.getIsSettlement() == 0) continue; FeeTypeEnums feeType = FeeTypeEnums.from(item.getFeeItem()); String actualCurrency = Optional.ofNullable(item.getActualFeeCurrency()).orElse("CNY"); String receivableCurrency = Optional.ofNullable(item.getReceivableFeeCurrency()).orElse("CNY"); addFee(feeMap, "customer_" + actualCurrency, feeType, item.getActualFee()); addTotal(totalMap, "customer_" + actualCurrency, item.getActualFee()); addFee(feeMap, "supplier_" + receivableCurrency, feeType, item.getReceivableFee()); addTotal(totalMap, "supplier_" + receivableCurrency, item.getReceivableFee()); } } // 设置 VO 字段 setFeeToVo(vo, feeMap, totalMap); exportList.add(vo); } catch (Exception e) { logger.error("数据处理失败 id:{}", order, e); } } return exportList; } private Map<String, Map<FeeTypeEnums, BigDecimal>> initFeeMap() { Map<String, Map<FeeTypeEnums, BigDecimal>> map = new HashMap<>(); for (String key : Arrays.asList("customer_CNY", "customer_HKD", "supplier_CNY", "supplier_HKD")) { Map<FeeTypeEnums, BigDecimal> subMap = new EnumMap<>(FeeTypeEnums.class); for (FeeTypeEnums feeType : FeeTypeEnums.values()) { subMap.put(feeType, BigDecimal.ZERO); } map.put(key, subMap); } return map; } private Map<String, BigDecimal> initTotalMap() { Map<String, BigDecimal> totalMap = new HashMap<>(); for (String key : Arrays.asList("customer_CNY", "customer_HKD", "supplier_CNY", "supplier_HKD")) { totalMap.put(key, BigDecimal.ZERO); } return totalMap; } private void addFee(Map<String, Map<FeeTypeEnums, BigDecimal>> map, String key, FeeTypeEnums feeType, BigDecimal amount) { if (amount == null) return; Map<FeeTypeEnums, BigDecimal> subMap = map.get(key); subMap.put(feeType, subMap.get(feeType).add(amount)); } private void addTotal(Map<String, BigDecimal> totalMap, String key, BigDecimal amount) { if (amount == null) return; totalMap.put(key, totalMap.get(key).add(amount)); } private void setFeeToVo(DispatchOrderVo vo, Map<String, Map<FeeTypeEnums, BigDecimal>> map, Map<String, BigDecimal> totalMap) { for (String role : Arrays.asList("Customer", "Supplier")) { for (String currency : Arrays.asList("Rmb", "Hkd")) { String mapKey = role.toLowerCase() + "_" + ("Rmb".equals(currency) ? "CNY" : "HKD"); Map<FeeTypeEnums, BigDecimal> feeTypeMap = map.get(mapKey); for (FeeTypeEnums feeType : FeeTypeEnums.values()) { String methodName = "set" + role + feeType.getFieldSuffix() + currency; invokeSetter(vo, methodName, feeTypeMap.get(feeType)); } // 设置 total 字段 String totalMethod = "set" + role + "Total" + currency; invokeSetter(vo, totalMethod, totalMap.get(mapKey)); } } } private void invokeSetter(Object obj, String methodName, BigDecimal value) { try { Method method = obj.getClass().getMethod(methodName, BigDecimal.class); method.invoke(obj, value); } catch (Exception e) { logger.warn("调用方法失败: {}", methodName, e); } } @DataSource(DataSourceType.CWSJ) public List<DispatchOrderItemVo> selectDispatchOrderItems( Set<String> nos) { // 使用Map来临时存储分组结果 Map<String, DispatchOrderItemVo> summaryMap = new HashMap<>(); List<DispatchOrderItem> dispatchOrderItems=dispatchOrderMapper.selectDispatchOrderItemByNos(nos); Set<String> settableFeeItemSet = null; for (DispatchOrderItem dispatchOrderItem : dispatchOrderItems) { String settableFeeItems = dispatchOrderItem.getSettableFeeItems(); if (settableFeeItemSet==null) { settableFeeItemSet = new HashSet<>( Arrays.asList(settableFeeItems.split(","))); } // 判断是否可结算 String feeItem = dispatchOrderItem.getFeeItem(); int isSettable = isFeeItemSettable(feeItem, settableFeeItemSet); // 如果Map中不存在该费用类型,则创建新条目 if (!summaryMap.containsKey(feeItem)) { DispatchOrderItemVo summary = new DispatchOrderItemVo(); summary.setDispatchNo(dispatchOrderItem.getDispatchNo()); summary.setFeeItem(feeItem); summary.setReceivableFee(BigDecimal.ZERO); summary.setActualFee(BigDecimal.ZERO); summary.setIsSettlement(isSettable); summaryMap.put(feeItem, summary); } // 根据账单类型累加金额 DispatchOrderItemVo summary = summaryMap.get(feeItem); if ("R".equals(dispatchOrderItem.getBillType())) { // 应收 summary.setReceivableFee(summary.getReceivableFee().add(dispatchOrderItem.getSettleFee())); summary.setReceivableFeeCurrency(dispatchOrderItem.getCurrencyType()); } else if ("P".equals(dispatchOrderItem.getBillType())) { // 应付 summary.setActualFee(summary.getActualFee().add(dispatchOrderItem.getSettleFee())); summary.setActualFeeCurrency(dispatchOrderItem.getCurrencyType()); } } // 转换为List并过滤、排序 return summaryMap.values().stream() // 过滤掉应收应付都为0的记录 .filter(dto -> dto.getReceivableFee().compareTo(BigDecimal.ZERO) != 0 || dto.getActualFee().compareTo(BigDecimal.ZERO) != 0) // 排序:可结算的在前,不可结算的在后;然后按总金额降序 .sorted(Comparator.comparing(DispatchOrderItemVo::getIsSettlement).reversed() .thenComparing(dto -> dto.getReceivableFee().add(dto.getActualFee()), Comparator.reverseOrder())) .collect(Collectors.toList()); } /** * 新增调度单 service/src/main/resources/mapper/cwgl/DispatchOrderMapper.xml
@@ -7,6 +7,7 @@ <resultMap type="com.ruoyi.cwgl.domain.DispatchOrder" id="DispatchOrderResult"> <result property="id" column="id" /> <result property="dispatchNo" column="dispatch_no" /> <result property="customerName" column="customer_name" /> <result property="transportMode" column="transport_mode" /> <result property="productName" column="product_name" /> <result property="carrierName" column="carrier_name" /> @@ -111,6 +112,7 @@ <select id="selectDispatchOrderList2" parameterType="com.ruoyi.cwgl.domain.DispatchOrder" resultMap="DispatchOrderResult"> SELECT ts.DISPATCH_NO as 'dispatch_no', customer.`NAME` as 'customer_name', ts.TRANSPORT_MODE as 'transport_mode', ts.PRODUCT_ID as 'product_name', bp.NAME as 'carrier_name', @@ -132,6 +134,7 @@ ts.BE_RETURN as 'be_return', ts.DISPATCH_QUANTITY as 'dispatch_quantity', ts.DISPATCH_WEIGHT as 'dispatch_weight', ts.CREATED_TIME as 'create_time', ts.DISPATCH_VOLUME as 'dispatch_volume', -- ts.EMPTY_MILEAGE '空载里程(公里)', -- ts.EMPTY_FUEL '空载油耗(升)', @@ -154,7 +157,8 @@ FROM tms_shipment ts -- 订单表 -- LEFT JOIN oms_order ord ON ts.DISPATCH_NO = ord.DISPATCH_CODE LEFT JOIN oms_order ord ON ts.DISPATCH_NO = ord.DISPATCH_CODE LEFT join base_customer customer on customer.ID=ord.CUSTOMER_ID left join tms_vehicle vhc on ts.VEHICLE_ID=vhc.id left join base_provider bp on bp.ID=ts.CARRIER_ID -- 司机表 @@ -171,6 +175,41 @@ </where> order by ts.CREATED_TIME desc </select> <select id="selectDispatchOrderItemByNos" resultType="com.ruoyi.cwgl.domain.DispatchOrderItem"> SELECT bfd.ENTITY_ID as 'dispatch_no', bfd.CREATED_TIME AS feeDataCreatedTime, bfd.CHECK_STATUS AS checkStatus, bfd.CURRENCY_TYPE AS currencyType, bfd.FEE_ITEM AS feeItem, bfd.FEE_TIME AS feeTime, bfd.REMARK AS remark, bfd.SETTLE_FEE AS settleFee, bfd.STATUS AS feeDataStatus, bill.NAME AS billName, bill.STATUS AS billStatus, fb.TYPE AS billType, bt.FIELDS AS settableFeeItems FROM bms_fee_data bfd LEFT JOIN bms_bill bill ON bill.ID = bfd.BILL_ID LEFT JOIN bms_fee_book fb ON fb.ID = bill.FEE_BOOK_ID LEFT JOIN bms_bill_template bt ON bt.ID = bill.BILL_TEMPLATE_ID LEFT JOIN oms_order ord ON bfd.ENTITY_ID = ord.DISPATCH_CODE WHERE bfd.ENTITY_ID in <foreach collection="nos" item="no" open="(" separator="," close=")"> #{no} </foreach> </select> <select id="selectDispatchOrderItemByNo" resultType="com.ruoyi.cwgl.domain.DispatchOrderItem"> SELECT ts.CREATED_TIME as createdTime, ui/admin-ui3/src/api/cwgl/dispatchOrder.ts
@@ -65,6 +65,11 @@ download('/cwgl/dispatchOrder/export',query); }) } export const exportDispatchOrder2:requestType = (query) => { return new Promise<any>(()=>{ download('/cwgl/dispatchOrder/export2',query); }) } /** * 查询查看费用 ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue
@@ -3,14 +3,14 @@ <avue-crud :option="option" :table-loading="pageF.loading" :data="tableData" :page="page" :permission="permissionList" :before-open="beforeOpen" v-model="form" ref="crudRef" @row-update="rowUpdate" @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange" @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange" v-model:search="queryParams" @size-change="sizeChange" @on-load="onLoad"> <template #menu-left> <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['cwgl:dispatchOrder:export']">导出 </el-button> <el-button type="success" plain icon="Download" @click="handleExport" <el-button type="success" plain icon="Download" @click="handleExport2" v-hasPermi="['cwgl:dispatchOrder:export']">生成台账报表 </el-button> </template> @@ -52,7 +52,7 @@ exportDispatchOrder, getDispatchOrder, listDispatchOrder, updateDispatchOrder, cwglDispatchOrderItem, cwglDispatchOrderattAchment updateDispatchOrder, cwglDispatchOrderItem, cwglDispatchOrderattAchment, exportDispatchOrder2 } from "@/api/cwgl/dispatchOrder"; import useCurrentInstance from "@/utils/useCurrentInstance"; import { computed, reactive, ref, toRefs } from "vue"; @@ -370,7 +370,12 @@ const attachmentChange = () => { // loadAttachmentData(); } const handleExport2 =()=>{ queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.actualDepartureTimeRange, 'actualDepartureTime') || {}; queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.requiredArrivalTimeRange, 'requiredArrivalTime') || {}; queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.actualArrivalTimeRange, 'actualArrivalTime') || {}; exportDispatchOrder2(queryParams.value); } </script> <style lang="scss" scoped> .avue-dialog .el-dialog__body {