Prechádzať zdrojové kódy

Merge branch 'dev' of http://47.101.143.145:8090/77975466/pco into dev

# Conflicts:
#	sp-server/src/main/java/com/pj/project/tb_business_item/TbBusinessItemService.java
qzyReal 3 rokov pred
rodič
commit
6d65a8b07d

+ 182 - 107
sp-admin/sa-view/tb-business/tb-business-item-list.html

@@ -16,119 +16,194 @@
 		<script src="../../static/sa.js"></script>
 	</head>
 	<body>
-		<div class="vue-box" style="display: none;" :style="'display: block;'">
-			<div class="c-panel">
-				<!-- ------------- 检索参数 ------------- -->
-				<div class="c-title">检索参数</div>
-				<el-form ref="form" :model='p' @submit.native.prevent>
-					<sa-item type="text" name="项目名称" v-model="p.itemName"></sa-item>
-					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
-					<el-button style="display: inline;" type="info" icon="el-icon-refresh" @click="sa.f5()">重置
-					</el-button>
-				</el-form>
-				<!-- ------------- 快捷按钮 ------------- -->
-				<div class="fast-btn">
-					<el-button type="warning" icon="el-icon-download" @click="sa.exportExcel()">导出</el-button>
-				</div>
-				<!-- ------------- 数据列表 ------------- -->
-				<el-table class="data-table" ref="data-table" :data="dataList">
-					<sa-td name="合作伙伴" prop="pickCustomerName"></sa-td>
-					<sa-td name="项目类型" prop="itemTypeName"></sa-td>
-					<sa-td name="具体项目" prop="itemName"></sa-td>
-					<sa-td name="计费标准" prop="unit">
-						<template slot-scope="s">
-							{{s.row.itemPrice}}{{s.row.unit}}
-						</template>
-					</sa-td>
+	<div class="vue-box" style="display: none;" :style="'display: block;'">
+		<div class="c-panel">
+			<!-- ------------- 检索参数 ------------- -->
+			<div class="c-title">检索参数</div>
+			<el-form ref="form" :model='p' @submit.native.prevent>
+				<sa-item type="text" name="项目名称" v-model="p.itemName"></sa-item>
+				<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
+				<el-button style="display: inline;" type="info" icon="el-icon-refresh" @click="sa.f5()">重置
+				</el-button>
+			</el-form>
+			<!-- ------------- 快捷按钮 ------------- -->
+			<div class="fast-btn">
+				<el-button type="warning" icon="el-icon-download" @click="exportFn()">导出</el-button>
+				<slot></slot>
+			</div>
+			<!-- ------------- 数据列表 ------------- -->
+			<el-table class="data-table" ref="data-table" :data="dataList">
+				<sa-td name="单号" prop="no" width="160"></sa-td>
+				<sa-td name="货物" prop="goodsName"></sa-td>
+				<sa-td name="越南车" prop="cardNo"></sa-td>
+				<sa-td name="中国车" prop="chinaCarNo"></sa-td>
+				<sa-td name="作业公司" prop="pickCustomerName"></sa-td>
+				<sa-td name="项目" prop="itemName"></sa-td>
+				<sa-td name="类型" prop="itemTypeName"></sa-td>
+				<sa-td name="计费标准" prop="unit">
+					<template slot-scope="s">
+						{{s.row.itemPrice}}{{s.row.unit}}
+					</template>
+				</sa-td>
 				<!-- 	<sa-td name="状态" prop="status" type="enum" :jv="{0: '未完成', 1: '已完成'}"></sa-td>
 					<sa-td name="作业时间" prop="operateTime"></sa-td> -->
