From 89cd54f5065f18b9e08983cec812a3c44060742d Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期三, 27 八月 2025 14:57:36 +0800
Subject: [PATCH] 新增前后端

---
 service/src/main/java/com/ruoyi/cwgl/service/impl/KeyCollectionInfoServiceImpl.java |  179 +++++
 service/src/main/resources/mapper/cwgl/RequestLogMapper.xml                         |  137 ++++
 service/src/main/java/com/ruoyi/cwgl/service/IKeyCollectionInfoService.java         |  102 +++
 service/src/main/java/com/ruoyi/cwgl/domain/KeyCollectionInfo.java                  |  165 ++++
 service/src/main/java/com/ruoyi/cwgl/controller/KeyCollectionInfoController.java    |  108 +++
 service/src/main/java/com/ruoyi/cwgl/domain/RequestLog.java                         |   77 ++
 service/src/main/resources/mapper/cwgl/KeyCollectionInfoMapper.xml                  |  216 ++++++
 ui/admin-ui3/src/api/cwgl/requestLog.ts                                             |   67 +
 service/src/main/java/com/ruoyi/cwgl/controller/RequestLogController.java           |  108 +++
 ui/admin-ui3/src/api/cwgl/keyCollectionInfo.ts                                      |   67 +
 service/src/main/java/com/ruoyi/cwgl/mapper/KeyCollectionInfoMapper.java            |   87 ++
 service/src/main/java/com/ruoyi/cwgl/mapper/RequestLogMapper.java                   |   87 ++
 ui/admin-ui3/src/views/cwgl/keyCollectionInfo/index.vue                             |  181 +++++
 service/src/main/java/com/ruoyi/cwgl/service/impl/RequestLogServiceImpl.java        |  181 +++++
 service/src/main/java/com/ruoyi/cwgl/service/IRequestLogService.java                |  102 +++
 ui/admin-ui3/src/views/cwgl/requestLog/index.vue                                    |  139 ++++
 16 files changed, 2,003 insertions(+), 0 deletions(-)