-					<sa-td name="创建时间" prop="createTime"></sa-td>
-					<sa-td name="接单时间" prop="pickTime"></sa-td>
-					<sa-td name="确认时间" prop="confirmTime"></sa-td>
-					<el-table-column label="操作" fixed="right" width="100px">
-						<template slot-scope="s">
-							<el-button class="c-btn" type="primary" @click="pickFn(s.row)" v-if="s.row.pick == 1 && s.row.confirm == 0">确认</el-button>
-						</template>
-					</el-table-column>
-				</el-table>
-				<!-- ------------- 分页 ------------- -->
-				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
-				</sa-item>
-			</div>
+				<sa-td name="创建时间" prop="createTime" width="160"></sa-td>
+				<sa-td name="接单时间" prop="pickTime" width="160"></sa-td>
+				<sa-td name="确认时间" prop="confirmTime" width="160"></sa-td>
+				<el-table-column label="操作" fixed="right" width="200px" v-if="currentCustomerId=='1'">
+					<template slot-scope="s">
+						<el-button v-if="s.row.pickTime&&!s.row.confirmTime" class="c-btn" type="success"
+								   icon="el-icon-edit" @click="confirmFn(s.row)">确认
+						</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<!-- ------------- 分页 ------------- -->
+			<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
+			</sa-item>
 		</div>
-		<script>
-			var app = new Vue({
-				components: {
-					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
-					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
+		<el-dialog title="提示" :visible.sync="confirm.visible" width="30%">
+			<span>是否进行接单确认?</span>
+			<span slot="footer" class="dialog-footer">
+					<el-button @click="confirm.visible = false">取 消</el-button>
+					<el-button type="primary" @click="sureConfirm">确 定</el-button>
+				</span>
+		</el-dialog>
+		<el-dialog title="提示" :visible.sync="emodel.visible" width="30%">
+			<span>日期范围:</span>
+			<el-form size="mini">
+				<div class="c-item">
+					<el-date-picker size="mini" v-model="dataTime" type="daterange" unlink-panels="false"
+									range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+									format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd">
+					</el-date-picker>
+				</div>
+			</el-form>
+			<span slot="footer" class="dialog-footer">
+					<el-button @click="emodel.visible = false">取 消</el-button>
+					<el-button type="primary" @click="sureExport">确 定</el-button>
+				</span>
+		</el-dialog>
+	</div>
+	<script>
+		var app = new Vue({
+			components: {
+				"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
+				"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
+			},
+			el: '.vue-box',
+			data: {
+				p: { // 查询参数
+					id: '', // 主键
+					itemName: '', // 项目名称
+					pageNo: 1, // 当前页
+					pageSize: 10, // 页大小
+					sortType: 10 // 排序方式
 				},
-				el: '.vue-box',
-				data: {
-					businessId: sa.p('businessId', 0),
-					p: { // 查询参数  
-						id: '', // 主键 
-						itemName: '', // 项目名称
-						pageNo: 1, // 当前页 
-						pageSize: 10, // 页大小 
-						sortType: 9 // 排序方式 
-					},
-					dataCount: 0,
-					dataList: [], // 数据集合 
+				dataCount: 0,
+				dataList: [], // 数据集合
+				currentCustomerId: '1',
+				confirm: {
+					visible: false,
+					form: {
+						id: ''
+					}
 				},
-				methods: {
-					pickFn (data){
-						sa.confirm('是否确认该业务项?', function() {
-							sa.ajax('/TbBusinessItem/confirm',{id: data.id}, function(res){
-								sa.ok('已确认');
-								this.f5();
-							}.bind(this));
-						}.bind(this));
-					},
-					// 刷新
-					f5: function() {
-						sa.ajax('/TbBusiness/getById?id=' + this.businessId, sa.removeNull(this.p), function(res) {
-							this.dataList = res.data.items; // 数据
-							this.dataCount = res.dataCount; // 数据总数 
-							sa.f5TableHeight(); // 刷新表格高度 
-						}.bind(this));
-					},
-					// 查看
-					get: function(data) {
-						sa.showIframe('数据详情', 'tb-business-item-info.html?id=' + data.id, '1050px', '90%');
-					},
-					// 查看 - 根据选中的
-					getBySelect: function(data) {
-						var selection = this.$refs['data-table'].selection;
-						if (selection.length == 0) {
-							return sa.msg('请选择一条数据')
-						}
-						this.get(selection[0]);
-					},
-					// 批量删除
-					deleteByIds: function() {
-						// 获取选中元素的id列表 
-						let selection = this.$refs['data-table'].selection;
-						let ids = sa.getArrayField(selection, 'id');
-						if (selection.length == 0) {
-							return sa.msg('请至少选择一条数据')
+				emodel: {
+					visible: false,
+					form: {
+						beginTime: '',
+						endTime: ''
+					}
+				},
+				dataTime: [],
+			},
+			methods: {
+				exportFn() {
+					Object.assign(this.emodel, {
+						visible: true,
+					})
+				},
+				sureExport() {
+					if (this.dataTime.length != 0) {
+						this.emodel.form.beginTime = this.dataTime[0];
+						this.emodel.form.endTime = this.dataTime[1];
+					} else{
+						sa.msg("请选择日期范围");
+						return;
+					}
+					sa.ajax('/TbBusinessItem/export/items', this.emodel.form,  function(resp) {
+						window.open(resp.data);
+						this.emodel.visible = false;
+					}.bind(this));
+				},
+				confirmFn(data) {
+					Object.assign(this.confirm, {
+						visible: true,
+						form: {
+							id: data.id
 						}
-						// 提交删除 
-						sa.confirm('是否批量删除选中数据?此操作不可撤销', function() {
-							sa.ajax('/TbBusinessItem/deleteByIds', {
-								ids: ids.join(',')
-							}, function(res) {
-								sa.arrayDelete(this.dataList, selection);
-								sa.ok('删除成功');
-								sa.f5TableHeight(); // 刷新表格高度 
-							}.bind(this))
-						}.bind(this));
-					},
+					})
+				},
+				sureConfirm() {
+					sa.ajax('/TbBusinessItem/confirm', {
+						id: this.confirm.form.id
+					}, function(resp) {
+						this.confirm.visible = false;
+						this.f5();
+					}.bind(this));
+				},
+				getCustomer() {
+					sa.ajax('/TbCostomer/getCurrentCustomerId', function(resp) {
+						this.currentCustomerId = resp.data;
+					}.bind(this));
+				},
+				// 刷新
+				f5: function() {
+					sa.ajax('/TbBusinessItem/getList', sa.removeNull(this.p), function(res) {
+						this.dataList = res.data; // 数据
+						this.dataCount = res.dataCount; // 数据总数
+						sa.f5TableHeight(); // 刷新表格高度
+					}.bind(this));
+				},
+				// 查看
+				get: function(data) {
+					sa.showIframe('数据详情', 'tb-business-item-info.html?id=' + data.id, '1050px', '90%');
+				},
+				// 查看 - 根据选中的
+				getBySelect: function(data) {
+					var selection = this.$refs['data-table'].selection;
+					if (selection.length == 0) {
+						return sa.msg('请选择一条数据')
+					}
+					this.get(selection[0]);
+				},
+				// 批量删除
+				deleteByIds: function() {
+					// 获取选中元素的id列表
+					let selection = this.$refs['data-table'].selection;
+					let ids = sa.getArrayField(selection, 'id');
+					if (selection.length == 0) {
+						return sa.msg('请至少选择一条数据')
+					}
+					// 提交删除
+					sa.confirm('是否批量删除选中数据?此操作不可撤销', function() {
+						sa.ajax('/TbBusinessItem/deleteByIds', {
+							ids: ids.join(',')
+						}, function(res) {
+							sa.arrayDelete(this.dataList, selection);
+							sa.ok('删除成功');
+							sa.f5TableHeight(); // 刷新表格高度
+						}.bind(this))
+					}.bind(this));
 				},
-				created: function() {
-					this.f5();
-					sa.onInputEnter();
-				}
-			})
-		</script>
+			},
+			created: function() {
+				this.getCustomer()
+				this.f5();
+				sa.onInputEnter();
+			}
+		})
+	</script>
 	</body>
 </html>

+ 39 - 2
sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html

@@ -36,7 +36,11 @@
 					<br />
 				</el-form>
 				<!-- ------------- 快捷按钮 ------------- -->
-				<sa-item type="fast-btn" show="reset"></sa-item>
+				<div class="fast-btn">
+					<el-button type="warning" icon="el-icon-download" @click="exportFn()">导出</el-button>
+					<el-button type="info"  icon="el-icon-refresh"  @click="sa.f5()">刷新</el-button>
+					<slot></slot>
+				</div>
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList" >
 					<sa-td type="selection"></sa-td>
@@ -60,6 +64,18 @@
 				<!-- ------------- 分页 ------------- -->
 				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()"></sa-item>
 			</div>
+			<el-dialog title="提示" :visible.sync="emodel.visible" width="30%">
+				<el-form size="mini">
+					<div class="c-item">
+						<label class="c-label">日期:</label>
+						<el-date-picker type="date" value-format="yyyy-MM-dd" v-model="emodel.form.payDay"></el-date-picker>
+					</div>
+				</el-form>
+				<span slot="footer" class="dialog-footer">
+					<el-button @click="emodel.visible = false">取 消</el-button>
+					<el-button type="primary" @click="sureExport">确 定</el-button>
+				</span>
+			</el-dialog>
 		</div>
 		<script>
 			var app = new Vue({
@@ -83,13 +99,34 @@
 						createTime: '',		// 创建时间 
 						pageNo: 1,		// 当前页 
 						pageSize: 10,	// 页大小 
-						sortType: 0		// 排序方式 
+						sortType: 9		// 排序方式
 					},
 					dataCount: 0,
 					dataList: [], // 数据集合
 					itemTypeList: [],
+					emodel: {
+						visible: false,
+						form: {
+							payDay: ''
+						}
+					},
 				},
 				methods: {
+					exportFn() {
+						Object.assign(this.emodel, {
+							visible: true,
+						})
+					},
+					sureExport() {
+						if (this.emodel.form.payDay == '') {
+							sa.msg("请选择日期");
+							return;
+						}
+						sa.ajax('/TbFeeDetails/export/details', this.emodel.form,  function(resp) {
+							window.open(resp.data);
+							this.emodel.visible = false;
+						}.bind(this));
+					},
 					// 刷新
 					f5: function() {
 						sa.ajax('/TbFeeDetails/getList', sa.removeNull(this.p), function(res) {

+ 4 - 0
sp-server/src/main/java/com/pj/project/tb_business_item/ExportItemsDTO.java

@@ -2,6 +2,8 @@ package com.pj.project.tb_business_item;
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -15,6 +17,8 @@ import java.util.Date;
 @Data
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
+@HeadRowHeight(30)
+@ContentRowHeight(30)
 public class ExportItemsDTO {
 
     @ColumnWidth(15)

+ 6 - 3
sp-server/src/main/java/com/pj/project/tb_business_item/TbBusinessItemController.java

@@ -81,9 +81,12 @@ public class TbBusinessItemController {
     @RequestMapping("export/items")
     public AjaxJson exportItems(HttpServletResponse response) throws Exception{
         SoMap so = SoMap.getRequestSoMap();
-        String beginTime = so.getString("beginTime");
-        String endTime = so.getString("endTime");
-        String result = tbBusinessItemService.exportItems(beginTime, endTime);
+        so.put("typeFlag",1);
+        String customerId = StpUserUtil.getCustomerId();
+        if (!StrUtil.equals(customerId, UserTypeEnum.PLATFORM_ADMIN.getCustomerId())) {
+            so.put("pickCustomerId", customerId);
+        }
+        String result = tbBusinessItemService.exportItems(so);
         return AjaxJson.getSuccessData(result);
     }
 

+ 21 - 28
sp-server/src/main/java/com/pj/project/tb_business_item/TbBusinessItemService.java

@@ -62,27 +62,22 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
     @Resource
     TaskService taskService;
 
-    /**
-     * 增
-     */
-    int add(TbBusinessItem t) {
-        return tbBusinessItemMapper.add(t);
-    }
+	/** 增 */
+	int add(TbBusinessItem t){
+		return tbBusinessItemMapper.add(t);
+	}
 
 
-    /**
-     * 改
-     */
-    int update(TbBusinessItem t) {
-        return tbBusinessItemMapper.update(t);
-    }
 
-    /**
-     * 查
-     */
-    TbBusinessItem getById(String id) {
-        return tbBusinessItemMapper.getById(id);
-    }
+	/** 改 */
+	int update(TbBusinessItem t){
+		return tbBusinessItemMapper.update(t);
+	}
+
+	/** 查 */
+	TbBusinessItem getById(String id){
+		return tbBusinessItemMapper.getById(id);
+	}
 
     /**
      * 查集合 - 根据条件(参数为空时代表忽略指定条件)
@@ -128,20 +123,18 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         });
     }
 
-    public String exportItems(String beginTime, String endTime) {
-        SoMap so = SoMap.getRequestSoMap();
-        so.put("typeFlag", 1);
-        so.put("beginTime", beginTime);
-        so.put("endTime", endTime);
+    public String exportItems(SoMap so) {
+        String beginTime = so.getString("beginTime");
+        String endTime = so.getString("endTime");
         List<TbBusinessItem> itemList = this.getList(so);
         List<ExportItemsDTO> itemDTOList = new ArrayList<>();
         for (TbBusinessItem item : itemList) {
             ExportItemsDTO itemsDTO = new ExportItemsDTO();
-            BeanUtil.copyProperties(item, itemsDTO, "createTime", "pickTime", "confirmTime");
+            BeanUtil.copyProperties(item, itemsDTO,"createTime", "pickTime", "confirmTime");
             itemsDTO.setUnit(item.getItemPrice() + item.getUnit())
-                    .setCreateTime(DateUtil.format(item.getCreateTime(), "yyyy/MM/dd HH:mm:ss"))
-                    .setPickTime(DateUtil.format(item.getPickTime(), "yyyy/MM/dd HH:mm:ss"))
-                    .setConfirmTime(DateUtil.format(item.getConfirmTime(), "yyyy/MM/dd HH:mm:ss"));
+                .setCreateTime(DateUtil.format(item.getCreateTime(), "yyyy/MM/dd HH:mm:ss"))
+                .setPickTime(DateUtil.format(item.getPickTime(), "yyyy/MM/dd HH:mm:ss"))
+                .setConfirmTime(DateUtil.format(item.getConfirmTime(), "yyyy/MM/dd HH:mm:ss"));
             itemDTOList.add(itemsDTO);
         }
         String separator = File.separator;
@@ -155,7 +148,7 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         if (!saveFIle.exists()) {
             saveFIle.mkdirs();
         }
-        EasyExcel.write(savePath + fileName, ExportItemsDTO.class).sheet("作业订单").doWrite(itemDTOList);
+        EasyExcel.write(savePath+fileName, ExportItemsDTO.class).sheet("作业订单").doWrite(itemDTOList);
         return prefix + "/businessItem/" + today + "/items_" + beginTime + "--" + endTime + ".xlsx";
     }
 }

+ 33 - 0
sp-server/src/main/java/com/pj/project/tb_fee_details/ExportFeeDetailDTO.java

@@ -0,0 +1,33 @@
+package com.pj.project.tb_fee_details;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Auther: lzm
+ * @Date: 2022/03/22/9:22
+ * @Description:
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class ExportFeeDetailDTO {
+
+    private Integer index;
+    private String businessNo;
+    private String carNo;
+    private String feeType;
+    private String itemTypeName;
+    private String itemName;
+    private BigDecimal itemPrice;
+    private String payType;
+
+}

+ 10 - 0
sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetails.java

@@ -113,6 +113,16 @@ public class TbFeeDetails implements Serializable {
         CHARGE_FEE(7, "充电打冷作业");
         private int code;
         private String desc;
+
+        public static String getDesc(int code){
+            fee[] fees = values();
+            for (fee fee : fees) {
+                if(fee.getCode() == code){
+                    return fee.getDesc();
+                }
+            }
+            return null;
+        }
     }
 
 

+ 7 - 1
sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsController.java

@@ -75,7 +75,13 @@ public class TbFeeDetailsController {
 		List<TbFeeDetails> list = tbFeeDetailsService.getList(so.startPage());
 		return AjaxJson.getPageData(so.getDataCount(), list);
 	}
-	
+
+    /** 导出日收费明细excel */
+    @RequestMapping("export/details")
+    public AjaxJson exportDetails() throws Exception {
+	    SoMap so = SoMap.getRequestSoMap();
+	    return AjaxJson.getSuccessData(tbFeeDetailsService.export(so));
+    }
 	
 	
 	

+ 51 - 2
sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsService.java

@@ -1,21 +1,28 @@
 package com.pj.project.tb_fee_details;
 
-import java.util.Date;
-import java.util.List;
+import java.io.File;
+import java.io.InputStream;
+import java.util.*;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.pj.api.wx.bo.PriceBO;
+import com.pj.current.config.MyConfig;
 import com.pj.project.tb_business.TbBusiness;
 import com.pj.project.tb_business.TbBusinessService;
 import com.pj.project.tb_business_car.TbBusinessCar;
 import com.pj.project.tb_business_car.TbBusinessCarService;
 import com.pj.project.tb_business_item.TbBusinessItem;
+import com.pj.project4sp.uploadfile.UploadUtil;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
@@ -39,6 +46,8 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
     TbBusinessCarService tbBusinessCarService;
     @Resource
     TbBusinessService tbBusinessService;
+    @Resource
+    private MyConfig myConfig;
 
 	/** 增 */
 	int add(TbFeeDetails t){
@@ -138,4 +147,44 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
         }
     }
 
+    public String export(SoMap so) throws Exception{
+        Map<String, String> head = new HashMap<>();
+        head.put("time", so.getString("payDay"));
+	    List<ExportFeeDetailDTO> exportList = new ArrayList<>();
+        List<TbFeeDetails> list = this.getList(so);
+        Integer index = 1;
+        for (TbFeeDetails feeDetails : list) {
+            String feeType = TbFeeDetails.fee.getDesc(feeDetails.getFeeType());
+            ExportFeeDetailDTO detailDTO = new ExportFeeDetailDTO();
+            detailDTO.setBusinessNo(feeDetails.getBusinessNo()).setCarNo(feeDetails.getCarNo())
+                    .setFeeType(feeType).setItemTypeName(feeDetails.getItemTypeName())
+                    .setItemName(feeDetails.getItemName()).setItemPrice(feeDetails.getItemPrice())
+                    .setPayType("微信支付").setIndex(index++);
+            exportList.add(detailDTO);
+        }
+
+        String separator = File.separator;
+        String today = DateUtil.today();
+        String rootPath = UploadUtil.uploadConfig.rootFolder + separator + UploadUtil.uploadConfig.httpPrefix;
+        String prefix = myConfig.getDomain() + UploadUtil.uploadConfig.httpPrefix;
+        String extPath = "feeDetails" + separator + today + separator;
+        String fileName = "收费登记表_" + today + ".xlsx";
+        String savePath = rootPath + separator + extPath;
+        File saveFIle = new File(savePath);
+        if (!saveFIle.exists()) {
+            saveFIle.mkdirs();
+        }
+
+        ClassPathResource classPathResource = new ClassPathResource("static/day-fee.xlsx");
+        InputStream tempInputStream =classPathResource.getInputStream();
+
+        ExcelWriter excelWriter = EasyExcel.write(savePath+fileName, ExportFeeDetailDTO.class)
+                .withTemplate(tempInputStream).build();
+        WriteSheet writeSheet = EasyExcel.writerSheet().build();
+        excelWriter.fill(exportList, writeSheet);
+        excelWriter.fill(head, writeSheet);
+        excelWriter.finish();
+        return prefix + "/feeDetails/" + today + "/收费登记表_" + today + ".xlsx";
+    }
+
 }

BIN
sp-server/src/main/resources/static/day-fee.xlsx