diff --git a/service/src/main/java/com/ruoyi/cwgl/controller/KeyCollectionInfoController.java b/service/src/main/java/com/ruoyi/cwgl/controller/KeyCollectionInfoController.java
new file mode 100644
index 0000000..613940b
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/controller/KeyCollectionInfoController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.cwgl.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.file.DownloadExportUtil;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.cwgl.domain.KeyCollectionInfo;
+import com.ruoyi.cwgl.service.IKeyCollectionInfoService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 閽ュ寵棰嗗彇淇℃伅Controller
+ *
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+@RestController
+@RequestMapping("/cwgl/keyCollectionInfo")
+public class KeyCollectionInfoController extends BaseController
+{
+    @Autowired
+    private IKeyCollectionInfoService keyCollectionInfoService;
+
+
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:keyCollectionInfo:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(KeyCollectionInfo keyCollectionInfo)
+    {
+        startPage();
+        List<KeyCollectionInfo> list = keyCollectionInfoService.selectKeyCollectionInfoList(keyCollectionInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭閽ュ寵棰嗗彇淇℃伅鍒楄〃
+     * @param keyCollectionInfo 鏌ヨ鏉′欢瀵硅薄
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:keyCollectionInfo:export')")
+    @Log(title = "閽ュ寵棰嗗彇淇℃伅", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(KeyCollectionInfo keyCollectionInfo,String exportKey)
+    {
+        keyCollectionInfoService.export(keyCollectionInfo,exportKey);
+        return AjaxResult.success("瀵煎嚭璇锋眰鎴愬姛锛岃绋嶅悗鐐瑰嚮涓嬭浇...!");
+    }
+
+
+
+    /**
+     * 鑾峰彇閽ュ寵棰嗗彇淇℃伅璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:keyCollectionInfo:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Integer id)
+    {
+        return AjaxResult.success(keyCollectionInfoService.selectKeyCollectionInfoById(id));
+    }
+
+    /**
+     * 鏂板閽ュ寵棰嗗彇淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:keyCollectionInfo:add')")
+    @Log(title = "閽ュ寵棰嗗彇淇℃伅", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody KeyCollectionInfo keyCollectionInfo)
+    {
+        return toAjax(keyCollectionInfoService.insertKeyCollectionInfo(keyCollectionInfo));
+    }
+
+    /**
+     * 淇敼閽ュ寵棰嗗彇淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:keyCollectionInfo:edit')")
+    @Log(title = "閽ュ寵棰嗗彇淇℃伅", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody KeyCollectionInfo keyCollectionInfo)
+    {
+        return toAjax(keyCollectionInfoService.updateKeyCollectionInfo(keyCollectionInfo));
+    }
+
+    /**
+     * 鍒犻櫎閽ュ寵棰嗗彇淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:keyCollectionInfo:remove')")
+    @Log(title = "閽ュ寵棰嗗彇淇℃伅", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Integer[] ids)
+    {
+        return toAjax(keyCollectionInfoService.deleteKeyCollectionInfoByIds(ids));
+    }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/controller/RequestLogController.java b/service/src/main/java/com/ruoyi/cwgl/controller/RequestLogController.java
new file mode 100644
index 0000000..3a213d7
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/controller/RequestLogController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.cwgl.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.file.DownloadExportUtil;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.cwgl.domain.RequestLog;
+import com.ruoyi.cwgl.service.IRequestLogService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 璇锋眰鏃ュ織Controller
+ *
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+@RestController
+@RequestMapping("/cwgl/requestLog")
+public class RequestLogController extends BaseController
+{
+    @Autowired
+    private IRequestLogService requestLogService;
+
+
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:requestLog:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(RequestLog requestLog)
+    {
+        startPage();
+        List<RequestLog> list = requestLogService.selectRequestLogList(requestLog);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭璇锋眰鏃ュ織鍒楄〃
+     * @param requestLog 鏌ヨ鏉′欢瀵硅薄
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:requestLog:export')")
+    @Log(title = "璇锋眰鏃ュ織", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(RequestLog requestLog,String exportKey)
+    {
+        requestLogService.export(requestLog,exportKey);
+        return AjaxResult.success("瀵煎嚭璇锋眰鎴愬姛锛岃绋嶅悗鐐瑰嚮涓嬭浇...!");
+    }
+
+
+
+    /**
+     * 鑾峰彇璇锋眰鏃ュ織璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:requestLog:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Integer id)
+    {
+        return AjaxResult.success(requestLogService.selectRequestLogById(id));
+    }
+
+    /**
+     * 鏂板璇锋眰鏃ュ織
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:requestLog:add')")
+    @Log(title = "璇锋眰鏃ュ織", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RequestLog requestLog)
+    {
+        return toAjax(requestLogService.insertRequestLog(requestLog));
+    }
+
+    /**
+     * 淇敼璇锋眰鏃ュ織
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:requestLog:edit')")
+    @Log(title = "璇锋眰鏃ュ織", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RequestLog requestLog)
+    {
+        return toAjax(requestLogService.updateRequestLog(requestLog));
+    }
+
+    /**
+     * 鍒犻櫎璇锋眰鏃ュ織
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:requestLog:remove')")
+    @Log(title = "璇锋眰鏃ュ織", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Integer[] ids)
+    {
+        return toAjax(requestLogService.deleteRequestLogByIds(ids));
+    }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/KeyCollectionInfo.java b/service/src/main/java/com/ruoyi/cwgl/domain/KeyCollectionInfo.java
new file mode 100644
index 0000000..79fb6d4
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/KeyCollectionInfo.java
@@ -0,0 +1,165 @@
+package com.ruoyi.cwgl.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.util.Date;
+import lombok.Data;
+/**
+ * 閽ュ寵棰嗗彇淇℃伅瀵硅薄 key_collection_info
+ *
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+@Data
+public class KeyCollectionInfo{
+
+
+    /** ID */
+        @TableField("id")
+    private Integer id;
+
+
+    /** 瀹㈡埛鍚嶇О */
+    @Excel(name = "瀹㈡埛鍚嶇О")
+
+        @TableField("customer_name")
+    private String customerName;
+
+
+    /** 鎵胯繍鍟� */
+    @Excel(name = "鎵胯繍鍟�")
+
+        @TableField("carrier")
+    private String carrier;
+
+
+    /** 璋冨害鍗曞彿 */
+    @Excel(name = "璋冨害鍗曞彿")
+
+        @TableField("dispatch_no")
+    private String dispatchNo;
+
+
+    /** 鍙告満鍚嶇О */
+    @Excel(name = "鍙告満鍚嶇О")
+
+        @TableField("driver_name")
+    private String driverName;
+
+
+    /** 鍙告満鎵嬫満鍙� */
+    @Excel(name = "鍙告満鎵嬫満鍙�")
+    @TableField("driver_mobile")
+    private String driverMobile;
+
+
+    /** 杞︾墝鍙� */
+    @Excel(name = "杞︾墝鍙�")
+    @TableField("license_plate_number")
+    private String licensePlateNumber;
+
+
+    /** 璁㈠崟涓嬪崟鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "璁㈠崟涓嬪崟鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField("order_time")
+    private Date orderTime;
+
+
+    /** 璁㈠崟鍒涘缓鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "璁㈠崟鍒涘缓鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField("order_created_time")
+    private Date orderCreatedTime;
+
+
+    /** 璋冨害鍗曞垱寤烘椂闂� */
+    @Excel(name = "璋冨害鍗曞垱寤烘椂闂�", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("dispatch_created_time")
+    private Date dispatchCreatedTime;
+
+
+    /** 閽ュ寵棰嗗彇鏃堕棿锛堣姹傛煡璇㈡椂闂达級 */
+    @Excel(name = "閽ュ寵棰嗗彇鏃堕棿", readConverterExp = "璇�=姹傛煡璇㈡椂闂�")
+
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @TableField("key_collection_time")
+    private Date keyCollectionTime;
+
+
+    /** 棰勮鍑哄彂鏃堕棿 */
+    @Excel(name = "棰勮鍑哄彂鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("estimated_departure_time")
+    private Date estimatedDepartureTime;
+
+
+    /** 瑕佹眰鍒拌揪鏃堕棿 */
+    @Excel(name = "瑕佹眰鍒拌揪鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("required_arrival_time")
+    private Date requiredArrivalTime;
+
+
+    /** 鍑哄彂鍦板湴鍧� */
+    @Excel(name = "鍑哄彂鍦板湴鍧�")
+
+        @TableField("consignor_address")
+    private String consignorAddress;
+
+
+    /** 鐩殑鍦板湴鍧� */
+    @Excel(name = "鐩殑鍦板湴鍧�")
+
+        @TableField("consignee_address")
+    private String consigneeAddress;
+
+
+    /** 涓婚┚椹跺憳 */
+    @Excel(name = "涓婚┚椹跺憳")
+
+        @TableField("main_driver")
+    private String mainDriver;
+
+
+    /** 鎻愰�佽揣鐐规暟 */
+    @Excel(name = "鎻愰�佽揣鐐规暟")
+
+        @TableField("point_num")
+    private Integer pointNum;
+
+
+    /** 杩愯緭鏂瑰紡 */
+    @Excel(name = "杩愯緭鏂瑰紡")
+    @TableField("transport_mode")
+    private String transportMode;
+
+
+    /** 鍓┚椹跺憳 */
+    @Excel(name = "鍓┚椹跺憳")
+    @TableField("assistant_driver")
+    private String assistantDriver;
+
+
+    /** 浠舵暟 */
+    @Excel(name = "浠舵暟")
+    @TableField("quantity")
+    private Integer quantity;
+
+
+    /** 瀹炲彂浠舵暟 */
+    @Excel(name = "瀹炲彂浠舵暟")
+    @TableField("dispatch_quantity")
+    private Integer dispatchQuantity;
+
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    @TableField("remark")
+    private String remark;
+
+
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/RequestLog.java b/service/src/main/java/com/ruoyi/cwgl/domain/RequestLog.java
new file mode 100644
index 0000000..b3fee56
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/RequestLog.java
@@ -0,0 +1,77 @@
+package com.ruoyi.cwgl.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.util.Date;
+import lombok.Data;
+/**
+ * 璇锋眰鏃ュ織瀵硅薄 request_log
+ *
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+@Data
+public class RequestLog{
+
+
+    /** 涓婚敭 */
+        @TableField("id")
+    private Integer id;
+
+
+    /** 鍙告満鍞竴缂栧彿 */
+    @Excel(name = "鍙告満鍞竴缂栧彿")
+
+        @TableField("driver_code")
+    private String driverCode;
+
+
+    /** 鍙告満濮撳悕 */
+    @Excel(name = "鍙告満濮撳悕")
+
+        @TableField("driver_name")
+    private String driverName;
+
+
+    /** 鏌滈棬缂栧彿 */
+    @Excel(name = "鏌滈棬缂栧彿")
+
+        @TableField("box_num")
+    private String boxNum;
+
+
+    /** 鍒涘缓鑰� */
+        @TableField("create_by")
+    private String createBy;
+
+
+    /** 鍒涘缓鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("create_time")
+    private Date createTime;
+
+
+    /** 璇锋眰鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "璇锋眰鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField("req_time")
+    private Date reqTime;
+
+
+    /** 0涓婃姤鍙栧嚭1褰掕繕涓婃姤 */
+    @Excel(name = "0涓婃姤鍙栧嚭1褰掕繕涓婃姤")
+
+        @TableField("type")
+    private Integer type;
+
+
+    /** 鎿嶄綔璇存槑 */
+    @Excel(name = "鎿嶄綔璇存槑")
+
+        @TableField("operation")
+    private String operation;
+
+
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/mapper/KeyCollectionInfoMapper.java b/service/src/main/java/com/ruoyi/cwgl/mapper/KeyCollectionInfoMapper.java
new file mode 100644
index 0000000..eb2196b
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/mapper/KeyCollectionInfoMapper.java
@@ -0,0 +1,87 @@
+package com.ruoyi.cwgl.mapper;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.KeyCollectionInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 閽ュ寵棰嗗彇淇℃伅Mapper鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+public interface KeyCollectionInfoMapper  extends BaseMapper<KeyCollectionInfo>
+{
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param id 閽ュ寵棰嗗彇淇℃伅ID
+     * @return 閽ュ寵棰嗗彇淇℃伅
+     */
+    public KeyCollectionInfo selectKeyCollectionInfoById(Integer id);
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅 璁板綍鏁�
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 閽ュ寵棰嗗彇淇℃伅闆嗗悎
+     */
+    public int selectKeyCollectionInfoCount(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅鍒楄〃
+     * 
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 閽ュ寵棰嗗彇淇℃伅闆嗗悎
+     */
+    public List<KeyCollectionInfo> selectKeyCollectionInfoList(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 鏂板閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 鏂板閽ュ寵棰嗗彇淇℃伅[鎵归噺]
+     *
+     * @param keyCollectionInfos 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertKeyCollectionInfoBatch(List<KeyCollectionInfo> keyCollectionInfos);
+
+    /**
+     * 淇敼閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 淇敼閽ュ寵棰嗗彇淇℃伅[鎵归噺]
+     *
+     * @param keyCollectionInfos 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateKeyCollectionInfoBatch(List<KeyCollectionInfo> keyCollectionInfos);
+
+    /**
+     * 鍒犻櫎閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param id 閽ュ寵棰嗗彇淇℃伅ID
+     * @return 缁撴灉
+     */
+    public int deleteKeyCollectionInfoById(Integer id);
+
+    /**
+     * 鎵归噺鍒犻櫎閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteKeyCollectionInfoByIds(Integer[] ids);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/mapper/RequestLogMapper.java b/service/src/main/java/com/ruoyi/cwgl/mapper/RequestLogMapper.java
new file mode 100644
index 0000000..dd76967
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/mapper/RequestLogMapper.java
@@ -0,0 +1,87 @@
+package com.ruoyi.cwgl.mapper;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.RequestLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 璇锋眰鏃ュ織Mapper鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+public interface RequestLogMapper  extends BaseMapper<RequestLog>
+{
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織
+     * 
+     * @param id 璇锋眰鏃ュ織ID
+     * @return 璇锋眰鏃ュ織
+     */
+    public RequestLog selectRequestLogById(Integer id);
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織 璁板綍鏁�
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 璇锋眰鏃ュ織闆嗗悎
+     */
+    public int selectRequestLogCount(RequestLog requestLog);
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織鍒楄〃
+     * 
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 璇锋眰鏃ュ織闆嗗悎
+     */
+    public List<RequestLog> selectRequestLogList(RequestLog requestLog);
+
+    /**
+     * 鏂板璇锋眰鏃ュ織
+     * 
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int insertRequestLog(RequestLog requestLog);
+
+    /**
+     * 鏂板璇锋眰鏃ュ織[鎵归噺]
+     *
+     * @param requestLogs 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int insertRequestLogBatch(List<RequestLog> requestLogs);
+
+    /**
+     * 淇敼璇锋眰鏃ュ織
+     * 
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int updateRequestLog(RequestLog requestLog);
+
+    /**
+     * 淇敼璇锋眰鏃ュ織[鎵归噺]
+     *
+     * @param requestLogs 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int updateRequestLogBatch(List<RequestLog> requestLogs);
+
+    /**
+     * 鍒犻櫎璇锋眰鏃ュ織
+     * 
+     * @param id 璇锋眰鏃ュ織ID
+     * @return 缁撴灉
+     */
+    public int deleteRequestLogById(Integer id);
+
+    /**
+     * 鎵归噺鍒犻櫎璇锋眰鏃ュ織
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteRequestLogByIds(Integer[] ids);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/IKeyCollectionInfoService.java b/service/src/main/java/com/ruoyi/cwgl/service/IKeyCollectionInfoService.java
new file mode 100644
index 0000000..6659561
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/IKeyCollectionInfoService.java
@@ -0,0 +1,102 @@
+package com.ruoyi.cwgl.service;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.KeyCollectionInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+/**
+ * 閽ュ寵棰嗗彇淇℃伅Service鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+public interface IKeyCollectionInfoService extends IService<KeyCollectionInfo>
+{
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param id 閽ュ寵棰嗗彇淇℃伅ID
+     * @return 閽ュ寵棰嗗彇淇℃伅
+     */
+    public KeyCollectionInfo selectKeyCollectionInfoById(Integer id);
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅 璁板綍鏁�
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 閽ュ寵棰嗗彇淇℃伅闆嗗悎
+     */
+    public int selectKeyCollectionInfoCount(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅鍒楄〃
+     * 
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 閽ュ寵棰嗗彇淇℃伅闆嗗悎
+     */
+    public List<KeyCollectionInfo> selectKeyCollectionInfoList(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 閽ュ寵棰嗗彇淇℃伅闆嗗悎
+     */
+    public void export(KeyCollectionInfo keyCollectionInfo, String exportKey) ;
+
+
+    /**
+     * 鏂板閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 鏂板閽ュ寵棰嗗彇淇℃伅[鎵归噺]
+     *
+     * @param keyCollectionInfos 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int insertKeyCollectionInfoBatch(List<KeyCollectionInfo> keyCollectionInfos);
+
+    /**
+     * 淇敼閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo);
+
+    /**
+     * 淇敼閽ュ寵棰嗗彇淇℃伅[鎵归噺]
+     *
+     * @param keyCollectionInfos 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    public int updateKeyCollectionInfoBatch(List<KeyCollectionInfo> keyCollectionInfos);
+    /**
+     * 鎵归噺鍒犻櫎閽ュ寵棰嗗彇淇℃伅
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteKeyCollectionInfoByIds(String ids);
+
+    /**
+     * 鎵归噺鍒犻櫎閽ュ寵棰嗗彇淇℃伅
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteKeyCollectionInfoByIds(Integer[] ids);
+
+    /**
+     * 鍒犻櫎閽ュ寵棰嗗彇淇℃伅淇℃伅
+     * 
+     * @param id 閽ュ寵棰嗗彇淇℃伅ID
+     * @return 缁撴灉
+     */
+    public int deleteKeyCollectionInfoById(Integer id);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/IRequestLogService.java b/service/src/main/java/com/ruoyi/cwgl/service/IRequestLogService.java
new file mode 100644
index 0000000..3e60661
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/IRequestLogService.java
@@ -0,0 +1,102 @@
+package com.ruoyi.cwgl.service;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.RequestLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+/**
+ * 璇锋眰鏃ュ織Service鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+public interface IRequestLogService extends IService<RequestLog>
+{
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織
+     * 
+     * @param id 璇锋眰鏃ュ織ID
+     * @return 璇锋眰鏃ュ織
+     */
+    public RequestLog selectRequestLogById(Integer id);
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織 璁板綍鏁�
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 璇锋眰鏃ュ織闆嗗悎
+     */
+    public int selectRequestLogCount(RequestLog requestLog);
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織鍒楄〃
+     * 
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 璇锋眰鏃ュ織闆嗗悎
+     */
+    public List<RequestLog> selectRequestLogList(RequestLog requestLog);
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 璇锋眰鏃ュ織闆嗗悎
+     */
+    public void export(RequestLog requestLog, String exportKey) ;
+
+
+    /**
+     * 鏂板璇锋眰鏃ュ織
+     * 
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int insertRequestLog(RequestLog requestLog);
+
+    /**
+     * 鏂板璇锋眰鏃ュ織[鎵归噺]
+     *
+     * @param requestLogs 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int insertRequestLogBatch(List<RequestLog> requestLogs);
+
+    /**
+     * 淇敼璇锋眰鏃ュ織
+     * 
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int updateRequestLog(RequestLog requestLog);
+
+    /**
+     * 淇敼璇锋眰鏃ュ織[鎵归噺]
+     *
+     * @param requestLogs 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    public int updateRequestLogBatch(List<RequestLog> requestLogs);
+    /**
+     * 鎵归噺鍒犻櫎璇锋眰鏃ュ織
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteRequestLogByIds(String ids);
+
+    /**
+     * 鎵归噺鍒犻櫎璇锋眰鏃ュ織
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteRequestLogByIds(Integer[] ids);
+
+    /**
+     * 鍒犻櫎璇锋眰鏃ュ織淇℃伅
+     * 
+     * @param id 璇锋眰鏃ュ織ID
+     * @return 缁撴灉
+     */
+    public int deleteRequestLogById(Integer id);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/KeyCollectionInfoServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/KeyCollectionInfoServiceImpl.java
new file mode 100644
index 0000000..8d2ea1a
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/KeyCollectionInfoServiceImpl.java
@@ -0,0 +1,179 @@
+package com.ruoyi.cwgl.service.impl;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.stereotype.Service;
+import org.springframework.scheduling.annotation.Async;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.common.core.service.BaseService;
+
+import com.ruoyi.cwgl.mapper.KeyCollectionInfoMapper;
+import com.ruoyi.cwgl.domain.KeyCollectionInfo;
+import com.ruoyi.cwgl.service.IKeyCollectionInfoService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 閽ュ寵棰嗗彇淇℃伅Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class KeyCollectionInfoServiceImpl  extends BaseService<KeyCollectionInfoMapper, KeyCollectionInfo> implements IKeyCollectionInfoService
+{
+    protected final Logger logger = LoggerFactory.getLogger(getClass());
+    @Resource
+    private KeyCollectionInfoMapper keyCollectionInfoMapper;
+
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅
+     *
+     * @param id 閽ュ寵棰嗗彇淇℃伅ID
+     * @return 閽ュ寵棰嗗彇淇℃伅
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public KeyCollectionInfo selectKeyCollectionInfoById(Integer id)
+    {
+        return keyCollectionInfoMapper.selectKeyCollectionInfoById(id);
+    }
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅 璁板綍鏁�
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 閽ュ寵棰嗗彇淇℃伅闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public int selectKeyCollectionInfoCount(KeyCollectionInfo keyCollectionInfo)
+    {
+        return keyCollectionInfoMapper.selectKeyCollectionInfoCount(keyCollectionInfo);
+    }
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅鍒楄〃
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 閽ュ寵棰嗗彇淇℃伅
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public List<KeyCollectionInfo> selectKeyCollectionInfoList(KeyCollectionInfo keyCollectionInfo)
+    {
+        return keyCollectionInfoMapper.selectKeyCollectionInfoList(keyCollectionInfo);
+    }
+
+    /**
+     * 鏌ヨ閽ュ寵棰嗗彇淇℃伅鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 閽ュ寵棰嗗彇淇℃伅闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Async
+    @Override
+    public void export(KeyCollectionInfo keyCollectionInfo,String exportKey) {
+
+        super.export(KeyCollectionInfo.class,exportKey,"keyCollectionInfoData",(pageNum)->{
+            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
+            return selectKeyCollectionInfoList(keyCollectionInfo);
+        });
+    }
+
+
+    /**
+     * 鏂板閽ュ寵棰嗗彇淇℃伅
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo)
+    {
+        return keyCollectionInfoMapper.insertKeyCollectionInfo(keyCollectionInfo);
+    }
+
+    /**
+     * 鏂板閽ュ寵棰嗗彇淇℃伅[鎵归噺]
+     *
+     * @param keyCollectionInfos 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertKeyCollectionInfoBatch(List<KeyCollectionInfo> keyCollectionInfos)
+    {
+        int rows = keyCollectionInfoMapper.insertKeyCollectionInfoBatch(keyCollectionInfos);
+        return rows;
+    }
+
+    /**
+     * 淇敼閽ュ寵棰嗗彇淇℃伅
+     *
+     * @param keyCollectionInfo 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateKeyCollectionInfo(KeyCollectionInfo keyCollectionInfo)
+    {
+        return keyCollectionInfoMapper.updateKeyCollectionInfo(keyCollectionInfo);
+    }
+
+    /**
+     * 淇敼閽ュ寵棰嗗彇淇℃伅[鎵归噺]
+     *
+     * @param keyCollectionInfos 閽ュ寵棰嗗彇淇℃伅
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateKeyCollectionInfoBatch(List<KeyCollectionInfo> keyCollectionInfos){
+        return keyCollectionInfoMapper.updateKeyCollectionInfoBatch(keyCollectionInfos);
+    }
+
+    /**
+     * 鍒犻櫎閽ュ寵棰嗗彇淇℃伅瀵硅薄
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteKeyCollectionInfoByIds(String ids)
+    {
+        return deleteKeyCollectionInfoByIds(Convert.toIntArray(ids));
+    }
+
+    /**
+     * 鍒犻櫎閽ュ寵棰嗗彇淇℃伅瀵硅薄
+     *
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteKeyCollectionInfoByIds(Integer[] ids)
+    {
+        return keyCollectionInfoMapper.deleteKeyCollectionInfoByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎閽ュ寵棰嗗彇淇℃伅淇℃伅
+     *
+     * @param id 閽ュ寵棰嗗彇淇℃伅ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteKeyCollectionInfoById(Integer id)
+    {
+        return keyCollectionInfoMapper.deleteKeyCollectionInfoById(id);
+    }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/RequestLogServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/RequestLogServiceImpl.java
new file mode 100644
index 0000000..0f53480
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/RequestLogServiceImpl.java
@@ -0,0 +1,181 @@
+package com.ruoyi.cwgl.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.common.utils.DateUtils;
+import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.stereotype.Service;
+import org.springframework.scheduling.annotation.Async;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.common.core.service.BaseService;
+
+import com.ruoyi.cwgl.mapper.RequestLogMapper;
+import com.ruoyi.cwgl.domain.RequestLog;
+import com.ruoyi.cwgl.service.IRequestLogService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 璇锋眰鏃ュ織Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-08-27
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class RequestLogServiceImpl  extends BaseService<RequestLogMapper, RequestLog> implements IRequestLogService
+{
+    protected final Logger logger = LoggerFactory.getLogger(getClass());
+    @Resource
+    private RequestLogMapper requestLogMapper;
+
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織
+     *
+     * @param id 璇锋眰鏃ュ織ID
+     * @return 璇锋眰鏃ュ織
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public RequestLog selectRequestLogById(Integer id)
+    {
+        return requestLogMapper.selectRequestLogById(id);
+    }
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織 璁板綍鏁�
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 璇锋眰鏃ュ織闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public int selectRequestLogCount(RequestLog requestLog)
+    {
+        return requestLogMapper.selectRequestLogCount(requestLog);
+    }
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織鍒楄〃
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 璇锋眰鏃ュ織
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public List<RequestLog> selectRequestLogList(RequestLog requestLog)
+    {
+        return requestLogMapper.selectRequestLogList(requestLog);
+    }
+
+    /**
+     * 鏌ヨ璇锋眰鏃ュ織鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 璇锋眰鏃ュ織闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Async
+    @Override
+    public void export(RequestLog requestLog,String exportKey) {
+
+        super.export(RequestLog.class,exportKey,"requestLogData",(pageNum)->{
+            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
+            return selectRequestLogList(requestLog);
+        });
+    }
+
+
+    /**
+     * 鏂板璇锋眰鏃ュ織
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertRequestLog(RequestLog requestLog)
+    {
+        requestLog.setCreateTime(DateUtils.getNowDate());
+        return requestLogMapper.insertRequestLog(requestLog);
+    }
+
+    /**
+     * 鏂板璇锋眰鏃ュ織[鎵归噺]
+     *
+     * @param requestLogs 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertRequestLogBatch(List<RequestLog> requestLogs)
+    {
+        int rows = requestLogMapper.insertRequestLogBatch(requestLogs);
+        return rows;
+    }
+
+    /**
+     * 淇敼璇锋眰鏃ュ織
+     *
+     * @param requestLog 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateRequestLog(RequestLog requestLog)
+    {
+        return requestLogMapper.updateRequestLog(requestLog);
+    }
+
+    /**
+     * 淇敼璇锋眰鏃ュ織[鎵归噺]
+     *
+     * @param requestLogs 璇锋眰鏃ュ織
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateRequestLogBatch(List<RequestLog> requestLogs){
+        return requestLogMapper.updateRequestLogBatch(requestLogs);
+    }
+
+    /**
+     * 鍒犻櫎璇锋眰鏃ュ織瀵硅薄
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteRequestLogByIds(String ids)
+    {
+        return deleteRequestLogByIds(Convert.toIntArray(ids));
+    }
+
+    /**
+     * 鍒犻櫎璇锋眰鏃ュ織瀵硅薄
+     *
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteRequestLogByIds(Integer[] ids)
+    {
+        return requestLogMapper.deleteRequestLogByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎璇锋眰鏃ュ織淇℃伅
+     *
+     * @param id 璇锋眰鏃ュ織ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteRequestLogById(Integer id)
+    {
+        return requestLogMapper.deleteRequestLogById(id);
+    }
+}
diff --git a/service/src/main/resources/mapper/cwgl/KeyCollectionInfoMapper.xml b/service/src/main/resources/mapper/cwgl/KeyCollectionInfoMapper.xml
new file mode 100644
index 0000000..4255608
--- /dev/null
+++ b/service/src/main/resources/mapper/cwgl/KeyCollectionInfoMapper.xml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.cwgl.mapper.KeyCollectionInfoMapper">
+
+    <resultMap type="com.ruoyi.cwgl.domain.KeyCollectionInfo" id="KeyCollectionInfoResult">
+        <result property="id"    column="id"    />
+        <result property="customerName"    column="customer_name"    />
+        <result property="carrier"    column="carrier"    />
+        <result property="dispatchNo"    column="dispatch_no"    />
+        <result property="driverName"    column="driver_name"    />
+        <result property="driverMobile"    column="driver_mobile"    />
+        <result property="licensePlateNumber"    column="license_plate_number"    />
+        <result property="orderTime"    column="order_time"    />
+        <result property="orderCreatedTime"    column="order_created_time"    />
+        <result property="dispatchCreatedTime"    column="dispatch_created_time"    />
+        <result property="keyCollectionTime"    column="key_collection_time"    />
+        <result property="estimatedDepartureTime"    column="estimated_departure_time"    />
+        <result property="requiredArrivalTime"    column="required_arrival_time"    />
+        <result property="consignorAddress"    column="consignor_address"    />
+        <result property="consigneeAddress"    column="consignee_address"    />
+        <result property="mainDriver"    column="main_driver"    />
+        <result property="pointNum"    column="point_num"    />
+        <result property="transportMode"    column="transport_mode"    />
+        <result property="assistantDriver"    column="assistant_driver"    />
+        <result property="quantity"    column="quantity"    />
+        <result property="dispatchQuantity"    column="dispatch_quantity"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectKeyCollectionInfoVo">
+        select thisTab.id, thisTab.customer_name, thisTab.carrier, thisTab.dispatch_no, thisTab.driver_name, thisTab.driver_mobile, thisTab.license_plate_number, thisTab.order_time, thisTab.order_created_time, thisTab.dispatch_created_time, thisTab.key_collection_time, thisTab.estimated_departure_time, thisTab.required_arrival_time, thisTab.consignor_address, thisTab.consignee_address, thisTab.main_driver, thisTab.point_num, thisTab.transport_mode, thisTab.assistant_driver, thisTab.quantity, thisTab.dispatch_quantity, thisTab.remark from key_collection_info AS thisTab
+    </sql>
+    <sql id="selectKeyCollectionInfoVoCount">
+        select count(0) from key_collection_info as thisTab
+    </sql>
+
+    <sql id="whereCondition">
+        <if test="customerName != null  and customerName != ''"> and  thisTab.customer_name like concat('%', #{customerName}, '%')</if>
+        <if test="carrier != null  and carrier != ''"> and thisTab.carrier = #{carrier}</if>
+        <if test="dispatchNo != null  and dispatchNo != ''"> and thisTab.dispatch_no = #{dispatchNo}</if>
+        <if test="driverName != null  and driverName != ''"> and  thisTab.driver_name like concat('%', #{driverName}, '%')</if>
+        <if test="driverMobile != null  and driverMobile != ''"> and thisTab.driver_mobile = #{driverMobile}</if>
+        <if test="licensePlateNumber != null  and licensePlateNumber != ''"> and thisTab.license_plate_number = #{licensePlateNumber}</if>
+        <if test="orderTime != null "> and thisTab.order_time = #{orderTime}</if>
+        <if test="orderCreatedTime != null "> and thisTab.order_created_time = #{orderCreatedTime}</if>
+        <if test="dispatchCreatedTime != null "> and thisTab.dispatch_created_time = #{dispatchCreatedTime}</if>
+        <if test="keyCollectionTime != null "> and thisTab.key_collection_time = #{keyCollectionTime}</if>
+        <if test="estimatedDepartureTime != null "> and thisTab.estimated_departure_time = #{estimatedDepartureTime}</if>
+        <if test="requiredArrivalTime != null "> and thisTab.required_arrival_time = #{requiredArrivalTime}</if>
+        <if test="consignorAddress != null  and consignorAddress != ''"> and thisTab.consignor_address = #{consignorAddress}</if>
+        <if test="consigneeAddress != null  and consigneeAddress != ''"> and thisTab.consignee_address = #{consigneeAddress}</if>
+        <if test="mainDriver != null  and mainDriver != ''"> and thisTab.main_driver = #{mainDriver}</if>
+        <if test="pointNum != null "> and thisTab.point_num = #{pointNum}</if>
+        <if test="transportMode != null  and transportMode != ''"> and thisTab.transport_mode = #{transportMode}</if>
+        <if test="assistantDriver != null  and assistantDriver != ''"> and thisTab.assistant_driver = #{assistantDriver}</if>
+        <if test="quantity != null "> and thisTab.quantity = #{quantity}</if>
+        <if test="dispatchQuantity != null "> and thisTab.dispatch_quantity = #{dispatchQuantity}</if>
+    </sql>
+
+    <!--鏌ヨ-->
+    <select id="selectKeyCollectionInfoById" parameterType="Integer" resultMap="KeyCollectionInfoResult">
+        <include refid="selectKeyCollectionInfoVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectKeyCollectionInfoCount" parameterType="com.ruoyi.cwgl.domain.KeyCollectionInfo" resultType="int">
+        <include refid="selectKeyCollectionInfoVoCount"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+    </select>
+
+    <select id="selectKeyCollectionInfoList" parameterType="com.ruoyi.cwgl.domain.KeyCollectionInfo" resultMap="KeyCollectionInfoResult">
+        <include refid="selectKeyCollectionInfoVo"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+        order by thisTab.id desc
+    </select>
+
+    <!-- 鏂板 -->
+    <insert id="insertKeyCollectionInfo" parameterType="com.ruoyi.cwgl.domain.KeyCollectionInfo"  useGeneratedKeys="true" keyProperty="id">
+        insert into key_collection_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="customerName != null">customer_name,</if>
+            <if test="carrier != null">carrier,</if>
+            <if test="dispatchNo != null">dispatch_no,</if>
+            <if test="driverName != null">driver_name,</if>
+            <if test="driverMobile != null">driver_mobile,</if>
+            <if test="licensePlateNumber != null">license_plate_number,</if>
+            <if test="orderTime != null">order_time,</if>
+            <if test="orderCreatedTime != null">order_created_time,</if>
+            <if test="dispatchCreatedTime != null">dispatch_created_time,</if>
+            <if test="keyCollectionTime != null">key_collection_time,</if>
+            <if test="estimatedDepartureTime != null">estimated_departure_time,</if>
+            <if test="requiredArrivalTime != null">required_arrival_time,</if>
+            <if test="consignorAddress != null">consignor_address,</if>
+            <if test="consigneeAddress != null">consignee_address,</if>
+            <if test="mainDriver != null">main_driver,</if>
+            <if test="pointNum != null">point_num,</if>
+            <if test="transportMode != null">transport_mode,</if>
+            <if test="assistantDriver != null">assistant_driver,</if>
+            <if test="quantity != null">quantity,</if>
+            <if test="dispatchQuantity != null">dispatch_quantity,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="customerName != null">#{customerName},</if>
+            <if test="carrier != null">#{carrier},</if>
+            <if test="dispatchNo != null">#{dispatchNo},</if>
+            <if test="driverName != null">#{driverName},</if>
+            <if test="driverMobile != null">#{driverMobile},</if>
+            <if test="licensePlateNumber != null">#{licensePlateNumber},</if>
+            <if test="orderTime != null">#{orderTime},</if>
+            <if test="orderCreatedTime != null">#{orderCreatedTime},</if>
+            <if test="dispatchCreatedTime != null">#{dispatchCreatedTime},</if>
+            <if test="keyCollectionTime != null">#{keyCollectionTime},</if>
+            <if test="estimatedDepartureTime != null">#{estimatedDepartureTime},</if>
+            <if test="requiredArrivalTime != null">#{requiredArrivalTime},</if>
+            <if test="consignorAddress != null">#{consignorAddress},</if>
+            <if test="consigneeAddress != null">#{consigneeAddress},</if>
+            <if test="mainDriver != null">#{mainDriver},</if>
+            <if test="pointNum != null">#{pointNum},</if>
+            <if test="transportMode != null">#{transportMode},</if>
+            <if test="assistantDriver != null">#{assistantDriver},</if>
+            <if test="quantity != null">#{quantity},</if>
+            <if test="dispatchQuantity != null">#{dispatchQuantity},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <insert id="insertKeyCollectionInfoBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id">
+        insert into key_collection_info
+        <trim prefix="(" suffix=") values" suffixOverrides=",">
+            id,customer_name,carrier,dispatch_no,driver_name,driver_mobile,license_plate_number,order_time,order_created_time,dispatch_created_time,key_collection_time,estimated_departure_time,required_arrival_time,consignor_address,consignee_address,main_driver,point_num,transport_mode,assistant_driver,quantity,dispatch_quantity,remark,
+        </trim>
+        <foreach item="item" index="index" collection="list" separator=",">
+            <trim prefix="(" suffix=") " suffixOverrides=",">
+                #{item.id},#{item.customerName},#{item.carrier},#{item.dispatchNo},#{item.driverName},#{item.driverMobile},#{item.licensePlateNumber},#{item.orderTime},#{item.orderCreatedTime},#{item.dispatchCreatedTime},#{item.keyCollectionTime},#{item.estimatedDepartureTime},#{item.requiredArrivalTime},#{item.consignorAddress},#{item.consigneeAddress},#{item.mainDriver},#{item.pointNum},#{item.transportMode},#{item.assistantDriver},#{item.quantity},#{item.dispatchQuantity},#{item.remark},
+            </trim>
+        </foreach>
+    </insert>
+
+    <!-- 淇敼 -->
+    <update id="updateKeyCollectionInfo" parameterType="com.ruoyi.cwgl.domain.KeyCollectionInfo">
+        update key_collection_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="customerName != null">customer_name = #{customerName},</if>
+            <if test="carrier != null">carrier = #{carrier},</if>
+            <if test="dispatchNo != null">dispatch_no = #{dispatchNo},</if>
+            <if test="driverName != null">driver_name = #{driverName},</if>
+            <if test="driverMobile != null">driver_mobile = #{driverMobile},</if>
+            <if test="licensePlateNumber != null">license_plate_number = #{licensePlateNumber},</if>
+            <if test="orderTime != null">order_time = #{orderTime},</if>
+            <if test="orderCreatedTime != null">order_created_time = #{orderCreatedTime},</if>
+            <if test="dispatchCreatedTime != null">dispatch_created_time = #{dispatchCreatedTime},</if>
+            <if test="keyCollectionTime != null">key_collection_time = #{keyCollectionTime},</if>
+            <if test="estimatedDepartureTime != null">estimated_departure_time = #{estimatedDepartureTime},</if>
+            <if test="requiredArrivalTime != null">required_arrival_time = #{requiredArrivalTime},</if>
+            <if test="consignorAddress != null">consignor_address = #{consignorAddress},</if>
+            <if test="consigneeAddress != null">consignee_address = #{consigneeAddress},</if>
+            <if test="mainDriver != null">main_driver = #{mainDriver},</if>
+            <if test="pointNum != null">point_num = #{pointNum},</if>
+            <if test="transportMode != null">transport_mode = #{transportMode},</if>
+            <if test="assistantDriver != null">assistant_driver = #{assistantDriver},</if>
+            <if test="quantity != null">quantity = #{quantity},</if>
+            <if test="dispatchQuantity != null">dispatch_quantity = #{dispatchQuantity},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 淇敼 -->
+    <update id="updateKeyCollectionInfoBatch" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update key_collection_info
+            <trim prefix="SET" suffixOverrides=",">
+                <if test="item.customerName != null">customer_name = #{item.customerName},</if>
+                <if test="item.carrier != null">carrier = #{item.carrier},</if>
+                <if test="item.dispatchNo != null">dispatch_no = #{item.dispatchNo},</if>
+                <if test="item.driverName != null">driver_name = #{item.driverName},</if>
+                <if test="item.driverMobile != null">driver_mobile = #{item.driverMobile},</if>
+                <if test="item.licensePlateNumber != null">license_plate_number = #{item.licensePlateNumber},</if>
+                <if test="item.orderTime != null">order_time = #{item.orderTime},</if>
+                <if test="item.orderCreatedTime != null">order_created_time = #{item.orderCreatedTime},</if>
+                <if test="item.dispatchCreatedTime != null">dispatch_created_time = #{item.dispatchCreatedTime},</if>
+                <if test="item.keyCollectionTime != null">key_collection_time = #{item.keyCollectionTime},</if>
+                <if test="item.estimatedDepartureTime != null">estimated_departure_time = #{item.estimatedDepartureTime},</if>
+                <if test="item.requiredArrivalTime != null">required_arrival_time = #{item.requiredArrivalTime},</if>
+                <if test="item.consignorAddress != null">consignor_address = #{item.consignorAddress},</if>
+                <if test="item.consigneeAddress != null">consignee_address = #{item.consigneeAddress},</if>
+                <if test="item.mainDriver != null">main_driver = #{item.mainDriver},</if>
+                <if test="item.pointNum != null">point_num = #{item.pointNum},</if>
+                <if test="item.transportMode != null">transport_mode = #{item.transportMode},</if>
+                <if test="item.assistantDriver != null">assistant_driver = #{item.assistantDriver},</if>
+                <if test="item.quantity != null">quantity = #{item.quantity},</if>
+                <if test="item.dispatchQuantity != null">dispatch_quantity = #{item.dispatchQuantity},</if>
+                <if test="item.remark != null">remark = #{item.remark},</if>
+            </trim>
+        where id = #{item.id}
+        </foreach>
+    </update>
+
+    <!--鍒犻櫎-->
+    <delete id="deleteKeyCollectionInfoById" parameterType="Integer">
+        delete from key_collection_info where id = #{id}
+    </delete>
+    <delete id="deleteKeyCollectionInfoByIds" parameterType="Integer">
+        delete from key_collection_info where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/service/src/main/resources/mapper/cwgl/RequestLogMapper.xml b/service/src/main/resources/mapper/cwgl/RequestLogMapper.xml
new file mode 100644
index 0000000..83062d9
--- /dev/null
+++ b/service/src/main/resources/mapper/cwgl/RequestLogMapper.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.cwgl.mapper.RequestLogMapper">
+
+    <resultMap type="com.ruoyi.cwgl.domain.RequestLog" id="RequestLogResult">
+        <result property="id"    column="id"    />
+        <result property="driverCode"    column="driver_code"    />
+        <result property="driverName"    column="driver_name"    />
+        <result property="boxNum"    column="box_num"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="reqTime"    column="req_time"    />
+        <result property="type"    column="type"    />
+        <result property="operation"    column="operation"    />
+    </resultMap>
+
+    <sql id="selectRequestLogVo">
+        select thisTab.id, thisTab.driver_code, thisTab.driver_name, thisTab.box_num, thisTab.create_by, thisTab.create_time, thisTab.req_time, thisTab.type, thisTab.operation from request_log AS thisTab
+    </sql>
+    <sql id="selectRequestLogVoCount">
+        select count(0) from request_log as thisTab
+    </sql>
+
+    <sql id="whereCondition">
+        <if test="driverCode != null  and driverCode != ''"> and thisTab.driver_code = #{driverCode}</if>
+        <if test="driverName != null  and driverName != ''"> and  thisTab.driver_name like concat('%', #{driverName}, '%')</if>
+        <if test="boxNum != null  and boxNum != ''"> and thisTab.box_num = #{boxNum}</if>
+        <if test="reqTime != null "> and thisTab.req_time = #{reqTime}</if>
+        <if test="type != null "> and thisTab.type = #{type}</if>
+        <if test="operation != null  and operation != ''"> and thisTab.operation = #{operation}</if>
+    </sql>
+
+    <!--鏌ヨ-->
+    <select id="selectRequestLogById" parameterType="Integer" resultMap="RequestLogResult">
+        <include refid="selectRequestLogVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectRequestLogCount" parameterType="com.ruoyi.cwgl.domain.RequestLog" resultType="int">
+        <include refid="selectRequestLogVoCount"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+    </select>
+
+    <select id="selectRequestLogList" parameterType="com.ruoyi.cwgl.domain.RequestLog" resultMap="RequestLogResult">
+        <include refid="selectRequestLogVo"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+        order by thisTab.id desc
+    </select>
+
+    <!-- 鏂板 -->
+    <insert id="insertRequestLog" parameterType="com.ruoyi.cwgl.domain.RequestLog"  useGeneratedKeys="true" keyProperty="id">
+        insert into request_log
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="driverCode != null">driver_code,</if>
+            <if test="driverName != null">driver_name,</if>
+            <if test="boxNum != null">box_num,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="reqTime != null">req_time,</if>
+            <if test="type != null">type,</if>
+            <if test="operation != null">operation,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="driverCode != null">#{driverCode},</if>
+            <if test="driverName != null">#{driverName},</if>
+            <if test="boxNum != null">#{boxNum},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="reqTime != null">#{reqTime},</if>
+            <if test="type != null">#{type},</if>
+            <if test="operation != null">#{operation},</if>
+         </trim>
+    </insert>
+
+    <insert id="insertRequestLogBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id">
+        insert into request_log
+        <trim prefix="(" suffix=") values" suffixOverrides=",">
+            id,driver_code,driver_name,box_num,create_by,create_time,req_time,type,operation,
+        </trim>
+        <foreach item="item" index="index" collection="list" separator=",">
+            <trim prefix="(" suffix=") " suffixOverrides=",">
+                #{item.id},#{item.driverCode},#{item.driverName},#{item.boxNum},#{item.createBy},#{item.createTime},#{item.reqTime},#{item.type},#{item.operation},
+            </trim>
+        </foreach>
+    </insert>
+
+    <!-- 淇敼 -->
+    <update id="updateRequestLog" parameterType="com.ruoyi.cwgl.domain.RequestLog">
+        update request_log
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="driverCode != null">driver_code = #{driverCode},</if>
+            <if test="driverName != null">driver_name = #{driverName},</if>
+            <if test="boxNum != null">box_num = #{boxNum},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="reqTime != null">req_time = #{reqTime},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="operation != null">operation = #{operation},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 淇敼 -->
+    <update id="updateRequestLogBatch" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update request_log
+            <trim prefix="SET" suffixOverrides=",">
+                <if test="item.driverCode != null">driver_code = #{item.driverCode},</if>
+                <if test="item.driverName != null">driver_name = #{item.driverName},</if>
+                <if test="item.boxNum != null">box_num = #{item.boxNum},</if>
+                <if test="item.createBy != null">create_by = #{item.createBy},</if>
+                <if test="item.createTime != null">create_time = #{item.createTime},</if>
+                <if test="item.reqTime != null">req_time = #{item.reqTime},</if>
+                <if test="item.type != null">type = #{item.type},</if>
+                <if test="item.operation != null">operation = #{item.operation},</if>
+            </trim>
+        where id = #{item.id}
+        </foreach>
+    </update>
+
+    <!--鍒犻櫎-->
+    <delete id="deleteRequestLogById" parameterType="Integer">
+        delete from request_log where id = #{id}
+    </delete>
+    <delete id="deleteRequestLogByIds" parameterType="Integer">
+        delete from request_log where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/ui/admin-ui3/src/api/cwgl/keyCollectionInfo.ts b/ui/admin-ui3/src/api/cwgl/keyCollectionInfo.ts
new file mode 100644
index 0000000..7e61e6e
--- /dev/null
+++ b/ui/admin-ui3/src/api/cwgl/keyCollectionInfo.ts
@@ -0,0 +1,67 @@
+import request,{download,requestType} from "@/utils/request";
+import {BaseEntityInterface} from "@/utils/globalInterface";
+export interface KeyCollectionInfoI extends BaseEntityInterface{
+            id ?:  number   ,            customerName ?:  string   ,            carrier ?:  string   ,            dispatchNo ?:  string   ,            driverName ?:  string   ,            driverMobile ?:  string   ,            licensePlateNumber ?:  string   ,            orderTime ?:  string   ,            orderCreatedTime ?:  string   ,            dispatchCreatedTime ?:  string   ,            keyCollectionTime ?:  string   ,            estimatedDepartureTime ?:  string   ,            requiredArrivalTime ?:  string   ,            consignorAddress ?:  string   ,            consigneeAddress ?:  string   ,            mainDriver ?:  string   ,            pointNum ?:  number   ,            transportMode ?:  string   ,            assistantDriver ?:  string   ,            quantity ?:  number   ,            dispatchQuantity ?:  number   ,            remark ?:  string       }
+
+
+/**
+ * 鏌ヨ閽ュ寵棰嗗彇淇℃伅鍒楄〃
+ */
+export const listKeyCollectionInfo:requestType = (query) => {
+    return request({
+        url: '/cwgl/keyCollectionInfo/list',
+        method:'get',
+        params:query
+    })
+}
+/**
+ * 鏌ヨ閽ュ寵棰嗗彇淇℃伅璇︾粏
+ */
+export const getKeyCollectionInfo:requestType = (id) => {
+    return request({
+        url: '/cwgl/keyCollectionInfo/' + id,
+        method:'get'
+    })
+}
+
+/**
+ * 鏂板閽ュ寵棰嗗彇淇℃伅
+ */
+export const addKeyCollectionInfo:requestType = (data) => {
+    return request({
+        url: '/cwgl/keyCollectionInfo',
+        method: 'post',
+        data
+    })
+}
+
+/**
+ * 淇敼閽ュ寵棰嗗彇淇℃伅
+ */
+export const updateKeyCollectionInfo:requestType = (data) => {
+    return request({
+        url: '/cwgl/keyCollectionInfo',
+        method: 'put',
+        data
+    })
+}
+
+/**
+ * 鍒犻櫎閽ュ寵棰嗗彇淇℃伅
+ */
+export const delKeyCollectionInfo:requestType = (id) => {
+    return request({
+        url: '/cwgl/keyCollectionInfo/' + id,
+        method: 'delete'
+    })
+}
+
+
+/**
+ * 瀵煎嚭閽ュ寵棰嗗彇淇℃伅
+ */
+export const exportKeyCollectionInfo:requestType = (query) => {
+    return new Promise<any>(()=>{
+        download('/cwgl/keyCollectionInfo/export',query);
+    })
+}
diff --git a/ui/admin-ui3/src/api/cwgl/requestLog.ts b/ui/admin-ui3/src/api/cwgl/requestLog.ts
new file mode 100644
index 0000000..5dcbbcd
--- /dev/null
+++ b/ui/admin-ui3/src/api/cwgl/requestLog.ts
@@ -0,0 +1,67 @@
+import request,{download,requestType} from "@/utils/request";
+import {BaseEntityInterface} from "@/utils/globalInterface";
+export interface RequestLogI extends BaseEntityInterface{
+            id ?:  number   ,            driverCode ?:  string   ,            driverName ?:  string   ,            boxNum ?:  string   ,            createBy ?:  string   ,            createTime ?:  string   ,            reqTime ?:  string   ,            type ?:  number   ,            operation ?:  string       }
+
+
+/**
+ * 鏌ヨ璇锋眰鏃ュ織鍒楄〃
+ */
+export const listRequestLog:requestType = (query) => {
+    return request({
+        url: '/cwgl/requestLog/list',
+        method:'get',
+        params:query
+    })
+}
+/**
+ * 鏌ヨ璇锋眰鏃ュ織璇︾粏
+ */
+export const getRequestLog:requestType = (id) => {
+    return request({
+        url: '/cwgl/requestLog/' + id,
+        method:'get'
+    })
+}
+
+/**
+ * 鏂板璇锋眰鏃ュ織
+ */
+export const addRequestLog:requestType = (data) => {
+    return request({
+        url: '/cwgl/requestLog',
+        method: 'post',
+        data
+    })
+}
+
+/**
+ * 淇敼璇锋眰鏃ュ織
+ */
+export const updateRequestLog:requestType = (data) => {
+    return request({
+        url: '/cwgl/requestLog',
+        method: 'put',
+        data
+    })
+}
+
+/**
+ * 鍒犻櫎璇锋眰鏃ュ織
+ */
+export const delRequestLog:requestType = (id) => {
+    return request({
+        url: '/cwgl/requestLog/' + id,
+        method: 'delete'
+    })
+}
+
+
+/**
+ * 瀵煎嚭璇锋眰鏃ュ織
+ */
+export const exportRequestLog:requestType = (query) => {
+    return new Promise<any>(()=>{
+        download('/cwgl/requestLog/export',query);
+    })
+}
diff --git a/ui/admin-ui3/src/views/cwgl/keyCollectionInfo/index.vue b/ui/admin-ui3/src/views/cwgl/keyCollectionInfo/index.vue
new file mode 100644
index 0000000..aca7e9f
--- /dev/null
+++ b/ui/admin-ui3/src/views/cwgl/keyCollectionInfo/index.vue
@@ -0,0 +1,181 @@
+<template>
+  <basicContainer >
+    <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"
+        @size-change="sizeChange"
+        @on-load="onLoad"
+    >
+      <template #menu-left>
+        <el-button
+            type="success"
+            icon="Edit"
+            :disabled="pageF.single"
+            v-hasPermi="['cwgl:keyCollectionInfo:edit']"
+            @click="handleUpdate">淇敼
+        </el-button>
+        <el-button
+            type="danger"
+            icon="Delete"
+            :disabled="pageF.multiple"
+            @click="handleDelete"
+            v-hasPermi="['cwgl:keyCollectionInfo:remove']"
+        >鍒犻櫎
+        </el-button>
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            v-hasPermi="['cwgl:keyCollectionInfo:export']"
+        >瀵煎嚭
+        </el-button>
+      </template>
+    </avue-crud>
+  </basicContainer>
+</template>
+
+<script setup name="keyCollectionInfo" lang="ts">
+  import {KeyCollectionInfoI,addKeyCollectionInfo, delKeyCollectionInfo, exportKeyCollectionInfo, getKeyCollectionInfo, listKeyCollectionInfo, updateKeyCollectionInfo} from "@/api/cwgl/keyCollectionInfo";
+  import useCurrentInstance from "@/utils/useCurrentInstance";
+  import {computed,reactive, ref, toRefs} from "vue";
+  import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
+  import {usePagePlus} from "@/hooks/usePagePlus";
+  import {hasPermission} from "@/utils/permissionUtils";
+
+  const { proxy } = useCurrentInstance();
+  const crudRef = ref();
+
+  const permissionList = computed(()=>{
+    return {
+      addBtn: hasPermission(["cwgl:keyCollectionInfo:add"]),
+      delBtn: hasPermission(["cwgl:keyCollectionInfo:remove"]),
+      editBtn: hasPermission(["cwgl:keyCollectionInfo:edit"]),
+      viewBtn: hasPermission(["cwgl:keyCollectionInfo:query"]),
+    }
+  })
+
+  const data = reactive({
+    form:<KeyCollectionInfoI>{},
+    queryParams:<KeyCollectionInfoI&PageQueryInterface>{},
+    page: <PagesInterface>{
+      pageSize: 10,
+      total: 0,
+      currentPage: 1,
+    },
+    selectionList:[],
+  })
+  const {queryParams,form,page,selectionList} = toRefs(data);
+  const option = ref({
+    pageKey: 'KeyCollectionInfo',
+    rowKey: 'id',
+    column: {
+                                id: {
+          label: 'ID',
+                            },
+                                customerName: {
+          label: '瀹㈡埛鍚嶇О',
+                            },
+                                carrier: {
+          label: '鎵胯繍鍟�',
+                            },
+                                dispatchNo: {
+          label: '璋冨害鍗曞彿',
+                            },
+                                driverName: {
+          label: '鍙告満鍚嶇О',
+                            },
+                                driverMobile: {
+          label: '鍙告満鎵嬫満鍙�',
+                            },
+                                licensePlateNumber: {
+          label: '杞︾墝鍙�',
+                            },
+                                orderTime: {
+          label: '璁㈠崟涓嬪崟鏃堕棿',
+                            },
+                                orderCreatedTime: {
+          label: '璁㈠崟鍒涘缓鏃堕棿',
+                            },
+                                dispatchCreatedTime: {
+          label: '璋冨害鍗曞垱寤烘椂闂�',
+                            },
+                                keyCollectionTime: {
+          label: '閽ュ寵棰嗗彇鏃堕棿',
+                            },
+                                estimatedDepartureTime: {
+          label: '棰勮鍑哄彂鏃堕棿',
+                            },
+                                requiredArrivalTime: {
+          label: '瑕佹眰鍒拌揪鏃堕棿',
+                            },
+                                consignorAddress: {
+          label: '鍑哄彂鍦板湴鍧�',
+                      type: 'textarea', minRows: 3, maxRows: 5,
+                            },
+                                consigneeAddress: {
+          label: '鐩殑鍦板湴鍧�',
+                      type: 'textarea', minRows: 3, maxRows: 5,
+                            },
+                                mainDriver: {
+          label: '涓婚┚椹跺憳',
+                            },
+                                pointNum: {
+          label: '鎻愰�佽揣鐐规暟',
+                            },
+                                transportMode: {
+          label: '杩愯緭鏂瑰紡',
+                            },
+                                assistantDriver: {
+          label: '鍓┚椹跺憳',
+                            },
+                                quantity: {
+          label: '浠舵暟',
+                            },
+                                dispatchQuantity: {
+          label: '瀹炲彂浠舵暟',
+                            },
+                                remark: {
+          label: '澶囨敞',
+                      type: 'textarea', minRows: 3, maxRows: 5,
+                            },
+          }
+  })
+
+  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
+    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
+    form:form,
+    option:option,
+    queryParams:queryParams,
+    idKey:'id',
+    page:page.value,
+    getListApi:listKeyCollectionInfo,
+    getDetailApi:getKeyCollectionInfo,
+    exportApi:exportKeyCollectionInfo,
+    deleteApi:delKeyCollectionInfo,
+    addApi:addKeyCollectionInfo,
+    updateApi:updateKeyCollectionInfo,
+    handleUpdateFunc:()=>{
+      crudRef.value.rowEdit(selectionList.value[0]);
+    },
+    handleSelectionChangeFunc:(selection:any)=>{
+      selectionList.value = selection;
+    }
+  })
+
+
+</script>
diff --git a/ui/admin-ui3/src/views/cwgl/requestLog/index.vue b/ui/admin-ui3/src/views/cwgl/requestLog/index.vue
new file mode 100644
index 0000000..26942fe
--- /dev/null
+++ b/ui/admin-ui3/src/views/cwgl/requestLog/index.vue
@@ -0,0 +1,139 @@
+<template>
+  <basicContainer >
+    <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"
+        @size-change="sizeChange"
+        @on-load="onLoad"
+    >
+      <template #menu-left>
+        <el-button
+            type="success"
+            icon="Edit"
+            :disabled="pageF.single"
+            v-hasPermi="['cwgl:requestLog:edit']"
+            @click="handleUpdate">淇敼
+        </el-button>
+        <el-button
+            type="danger"
+            icon="Delete"
+            :disabled="pageF.multiple"
+            @click="handleDelete"
+            v-hasPermi="['cwgl:requestLog:remove']"
+        >鍒犻櫎
+        </el-button>
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            v-hasPermi="['cwgl:requestLog:export']"
+        >瀵煎嚭
+        </el-button>
+      </template>
+    </avue-crud>
+  </basicContainer>
+</template>
+
+<script setup name="requestLog" lang="ts">
+  import {RequestLogI,addRequestLog, delRequestLog, exportRequestLog, getRequestLog, listRequestLog, updateRequestLog} from "@/api/cwgl/requestLog";
+  import useCurrentInstance from "@/utils/useCurrentInstance";
+  import {computed,reactive, ref, toRefs} from "vue";
+  import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
+  import {usePagePlus} from "@/hooks/usePagePlus";
+  import {hasPermission} from "@/utils/permissionUtils";
+
+  const { proxy } = useCurrentInstance();
+  const crudRef = ref();
+
+  const permissionList = computed(()=>{
+    return {
+      addBtn: hasPermission(["cwgl:requestLog:add"]),
+      delBtn: hasPermission(["cwgl:requestLog:remove"]),
+      editBtn: hasPermission(["cwgl:requestLog:edit"]),
+      viewBtn: hasPermission(["cwgl:requestLog:query"]),
+    }
+  })
+
+  const data = reactive({
+    form:<RequestLogI>{},
+    queryParams:<RequestLogI&PageQueryInterface>{},
+    page: <PagesInterface>{
+      pageSize: 10,
+      total: 0,
+      currentPage: 1,
+    },
+    selectionList:[],
+  })
+  const {queryParams,form,page,selectionList} = toRefs(data);
+  const option = ref({
+    pageKey: 'RequestLog',
+    rowKey: 'id',
+    column: {
+                                id: {
+          label: '涓婚敭',
+                            },
+                                driverCode: {
+          label: '鍙告満鍞竴缂栧彿',
+                            },
+                                driverName: {
+          label: '鍙告満濮撳悕',
+                            },
+                                boxNum: {
+          label: '鏌滈棬缂栧彿',
+                            },
+                                createBy: {
+          label: '鍒涘缓鑰�',
+                            },
+                                createTime: {
+          label: '鍒涘缓鏃堕棿',
+                            },
+                                reqTime: {
+          label: '璇锋眰鏃堕棿',
+                            },
+                                type: {
+          label: '0涓婃姤鍙栧嚭1褰掕繕涓婃姤',
+                            },
+                                operation: {
+          label: '鎿嶄綔璇存槑',
+                            },
+          }
+  })
+
+  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
+    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
+    form:form,
+    option:option,
+    queryParams:queryParams,
+    idKey:'id',
+    page:page.value,
+    getListApi:listRequestLog,
+    getDetailApi:getRequestLog,
+    exportApi:exportRequestLog,
+    deleteApi:delRequestLog,
+    addApi:addRequestLog,
+    updateApi:updateRequestLog,
+    handleUpdateFunc:()=>{
+      crudRef.value.rowEdit(selectionList.value[0]);
+    },
+    handleSelectionChangeFunc:(selection:any)=>{
+      selectionList.value = selection;
+    }
+  })
+
+
+</script>

--
Gitblit v1.8.0