Explorar o código

Merge remote-tracking branch 'origin/master'

颜琼丽 hai 1 semana
pai
achega
6fb9ae0aa6
Modificáronse 84 ficheiros con 9820 adicións e 18 borrados
  1. 21 0
      jd-logistics-api/jd-logistics-api-system/src/main/java/com/ruoyi/system/api/domain/SysDept.java
  2. 12 0
      jd-logistics-common/ruoyi-common-core/pom.xml
  3. 77 0
      jd-logistics-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfigInfo.java
  4. 47 0
      jd-logistics-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisIdGenerator.java
  5. 4 0
      jd-logistics-common/ruoyi-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  6. 1 1
      jd-logistics-gateway/src/main/java/com/ruoyi/gateway/JdLogisticsGatewayApplication.java
  7. 7 0
      jd-logistics-modules/jd-logistics-system/pom.xml
  8. 4 5
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/JdLogisticsSystemApplication.java
  9. 37 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/JDExpressConfig.java
  10. 99 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/SFExpressConfig.java
  11. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizAddressBookController.java
  12. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizBannerController.java
  13. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizFinancialAdjustmentRecordController.java
  14. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizInancialFeeItemsController.java
  15. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizWaybillCostDetailsController.java
  16. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizWaybillOrderController.java
  17. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/RptFinancialMonthSummaryController.java
  18. 105 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/SysCityController.java
  19. 206 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizAddressBook.java
  20. 176 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizBanner.java
  21. 191 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizFinancialAdjustmentRecord.java
  22. 161 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizInancialFeeItems.java
  23. 207 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizWaybillCostDetails.java
  24. 528 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizWaybillOrder.java
  25. 13 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/LogisticsOrder.java
  26. 206 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/RptFinancialMonthSummary.java
  27. 191 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/SysCity.java
  28. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizAddressBookMapper.java
  29. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizBannerMapper.java
  30. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizFinancialAdjustmentRecordMapper.java
  31. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizInancialFeeItemsMapper.java
  32. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillCostDetailsMapper.java
  33. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillOrderMapper.java
  34. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/RptFinancialMonthSummaryMapper.java
  35. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/SysCityMapper.java
  36. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizAddressBookService.java
  37. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizBannerService.java
  38. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizFinancialAdjustmentRecordService.java
  39. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizInancialFeeItemsService.java
  40. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizWaybillCostDetailsService.java
  41. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizWaybillOrderService.java
  42. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IRptFinancialMonthSummaryService.java
  43. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/ISysCityService.java
  44. 27 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsOrderService.java
  45. 15 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsService.java
  46. 26 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/factory/LogisticsFactory.java
  47. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizAddressBookServiceImpl.java
  48. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizBannerServiceImpl.java
  49. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizFinancialAdjustmentRecordServiceImpl.java
  50. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizInancialFeeItemsServiceImpl.java
  51. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillCostDetailsServiceImpl.java
  52. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillOrderServiceImpl.java
  53. 107 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/JDLogisticsService.java
  54. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/RptFinancialMonthSummaryServiceImpl.java
  55. 100 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/SFLogisticsService.java
  56. 96 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/SysCityServiceImpl.java
  57. 44 8
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
  58. 125 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizAddressBookMapper.xml
  59. 115 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizBannerMapper.xml
  60. 120 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizFinancialAdjustmentRecordMapper.xml
  61. 110 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizInancialFeeItemsMapper.xml
  62. 125 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillCostDetailsMapper.xml
  63. 230 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillOrderMapper.xml
  64. 125 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/RptFinancialMonthSummaryMapper.xml
  65. 120 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/SysCityMapper.xml
  66. 26 1
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/system/SysDeptMapper.xml
  67. 44 0
      jd-logistics-ui-v3/src/api/logistics/adjustmentRecord.js
  68. 44 0
      jd-logistics-ui-v3/src/api/logistics/banner.js
  69. 44 0
      jd-logistics-ui-v3/src/api/logistics/book.js
  70. 44 0
      jd-logistics-ui-v3/src/api/logistics/city.js
  71. 44 0
      jd-logistics-ui-v3/src/api/logistics/costDetails.js
  72. 44 0
      jd-logistics-ui-v3/src/api/logistics/dept.js
  73. 44 0
      jd-logistics-ui-v3/src/api/logistics/inancialFee.js
  74. 44 0
      jd-logistics-ui-v3/src/api/logistics/monthSummary.js
  75. 44 0
      jd-logistics-ui-v3/src/api/logistics/order.js
  76. 341 0
      jd-logistics-ui-v3/src/views/logistics/adjustmentRecord/index.vue
  77. 397 0
      jd-logistics-ui-v3/src/views/logistics/banner/index.vue
  78. 366 0
      jd-logistics-ui-v3/src/views/logistics/book/index.vue
  79. 385 0
      jd-logistics-ui-v3/src/views/logistics/city/index.vue
  80. 366 0
      jd-logistics-ui-v3/src/views/logistics/costDetails/index.vue
  81. 318 0
      jd-logistics-ui-v3/src/views/logistics/inancialFee/index.vue
  82. 355 0
      jd-logistics-ui-v3/src/views/logistics/monthSummary/index.vue
  83. 663 0
      jd-logistics-ui-v3/src/views/logistics/order/index.vue
  84. 46 3
      jd-logistics-ui-v3/src/views/system/dept/index.vue

+ 21 - 0
jd-logistics-api/jd-logistics-api-system/src/main/java/com/ruoyi/system/api/domain/SysDept.java

@@ -6,6 +6,8 @@ import javax.validation.constraints.Email;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
+
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.core.web.domain.BaseEntity;
@@ -15,6 +17,7 @@ import com.ruoyi.common.core.web.domain.BaseEntity;
  * 
  * @author lydgt
  */
+@Data
 public class SysDept extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
@@ -55,6 +58,24 @@ public class SysDept extends BaseEntity
     /** 子部门 */
     private List<SysDept> children = new ArrayList<SysDept>();
 
+    /** 开票名称 */
+    private String invoiceName;
+
+    /** 税号 */
+    private String invoiceNum;
+
+    /** 费率 */
+    private String rateValue;
+
+    /** 开户银行 */
+    private String openBank;
+
+    /** 银行账号 */
+    private String bankAccount;
+
+    /** 公司地址 */
+    private String companyAddress;
+
     public Long getDeptId()
     {
         return deptId;

+ 12 - 0
jd-logistics-common/ruoyi-common-core/pom.xml

@@ -128,6 +128,18 @@
             <artifactId>lombok</artifactId>
             <version>1.18.26</version>
         </dependency>
+
+        <!-- 京东物流 Java SDK -->
+        <dependency>
+            <groupId>com.jd</groupId>
+            <artifactId>lop-opensdk-support</artifactId>
+            <version>1.0.30</version>
+        </dependency>
+        <dependency>
+            <groupId>com.jd</groupId>
+            <artifactId>ECAP</artifactId>
+            <version>6.9</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 77 - 0
jd-logistics-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfigInfo.java

@@ -0,0 +1,77 @@
+
+package com.ruoyi.common.redis.configure;
+
+import io.lettuce.core.RedisClient;
+import io.lettuce.core.RedisURI;
+import io.lettuce.core.api.StatefulRedisConnection;
+import io.lettuce.core.api.sync.RedisCommands;
+import io.lettuce.core.resource.ClientResources;
+import io.lettuce.core.resource.DefaultClientResources;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PreDestroy;
+import java.time.Duration;
+
+@Configuration
+public class RedisConfigInfo {
+
+    @Value("${spring.redis.host:localhost}")
+    private String redisHost;
+
+    @Value("${spring.redis.port:6379}")
+    private int redisPort;
+
+    @Value("${spring.redis.timeout:2000ms}")
+    private Duration timeout;
+
+    @Value("${spring.redis.password:#{null}}")
+    private String password;
+
+    private RedisClient redisClient;
+    private ClientResources clientResources;
+    private StatefulRedisConnection<String, String> connection;
+
+    @Bean
+    public RedisClient redisClient() {
+        clientResources = DefaultClientResources.builder().build();
+
+        RedisURI.Builder uriBuilder = RedisURI.Builder
+                .redis(redisHost, redisPort)
+                .withTimeout(timeout);
+
+        if (password != null && !password.isEmpty()) {
+            uriBuilder.withPassword(password.toCharArray());
+        }
+
+        RedisURI redisURI = uriBuilder.build();
+        redisClient = RedisClient.create(clientResources, redisURI);
+        return redisClient;
+    }
+
+    @Bean
+    public StatefulRedisConnection<String, String> redisConnection(RedisClient redisClient) {
+        connection = redisClient.connect();
+        return connection;
+    }
+
+    @Bean
+    public RedisCommands<String, String> redisCommands(StatefulRedisConnection<String, String> connection) {
+        return connection.sync();
+    }
+
+    @PreDestroy
+    public void destroy() {
+        if (connection != null) {
+            connection.close();
+        }
+        if (redisClient != null) {
+            redisClient.shutdown();
+        }
+        if (clientResources != null) {
+            clientResources.shutdown();
+        }
+    }
+}
+

+ 47 - 0
jd-logistics-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisIdGenerator.java

@@ -0,0 +1,47 @@
+
+package com.ruoyi.common.redis.service;
+import io.lettuce.core.api.sync.RedisCommands;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class RedisIdGenerator {
+
+    @Autowired
+    private RedisCommands<String, String> redisCommands;
+    private final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+
+/**
+     * 生成带日期前缀的唯一ID
+     * @param businessType 业务类型
+     * @return 格式为 YYYYMMDD_业务类型_序号 的唯一ID
+     */
+
+    public String generateUniqueId(String businessType) {
+        String dateStr = LocalDate.now().format(dateFormatter);
+        String key = "id_counter:" + businessType + ":" + dateStr;
+        // 使用INCR命令原子性递增
+        long sequence = redisCommands.incr(key);
+        // 设置过期时间(24小时)
+        if (sequence == 1) {
+            redisCommands.expire(key, 86400);
+        }
+        return  businessType + dateStr + String.format("%06d", sequence);
+    }
+
+
+/**
+     * 生成简单递增ID
+     * @param key 计数器键名
+     * @return 递增后的ID值
+     */
+
+    public long generateSimpleId(String key) {
+        return redisCommands.incr(key);
+    }
+}
+

+ 4 - 0
jd-logistics-common/ruoyi-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1,2 +1,6 @@
 com.ruoyi.common.redis.configure.RedisConfig
 com.ruoyi.common.redis.service.RedisService
+com.ruoyi.common.redis.service.RedisIdGenerator
+com.ruoyi.common.redis.configure.RedisConfigInfo
+
+

+ 1 - 1
jd-logistics-gateway/src/main/java/com/ruoyi/gateway/JdLogisticsGatewayApplication.java

@@ -15,7 +15,7 @@ public class JdLogisticsGatewayApplication
     public static void main(String[] args)
     {
         SpringApplication.run(JdLogisticsGatewayApplication.class, args);
-        System.out.println("(♥◠‿◠)ノ゙  京东物流网关启动成功   ლ(´ڡ`ლ)゙  \n" +
+        System.out.println("(♥◠‿◠)ノ゙  瑞鲸速达网关启动成功   ლ(´ڡ`ლ)゙  \n" +
                 " .-------.       ____     __        \n" +
                 " |  _ _   \\      \\   \\   /  /    \n" +
                 " | ( ' )  |       \\  _. /  '       \n" +

+ 7 - 0
jd-logistics-modules/jd-logistics-system/pom.xml

@@ -71,6 +71,13 @@
             <artifactId>ruoyi-common-swagger</artifactId>
         </dependency>
 
+
+        <dependency>
+            <groupId>com.sf</groupId>
+            <artifactId>sf-csim</artifactId>
+            <type>jar</type>
+            <version>2.1.7</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 4 - 5
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/JdLogisticsSystemApplication.java

@@ -1,13 +1,12 @@
-package com.ruoyi.system;
+package com.ruoyi;
 
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
 import com.ruoyi.common.security.annotation.EnableCustomConfig;
 import com.ruoyi.common.security.annotation.EnableRyFeignClients;
-
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
 /**
  * 系统模块
- * 
+ *
  * @author lydgt
  */
 @EnableCustomConfig

+ 37 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/JDExpressConfig.java

@@ -0,0 +1,37 @@
+package com.ruoyi.logistics.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "jd.express")
+public class JDExpressConfig {
+
+    /**
+     * 应用编码
+     */
+    private String appKey;
+
+    /**
+     * 应用密钥
+     */
+    private String appSecret;
+
+    /**
+     * 访问令牌
+     */
+    private String accessToken;
+
+    /**
+     * 刷新令牌
+     */
+    private String refreshToken;
+
+    /**
+     * 京东服务地址
+     */
+    private String serverUrl;
+}
+

+ 99 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/SFExpressConfig.java

@@ -0,0 +1,99 @@
+package com.ruoyi.logistics.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "sf.express")
+public class SFExpressConfig {
+
+    /**
+     * 客户编码
+     */
+    private String clientCode;
+
+    /**
+     * 校验码
+     */
+    private String checkWord;
+
+    /**
+     * 月结吗(顺丰月结吗账号)
+     */
+    private String monthlyCord;
+    /**
+     * 沙箱环境API地址
+     */
+    private String sandboxUrl;
+
+    /**
+     * 生产环境API地址
+     */
+    private String productionUrl;
+
+    private Environment environment;
+
+
+
+    // 环境枚举
+    public enum Environment {
+        SANDBOX, PRODUCTION
+    }
+
+    // Getters and Setters
+    public String getClientCode() {
+        return clientCode;
+    }
+
+    public void setClientCode(String clientCode) {
+        this.clientCode = clientCode;
+    }
+
+    public String getCheckWord() {
+        return checkWord;
+    }
+
+    public void setCheckWord(String checkWord) {
+        this.checkWord = checkWord;
+    }
+
+    public String getSandboxUrl() {
+        return sandboxUrl;
+    }
+
+    public void setSandboxUrl(String sandboxUrl) {
+        this.sandboxUrl = sandboxUrl;
+    }
+
+    public String getProductionUrl() {
+        return productionUrl;
+    }
+
+    public void setProductionUrl(String productionUrl) {
+        this.productionUrl = productionUrl;
+    }
+
+    public Environment getEnvironment() {
+        return environment;
+    }
+
+    public void setEnvironment(Environment environment) {
+        this.environment = environment;
+    }
+
+    public void setMonthlyCord(String monthlyCord) {
+        this.monthlyCord = monthlyCord;
+    }
+
+    public String getMonthlyCord() {
+        return monthlyCord;
+    }
+
+    /**
+     * 获取当前环境的API地址
+     */
+    public String getCurrentApiUrl() {
+        return environment == Environment.SANDBOX ? sandboxUrl : productionUrl;
+    }
+}
+

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizAddressBookController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.BizAddressBook;
+import com.ruoyi.logistics.service.IBizAddressBookService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 地址簿管理Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/book")
+public class BizAddressBookController extends BaseController
+{
+    @Autowired
+    private IBizAddressBookService bizAddressBookService;
+
+    /**
+     * 查询地址簿管理列表
+     */
+    @RequiresPermissions("system:book:list")
+    @GetMapping("/list")
+    public TableDataInfo list(BizAddressBook bizAddressBook)
+    {
+        startPage();
+        List<BizAddressBook> list = bizAddressBookService.selectBizAddressBookList(bizAddressBook);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出地址簿管理列表
+     */
+    @RequiresPermissions("system:book:export")
+    @Log(title = "地址簿管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizAddressBook bizAddressBook)
+    {
+        List<BizAddressBook> list = bizAddressBookService.selectBizAddressBookList(bizAddressBook);
+        ExcelUtil<BizAddressBook> util = new ExcelUtil<BizAddressBook>(BizAddressBook.class);
+        util.exportExcel(response, list, "地址簿管理数据");
+    }
+
+    /**
+     * 获取地址簿管理详细信息
+     */
+    @RequiresPermissions("system:book:query")
+    @GetMapping(value = "/{addressId}")
+    public AjaxResult getInfo(@PathVariable("addressId") Long addressId)
+    {
+        return success(bizAddressBookService.selectBizAddressBookByAddressId(addressId));
+    }
+
+    /**
+     * 新增地址簿管理
+     */
+    @RequiresPermissions("system:book:add")
+    @Log(title = "地址簿管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizAddressBook bizAddressBook)
+    {
+        return toAjax(bizAddressBookService.insertBizAddressBook(bizAddressBook));
+    }
+
+    /**
+     * 修改地址簿管理
+     */
+    @RequiresPermissions("system:book:edit")
+    @Log(title = "地址簿管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizAddressBook bizAddressBook)
+    {
+        return toAjax(bizAddressBookService.updateBizAddressBook(bizAddressBook));
+    }
+
+    /**
+     * 删除地址簿管理
+     */
+    @RequiresPermissions("system:book:remove")
+    @Log(title = "地址簿管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{addressIds}")
+    public AjaxResult remove(@PathVariable Long[] addressIds)
+    {
+        return toAjax(bizAddressBookService.deleteBizAddressBookByAddressIds(addressIds));
+    }
+}

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizBannerController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.BizBanner;
+import com.ruoyi.logistics.service.IBizBannerService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 系统轮播图Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/banner")
+public class BizBannerController extends BaseController
+{
+    @Autowired
+    private IBizBannerService bizBannerService;
+
+    /**
+     * 查询系统轮播图列表
+     */
+    @RequiresPermissions("system:banner:list")
+    @GetMapping("/list")
+    public TableDataInfo list(BizBanner bizBanner)
+    {
+        startPage();
+        List<BizBanner> list = bizBannerService.selectBizBannerList(bizBanner);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出系统轮播图列表
+     */
+    @RequiresPermissions("system:banner:export")
+    @Log(title = "系统轮播图", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizBanner bizBanner)
+    {
+        List<BizBanner> list = bizBannerService.selectBizBannerList(bizBanner);
+        ExcelUtil<BizBanner> util = new ExcelUtil<BizBanner>(BizBanner.class);
+        util.exportExcel(response, list, "系统轮播图数据");
+    }
+
+    /**
+     * 获取系统轮播图详细信息
+     */
+    @RequiresPermissions("system:banner:query")
+    @GetMapping(value = "/{bannerId}")
+    public AjaxResult getInfo(@PathVariable("bannerId") Long bannerId)
+    {
+        return success(bizBannerService.selectBizBannerByBannerId(bannerId));
+    }
+
+    /**
+     * 新增系统轮播图
+     */
+    @RequiresPermissions("system:banner:add")
+    @Log(title = "系统轮播图", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizBanner bizBanner)
+    {
+        return toAjax(bizBannerService.insertBizBanner(bizBanner));
+    }
+
+    /**
+     * 修改系统轮播图
+     */
+    @RequiresPermissions("system:banner:edit")
+    @Log(title = "系统轮播图", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizBanner bizBanner)
+    {
+        return toAjax(bizBannerService.updateBizBanner(bizBanner));
+    }
+
+    /**
+     * 删除系统轮播图
+     */
+    @RequiresPermissions("system:banner:remove")
+    @Log(title = "系统轮播图", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{bannerIds}")
+    public AjaxResult remove(@PathVariable Long[] bannerIds)
+    {
+        return toAjax(bizBannerService.deleteBizBannerByBannerIds(bannerIds));
+    }
+}

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizFinancialAdjustmentRecordController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord;
+import com.ruoyi.logistics.service.IBizFinancialAdjustmentRecordService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 调账流水记录Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/adjustmentRecord")
+public class BizFinancialAdjustmentRecordController extends BaseController
+{
+    @Autowired
+    private IBizFinancialAdjustmentRecordService bizFinancialAdjustmentRecordService;
+
+    /**
+     * 查询调账流水记录列表
+     */
+    @RequiresPermissions("system:adjustmentRecord:list")
+    @GetMapping("/list")
+    public TableDataInfo list(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord)
+    {
+        startPage();
+        List<BizFinancialAdjustmentRecord> list = bizFinancialAdjustmentRecordService.selectBizFinancialAdjustmentRecordList(bizFinancialAdjustmentRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出调账流水记录列表
+     */
+    @RequiresPermissions("system:adjustmentRecord:export")
+    @Log(title = "调账流水记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord)
+    {
+        List<BizFinancialAdjustmentRecord> list = bizFinancialAdjustmentRecordService.selectBizFinancialAdjustmentRecordList(bizFinancialAdjustmentRecord);
+        ExcelUtil<BizFinancialAdjustmentRecord> util = new ExcelUtil<BizFinancialAdjustmentRecord>(BizFinancialAdjustmentRecord.class);
+        util.exportExcel(response, list, "调账流水记录数据");
+    }
+
+    /**
+     * 获取调账流水记录详细信息
+     */
+    @RequiresPermissions("system:adjustmentRecord:query")
+    @GetMapping(value = "/{financialAdjustId}")
+    public AjaxResult getInfo(@PathVariable("financialAdjustId") Long financialAdjustId)
+    {
+        return success(bizFinancialAdjustmentRecordService.selectBizFinancialAdjustmentRecordByFinancialAdjustId(financialAdjustId));
+    }
+
+    /**
+     * 新增调账流水记录
+     */
+    @RequiresPermissions("system:adjustmentRecord:add")
+    @Log(title = "调账流水记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord)
+    {
+        return toAjax(bizFinancialAdjustmentRecordService.insertBizFinancialAdjustmentRecord(bizFinancialAdjustmentRecord));
+    }
+
+    /**
+     * 修改调账流水记录
+     */
+    @RequiresPermissions("system:adjustmentRecord:edit")
+    @Log(title = "调账流水记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord)
+    {
+        return toAjax(bizFinancialAdjustmentRecordService.updateBizFinancialAdjustmentRecord(bizFinancialAdjustmentRecord));
+    }
+
+    /**
+     * 删除调账流水记录
+     */
+    @RequiresPermissions("system:adjustmentRecord:remove")
+    @Log(title = "调账流水记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{financialAdjustIds}")
+    public AjaxResult remove(@PathVariable Long[] financialAdjustIds)
+    {
+        return toAjax(bizFinancialAdjustmentRecordService.deleteBizFinancialAdjustmentRecordByFinancialAdjustIds(financialAdjustIds));
+    }
+}

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizInancialFeeItemsController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.BizInancialFeeItems;
+import com.ruoyi.logistics.service.IBizInancialFeeItemsService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 费用类型管理Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/inancialFee")
+public class BizInancialFeeItemsController extends BaseController
+{
+    @Autowired
+    private IBizInancialFeeItemsService bizInancialFeeItemsService;
+
+    /**
+     * 查询费用类型管理列表
+     */
+    @RequiresPermissions("system:inancialFee:list")
+    @GetMapping("/list")
+    public TableDataInfo list(BizInancialFeeItems bizInancialFeeItems)
+    {
+        startPage();
+        List<BizInancialFeeItems> list = bizInancialFeeItemsService.selectBizInancialFeeItemsList(bizInancialFeeItems);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出费用类型管理列表
+     */
+    @RequiresPermissions("system:inancialFee:export")
+    @Log(title = "费用类型管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizInancialFeeItems bizInancialFeeItems)
+    {
+        List<BizInancialFeeItems> list = bizInancialFeeItemsService.selectBizInancialFeeItemsList(bizInancialFeeItems);
+        ExcelUtil<BizInancialFeeItems> util = new ExcelUtil<BizInancialFeeItems>(BizInancialFeeItems.class);
+        util.exportExcel(response, list, "费用类型管理数据");
+    }
+
+    /**
+     * 获取费用类型管理详细信息
+     */
+    @RequiresPermissions("system:inancialFee:query")
+    @GetMapping(value = "/{feeItemId}")
+    public AjaxResult getInfo(@PathVariable("feeItemId") Long feeItemId)
+    {
+        return success(bizInancialFeeItemsService.selectBizInancialFeeItemsByFeeItemId(feeItemId));
+    }
+
+    /**
+     * 新增费用类型管理
+     */
+    @RequiresPermissions("system:inancialFee:add")
+    @Log(title = "费用类型管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizInancialFeeItems bizInancialFeeItems)
+    {
+        return toAjax(bizInancialFeeItemsService.insertBizInancialFeeItems(bizInancialFeeItems));
+    }
+
+    /**
+     * 修改费用类型管理
+     */
+    @RequiresPermissions("system:inancialFee:edit")
+    @Log(title = "费用类型管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizInancialFeeItems bizInancialFeeItems)
+    {
+        return toAjax(bizInancialFeeItemsService.updateBizInancialFeeItems(bizInancialFeeItems));
+    }
+
+    /**
+     * 删除费用类型管理
+     */
+    @RequiresPermissions("system:inancialFee:remove")
+    @Log(title = "费用类型管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{feeItemIds}")
+    public AjaxResult remove(@PathVariable Long[] feeItemIds)
+    {
+        return toAjax(bizInancialFeeItemsService.deleteBizInancialFeeItemsByFeeItemIds(feeItemIds));
+    }
+}

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizWaybillCostDetailsController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.BizWaybillCostDetails;
+import com.ruoyi.logistics.service.IBizWaybillCostDetailsService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 运单明细Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/costDetails")
+public class BizWaybillCostDetailsController extends BaseController
+{
+    @Autowired
+    private IBizWaybillCostDetailsService bizWaybillCostDetailsService;
+
+    /**
+     * 查询运单明细列表
+     */
+    @RequiresPermissions("system:costDetails:list")
+    @GetMapping("/list")
+    public TableDataInfo list(BizWaybillCostDetails bizWaybillCostDetails)
+    {
+        startPage();
+        List<BizWaybillCostDetails> list = bizWaybillCostDetailsService.selectBizWaybillCostDetailsList(bizWaybillCostDetails);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出运单明细列表
+     */
+    @RequiresPermissions("system:costDetails:export")
+    @Log(title = "运单明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizWaybillCostDetails bizWaybillCostDetails)
+    {
+        List<BizWaybillCostDetails> list = bizWaybillCostDetailsService.selectBizWaybillCostDetailsList(bizWaybillCostDetails);
+        ExcelUtil<BizWaybillCostDetails> util = new ExcelUtil<BizWaybillCostDetails>(BizWaybillCostDetails.class);
+        util.exportExcel(response, list, "运单明细数据");
+    }
+
+    /**
+     * 获取运单明细详细信息
+     */
+    @RequiresPermissions("system:costDetails:query")
+    @GetMapping(value = "/{waybillDetailId}")
+    public AjaxResult getInfo(@PathVariable("waybillDetailId") Long waybillDetailId)
+    {
+        return success(bizWaybillCostDetailsService.selectBizWaybillCostDetailsByWaybillDetailId(waybillDetailId));
+    }
+
+    /**
+     * 新增运单明细
+     */
+    @RequiresPermissions("system:costDetails:add")
+    @Log(title = "运单明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizWaybillCostDetails bizWaybillCostDetails)
+    {
+        return toAjax(bizWaybillCostDetailsService.insertBizWaybillCostDetails(bizWaybillCostDetails));
+    }
+
+    /**
+     * 修改运单明细
+     */
+    @RequiresPermissions("system:costDetails:edit")
+    @Log(title = "运单明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizWaybillCostDetails bizWaybillCostDetails)
+    {
+        return toAjax(bizWaybillCostDetailsService.updateBizWaybillCostDetails(bizWaybillCostDetails));
+    }
+
+    /**
+     * 删除运单明细
+     */
+    @RequiresPermissions("system:costDetails:remove")
+    @Log(title = "运单明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{waybillDetailIds}")
+    public AjaxResult remove(@PathVariable Long[] waybillDetailIds)
+    {
+        return toAjax(bizWaybillCostDetailsService.deleteBizWaybillCostDetailsByWaybillDetailIds(waybillDetailIds));
+    }
+}

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizWaybillOrderController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.BizWaybillOrder;
+import com.ruoyi.logistics.service.IBizWaybillOrderService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 运单管理Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/order")
+public class BizWaybillOrderController extends BaseController
+{
+    @Autowired
+    private IBizWaybillOrderService bizWaybillOrderService;
+
+    /**
+     * 查询运单管理列表
+     */
+    @RequiresPermissions("system:order:list")
+    @GetMapping("/list")
+    public TableDataInfo list(BizWaybillOrder bizWaybillOrder)
+    {
+        startPage();
+        List<BizWaybillOrder> list = bizWaybillOrderService.selectBizWaybillOrderList(bizWaybillOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出运单管理列表
+     */
+    @RequiresPermissions("system:order:export")
+    @Log(title = "运单管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizWaybillOrder bizWaybillOrder)
+    {
+        List<BizWaybillOrder> list = bizWaybillOrderService.selectBizWaybillOrderList(bizWaybillOrder);
+        ExcelUtil<BizWaybillOrder> util = new ExcelUtil<BizWaybillOrder>(BizWaybillOrder.class);
+        util.exportExcel(response, list, "运单管理数据");
+    }
+
+    /**
+     * 获取运单管理详细信息
+     */
+    @RequiresPermissions("system:order:query")
+    @GetMapping(value = "/{waybillId}")
+    public AjaxResult getInfo(@PathVariable("waybillId") Long waybillId)
+    {
+        return success(bizWaybillOrderService.selectBizWaybillOrderByWaybillId(waybillId));
+    }
+
+    /**
+     * 新增运单管理
+     */
+    @RequiresPermissions("system:order:add")
+    @Log(title = "运单管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizWaybillOrder bizWaybillOrder)
+    {
+        return toAjax(bizWaybillOrderService.insertBizWaybillOrder(bizWaybillOrder));
+    }
+
+    /**
+     * 修改运单管理
+     */
+    @RequiresPermissions("system:order:edit")
+    @Log(title = "运单管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizWaybillOrder bizWaybillOrder)
+    {
+        return toAjax(bizWaybillOrderService.updateBizWaybillOrder(bizWaybillOrder));
+    }
+
+    /**
+     * 删除运单管理
+     */
+    @RequiresPermissions("system:order:remove")
+    @Log(title = "运单管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{waybillIds}")
+    public AjaxResult remove(@PathVariable Long[] waybillIds)
+    {
+        return toAjax(bizWaybillOrderService.deleteBizWaybillOrderByWaybillIds(waybillIds));
+    }
+}

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/RptFinancialMonthSummaryController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.RptFinancialMonthSummary;
+import com.ruoyi.logistics.service.IRptFinancialMonthSummaryService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 财务月度汇总Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/monthSummary")
+public class RptFinancialMonthSummaryController extends BaseController
+{
+    @Autowired
+    private IRptFinancialMonthSummaryService rptFinancialMonthSummaryService;
+
+    /**
+     * 查询财务月度汇总列表
+     */
+    @RequiresPermissions("system:monthSummary:list")
+    @GetMapping("/list")
+    public TableDataInfo list(RptFinancialMonthSummary rptFinancialMonthSummary)
+    {
+        startPage();
+        List<RptFinancialMonthSummary> list = rptFinancialMonthSummaryService.selectRptFinancialMonthSummaryList(rptFinancialMonthSummary);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出财务月度汇总列表
+     */
+    @RequiresPermissions("system:monthSummary:export")
+    @Log(title = "财务月度汇总", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RptFinancialMonthSummary rptFinancialMonthSummary)
+    {
+        List<RptFinancialMonthSummary> list = rptFinancialMonthSummaryService.selectRptFinancialMonthSummaryList(rptFinancialMonthSummary);
+        ExcelUtil<RptFinancialMonthSummary> util = new ExcelUtil<RptFinancialMonthSummary>(RptFinancialMonthSummary.class);
+        util.exportExcel(response, list, "财务月度汇总数据");
+    }
+
+    /**
+     * 获取财务月度汇总详细信息
+     */
+    @RequiresPermissions("system:monthSummary:query")
+    @GetMapping(value = "/{summaryId}")
+    public AjaxResult getInfo(@PathVariable("summaryId") Long summaryId)
+    {
+        return success(rptFinancialMonthSummaryService.selectRptFinancialMonthSummaryBySummaryId(summaryId));
+    }
+
+    /**
+     * 新增财务月度汇总
+     */
+    @RequiresPermissions("system:monthSummary:add")
+    @Log(title = "财务月度汇总", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RptFinancialMonthSummary rptFinancialMonthSummary)
+    {
+        return toAjax(rptFinancialMonthSummaryService.insertRptFinancialMonthSummary(rptFinancialMonthSummary));
+    }
+
+    /**
+     * 修改财务月度汇总
+     */
+    @RequiresPermissions("system:monthSummary:edit")
+    @Log(title = "财务月度汇总", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RptFinancialMonthSummary rptFinancialMonthSummary)
+    {
+        return toAjax(rptFinancialMonthSummaryService.updateRptFinancialMonthSummary(rptFinancialMonthSummary));
+    }
+
+    /**
+     * 删除财务月度汇总
+     */
+    @RequiresPermissions("system:monthSummary:remove")
+    @Log(title = "财务月度汇总", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{summaryIds}")
+    public AjaxResult remove(@PathVariable Long[] summaryIds)
+    {
+        return toAjax(rptFinancialMonthSummaryService.deleteRptFinancialMonthSummaryBySummaryIds(summaryIds));
+    }
+}

+ 105 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/SysCityController.java

@@ -0,0 +1,105 @@
+package com.ruoyi.logistics.controller;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+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.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.SysCity;
+import com.ruoyi.logistics.service.ISysCityService;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.web.page.TableDataInfo;
+
+/**
+ * 城市管理Controller
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/city")
+public class SysCityController extends BaseController
+{
+    @Autowired
+    private ISysCityService sysCityService;
+
+    /**
+     * 查询城市管理列表
+     */
+    @RequiresPermissions("system:city:list")
+    @GetMapping("/list")
+    public TableDataInfo list(SysCity sysCity)
+    {
+        startPage();
+        List<SysCity> list = sysCityService.selectSysCityList(sysCity);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出城市管理列表
+     */
+    @RequiresPermissions("system:city:export")
+    @Log(title = "城市管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysCity sysCity)
+    {
+        List<SysCity> list = sysCityService.selectSysCityList(sysCity);
+        ExcelUtil<SysCity> util = new ExcelUtil<SysCity>(SysCity.class);
+        util.exportExcel(response, list, "城市管理数据");
+    }
+
+    /**
+     * 获取城市管理详细信息
+     */
+    @RequiresPermissions("system:city:query")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(sysCityService.selectSysCityById(id));
+    }
+
+    /**
+     * 新增城市管理
+     */
+    @RequiresPermissions("system:city:add")
+    @Log(title = "城市管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SysCity sysCity)
+    {
+        return toAjax(sysCityService.insertSysCity(sysCity));
+    }
+
+    /**
+     * 修改城市管理
+     */
+    @RequiresPermissions("system:city:edit")
+    @Log(title = "城市管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody SysCity sysCity)
+    {
+        return toAjax(sysCityService.updateSysCity(sysCity));
+    }
+
+    /**
+     * 删除城市管理
+     */
+    @RequiresPermissions("system:city:remove")
+    @Log(title = "城市管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(sysCityService.deleteSysCityByIds(ids));
+    }
+}

+ 206 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizAddressBook.java

@@ -0,0 +1,206 @@
+package com.ruoyi.logistics.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 地址簿管理对象 biz_address_book
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class BizAddressBook extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 地址薄id */
+    private Long addressId;
+
+    /** 公司名称 */
+    @Excel(name = "公司名称")
+    private String companyName;
+
+    /** 联系人姓名 */
+    @Excel(name = "联系人姓名")
+    private String contactName;
+
+    /** 联系人电话 */
+    @Excel(name = "联系人电话")
+    private String contactPhone;
+
+    /** 省 */
+    @Excel(name = "省")
+    private String provinceName;
+
+    /** 市 */
+    @Excel(name = "市")
+    private String cityName;
+
+    /** 区/县 */
+    @Excel(name = "区/县")
+    private String countyName;
+
+    /** 详细地址 */
+    @Excel(name = "详细地址")
+    private String detailedAddress;
+
+    /** 是否默认 0非默认1默认 */
+    @Excel(name = "是否默认 0非默认1默认")
+    private String defaultFlag;
+
+    /** 部门ID */
+    @Excel(name = "部门ID")
+    private Long deptId;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    public void setAddressId(Long addressId) 
+    {
+        this.addressId = addressId;
+    }
+
+    public Long getAddressId() 
+    {
+        return addressId;
+    }
+
+    public void setCompanyName(String companyName) 
+    {
+        this.companyName = companyName;
+    }
+
+    public String getCompanyName() 
+    {
+        return companyName;
+    }
+
+    public void setContactName(String contactName) 
+    {
+        this.contactName = contactName;
+    }
+
+    public String getContactName() 
+    {
+        return contactName;
+    }
+
+    public void setContactPhone(String contactPhone) 
+    {
+        this.contactPhone = contactPhone;
+    }
+
+    public String getContactPhone() 
+    {
+        return contactPhone;
+    }
+
+    public void setProvinceName(String provinceName) 
+    {
+        this.provinceName = provinceName;
+    }
+
+    public String getProvinceName() 
+    {
+        return provinceName;
+    }
+
+    public void setCityName(String cityName) 
+    {
+        this.cityName = cityName;
+    }
+
+    public String getCityName() 
+    {
+        return cityName;
+    }
+
+    public void setCountyName(String countyName) 
+    {
+        this.countyName = countyName;
+    }
+
+    public String getCountyName() 
+    {
+        return countyName;
+    }
+
+    public void setDetailedAddress(String detailedAddress) 
+    {
+        this.detailedAddress = detailedAddress;
+    }
+
+    public String getDetailedAddress() 
+    {
+        return detailedAddress;
+    }
+
+    public void setDefaultFlag(String defaultFlag) 
+    {
+        this.defaultFlag = defaultFlag;
+    }
+
+    public String getDefaultFlag() 
+    {
+        return defaultFlag;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("addressId", getAddressId())
+            .append("companyName", getCompanyName())
+            .append("contactName", getContactName())
+            .append("contactPhone", getContactPhone())
+            .append("provinceName", getProvinceName())
+            .append("cityName", getCityName())
+            .append("countyName", getCountyName())
+            .append("detailedAddress", getDetailedAddress())
+            .append("defaultFlag", getDefaultFlag())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .append("remark", getRemark())
+            .append("delFlag", getDelFlag())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .toString();
+    }
+}

+ 176 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizBanner.java

@@ -0,0 +1,176 @@
+package com.ruoyi.logistics.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 系统轮播图对象 biz_banner
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class BizBanner extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 轮播图id */
+    private Long bannerId;
+
+    /** 轮播图名称 */
+    @Excel(name = "轮播图名称")
+    private String bannerName;
+
+    /** 图片存储路径 */
+    @Excel(name = "图片存储路径")
+    private String imageUrl;
+
+    /** 点击图片时跳转的链接 */
+    @Excel(name = "点击图片时跳转的链接")
+    private String linkUrl;
+
+    /** 排序值 */
+    @Excel(name = "排序值")
+    private Long sortOrder;
+
+    /** 是否激活显示 0表示不显示,1表示显示 */
+    @Excel(name = "是否激活显示 0表示不显示,1表示显示")
+    private String isActive;
+
+    /** 系统类型 0管理端 1小程序 */
+    @Excel(name = "系统类型 0管理端 1小程序")
+    private String sysType;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 部门id */
+    @Excel(name = "部门id")
+    private Long deptId;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    public void setBannerId(Long bannerId) 
+    {
+        this.bannerId = bannerId;
+    }
+
+    public Long getBannerId() 
+    {
+        return bannerId;
+    }
+
+    public void setBannerName(String bannerName) 
+    {
+        this.bannerName = bannerName;
+    }
+
+    public String getBannerName() 
+    {
+        return bannerName;
+    }
+
+    public void setImageUrl(String imageUrl) 
+    {
+        this.imageUrl = imageUrl;
+    }
+
+    public String getImageUrl() 
+    {
+        return imageUrl;
+    }
+
+    public void setLinkUrl(String linkUrl) 
+    {
+        this.linkUrl = linkUrl;
+    }
+
+    public String getLinkUrl() 
+    {
+        return linkUrl;
+    }
+
+    public void setSortOrder(Long sortOrder) 
+    {
+        this.sortOrder = sortOrder;
+    }
+
+    public Long getSortOrder() 
+    {
+        return sortOrder;
+    }
+
+    public void setIsActive(String isActive) 
+    {
+        this.isActive = isActive;
+    }
+
+    public String getIsActive() 
+    {
+        return isActive;
+    }
+
+    public void setSysType(String sysType) 
+    {
+        this.sysType = sysType;
+    }
+
+    public String getSysType() 
+    {
+        return sysType;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("bannerId", getBannerId())
+            .append("bannerName", getBannerName())
+            .append("imageUrl", getImageUrl())
+            .append("linkUrl", getLinkUrl())
+            .append("sortOrder", getSortOrder())
+            .append("isActive", getIsActive())
+            .append("sysType", getSysType())
+            .append("remark", getRemark())
+            .append("delFlag", getDelFlag())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .toString();
+    }
+}

+ 191 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizFinancialAdjustmentRecord.java

@@ -0,0 +1,191 @@
+package com.ruoyi.logistics.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 调账流水记录对象 biz_financial_adjustment_record
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class BizFinancialAdjustmentRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 调账流水id */
+    private Long financialAdjustId;
+
+    /** 运单号 */
+    @Excel(name = "运单号")
+    private String waybillNo;
+
+    /** 费用明细id */
+    @Excel(name = "费用明细id")
+    private Long waybillCostDetailId;
+
+    /** 调账类型 */
+    @Excel(name = "调账类型")
+    private String adjustmentType;
+
+    /** 原金额 */
+    @Excel(name = "原金额")
+    private Long originalAmount;
+
+    /** 调整后金额 */
+    @Excel(name = "调整后金额")
+    private Long adjustedAmount;
+
+    /** 调整金额 */
+    @Excel(name = "调整金额")
+    private Long adjustmentAmount;
+
+    /** 调账原因 */
+    @Excel(name = "调账原因")
+    private String adjustmentReason;
+
+    /** 部门ID */
+    @Excel(name = "部门ID")
+    private Long deptId;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    /** 删除标志 */
+    private String delFlag;
+
+    public void setFinancialAdjustId(Long financialAdjustId) 
+    {
+        this.financialAdjustId = financialAdjustId;
+    }
+
+    public Long getFinancialAdjustId() 
+    {
+        return financialAdjustId;
+    }
+
+    public void setWaybillNo(String waybillNo) 
+    {
+        this.waybillNo = waybillNo;
+    }
+
+    public String getWaybillNo() 
+    {
+        return waybillNo;
+    }
+
+    public void setWaybillCostDetailId(Long waybillCostDetailId) 
+    {
+        this.waybillCostDetailId = waybillCostDetailId;
+    }
+
+    public Long getWaybillCostDetailId() 
+    {
+        return waybillCostDetailId;
+    }
+
+    public void setAdjustmentType(String adjustmentType) 
+    {
+        this.adjustmentType = adjustmentType;
+    }
+
+    public String getAdjustmentType() 
+    {
+        return adjustmentType;
+    }
+
+    public void setOriginalAmount(Long originalAmount) 
+    {
+        this.originalAmount = originalAmount;
+    }
+
+    public Long getOriginalAmount() 
+    {
+        return originalAmount;
+    }
+
+    public void setAdjustedAmount(Long adjustedAmount) 
+    {
+        this.adjustedAmount = adjustedAmount;
+    }
+
+    public Long getAdjustedAmount() 
+    {
+        return adjustedAmount;
+    }
+
+    public void setAdjustmentAmount(Long adjustmentAmount) 
+    {
+        this.adjustmentAmount = adjustmentAmount;
+    }
+
+    public Long getAdjustmentAmount() 
+    {
+        return adjustmentAmount;
+    }
+
+    public void setAdjustmentReason(String adjustmentReason) 
+    {
+        this.adjustmentReason = adjustmentReason;
+    }
+
+    public String getAdjustmentReason() 
+    {
+        return adjustmentReason;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("financialAdjustId", getFinancialAdjustId())
+            .append("waybillNo", getWaybillNo())
+            .append("waybillCostDetailId", getWaybillCostDetailId())
+            .append("adjustmentType", getAdjustmentType())
+            .append("originalAmount", getOriginalAmount())
+            .append("adjustedAmount", getAdjustedAmount())
+            .append("adjustmentAmount", getAdjustmentAmount())
+            .append("adjustmentReason", getAdjustmentReason())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .toString();
+    }
+}

+ 161 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizInancialFeeItems.java

@@ -0,0 +1,161 @@
+package com.ruoyi.logistics.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 费用类型管理对象 biz_inancial_fee_items
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class BizInancialFeeItems extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 费用项目id */
+    private Long feeItemId;
+
+    /** 费用项目编码 */
+    @Excel(name = "费用项目编码")
+    private String feeItemCode;
+
+    /** 费用项目名称 */
+    @Excel(name = "费用项目名称")
+    private String feeItemName;
+
+    /** 外部渠道 sf/jd */
+    @Excel(name = "外部渠道 sf/jd")
+    private String feeItemCategory;
+
+    /** 外部费用编码 */
+    @Excel(name = "外部费用编码")
+    private String extFeeCode;
+
+    /** 外部费用名称 */
+    @Excel(name = "外部费用名称")
+    private String extFeeName;
+
+    /** 部门ID */
+    @Excel(name = "部门ID")
+    private Long deptId;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    /** 删除标志 */
+    private String delFlag;
+
+    public void setFeeItemId(Long feeItemId) 
+    {
+        this.feeItemId = feeItemId;
+    }
+
+    public Long getFeeItemId() 
+    {
+        return feeItemId;
+    }
+
+    public void setFeeItemCode(String feeItemCode) 
+    {
+        this.feeItemCode = feeItemCode;
+    }
+
+    public String getFeeItemCode() 
+    {
+        return feeItemCode;
+    }
+
+    public void setFeeItemName(String feeItemName) 
+    {
+        this.feeItemName = feeItemName;
+    }
+
+    public String getFeeItemName() 
+    {
+        return feeItemName;
+    }
+
+    public void setFeeItemCategory(String feeItemCategory) 
+    {
+        this.feeItemCategory = feeItemCategory;
+    }
+
+    public String getFeeItemCategory() 
+    {
+        return feeItemCategory;
+    }
+
+    public void setExtFeeCode(String extFeeCode) 
+    {
+        this.extFeeCode = extFeeCode;
+    }
+
+    public String getExtFeeCode() 
+    {
+        return extFeeCode;
+    }
+
+    public void setExtFeeName(String extFeeName) 
+    {
+        this.extFeeName = extFeeName;
+    }
+
+    public String getExtFeeName() 
+    {
+        return extFeeName;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("feeItemId", getFeeItemId())
+            .append("feeItemCode", getFeeItemCode())
+            .append("feeItemName", getFeeItemName())
+            .append("feeItemCategory", getFeeItemCategory())
+            .append("extFeeCode", getExtFeeCode())
+            .append("extFeeName", getExtFeeName())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .toString();
+    }
+}

+ 207 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizWaybillCostDetails.java

@@ -0,0 +1,207 @@
+package com.ruoyi.logistics.domain;
+
+import java.math.BigDecimal;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 运单明细对象 biz_waybill_cost_details
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class BizWaybillCostDetails extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 运单明细id */
+    private Long waybillDetailId;
+
+    /** 运单ID */
+    @Excel(name = "运单ID")
+    private Long waybillId;
+
+    /** 外部运单号 */
+    @Excel(name = "外部运单号")
+    private String externalWaybillNo;
+
+    /** 费用项目编码 */
+    @Excel(name = "费用项目编码")
+    private String feeItemCode;
+
+    /** 费用项目名称 */
+    @Excel(name = "费用项目名称")
+    private String feeItemName;
+
+    /** 费用名称 */
+    @Excel(name = "费用名称")
+    private String feeName;
+
+    /** 金额 */
+    @Excel(name = "金额")
+    private BigDecimal amount;
+
+    /** 金额*费率 */
+    @Excel(name = "金额*费率")
+    private BigDecimal rateAmount;
+
+    /** 调整金额 */
+    @Excel(name = "调整金额")
+    private BigDecimal adjustAmount;
+
+    /** 部门id */
+    @Excel(name = "部门id")
+    private Long deptId;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 删除标志 (0代表存在 2代表删除) */
+    private String delFlag;
+
+    public void setWaybillDetailId(Long waybillDetailId) 
+    {
+        this.waybillDetailId = waybillDetailId;
+    }
+
+    public Long getWaybillDetailId() 
+    {
+        return waybillDetailId;
+    }
+
+    public void setWaybillId(Long waybillId) 
+    {
+        this.waybillId = waybillId;
+    }
+
+    public Long getWaybillId() 
+    {
+        return waybillId;
+    }
+
+    public void setExternalWaybillNo(String externalWaybillNo) 
+    {
+        this.externalWaybillNo = externalWaybillNo;
+    }
+
+    public String getExternalWaybillNo() 
+    {
+        return externalWaybillNo;
+    }
+
+    public void setFeeItemCode(String feeItemCode) 
+    {
+        this.feeItemCode = feeItemCode;
+    }
+
+    public String getFeeItemCode() 
+    {
+        return feeItemCode;
+    }
+
+    public void setFeeItemName(String feeItemName) 
+    {
+        this.feeItemName = feeItemName;
+    }
+
+    public String getFeeItemName() 
+    {
+        return feeItemName;
+    }
+
+    public void setFeeName(String feeName) 
+    {
+        this.feeName = feeName;
+    }
+
+    public String getFeeName() 
+    {
+        return feeName;
+    }
+
+    public void setAmount(BigDecimal amount) 
+    {
+        this.amount = amount;
+    }
+
+    public BigDecimal getAmount() 
+    {
+        return amount;
+    }
+
+    public void setRateAmount(BigDecimal rateAmount) 
+    {
+        this.rateAmount = rateAmount;
+    }
+
+    public BigDecimal getRateAmount() 
+    {
+        return rateAmount;
+    }
+
+    public void setAdjustAmount(BigDecimal adjustAmount) 
+    {
+        this.adjustAmount = adjustAmount;
+    }
+
+    public BigDecimal getAdjustAmount() 
+    {
+        return adjustAmount;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("waybillDetailId", getWaybillDetailId())
+            .append("waybillId", getWaybillId())
+            .append("externalWaybillNo", getExternalWaybillNo())
+            .append("feeItemCode", getFeeItemCode())
+            .append("feeItemName", getFeeItemName())
+            .append("feeName", getFeeName())
+            .append("amount", getAmount())
+            .append("rateAmount", getRateAmount())
+            .append("adjustAmount", getAdjustAmount())
+            .append("remark", getRemark())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .toString();
+    }
+}

+ 528 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizWaybillOrder.java

@@ -0,0 +1,528 @@
+package com.ruoyi.logistics.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 运单管理对象 biz_waybill_order
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class BizWaybillOrder extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 运单id */
+    private Long waybillId;
+
+    /** 运单号 内部生成 */
+    @Excel(name = "运单号 内部生成")
+    private String waybillNo;
+
+    /** 外部运单号 JD/SF的运单号 */
+    @Excel(name = "外部运单号 JD/SF的运单号")
+    private String externalWaybillNo;
+
+    /** 订单类型 1-非时效件(京东),2-时效件(顺丰) */
+    @Excel(name = "订单类型 1-非时效件(京东),2-时效件(顺丰)")
+    private Integer orderType;
+
+    /** 发件人姓名 */
+    @Excel(name = "发件人姓名")
+    private String senderName;
+
+    /** 发件人电话 */
+    @Excel(name = "发件人电话")
+    private String senderPhone;
+
+    /** 发件省 */
+    @Excel(name = "发件省")
+    private String senderProvince;
+
+    /** 发件市 */
+    @Excel(name = "发件市")
+    private String senderCity;
+
+    /** 发件区县 */
+    @Excel(name = "发件区县")
+    private String senderCounty;
+
+    /** 发件详细地址 */
+    @Excel(name = "发件详细地址")
+    private String senderAddress;
+
+    /** 收件人姓名 */
+    @Excel(name = "收件人姓名")
+    private String receiverName;
+
+    /** 收件人电话 */
+    @Excel(name = "收件人电话")
+    private String receiverPhone;
+
+    /** 收件省 */
+    @Excel(name = "收件省")
+    private String receiverProvince;
+
+    /** 收件市 */
+    @Excel(name = "收件市")
+    private String receiverCity;
+
+    /** 收件区县 */
+    @Excel(name = "收件区县")
+    private String receiverCounty;
+
+    /** 收件详细地址 */
+    @Excel(name = "收件详细地址")
+    private String receiverAddress;
+
+    /** 货物名称 */
+    @Excel(name = "货物名称")
+    private String goodsName;
+
+    /** 货物重量 */
+    @Excel(name = "货物重量")
+    private BigDecimal goodsWeight;
+
+    /** 货物体积 */
+    @Excel(name = "货物体积")
+    private BigDecimal goodsVolume;
+
+    /** 货物数量 */
+    @Excel(name = "货物数量")
+    private Long goodsQty;
+
+    /** 订单状态 */
+    @Excel(name = "订单状态")
+    private Integer orderStatus;
+
+    /** 取件类型 */
+    @Excel(name = "取件类型")
+    private Integer pickupType;
+
+    /** 上门取件时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "上门取件时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date sendStartTime;
+
+    /** 揽收时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "揽收时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date pickupTime;
+
+    /** 派送时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "派送时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date deliveryTime;
+
+    /** 签收时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "签收时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date signTime;
+
+    /** 取消原因 */
+    @Excel(name = "取消原因")
+    private String cancelReason;
+
+    /** 父运单ID */
+    @Excel(name = "父运单ID")
+    private Long parentWaybillId;
+
+    /** 是否结算开票 */
+    @Excel(name = "是否结算开票")
+    private String invoiceFlag;
+
+    /** 是否调账 */
+    @Excel(name = "是否调账")
+    private String adjustFlag;
+
+    /** 删除标志 (0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 部门ID */
+    @Excel(name = "部门ID")
+    private Long deptId;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    public void setWaybillId(Long waybillId) 
+    {
+        this.waybillId = waybillId;
+    }
+
+    public Long getWaybillId() 
+    {
+        return waybillId;
+    }
+
+    public void setWaybillNo(String waybillNo) 
+    {
+        this.waybillNo = waybillNo;
+    }
+
+    public String getWaybillNo() 
+    {
+        return waybillNo;
+    }
+
+    public void setExternalWaybillNo(String externalWaybillNo) 
+    {
+        this.externalWaybillNo = externalWaybillNo;
+    }
+
+    public String getExternalWaybillNo() 
+    {
+        return externalWaybillNo;
+    }
+
+    public void setOrderType(Integer orderType) 
+    {
+        this.orderType = orderType;
+    }
+
+    public Integer getOrderType() 
+    {
+        return orderType;
+    }
+
+    public void setSenderName(String senderName) 
+    {
+        this.senderName = senderName;
+    }
+
+    public String getSenderName() 
+    {
+        return senderName;
+    }
+
+    public void setSenderPhone(String senderPhone) 
+    {
+        this.senderPhone = senderPhone;
+    }
+
+    public String getSenderPhone() 
+    {
+        return senderPhone;
+    }
+
+    public void setSenderProvince(String senderProvince) 
+    {
+        this.senderProvince = senderProvince;
+    }
+
+    public String getSenderProvince() 
+    {
+        return senderProvince;
+    }
+
+    public void setSenderCity(String senderCity) 
+    {
+        this.senderCity = senderCity;
+    }
+
+    public String getSenderCity() 
+    {
+        return senderCity;
+    }
+
+    public void setSenderCounty(String senderCounty) 
+    {
+        this.senderCounty = senderCounty;
+    }
+
+    public String getSenderCounty() 
+    {
+        return senderCounty;
+    }
+
+    public void setSenderAddress(String senderAddress) 
+    {
+        this.senderAddress = senderAddress;
+    }
+
+    public String getSenderAddress() 
+    {
+        return senderAddress;
+    }
+
+    public void setReceiverName(String receiverName) 
+    {
+        this.receiverName = receiverName;
+    }
+
+    public String getReceiverName() 
+    {
+        return receiverName;
+    }
+
+    public void setReceiverPhone(String receiverPhone) 
+    {
+        this.receiverPhone = receiverPhone;
+    }
+
+    public String getReceiverPhone() 
+    {
+        return receiverPhone;
+    }
+
+    public void setReceiverProvince(String receiverProvince) 
+    {
+        this.receiverProvince = receiverProvince;
+    }
+
+    public String getReceiverProvince() 
+    {
+        return receiverProvince;
+    }
+
+    public void setReceiverCity(String receiverCity) 
+    {
+        this.receiverCity = receiverCity;
+    }
+
+    public String getReceiverCity() 
+    {
+        return receiverCity;
+    }
+
+    public void setReceiverCounty(String receiverCounty) 
+    {
+        this.receiverCounty = receiverCounty;
+    }
+
+    public String getReceiverCounty() 
+    {
+        return receiverCounty;
+    }
+
+    public void setReceiverAddress(String receiverAddress) 
+    {
+        this.receiverAddress = receiverAddress;
+    }
+
+    public String getReceiverAddress() 
+    {
+        return receiverAddress;
+    }
+
+    public void setGoodsName(String goodsName) 
+    {
+        this.goodsName = goodsName;
+    }
+
+    public String getGoodsName() 
+    {
+        return goodsName;
+    }
+
+    public void setGoodsWeight(BigDecimal goodsWeight) 
+    {
+        this.goodsWeight = goodsWeight;
+    }
+
+    public BigDecimal getGoodsWeight() 
+    {
+        return goodsWeight;
+    }
+
+    public void setGoodsVolume(BigDecimal goodsVolume) 
+    {
+        this.goodsVolume = goodsVolume;
+    }
+
+    public BigDecimal getGoodsVolume() 
+    {
+        return goodsVolume;
+    }
+
+    public void setGoodsQty(Long goodsQty) 
+    {
+        this.goodsQty = goodsQty;
+    }
+
+    public Long getGoodsQty() 
+    {
+        return goodsQty;
+    }
+
+    public void setOrderStatus(Integer orderStatus) 
+    {
+        this.orderStatus = orderStatus;
+    }
+
+    public Integer getOrderStatus() 
+    {
+        return orderStatus;
+    }
+
+    public void setPickupType(Integer pickupType) 
+    {
+        this.pickupType = pickupType;
+    }
+
+    public Integer getPickupType() 
+    {
+        return pickupType;
+    }
+
+    public void setSendStartTime(Date sendStartTime) 
+    {
+        this.sendStartTime = sendStartTime;
+    }
+
+    public Date getSendStartTime() 
+    {
+        return sendStartTime;
+    }
+
+    public void setPickupTime(Date pickupTime) 
+    {
+        this.pickupTime = pickupTime;
+    }
+
+    public Date getPickupTime() 
+    {
+        return pickupTime;
+    }
+
+    public void setDeliveryTime(Date deliveryTime) 
+    {
+        this.deliveryTime = deliveryTime;
+    }
+
+    public Date getDeliveryTime() 
+    {
+        return deliveryTime;
+    }
+
+    public void setSignTime(Date signTime) 
+    {
+        this.signTime = signTime;
+    }
+
+    public Date getSignTime() 
+    {
+        return signTime;
+    }
+
+    public void setCancelReason(String cancelReason) 
+    {
+        this.cancelReason = cancelReason;
+    }
+
+    public String getCancelReason() 
+    {
+        return cancelReason;
+    }
+
+    public void setParentWaybillId(Long parentWaybillId) 
+    {
+        this.parentWaybillId = parentWaybillId;
+    }
+
+    public Long getParentWaybillId() 
+    {
+        return parentWaybillId;
+    }
+
+    public void setInvoiceFlag(String invoiceFlag) 
+    {
+        this.invoiceFlag = invoiceFlag;
+    }
+
+    public String getInvoiceFlag() 
+    {
+        return invoiceFlag;
+    }
+
+    public void setAdjustFlag(String adjustFlag) 
+    {
+        this.adjustFlag = adjustFlag;
+    }
+
+    public String getAdjustFlag() 
+    {
+        return adjustFlag;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("waybillId", getWaybillId())
+            .append("waybillNo", getWaybillNo())
+            .append("externalWaybillNo", getExternalWaybillNo())
+            .append("orderType", getOrderType())
+            .append("senderName", getSenderName())
+            .append("senderPhone", getSenderPhone())
+            .append("senderProvince", getSenderProvince())
+            .append("senderCity", getSenderCity())
+            .append("senderCounty", getSenderCounty())
+            .append("senderAddress", getSenderAddress())
+            .append("receiverName", getReceiverName())
+            .append("receiverPhone", getReceiverPhone())
+            .append("receiverProvince", getReceiverProvince())
+            .append("receiverCity", getReceiverCity())
+            .append("receiverCounty", getReceiverCounty())
+            .append("receiverAddress", getReceiverAddress())
+            .append("goodsName", getGoodsName())
+            .append("goodsWeight", getGoodsWeight())
+            .append("goodsVolume", getGoodsVolume())
+            .append("goodsQty", getGoodsQty())
+            .append("orderStatus", getOrderStatus())
+            .append("pickupType", getPickupType())
+            .append("sendStartTime", getSendStartTime())
+            .append("pickupTime", getPickupTime())
+            .append("deliveryTime", getDeliveryTime())
+            .append("signTime", getSignTime())
+            .append("cancelReason", getCancelReason())
+            .append("parentWaybillId", getParentWaybillId())
+            .append("invoiceFlag", getInvoiceFlag())
+            .append("adjustFlag", getAdjustFlag())
+            .append("remark", getRemark())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .toString();
+    }
+}

+ 13 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/LogisticsOrder.java

@@ -0,0 +1,13 @@
+package com.ruoyi.logistics.domain;
+
+
+import com.ruoyi.common.core.web.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+public class LogisticsOrder extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    //物流订单类型
+    private String orderType;
+}

+ 206 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/RptFinancialMonthSummary.java

@@ -0,0 +1,206 @@
+package com.ruoyi.logistics.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 财务月度汇总对象 rpt_financial_month_summary
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class RptFinancialMonthSummary extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 月度汇总id */
+    private Long summaryId;
+
+    /** 汇总月份 */
+    @Excel(name = "汇总月份")
+    private String summaryMonth;
+
+    /** 应付金额 */
+    @Excel(name = "应付金额")
+    private String payableAmount;
+
+    /** 交易笔数 */
+    @Excel(name = "交易笔数")
+    private String transactionCount;
+
+    /** 账单状态 1.待对账 2.已对账 3.待开票 4.已开票 */
+    @Excel(name = "账单状态 1.待对账 2.已对账 3.待开票 4.已开票")
+    private String status;
+
+    /** 删除标志 */
+    private String delFlag;
+
+    /** 部门ID */
+    @Excel(name = "部门ID")
+    private Long deptId;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 百旺开票单据编号 */
+    @Excel(name = "百旺开票单据编号")
+    private String bwDjbh;
+
+    /** 电子发票pdf地址 */
+    @Excel(name = "电子发票pdf地址")
+    private String bwDzfpPdfUrl;
+
+    /** 电子发票ofd地址 */
+    @Excel(name = "电子发票ofd地址")
+    private String bwDzfpOfdUrl;
+
+    /** 电子发票xml地址 */
+    @Excel(name = "电子发票xml地址")
+    private String bwDzfpXmlUrl;
+
+    public void setSummaryId(Long summaryId) 
+    {
+        this.summaryId = summaryId;
+    }
+
+    public Long getSummaryId() 
+    {
+        return summaryId;
+    }
+
+    public void setSummaryMonth(String summaryMonth) 
+    {
+        this.summaryMonth = summaryMonth;
+    }
+
+    public String getSummaryMonth() 
+    {
+        return summaryMonth;
+    }
+
+    public void setPayableAmount(String payableAmount) 
+    {
+        this.payableAmount = payableAmount;
+    }
+
+    public String getPayableAmount() 
+    {
+        return payableAmount;
+    }
+
+    public void setTransactionCount(String transactionCount) 
+    {
+        this.transactionCount = transactionCount;
+    }
+
+    public String getTransactionCount() 
+    {
+        return transactionCount;
+    }
+
+    public void setStatus(String status) 
+    {
+        this.status = status;
+    }
+
+    public String getStatus() 
+    {
+        return status;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    public void setDeptId(Long deptId) 
+    {
+        this.deptId = deptId;
+    }
+
+    public Long getDeptId() 
+    {
+        return deptId;
+    }
+
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+
+    public void setBwDjbh(String bwDjbh) 
+    {
+        this.bwDjbh = bwDjbh;
+    }
+
+    public String getBwDjbh() 
+    {
+        return bwDjbh;
+    }
+
+    public void setBwDzfpPdfUrl(String bwDzfpPdfUrl) 
+    {
+        this.bwDzfpPdfUrl = bwDzfpPdfUrl;
+    }
+
+    public String getBwDzfpPdfUrl() 
+    {
+        return bwDzfpPdfUrl;
+    }
+
+    public void setBwDzfpOfdUrl(String bwDzfpOfdUrl) 
+    {
+        this.bwDzfpOfdUrl = bwDzfpOfdUrl;
+    }
+
+    public String getBwDzfpOfdUrl() 
+    {
+        return bwDzfpOfdUrl;
+    }
+
+    public void setBwDzfpXmlUrl(String bwDzfpXmlUrl) 
+    {
+        this.bwDzfpXmlUrl = bwDzfpXmlUrl;
+    }
+
+    public String getBwDzfpXmlUrl() 
+    {
+        return bwDzfpXmlUrl;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("summaryId", getSummaryId())
+            .append("summaryMonth", getSummaryMonth())
+            .append("payableAmount", getPayableAmount())
+            .append("transactionCount", getTransactionCount())
+            .append("status", getStatus())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .append("deptId", getDeptId())
+            .append("userId", getUserId())
+            .append("bwDjbh", getBwDjbh())
+            .append("bwDzfpPdfUrl", getBwDzfpPdfUrl())
+            .append("bwDzfpOfdUrl", getBwDzfpOfdUrl())
+            .append("bwDzfpXmlUrl", getBwDzfpXmlUrl())
+            .toString();
+    }
+}

+ 191 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/SysCity.java

@@ -0,0 +1,191 @@
+package com.ruoyi.logistics.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.core.annotation.Excel;
+import com.ruoyi.common.core.web.domain.BaseEntity;
+
+/**
+ * 城市管理对象 sys_city
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public class SysCity extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 城市id */
+    @Excel(name = "城市id")
+    private Long cityId;
+
+    /** 省市级别 */
+    @Excel(name = "省市级别")
+    private Long level;
+
+    /** 父级id */
+    @Excel(name = "父级id")
+    private Long parentId;
+
+    /** 区号 */
+    @Excel(name = "区号")
+    private String areaCode;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 合并名称 */
+    @Excel(name = "合并名称")
+    private String mergerName;
+
+    /** 经度 */
+    @Excel(name = "经度")
+    private String lng;
+
+    /** 纬度 */
+    @Excel(name = "纬度")
+    private String lat;
+
+    /** 是否展示 */
+    @Excel(name = "是否展示")
+    private Integer isShow;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+
+    public void setCityId(Long cityId) 
+    {
+        this.cityId = cityId;
+    }
+
+    public Long getCityId() 
+    {
+        return cityId;
+    }
+
+    public void setLevel(Long level) 
+    {
+        this.level = level;
+    }
+
+    public Long getLevel() 
+    {
+        return level;
+    }
+
+    public void setParentId(Long parentId) 
+    {
+        this.parentId = parentId;
+    }
+
+    public Long getParentId() 
+    {
+        return parentId;
+    }
+
+    public void setAreaCode(String areaCode) 
+    {
+        this.areaCode = areaCode;
+    }
+
+    public String getAreaCode() 
+    {
+        return areaCode;
+    }
+
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+
+    public void setMergerName(String mergerName) 
+    {
+        this.mergerName = mergerName;
+    }
+
+    public String getMergerName() 
+    {
+        return mergerName;
+    }
+
+    public void setLng(String lng) 
+    {
+        this.lng = lng;
+    }
+
+    public String getLng() 
+    {
+        return lng;
+    }
+
+    public void setLat(String lat) 
+    {
+        this.lat = lat;
+    }
+
+    public String getLat() 
+    {
+        return lat;
+    }
+
+    public void setIsShow(Integer isShow) 
+    {
+        this.isShow = isShow;
+    }
+
+    public Integer getIsShow() 
+    {
+        return isShow;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("cityId", getCityId())
+            .append("level", getLevel())
+            .append("parentId", getParentId())
+            .append("areaCode", getAreaCode())
+            .append("name", getName())
+            .append("mergerName", getMergerName())
+            .append("lng", getLng())
+            .append("lat", getLat())
+            .append("isShow", getIsShow())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("createBy", getCreateBy())
+            .append("updateBy", getUpdateBy())
+            .append("remark", getRemark())
+            .append("delFlag", getDelFlag())
+            .toString();
+    }
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizAddressBookMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizAddressBook;
+
+/**
+ * 地址簿管理Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface BizAddressBookMapper 
+{
+    /**
+     * 查询地址簿管理
+     * 
+     * @param addressId 地址簿管理主键
+     * @return 地址簿管理
+     */
+    public BizAddressBook selectBizAddressBookByAddressId(Long addressId);
+
+    /**
+     * 查询地址簿管理列表
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 地址簿管理集合
+     */
+    public List<BizAddressBook> selectBizAddressBookList(BizAddressBook bizAddressBook);
+
+    /**
+     * 新增地址簿管理
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 结果
+     */
+    public int insertBizAddressBook(BizAddressBook bizAddressBook);
+
+    /**
+     * 修改地址簿管理
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 结果
+     */
+    public int updateBizAddressBook(BizAddressBook bizAddressBook);
+
+    /**
+     * 删除地址簿管理
+     * 
+     * @param addressId 地址簿管理主键
+     * @return 结果
+     */
+    public int deleteBizAddressBookByAddressId(Long addressId);
+
+    /**
+     * 批量删除地址簿管理
+     * 
+     * @param addressIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBizAddressBookByAddressIds(Long[] addressIds);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizBannerMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizBanner;
+
+/**
+ * 系统轮播图Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface BizBannerMapper 
+{
+    /**
+     * 查询系统轮播图
+     * 
+     * @param bannerId 系统轮播图主键
+     * @return 系统轮播图
+     */
+    public BizBanner selectBizBannerByBannerId(Long bannerId);
+
+    /**
+     * 查询系统轮播图列表
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 系统轮播图集合
+     */
+    public List<BizBanner> selectBizBannerList(BizBanner bizBanner);
+
+    /**
+     * 新增系统轮播图
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 结果
+     */
+    public int insertBizBanner(BizBanner bizBanner);
+
+    /**
+     * 修改系统轮播图
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 结果
+     */
+    public int updateBizBanner(BizBanner bizBanner);
+
+    /**
+     * 删除系统轮播图
+     * 
+     * @param bannerId 系统轮播图主键
+     * @return 结果
+     */
+    public int deleteBizBannerByBannerId(Long bannerId);
+
+    /**
+     * 批量删除系统轮播图
+     * 
+     * @param bannerIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBizBannerByBannerIds(Long[] bannerIds);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizFinancialAdjustmentRecordMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord;
+
+/**
+ * 调账流水记录Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface BizFinancialAdjustmentRecordMapper 
+{
+    /**
+     * 查询调账流水记录
+     * 
+     * @param financialAdjustId 调账流水记录主键
+     * @return 调账流水记录
+     */
+    public BizFinancialAdjustmentRecord selectBizFinancialAdjustmentRecordByFinancialAdjustId(Long financialAdjustId);
+
+    /**
+     * 查询调账流水记录列表
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 调账流水记录集合
+     */
+    public List<BizFinancialAdjustmentRecord> selectBizFinancialAdjustmentRecordList(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord);
+
+    /**
+     * 新增调账流水记录
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 结果
+     */
+    public int insertBizFinancialAdjustmentRecord(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord);
+
+    /**
+     * 修改调账流水记录
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 结果
+     */
+    public int updateBizFinancialAdjustmentRecord(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord);
+
+    /**
+     * 删除调账流水记录
+     * 
+     * @param financialAdjustId 调账流水记录主键
+     * @return 结果
+     */
+    public int deleteBizFinancialAdjustmentRecordByFinancialAdjustId(Long financialAdjustId);
+
+    /**
+     * 批量删除调账流水记录
+     * 
+     * @param financialAdjustIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBizFinancialAdjustmentRecordByFinancialAdjustIds(Long[] financialAdjustIds);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizInancialFeeItemsMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizInancialFeeItems;
+
+/**
+ * 费用类型管理Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface BizInancialFeeItemsMapper 
+{
+    /**
+     * 查询费用类型管理
+     * 
+     * @param feeItemId 费用类型管理主键
+     * @return 费用类型管理
+     */
+    public BizInancialFeeItems selectBizInancialFeeItemsByFeeItemId(Long feeItemId);
+
+    /**
+     * 查询费用类型管理列表
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 费用类型管理集合
+     */
+    public List<BizInancialFeeItems> selectBizInancialFeeItemsList(BizInancialFeeItems bizInancialFeeItems);
+
+    /**
+     * 新增费用类型管理
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 结果
+     */
+    public int insertBizInancialFeeItems(BizInancialFeeItems bizInancialFeeItems);
+
+    /**
+     * 修改费用类型管理
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 结果
+     */
+    public int updateBizInancialFeeItems(BizInancialFeeItems bizInancialFeeItems);
+
+    /**
+     * 删除费用类型管理
+     * 
+     * @param feeItemId 费用类型管理主键
+     * @return 结果
+     */
+    public int deleteBizInancialFeeItemsByFeeItemId(Long feeItemId);
+
+    /**
+     * 批量删除费用类型管理
+     * 
+     * @param feeItemIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBizInancialFeeItemsByFeeItemIds(Long[] feeItemIds);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillCostDetailsMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizWaybillCostDetails;
+
+/**
+ * 运单明细Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface BizWaybillCostDetailsMapper 
+{
+    /**
+     * 查询运单明细
+     * 
+     * @param waybillDetailId 运单明细主键
+     * @return 运单明细
+     */
+    public BizWaybillCostDetails selectBizWaybillCostDetailsByWaybillDetailId(Long waybillDetailId);
+
+    /**
+     * 查询运单明细列表
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 运单明细集合
+     */
+    public List<BizWaybillCostDetails> selectBizWaybillCostDetailsList(BizWaybillCostDetails bizWaybillCostDetails);
+
+    /**
+     * 新增运单明细
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 结果
+     */
+    public int insertBizWaybillCostDetails(BizWaybillCostDetails bizWaybillCostDetails);
+
+    /**
+     * 修改运单明细
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 结果
+     */
+    public int updateBizWaybillCostDetails(BizWaybillCostDetails bizWaybillCostDetails);
+
+    /**
+     * 删除运单明细
+     * 
+     * @param waybillDetailId 运单明细主键
+     * @return 结果
+     */
+    public int deleteBizWaybillCostDetailsByWaybillDetailId(Long waybillDetailId);
+
+    /**
+     * 批量删除运单明细
+     * 
+     * @param waybillDetailIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBizWaybillCostDetailsByWaybillDetailIds(Long[] waybillDetailIds);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillOrderMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizWaybillOrder;
+
+/**
+ * 运单管理Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface BizWaybillOrderMapper 
+{
+    /**
+     * 查询运单管理
+     * 
+     * @param waybillId 运单管理主键
+     * @return 运单管理
+     */
+    public BizWaybillOrder selectBizWaybillOrderByWaybillId(Long waybillId);
+
+    /**
+     * 查询运单管理列表
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 运单管理集合
+     */
+    public List<BizWaybillOrder> selectBizWaybillOrderList(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 新增运单管理
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 结果
+     */
+    public int insertBizWaybillOrder(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 修改运单管理
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 结果
+     */
+    public int updateBizWaybillOrder(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 删除运单管理
+     * 
+     * @param waybillId 运单管理主键
+     * @return 结果
+     */
+    public int deleteBizWaybillOrderByWaybillId(Long waybillId);
+
+    /**
+     * 批量删除运单管理
+     * 
+     * @param waybillIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBizWaybillOrderByWaybillIds(Long[] waybillIds);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/RptFinancialMonthSummaryMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.RptFinancialMonthSummary;
+
+/**
+ * 财务月度汇总Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface RptFinancialMonthSummaryMapper 
+{
+    /**
+     * 查询财务月度汇总
+     * 
+     * @param summaryId 财务月度汇总主键
+     * @return 财务月度汇总
+     */
+    public RptFinancialMonthSummary selectRptFinancialMonthSummaryBySummaryId(Long summaryId);
+
+    /**
+     * 查询财务月度汇总列表
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 财务月度汇总集合
+     */
+    public List<RptFinancialMonthSummary> selectRptFinancialMonthSummaryList(RptFinancialMonthSummary rptFinancialMonthSummary);
+
+    /**
+     * 新增财务月度汇总
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 结果
+     */
+    public int insertRptFinancialMonthSummary(RptFinancialMonthSummary rptFinancialMonthSummary);
+
+    /**
+     * 修改财务月度汇总
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 结果
+     */
+    public int updateRptFinancialMonthSummary(RptFinancialMonthSummary rptFinancialMonthSummary);
+
+    /**
+     * 删除财务月度汇总
+     * 
+     * @param summaryId 财务月度汇总主键
+     * @return 结果
+     */
+    public int deleteRptFinancialMonthSummaryBySummaryId(Long summaryId);
+
+    /**
+     * 批量删除财务月度汇总
+     * 
+     * @param summaryIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteRptFinancialMonthSummaryBySummaryIds(Long[] summaryIds);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/SysCityMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.mapper;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.SysCity;
+
+/**
+ * 城市管理Mapper接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface SysCityMapper 
+{
+    /**
+     * 查询城市管理
+     * 
+     * @param id 城市管理主键
+     * @return 城市管理
+     */
+    public SysCity selectSysCityById(Long id);
+
+    /**
+     * 查询城市管理列表
+     * 
+     * @param sysCity 城市管理
+     * @return 城市管理集合
+     */
+    public List<SysCity> selectSysCityList(SysCity sysCity);
+
+    /**
+     * 新增城市管理
+     * 
+     * @param sysCity 城市管理
+     * @return 结果
+     */
+    public int insertSysCity(SysCity sysCity);
+
+    /**
+     * 修改城市管理
+     * 
+     * @param sysCity 城市管理
+     * @return 结果
+     */
+    public int updateSysCity(SysCity sysCity);
+
+    /**
+     * 删除城市管理
+     * 
+     * @param id 城市管理主键
+     * @return 结果
+     */
+    public int deleteSysCityById(Long id);
+
+    /**
+     * 批量删除城市管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSysCityByIds(Long[] ids);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizAddressBookService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizAddressBook;
+
+/**
+ * 地址簿管理Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface IBizAddressBookService 
+{
+    /**
+     * 查询地址簿管理
+     * 
+     * @param addressId 地址簿管理主键
+     * @return 地址簿管理
+     */
+    public BizAddressBook selectBizAddressBookByAddressId(Long addressId);
+
+    /**
+     * 查询地址簿管理列表
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 地址簿管理集合
+     */
+    public List<BizAddressBook> selectBizAddressBookList(BizAddressBook bizAddressBook);
+
+    /**
+     * 新增地址簿管理
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 结果
+     */
+    public int insertBizAddressBook(BizAddressBook bizAddressBook);
+
+    /**
+     * 修改地址簿管理
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 结果
+     */
+    public int updateBizAddressBook(BizAddressBook bizAddressBook);
+
+    /**
+     * 批量删除地址簿管理
+     * 
+     * @param addressIds 需要删除的地址簿管理主键集合
+     * @return 结果
+     */
+    public int deleteBizAddressBookByAddressIds(Long[] addressIds);
+
+    /**
+     * 删除地址簿管理信息
+     * 
+     * @param addressId 地址簿管理主键
+     * @return 结果
+     */
+    public int deleteBizAddressBookByAddressId(Long addressId);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizBannerService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizBanner;
+
+/**
+ * 系统轮播图Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface IBizBannerService 
+{
+    /**
+     * 查询系统轮播图
+     * 
+     * @param bannerId 系统轮播图主键
+     * @return 系统轮播图
+     */
+    public BizBanner selectBizBannerByBannerId(Long bannerId);
+
+    /**
+     * 查询系统轮播图列表
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 系统轮播图集合
+     */
+    public List<BizBanner> selectBizBannerList(BizBanner bizBanner);
+
+    /**
+     * 新增系统轮播图
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 结果
+     */
+    public int insertBizBanner(BizBanner bizBanner);
+
+    /**
+     * 修改系统轮播图
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 结果
+     */
+    public int updateBizBanner(BizBanner bizBanner);
+
+    /**
+     * 批量删除系统轮播图
+     * 
+     * @param bannerIds 需要删除的系统轮播图主键集合
+     * @return 结果
+     */
+    public int deleteBizBannerByBannerIds(Long[] bannerIds);
+
+    /**
+     * 删除系统轮播图信息
+     * 
+     * @param bannerId 系统轮播图主键
+     * @return 结果
+     */
+    public int deleteBizBannerByBannerId(Long bannerId);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizFinancialAdjustmentRecordService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord;
+
+/**
+ * 调账流水记录Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface IBizFinancialAdjustmentRecordService 
+{
+    /**
+     * 查询调账流水记录
+     * 
+     * @param financialAdjustId 调账流水记录主键
+     * @return 调账流水记录
+     */
+    public BizFinancialAdjustmentRecord selectBizFinancialAdjustmentRecordByFinancialAdjustId(Long financialAdjustId);
+
+    /**
+     * 查询调账流水记录列表
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 调账流水记录集合
+     */
+    public List<BizFinancialAdjustmentRecord> selectBizFinancialAdjustmentRecordList(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord);
+
+    /**
+     * 新增调账流水记录
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 结果
+     */
+    public int insertBizFinancialAdjustmentRecord(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord);
+
+    /**
+     * 修改调账流水记录
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 结果
+     */
+    public int updateBizFinancialAdjustmentRecord(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord);
+
+    /**
+     * 批量删除调账流水记录
+     * 
+     * @param financialAdjustIds 需要删除的调账流水记录主键集合
+     * @return 结果
+     */
+    public int deleteBizFinancialAdjustmentRecordByFinancialAdjustIds(Long[] financialAdjustIds);
+
+    /**
+     * 删除调账流水记录信息
+     * 
+     * @param financialAdjustId 调账流水记录主键
+     * @return 结果
+     */
+    public int deleteBizFinancialAdjustmentRecordByFinancialAdjustId(Long financialAdjustId);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizInancialFeeItemsService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizInancialFeeItems;
+
+/**
+ * 费用类型管理Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface IBizInancialFeeItemsService 
+{
+    /**
+     * 查询费用类型管理
+     * 
+     * @param feeItemId 费用类型管理主键
+     * @return 费用类型管理
+     */
+    public BizInancialFeeItems selectBizInancialFeeItemsByFeeItemId(Long feeItemId);
+
+    /**
+     * 查询费用类型管理列表
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 费用类型管理集合
+     */
+    public List<BizInancialFeeItems> selectBizInancialFeeItemsList(BizInancialFeeItems bizInancialFeeItems);
+
+    /**
+     * 新增费用类型管理
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 结果
+     */
+    public int insertBizInancialFeeItems(BizInancialFeeItems bizInancialFeeItems);
+
+    /**
+     * 修改费用类型管理
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 结果
+     */
+    public int updateBizInancialFeeItems(BizInancialFeeItems bizInancialFeeItems);
+
+    /**
+     * 批量删除费用类型管理
+     * 
+     * @param feeItemIds 需要删除的费用类型管理主键集合
+     * @return 结果
+     */
+    public int deleteBizInancialFeeItemsByFeeItemIds(Long[] feeItemIds);
+
+    /**
+     * 删除费用类型管理信息
+     * 
+     * @param feeItemId 费用类型管理主键
+     * @return 结果
+     */
+    public int deleteBizInancialFeeItemsByFeeItemId(Long feeItemId);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizWaybillCostDetailsService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizWaybillCostDetails;
+
+/**
+ * 运单明细Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface IBizWaybillCostDetailsService 
+{
+    /**
+     * 查询运单明细
+     * 
+     * @param waybillDetailId 运单明细主键
+     * @return 运单明细
+     */
+    public BizWaybillCostDetails selectBizWaybillCostDetailsByWaybillDetailId(Long waybillDetailId);
+
+    /**
+     * 查询运单明细列表
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 运单明细集合
+     */
+    public List<BizWaybillCostDetails> selectBizWaybillCostDetailsList(BizWaybillCostDetails bizWaybillCostDetails);
+
+    /**
+     * 新增运单明细
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 结果
+     */
+    public int insertBizWaybillCostDetails(BizWaybillCostDetails bizWaybillCostDetails);
+
+    /**
+     * 修改运单明细
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 结果
+     */
+    public int updateBizWaybillCostDetails(BizWaybillCostDetails bizWaybillCostDetails);
+
+    /**
+     * 批量删除运单明细
+     * 
+     * @param waybillDetailIds 需要删除的运单明细主键集合
+     * @return 结果
+     */
+    public int deleteBizWaybillCostDetailsByWaybillDetailIds(Long[] waybillDetailIds);
+
+    /**
+     * 删除运单明细信息
+     * 
+     * @param waybillDetailId 运单明细主键
+     * @return 结果
+     */
+    public int deleteBizWaybillCostDetailsByWaybillDetailId(Long waybillDetailId);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizWaybillOrderService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.BizWaybillOrder;
+
+/**
+ * 运单管理Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface IBizWaybillOrderService 
+{
+    /**
+     * 查询运单管理
+     * 
+     * @param waybillId 运单管理主键
+     * @return 运单管理
+     */
+    public BizWaybillOrder selectBizWaybillOrderByWaybillId(Long waybillId);
+
+    /**
+     * 查询运单管理列表
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 运单管理集合
+     */
+    public List<BizWaybillOrder> selectBizWaybillOrderList(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 新增运单管理
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 结果
+     */
+    public int insertBizWaybillOrder(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 修改运单管理
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 结果
+     */
+    public int updateBizWaybillOrder(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 批量删除运单管理
+     * 
+     * @param waybillIds 需要删除的运单管理主键集合
+     * @return 结果
+     */
+    public int deleteBizWaybillOrderByWaybillIds(Long[] waybillIds);
+
+    /**
+     * 删除运单管理信息
+     * 
+     * @param waybillId 运单管理主键
+     * @return 结果
+     */
+    public int deleteBizWaybillOrderByWaybillId(Long waybillId);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IRptFinancialMonthSummaryService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.RptFinancialMonthSummary;
+
+/**
+ * 财务月度汇总Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface IRptFinancialMonthSummaryService 
+{
+    /**
+     * 查询财务月度汇总
+     * 
+     * @param summaryId 财务月度汇总主键
+     * @return 财务月度汇总
+     */
+    public RptFinancialMonthSummary selectRptFinancialMonthSummaryBySummaryId(Long summaryId);
+
+    /**
+     * 查询财务月度汇总列表
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 财务月度汇总集合
+     */
+    public List<RptFinancialMonthSummary> selectRptFinancialMonthSummaryList(RptFinancialMonthSummary rptFinancialMonthSummary);
+
+    /**
+     * 新增财务月度汇总
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 结果
+     */
+    public int insertRptFinancialMonthSummary(RptFinancialMonthSummary rptFinancialMonthSummary);
+
+    /**
+     * 修改财务月度汇总
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 结果
+     */
+    public int updateRptFinancialMonthSummary(RptFinancialMonthSummary rptFinancialMonthSummary);
+
+    /**
+     * 批量删除财务月度汇总
+     * 
+     * @param summaryIds 需要删除的财务月度汇总主键集合
+     * @return 结果
+     */
+    public int deleteRptFinancialMonthSummaryBySummaryIds(Long[] summaryIds);
+
+    /**
+     * 删除财务月度汇总信息
+     * 
+     * @param summaryId 财务月度汇总主键
+     * @return 结果
+     */
+    public int deleteRptFinancialMonthSummaryBySummaryId(Long summaryId);
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/ISysCityService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.service;
+
+import java.util.List;
+import com.ruoyi.logistics.domain.SysCity;
+
+/**
+ * 城市管理Service接口
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+public interface ISysCityService 
+{
+    /**
+     * 查询城市管理
+     * 
+     * @param id 城市管理主键
+     * @return 城市管理
+     */
+    public SysCity selectSysCityById(Long id);
+
+    /**
+     * 查询城市管理列表
+     * 
+     * @param sysCity 城市管理
+     * @return 城市管理集合
+     */
+    public List<SysCity> selectSysCityList(SysCity sysCity);
+
+    /**
+     * 新增城市管理
+     * 
+     * @param sysCity 城市管理
+     * @return 结果
+     */
+    public int insertSysCity(SysCity sysCity);
+
+    /**
+     * 修改城市管理
+     * 
+     * @param sysCity 城市管理
+     * @return 结果
+     */
+    public int updateSysCity(SysCity sysCity);
+
+    /**
+     * 批量删除城市管理
+     * 
+     * @param ids 需要删除的城市管理主键集合
+     * @return 结果
+     */
+    public int deleteSysCityByIds(Long[] ids);
+
+    /**
+     * 删除城市管理信息
+     * 
+     * @param id 城市管理主键
+     * @return 结果
+     */
+    public int deleteSysCityById(Long id);
+}

+ 27 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsOrderService.java

@@ -0,0 +1,27 @@
+package com.ruoyi.logistics.service;
+
+import com.ruoyi.logistics.domain.LogisticsOrder;
+import com.ruoyi.logistics.service.factory.LogisticsFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+
+@Service
+public class LogisticsOrderService {
+    @Autowired
+    private LogisticsFactory logisticsFactory;
+
+    public String createOrder(LogisticsOrder logisticsOrder) throws UnsupportedEncodingException {
+        // 根据订单中的物流公司类型获取对应服务
+        LogisticsService logisticsService = logisticsFactory.getLogisticsService(logisticsOrder.getOrderType());
+        String trackingNumber = logisticsService.createOrder(logisticsOrder);
+
+        // 保存订单... logisticsOrder.save();
+        return trackingNumber;
+    }
+
+
+
+}
+

+ 15 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsService.java

@@ -0,0 +1,15 @@
+package com.ruoyi.logistics.service;
+
+import com.ruoyi.logistics.domain.LogisticsOrder;
+
+import java.io.UnsupportedEncodingException;
+
+public interface LogisticsService {
+
+    //预下单
+    String precheckOrder();
+    //创建物流订单
+    String createOrder(LogisticsOrder logisticsOrder) throws UnsupportedEncodingException;
+    //取消物流订单
+
+}

+ 26 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/factory/LogisticsFactory.java

@@ -0,0 +1,26 @@
+package com.ruoyi.logistics.service.factory;
+
+import com.ruoyi.logistics.service.LogisticsService;
+import com.ruoyi.logistics.service.impl.JDLogisticsService;
+import com.ruoyi.logistics.service.impl.SFLogisticsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class LogisticsFactory {
+    @Autowired
+    private SFLogisticsService sfLogisticsService;
+    @Autowired
+    private JDLogisticsService jdLogisticsService;
+
+    public LogisticsService getLogisticsService(String companyCode) {
+        switch (companyCode) {
+            case "SF":
+                return sfLogisticsService;
+            case "JD":
+                return jdLogisticsService;
+            default:
+                throw new IllegalArgumentException("不支持的物流公司");
+        }
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizAddressBookServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.BizAddressBookMapper;
+import com.ruoyi.logistics.domain.BizAddressBook;
+import com.ruoyi.logistics.service.IBizAddressBookService;
+
+/**
+ * 地址簿管理Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class BizAddressBookServiceImpl implements IBizAddressBookService 
+{
+    @Autowired
+    private BizAddressBookMapper bizAddressBookMapper;
+
+    /**
+     * 查询地址簿管理
+     * 
+     * @param addressId 地址簿管理主键
+     * @return 地址簿管理
+     */
+    @Override
+    public BizAddressBook selectBizAddressBookByAddressId(Long addressId)
+    {
+        return bizAddressBookMapper.selectBizAddressBookByAddressId(addressId);
+    }
+
+    /**
+     * 查询地址簿管理列表
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 地址簿管理
+     */
+    @Override
+    public List<BizAddressBook> selectBizAddressBookList(BizAddressBook bizAddressBook)
+    {
+        return bizAddressBookMapper.selectBizAddressBookList(bizAddressBook);
+    }
+
+    /**
+     * 新增地址簿管理
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 结果
+     */
+    @Override
+    public int insertBizAddressBook(BizAddressBook bizAddressBook)
+    {
+        bizAddressBook.setCreateTime(DateUtils.getNowDate());
+        return bizAddressBookMapper.insertBizAddressBook(bizAddressBook);
+    }
+
+    /**
+     * 修改地址簿管理
+     * 
+     * @param bizAddressBook 地址簿管理
+     * @return 结果
+     */
+    @Override
+    public int updateBizAddressBook(BizAddressBook bizAddressBook)
+    {
+        bizAddressBook.setUpdateTime(DateUtils.getNowDate());
+        return bizAddressBookMapper.updateBizAddressBook(bizAddressBook);
+    }
+
+    /**
+     * 批量删除地址簿管理
+     * 
+     * @param addressIds 需要删除的地址簿管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizAddressBookByAddressIds(Long[] addressIds)
+    {
+        return bizAddressBookMapper.deleteBizAddressBookByAddressIds(addressIds);
+    }
+
+    /**
+     * 删除地址簿管理信息
+     * 
+     * @param addressId 地址簿管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizAddressBookByAddressId(Long addressId)
+    {
+        return bizAddressBookMapper.deleteBizAddressBookByAddressId(addressId);
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizBannerServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.BizBannerMapper;
+import com.ruoyi.logistics.domain.BizBanner;
+import com.ruoyi.logistics.service.IBizBannerService;
+
+/**
+ * 系统轮播图Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class BizBannerServiceImpl implements IBizBannerService 
+{
+    @Autowired
+    private BizBannerMapper bizBannerMapper;
+
+    /**
+     * 查询系统轮播图
+     * 
+     * @param bannerId 系统轮播图主键
+     * @return 系统轮播图
+     */
+    @Override
+    public BizBanner selectBizBannerByBannerId(Long bannerId)
+    {
+        return bizBannerMapper.selectBizBannerByBannerId(bannerId);
+    }
+
+    /**
+     * 查询系统轮播图列表
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 系统轮播图
+     */
+    @Override
+    public List<BizBanner> selectBizBannerList(BizBanner bizBanner)
+    {
+        return bizBannerMapper.selectBizBannerList(bizBanner);
+    }
+
+    /**
+     * 新增系统轮播图
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 结果
+     */
+    @Override
+    public int insertBizBanner(BizBanner bizBanner)
+    {
+        bizBanner.setCreateTime(DateUtils.getNowDate());
+        return bizBannerMapper.insertBizBanner(bizBanner);
+    }
+
+    /**
+     * 修改系统轮播图
+     * 
+     * @param bizBanner 系统轮播图
+     * @return 结果
+     */
+    @Override
+    public int updateBizBanner(BizBanner bizBanner)
+    {
+        bizBanner.setUpdateTime(DateUtils.getNowDate());
+        return bizBannerMapper.updateBizBanner(bizBanner);
+    }
+
+    /**
+     * 批量删除系统轮播图
+     * 
+     * @param bannerIds 需要删除的系统轮播图主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizBannerByBannerIds(Long[] bannerIds)
+    {
+        return bizBannerMapper.deleteBizBannerByBannerIds(bannerIds);
+    }
+
+    /**
+     * 删除系统轮播图信息
+     * 
+     * @param bannerId 系统轮播图主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizBannerByBannerId(Long bannerId)
+    {
+        return bizBannerMapper.deleteBizBannerByBannerId(bannerId);
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizFinancialAdjustmentRecordServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.BizFinancialAdjustmentRecordMapper;
+import com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord;
+import com.ruoyi.logistics.service.IBizFinancialAdjustmentRecordService;
+
+/**
+ * 调账流水记录Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class BizFinancialAdjustmentRecordServiceImpl implements IBizFinancialAdjustmentRecordService 
+{
+    @Autowired
+    private BizFinancialAdjustmentRecordMapper bizFinancialAdjustmentRecordMapper;
+
+    /**
+     * 查询调账流水记录
+     * 
+     * @param financialAdjustId 调账流水记录主键
+     * @return 调账流水记录
+     */
+    @Override
+    public BizFinancialAdjustmentRecord selectBizFinancialAdjustmentRecordByFinancialAdjustId(Long financialAdjustId)
+    {
+        return bizFinancialAdjustmentRecordMapper.selectBizFinancialAdjustmentRecordByFinancialAdjustId(financialAdjustId);
+    }
+
+    /**
+     * 查询调账流水记录列表
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 调账流水记录
+     */
+    @Override
+    public List<BizFinancialAdjustmentRecord> selectBizFinancialAdjustmentRecordList(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord)
+    {
+        return bizFinancialAdjustmentRecordMapper.selectBizFinancialAdjustmentRecordList(bizFinancialAdjustmentRecord);
+    }
+
+    /**
+     * 新增调账流水记录
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 结果
+     */
+    @Override
+    public int insertBizFinancialAdjustmentRecord(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord)
+    {
+        bizFinancialAdjustmentRecord.setCreateTime(DateUtils.getNowDate());
+        return bizFinancialAdjustmentRecordMapper.insertBizFinancialAdjustmentRecord(bizFinancialAdjustmentRecord);
+    }
+
+    /**
+     * 修改调账流水记录
+     * 
+     * @param bizFinancialAdjustmentRecord 调账流水记录
+     * @return 结果
+     */
+    @Override
+    public int updateBizFinancialAdjustmentRecord(BizFinancialAdjustmentRecord bizFinancialAdjustmentRecord)
+    {
+        bizFinancialAdjustmentRecord.setUpdateTime(DateUtils.getNowDate());
+        return bizFinancialAdjustmentRecordMapper.updateBizFinancialAdjustmentRecord(bizFinancialAdjustmentRecord);
+    }
+
+    /**
+     * 批量删除调账流水记录
+     * 
+     * @param financialAdjustIds 需要删除的调账流水记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizFinancialAdjustmentRecordByFinancialAdjustIds(Long[] financialAdjustIds)
+    {
+        return bizFinancialAdjustmentRecordMapper.deleteBizFinancialAdjustmentRecordByFinancialAdjustIds(financialAdjustIds);
+    }
+
+    /**
+     * 删除调账流水记录信息
+     * 
+     * @param financialAdjustId 调账流水记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizFinancialAdjustmentRecordByFinancialAdjustId(Long financialAdjustId)
+    {
+        return bizFinancialAdjustmentRecordMapper.deleteBizFinancialAdjustmentRecordByFinancialAdjustId(financialAdjustId);
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizInancialFeeItemsServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.BizInancialFeeItemsMapper;
+import com.ruoyi.logistics.domain.BizInancialFeeItems;
+import com.ruoyi.logistics.service.IBizInancialFeeItemsService;
+
+/**
+ * 费用类型管理Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class BizInancialFeeItemsServiceImpl implements IBizInancialFeeItemsService 
+{
+    @Autowired
+    private BizInancialFeeItemsMapper bizInancialFeeItemsMapper;
+
+    /**
+     * 查询费用类型管理
+     * 
+     * @param feeItemId 费用类型管理主键
+     * @return 费用类型管理
+     */
+    @Override
+    public BizInancialFeeItems selectBizInancialFeeItemsByFeeItemId(Long feeItemId)
+    {
+        return bizInancialFeeItemsMapper.selectBizInancialFeeItemsByFeeItemId(feeItemId);
+    }
+
+    /**
+     * 查询费用类型管理列表
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 费用类型管理
+     */
+    @Override
+    public List<BizInancialFeeItems> selectBizInancialFeeItemsList(BizInancialFeeItems bizInancialFeeItems)
+    {
+        return bizInancialFeeItemsMapper.selectBizInancialFeeItemsList(bizInancialFeeItems);
+    }
+
+    /**
+     * 新增费用类型管理
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 结果
+     */
+    @Override
+    public int insertBizInancialFeeItems(BizInancialFeeItems bizInancialFeeItems)
+    {
+        bizInancialFeeItems.setCreateTime(DateUtils.getNowDate());
+        return bizInancialFeeItemsMapper.insertBizInancialFeeItems(bizInancialFeeItems);
+    }
+
+    /**
+     * 修改费用类型管理
+     * 
+     * @param bizInancialFeeItems 费用类型管理
+     * @return 结果
+     */
+    @Override
+    public int updateBizInancialFeeItems(BizInancialFeeItems bizInancialFeeItems)
+    {
+        bizInancialFeeItems.setUpdateTime(DateUtils.getNowDate());
+        return bizInancialFeeItemsMapper.updateBizInancialFeeItems(bizInancialFeeItems);
+    }
+
+    /**
+     * 批量删除费用类型管理
+     * 
+     * @param feeItemIds 需要删除的费用类型管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizInancialFeeItemsByFeeItemIds(Long[] feeItemIds)
+    {
+        return bizInancialFeeItemsMapper.deleteBizInancialFeeItemsByFeeItemIds(feeItemIds);
+    }
+
+    /**
+     * 删除费用类型管理信息
+     * 
+     * @param feeItemId 费用类型管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizInancialFeeItemsByFeeItemId(Long feeItemId)
+    {
+        return bizInancialFeeItemsMapper.deleteBizInancialFeeItemsByFeeItemId(feeItemId);
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillCostDetailsServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.BizWaybillCostDetailsMapper;
+import com.ruoyi.logistics.domain.BizWaybillCostDetails;
+import com.ruoyi.logistics.service.IBizWaybillCostDetailsService;
+
+/**
+ * 运单明细Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class BizWaybillCostDetailsServiceImpl implements IBizWaybillCostDetailsService 
+{
+    @Autowired
+    private BizWaybillCostDetailsMapper bizWaybillCostDetailsMapper;
+
+    /**
+     * 查询运单明细
+     * 
+     * @param waybillDetailId 运单明细主键
+     * @return 运单明细
+     */
+    @Override
+    public BizWaybillCostDetails selectBizWaybillCostDetailsByWaybillDetailId(Long waybillDetailId)
+    {
+        return bizWaybillCostDetailsMapper.selectBizWaybillCostDetailsByWaybillDetailId(waybillDetailId);
+    }
+
+    /**
+     * 查询运单明细列表
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 运单明细
+     */
+    @Override
+    public List<BizWaybillCostDetails> selectBizWaybillCostDetailsList(BizWaybillCostDetails bizWaybillCostDetails)
+    {
+        return bizWaybillCostDetailsMapper.selectBizWaybillCostDetailsList(bizWaybillCostDetails);
+    }
+
+    /**
+     * 新增运单明细
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 结果
+     */
+    @Override
+    public int insertBizWaybillCostDetails(BizWaybillCostDetails bizWaybillCostDetails)
+    {
+        bizWaybillCostDetails.setCreateTime(DateUtils.getNowDate());
+        return bizWaybillCostDetailsMapper.insertBizWaybillCostDetails(bizWaybillCostDetails);
+    }
+
+    /**
+     * 修改运单明细
+     * 
+     * @param bizWaybillCostDetails 运单明细
+     * @return 结果
+     */
+    @Override
+    public int updateBizWaybillCostDetails(BizWaybillCostDetails bizWaybillCostDetails)
+    {
+        bizWaybillCostDetails.setUpdateTime(DateUtils.getNowDate());
+        return bizWaybillCostDetailsMapper.updateBizWaybillCostDetails(bizWaybillCostDetails);
+    }
+
+    /**
+     * 批量删除运单明细
+     * 
+     * @param waybillDetailIds 需要删除的运单明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizWaybillCostDetailsByWaybillDetailIds(Long[] waybillDetailIds)
+    {
+        return bizWaybillCostDetailsMapper.deleteBizWaybillCostDetailsByWaybillDetailIds(waybillDetailIds);
+    }
+
+    /**
+     * 删除运单明细信息
+     * 
+     * @param waybillDetailId 运单明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizWaybillCostDetailsByWaybillDetailId(Long waybillDetailId)
+    {
+        return bizWaybillCostDetailsMapper.deleteBizWaybillCostDetailsByWaybillDetailId(waybillDetailId);
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillOrderServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.BizWaybillOrderMapper;
+import com.ruoyi.logistics.domain.BizWaybillOrder;
+import com.ruoyi.logistics.service.IBizWaybillOrderService;
+
+/**
+ * 运单管理Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService 
+{
+    @Autowired
+    private BizWaybillOrderMapper bizWaybillOrderMapper;
+
+    /**
+     * 查询运单管理
+     * 
+     * @param waybillId 运单管理主键
+     * @return 运单管理
+     */
+    @Override
+    public BizWaybillOrder selectBizWaybillOrderByWaybillId(Long waybillId)
+    {
+        return bizWaybillOrderMapper.selectBizWaybillOrderByWaybillId(waybillId);
+    }
+
+    /**
+     * 查询运单管理列表
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 运单管理
+     */
+    @Override
+    public List<BizWaybillOrder> selectBizWaybillOrderList(BizWaybillOrder bizWaybillOrder)
+    {
+        return bizWaybillOrderMapper.selectBizWaybillOrderList(bizWaybillOrder);
+    }
+
+    /**
+     * 新增运单管理
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 结果
+     */
+    @Override
+    public int insertBizWaybillOrder(BizWaybillOrder bizWaybillOrder)
+    {
+        bizWaybillOrder.setCreateTime(DateUtils.getNowDate());
+        return bizWaybillOrderMapper.insertBizWaybillOrder(bizWaybillOrder);
+    }
+
+    /**
+     * 修改运单管理
+     * 
+     * @param bizWaybillOrder 运单管理
+     * @return 结果
+     */
+    @Override
+    public int updateBizWaybillOrder(BizWaybillOrder bizWaybillOrder)
+    {
+        bizWaybillOrder.setUpdateTime(DateUtils.getNowDate());
+        return bizWaybillOrderMapper.updateBizWaybillOrder(bizWaybillOrder);
+    }
+
+    /**
+     * 批量删除运单管理
+     * 
+     * @param waybillIds 需要删除的运单管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizWaybillOrderByWaybillIds(Long[] waybillIds)
+    {
+        return bizWaybillOrderMapper.deleteBizWaybillOrderByWaybillIds(waybillIds);
+    }
+
+    /**
+     * 删除运单管理信息
+     * 
+     * @param waybillId 运单管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBizWaybillOrderByWaybillId(Long waybillId)
+    {
+        return bizWaybillOrderMapper.deleteBizWaybillOrderByWaybillId(waybillId);
+    }
+}

+ 107 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/JDLogisticsService.java

@@ -0,0 +1,107 @@
+package com.ruoyi.logistics.service.impl;
+
+import com.lop.open.api.sdk.DefaultDomainApiClient;
+import com.lop.open.api.sdk.LopException;
+import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.CommonCreateOrderRequest;
+import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.CommonProductInfo;
+import com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCheckPreCreateOrderV1.Contact;
+import com.lop.open.api.sdk.plugin.LopPlugin;
+import com.lop.open.api.sdk.plugin.factory.OAuth2PluginFactory;
+import com.lop.open.api.sdk.request.ECAP.EcapV1OrdersCreateLopRequest;
+import com.lop.open.api.sdk.request.ECAP.EcapV1OrdersPrecheckLopRequest;
+import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersCreateLopResponse;
+import com.lop.open.api.sdk.response.ECAP.EcapV1OrdersPrecheckLopResponse;
+import com.ruoyi.logistics.config.JDExpressConfig;
+import com.ruoyi.logistics.domain.LogisticsOrder;
+import com.ruoyi.logistics.service.LogisticsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class JDLogisticsService  implements LogisticsService {
+
+    @Autowired
+    private JDExpressConfig jdExpressConfig;
+
+    @Override
+    public String precheckOrder() {
+        log.info("调用京东开放平台订单预校验接口");
+        try {
+            //设置接口域名(有的对接方案同时支持生产和沙箱环境,有的仅支持生产,具体以对接方案中的【API文档-请求地址】为准),生产域名:https://api.jdl.com 预发环境域名:https://uat-api.jdl.com
+            //DefaultDomainApiClient对象全局只需要创建一次
+            DefaultDomainApiClient client = new DefaultDomainApiClient(jdExpressConfig.getServerUrl(),500,15000);
+
+            //入参对象(请记得更换为自己要使用的接口入参对象)
+            EcapV1OrdersPrecheckLopRequest request = new EcapV1OrdersPrecheckLopRequest();
+
+            //设置入参(请记得更换为自己要使用的接口入参)
+            Contact senderContact  = new Contact();
+            senderContact.setFullAddress("河北省廊坊市广阳区万庄镇中心小学");
+            Contact receiverContact = new Contact();
+            receiverContact.setFullAddress("河北省廊坊市广阳区万庄镇中心小学");
+            CommonCreateOrderRequest requestDTO = new  CommonCreateOrderRequest();
+            requestDTO.setOrderOrigin(1);
+            requestDTO.setCustomerCode("010K****20");
+            CommonProductInfo productInfo = new CommonProductInfo();
+            productInfo.setProductCode("ed-m-0001");
+            requestDTO.setProductsReq(productInfo);
+            requestDTO.setReceiverContact(receiverContact);
+            requestDTO.setSenderContact(senderContact);
+            request.setRequest(requestDTO);
+
+            //设置插件,必须的操作,不同类型的应用入参不同,请看入参注释,公共参数按顺序分别为AppKey、AppSecret、AccessToken
+            //使用开放平台ISV/自研商家应用调用接口
+            LopPlugin lopPlugin = OAuth2PluginFactory.produceLopPlugin(jdExpressConfig.getAppKey(), jdExpressConfig.getAppSecret(), jdExpressConfig.getAccessToken());
+            request.addLopPlugin(lopPlugin);
+
+            EcapV1OrdersPrecheckLopResponse response = client.execute(request);
+        } catch (LopException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    @Override
+    public String createOrder(LogisticsOrder logisticsOrder) {
+        log.info("调用京东开放平台订单预校验接口");
+        try {
+            //设置接口域名(有的对接方案同时支持生产和沙箱环境,有的仅支持生产,具体以对接方案中的【API文档-请求地址】为准),生产域名:https://api.jdl.com 预发环境域名:https://uat-api.jdl.com
+            //DefaultDomainApiClient对象全局只需要创建一次
+            DefaultDomainApiClient client = new DefaultDomainApiClient(jdExpressConfig.getServerUrl(),500,15000);
+
+            //入参对象(请记得更换为自己要使用的接口入参对象)
+            EcapV1OrdersCreateLopRequest request = new EcapV1OrdersCreateLopRequest();
+
+            //设置入参(请记得更换为自己要使用的接口入参)
+            com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.Contact senderContact  = new com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.Contact();
+            senderContact.setFullAddress("河北省廊坊市广阳区万庄镇中心小学");
+            com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.Contact receiverContact = new com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.Contact();
+            receiverContact.setFullAddress("河北省廊坊市广阳区万庄镇中心小学");
+            com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonCreateOrderRequest requestDTO = new  com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonCreateOrderRequest();
+            requestDTO.setOrderOrigin(1);
+            requestDTO.setCustomerCode("010K****20");
+            com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo productInfo = new com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo();
+            productInfo.setProductCode("ed-m-0001");
+            requestDTO.setProductsReq(productInfo);
+            requestDTO.setReceiverContact(receiverContact);
+            requestDTO.setSenderContact(senderContact);
+            request.setRequest(requestDTO);
+
+            //设置插件,必须的操作,不同类型的应用入参不同,请看入参注释,公共参数按顺序分别为AppKey、AppSecret、AccessToken
+            //使用开放平台ISV/自研商家应用调用接口
+            LopPlugin lopPlugin = OAuth2PluginFactory.produceLopPlugin(jdExpressConfig.getAppKey(), jdExpressConfig.getAppSecret(), jdExpressConfig.getAccessToken());
+            request.addLopPlugin(lopPlugin);
+
+            EcapV1OrdersCreateLopResponse response = client.execute(request);
+        } catch (LopException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/RptFinancialMonthSummaryServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.RptFinancialMonthSummaryMapper;
+import com.ruoyi.logistics.domain.RptFinancialMonthSummary;
+import com.ruoyi.logistics.service.IRptFinancialMonthSummaryService;
+
+/**
+ * 财务月度汇总Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class RptFinancialMonthSummaryServiceImpl implements IRptFinancialMonthSummaryService 
+{
+    @Autowired
+    private RptFinancialMonthSummaryMapper rptFinancialMonthSummaryMapper;
+
+    /**
+     * 查询财务月度汇总
+     * 
+     * @param summaryId 财务月度汇总主键
+     * @return 财务月度汇总
+     */
+    @Override
+    public RptFinancialMonthSummary selectRptFinancialMonthSummaryBySummaryId(Long summaryId)
+    {
+        return rptFinancialMonthSummaryMapper.selectRptFinancialMonthSummaryBySummaryId(summaryId);
+    }
+
+    /**
+     * 查询财务月度汇总列表
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 财务月度汇总
+     */
+    @Override
+    public List<RptFinancialMonthSummary> selectRptFinancialMonthSummaryList(RptFinancialMonthSummary rptFinancialMonthSummary)
+    {
+        return rptFinancialMonthSummaryMapper.selectRptFinancialMonthSummaryList(rptFinancialMonthSummary);
+    }
+
+    /**
+     * 新增财务月度汇总
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 结果
+     */
+    @Override
+    public int insertRptFinancialMonthSummary(RptFinancialMonthSummary rptFinancialMonthSummary)
+    {
+        rptFinancialMonthSummary.setCreateTime(DateUtils.getNowDate());
+        return rptFinancialMonthSummaryMapper.insertRptFinancialMonthSummary(rptFinancialMonthSummary);
+    }
+
+    /**
+     * 修改财务月度汇总
+     * 
+     * @param rptFinancialMonthSummary 财务月度汇总
+     * @return 结果
+     */
+    @Override
+    public int updateRptFinancialMonthSummary(RptFinancialMonthSummary rptFinancialMonthSummary)
+    {
+        rptFinancialMonthSummary.setUpdateTime(DateUtils.getNowDate());
+        return rptFinancialMonthSummaryMapper.updateRptFinancialMonthSummary(rptFinancialMonthSummary);
+    }
+
+    /**
+     * 批量删除财务月度汇总
+     * 
+     * @param summaryIds 需要删除的财务月度汇总主键
+     * @return 结果
+     */
+    @Override
+    public int deleteRptFinancialMonthSummaryBySummaryIds(Long[] summaryIds)
+    {
+        return rptFinancialMonthSummaryMapper.deleteRptFinancialMonthSummaryBySummaryIds(summaryIds);
+    }
+
+    /**
+     * 删除财务月度汇总信息
+     * 
+     * @param summaryId 财务月度汇总主键
+     * @return 结果
+     */
+    @Override
+    public int deleteRptFinancialMonthSummaryBySummaryId(Long summaryId)
+    {
+        return rptFinancialMonthSummaryMapper.deleteRptFinancialMonthSummaryBySummaryId(summaryId);
+    }
+}

+ 100 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/SFLogisticsService.java

@@ -0,0 +1,100 @@
+package com.ruoyi.logistics.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.redis.service.RedisIdGenerator;
+import com.ruoyi.logistics.config.SFExpressConfig;
+import com.ruoyi.logistics.domain.LogisticsOrder;
+import com.ruoyi.logistics.service.LogisticsService;
+import com.sf.csim.express.service.CallExpressServiceTools;
+import com.sf.csim.express.service.HttpClientUtil;
+import com.sf.csim.express.service.IServiceCodeStandard;
+import com.sf.csim.express.service.code.ExpressServiceCodeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.util.*;
+
+@Service
+public class SFLogisticsService implements LogisticsService {
+
+    @Autowired
+    private SFExpressConfig sfExpressConfig;
+    @Autowired
+    private RedisIdGenerator redisIdGenerator;
+    @Override
+    public String createOrder(LogisticsOrder logisticsOrder) throws UnsupportedEncodingException {
+        IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_ORDER; //下订单
+
+        CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
+        Map<String, String> params = new HashMap<String, String>();
+        String timeStamp = String.valueOf(System.currentTimeMillis());
+        Map<String,Object> orderData= new HashMap<>();
+        orderData.put("language","zh_CN");
+        orderData.put("orderId",redisIdGenerator.generateUniqueId("RJSD"));//客户订单号,重复使用订单号时返回第一次下单成功时的运单信息
+        orderData.put("monthlyCard","7551234567");//月结账户
+        orderData.put("parcelQty",3);
+        //商品信息
+        List<Map<String,Object>> cargoDetails = new ArrayList<>();
+        Map cargo=new HashMap<>();
+        cargo.put("name","笔记本");
+        cargo.put("count",1);
+        cargo.put("unit","个");
+        cargo.put("weight",1.012);
+        cargo.put("amount",4999.189);
+        cargoDetails.add(cargo);
+        orderData.put("cargoDetails",cargoDetails);
+        //增值服务信息 serviceList":[{"name":"INSURE","value":"500"}]
+        List<Map<String,Object>> serviceList = new ArrayList<>();
+        Map service=new HashMap<>();
+        service.put("name","INSURE");
+        service.put("value","500");
+        serviceList.add(service);
+        orderData.put("serviceList",serviceList);
+        //收寄双方信息
+        List<Map<String,Object>> contactInfoList = new ArrayList<>();
+        Map contactInfo1=new HashMap<>();
+        contactInfo1.put("address","河南省洛阳市洛龙区科技园街道和风雅叙");
+        contactInfo1.put("contact","张三");
+        contactInfo1.put("contactType",1);
+        contactInfo1.put("country","CN");
+        contactInfo1.put("postCode","580058");
+        contactInfo1.put("tel","15639072145");
+        contactInfoList.add(contactInfo1);
+        Map contactInfo=new HashMap<>();
+        contactInfo.put("address","河南省郑州市惠济区美景麟起城");
+        contactInfo.put("company","神州");
+        contactInfo.put("contact","小乔");
+        contactInfo.put("contactType",2);
+        contactInfo.put("country","CN");
+        contactInfo.put("tel","15539739074");
+        contactInfoList.add(contactInfo1);
+        contactInfoList.add(contactInfo);
+        orderData.put("contactInfoList",contactInfoList);
+
+        String msgData =tools.packageMsgData(standardService);
+        msgData= JSON.toJSONString(orderData);
+        params.put("partnerID", sfExpressConfig.getClientCode());  // 顾客编码 ,对应丰桥上获取的clientCode
+        params.put("requestID", UUID.randomUUID().toString().replace("-", ""));
+        params.put("serviceCode",standardService.getCode());// 接口服务码
+        params.put("timestamp", timeStamp);
+        params.put("msgData", msgData);
+        params.put("msgDigest", tools.getMsgDigest(msgData,timeStamp,sfExpressConfig.getCheckWord()));
+
+        // System.out.println(params.get("requestID"));
+        long startTime = System.currentTimeMillis();
+
+
+
+        //  System.out.println("====调用请求:" + params.get("msgData"));
+        System.out.println("====调用实际请求:" + params);
+        String result = HttpClientUtil.post(sfExpressConfig.getCurrentApiUrl(), params);
+
+        System.out.println("====调用丰桥的接口服务代码:" + String.valueOf(standardService.getCode()) + " 接口耗时:"+ String.valueOf(System.currentTimeMillis()-startTime)+"====");
+        System.out.println("===调用地址 ==="+sfExpressConfig.getCurrentApiUrl());
+        System.out.println("===顾客编码 ==="+sfExpressConfig.getClientCode());
+        System.out.println("===返回结果:" +result);
+
+        return result;
+    }
+}

+ 96 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/SysCityServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.logistics.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.core.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.logistics.mapper.SysCityMapper;
+import com.ruoyi.logistics.domain.SysCity;
+import com.ruoyi.logistics.service.ISysCityService;
+
+/**
+ * 城市管理Service业务层处理
+ * 
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@Service
+public class SysCityServiceImpl implements ISysCityService 
+{
+    @Autowired
+    private SysCityMapper sysCityMapper;
+
+    /**
+     * 查询城市管理
+     * 
+     * @param id 城市管理主键
+     * @return 城市管理
+     */
+    @Override
+    public SysCity selectSysCityById(Long id)
+    {
+        return sysCityMapper.selectSysCityById(id);
+    }
+
+    /**
+     * 查询城市管理列表
+     * 
+     * @param sysCity 城市管理
+     * @return 城市管理
+     */
+    @Override
+    public List<SysCity> selectSysCityList(SysCity sysCity)
+    {
+        return sysCityMapper.selectSysCityList(sysCity);
+    }
+
+    /**
+     * 新增城市管理
+     * 
+     * @param sysCity 城市管理
+     * @return 结果
+     */
+    @Override
+    public int insertSysCity(SysCity sysCity)
+    {
+        sysCity.setCreateTime(DateUtils.getNowDate());
+        return sysCityMapper.insertSysCity(sysCity);
+    }
+
+    /**
+     * 修改城市管理
+     * 
+     * @param sysCity 城市管理
+     * @return 结果
+     */
+    @Override
+    public int updateSysCity(SysCity sysCity)
+    {
+        sysCity.setUpdateTime(DateUtils.getNowDate());
+        return sysCityMapper.updateSysCity(sysCity);
+    }
+
+    /**
+     * 批量删除城市管理
+     * 
+     * @param ids 需要删除的城市管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysCityByIds(Long[] ids)
+    {
+        return sysCityMapper.deleteSysCityByIds(ids);
+    }
+
+    /**
+     * 删除城市管理信息
+     * 
+     * @param id 城市管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysCityById(Long id)
+    {
+        return sysCityMapper.deleteSysCityById(id);
+    }
+}

+ 44 - 8
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/controller/SysUserController.java

@@ -1,22 +1,26 @@
 package com.ruoyi.system.controller;
 
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.utils.SpringUtils;
+import com.ruoyi.common.redis.service.RedisIdGenerator;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.logistics.domain.LogisticsOrder;
+import com.ruoyi.logistics.service.LogisticsOrderService;
 import org.apache.commons.lang3.ArrayUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.text.Convert;
@@ -377,4 +381,36 @@ public class SysUserController extends BaseController
     {
         return success(deptService.selectDeptTreeList(dept));
     }
+
+
+    private static final Logger log = LoggerFactory.getLogger(SysUserController.class);
+
+
+        @Autowired
+        private RedisIdGenerator redisIdGenerator;
+         @Autowired
+         private LogisticsOrderService logisticsOrderService;
+    @PostMapping("/test")
+    public AjaxResult test(@RequestBody JSONObject json) throws UnsupportedEncodingException {
+
+        LogisticsOrder logisticsOrder= new LogisticsOrder();
+        logisticsOrder.setOrderType("SF");
+
+        System.out.println(logisticsOrderService.createOrder(logisticsOrder));
+       // String userId = redisIdGenerator.generateUniqueId("RJSD");
+        //String userI = SpringUtils.getBean(RedisIdGenerator.class).generateUniqueId("RJSD");
+
+       // System.out.println("生成订单ID: " + userId);
+       // log.info("生成订单ID: " + userId);
+        log.info("物流状态回调接口----状态"+json.get("orderState").toString());
+        return AjaxResult.success(json);
+    }
+
+
+    @PostMapping("/test1")
+    public AjaxResult test( @RequestParam Map<String,Object> content)
+    {
+        log.info("物流收费单据回调接口----"+content.get("content"));
+        return AjaxResult.success(content.get("content"));
+    }
 }

+ 125 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizAddressBookMapper.xml

@@ -0,0 +1,125 @@
+<?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.logistics.mapper.BizAddressBookMapper">
+    
+    <resultMap type="com.ruoyi.logistics.domain.BizAddressBook" id="BizAddressBookResult">
+        <result property="addressId"    column="address_id"    />
+        <result property="companyName"    column="company_name"    />
+        <result property="contactName"    column="contact_name"    />
+        <result property="contactPhone"    column="contact_phone"    />
+        <result property="provinceName"    column="province_name"    />
+        <result property="cityName"    column="city_name"    />
+        <result property="countyName"    column="county_name"    />
+        <result property="detailedAddress"    column="detailed_address"    />
+        <result property="defaultFlag"    column="default_flag"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="remark"    column="remark"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectBizAddressBookVo">
+        select address_id, company_name, contact_name, contact_phone, province_name, city_name, county_name, detailed_address, default_flag, dept_id, user_id, remark, del_flag, create_time, update_time, create_by, update_by from biz_address_book
+    </sql>
+
+    <select id="selectBizAddressBookList" parameterType="com.ruoyi.logistics.domain.BizAddressBook" resultMap="BizAddressBookResult">
+        <include refid="selectBizAddressBookVo"/>
+        <where>  
+            <if test="companyName != null  and companyName != ''"> and company_name like concat('%', #{companyName}, '%')</if>
+            <if test="contactName != null  and contactName != ''"> and contact_name like concat('%', #{contactName}, '%')</if>
+            <if test="contactPhone != null  and contactPhone != ''"> and contact_phone = #{contactPhone}</if>
+            <if test="provinceName != null  and provinceName != ''"> and province_name like concat('%', #{provinceName}, '%')</if>
+            <if test="cityName != null  and cityName != ''"> and city_name like concat('%', #{cityName}, '%')</if>
+            <if test="countyName != null  and countyName != ''"> and county_name like concat('%', #{countyName}, '%')</if>
+            <if test="detailedAddress != null  and detailedAddress != ''"> and detailed_address = #{detailedAddress}</if>
+            <if test="defaultFlag != null  and defaultFlag != ''"> and default_flag = #{defaultFlag}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+        </where>
+    </select>
+    
+    <select id="selectBizAddressBookByAddressId" parameterType="Long" resultMap="BizAddressBookResult">
+        <include refid="selectBizAddressBookVo"/>
+        where address_id = #{addressId}
+    </select>
+
+    <insert id="insertBizAddressBook" parameterType="com.ruoyi.logistics.domain.BizAddressBook" useGeneratedKeys="true" keyProperty="addressId">
+        insert into biz_address_book
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="companyName != null">company_name,</if>
+            <if test="contactName != null">contact_name,</if>
+            <if test="contactPhone != null">contact_phone,</if>
+            <if test="provinceName != null">province_name,</if>
+            <if test="cityName != null">city_name,</if>
+            <if test="countyName != null">county_name,</if>
+            <if test="detailedAddress != null">detailed_address,</if>
+            <if test="defaultFlag != null">default_flag,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="remark != null">remark,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="companyName != null">#{companyName},</if>
+            <if test="contactName != null">#{contactName},</if>
+            <if test="contactPhone != null">#{contactPhone},</if>
+            <if test="provinceName != null">#{provinceName},</if>
+            <if test="cityName != null">#{cityName},</if>
+            <if test="countyName != null">#{countyName},</if>
+            <if test="detailedAddress != null">#{detailedAddress},</if>
+            <if test="defaultFlag != null">#{defaultFlag},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBizAddressBook" parameterType="com.ruoyi.logistics.domain.BizAddressBook">
+        update biz_address_book
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="companyName != null">company_name = #{companyName},</if>
+            <if test="contactName != null">contact_name = #{contactName},</if>
+            <if test="contactPhone != null">contact_phone = #{contactPhone},</if>
+            <if test="provinceName != null">province_name = #{provinceName},</if>
+            <if test="cityName != null">city_name = #{cityName},</if>
+            <if test="countyName != null">county_name = #{countyName},</if>
+            <if test="detailedAddress != null">detailed_address = #{detailedAddress},</if>
+            <if test="defaultFlag != null">default_flag = #{defaultFlag},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+        </trim>
+        where address_id = #{addressId}
+    </update>
+
+    <delete id="deleteBizAddressBookByAddressId" parameterType="Long">
+        delete from biz_address_book where address_id = #{addressId}
+    </delete>
+
+    <delete id="deleteBizAddressBookByAddressIds" parameterType="String">
+        delete from biz_address_book where address_id in 
+        <foreach item="addressId" collection="array" open="(" separator="," close=")">
+            #{addressId}
+        </foreach>
+    </delete>
+</mapper>

+ 115 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizBannerMapper.xml

@@ -0,0 +1,115 @@
+<?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.logistics.mapper.BizBannerMapper">
+    
+    <resultMap type="com.ruoyi.logistics.domain.BizBanner" id="BizBannerResult">
+        <result property="bannerId"    column="banner_id"    />
+        <result property="bannerName"    column="banner_name"    />
+        <result property="imageUrl"    column="image_url"    />
+        <result property="linkUrl"    column="link_url"    />
+        <result property="sortOrder"    column="sort_order"    />
+        <result property="isActive"    column="is_active"    />
+        <result property="sysType"    column="sys_type"    />
+        <result property="remark"    column="remark"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="userId"    column="user_id"    />
+    </resultMap>
+
+    <sql id="selectBizBannerVo">
+        select banner_id, banner_name, image_url, link_url, sort_order, is_active, sys_type, remark, del_flag, create_time, update_time, create_by, update_by, dept_id, user_id from biz_banner
+    </sql>
+
+    <select id="selectBizBannerList" parameterType="com.ruoyi.logistics.domain.BizBanner" resultMap="BizBannerResult">
+        <include refid="selectBizBannerVo"/>
+        <where>  
+            <if test="bannerName != null  and bannerName != ''"> and banner_name like concat('%', #{bannerName}, '%')</if>
+            <if test="imageUrl != null  and imageUrl != ''"> and image_url = #{imageUrl}</if>
+            <if test="linkUrl != null  and linkUrl != ''"> and link_url = #{linkUrl}</if>
+            <if test="sortOrder != null "> and sort_order = #{sortOrder}</if>
+            <if test="isActive != null  and isActive != ''"> and is_active = #{isActive}</if>
+            <if test="sysType != null  and sysType != ''"> and sys_type = #{sysType}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+        </where>
+    </select>
+    
+    <select id="selectBizBannerByBannerId" parameterType="Long" resultMap="BizBannerResult">
+        <include refid="selectBizBannerVo"/>
+        where banner_id = #{bannerId}
+    </select>
+
+    <insert id="insertBizBanner" parameterType="com.ruoyi.logistics.domain.BizBanner" useGeneratedKeys="true" keyProperty="bannerId">
+        insert into biz_banner
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="bannerName != null">banner_name,</if>
+            <if test="imageUrl != null">image_url,</if>
+            <if test="linkUrl != null">link_url,</if>
+            <if test="sortOrder != null">sort_order,</if>
+            <if test="isActive != null and isActive != ''">is_active,</if>
+            <if test="sysType != null">sys_type,</if>
+            <if test="remark != null">remark,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="userId != null">user_id,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="bannerName != null">#{bannerName},</if>
+            <if test="imageUrl != null">#{imageUrl},</if>
+            <if test="linkUrl != null">#{linkUrl},</if>
+            <if test="sortOrder != null">#{sortOrder},</if>
+            <if test="isActive != null and isActive != ''">#{isActive},</if>
+            <if test="sysType != null">#{sysType},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="userId != null">#{userId},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBizBanner" parameterType="com.ruoyi.logistics.domain.BizBanner">
+        update biz_banner
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="bannerName != null">banner_name = #{bannerName},</if>
+            <if test="imageUrl != null">image_url = #{imageUrl},</if>
+            <if test="linkUrl != null">link_url = #{linkUrl},</if>
+            <if test="sortOrder != null">sort_order = #{sortOrder},</if>
+            <if test="isActive != null and isActive != ''">is_active = #{isActive},</if>
+            <if test="sysType != null">sys_type = #{sysType},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+        </trim>
+        where banner_id = #{bannerId}
+    </update>
+
+    <delete id="deleteBizBannerByBannerId" parameterType="Long">
+        delete from biz_banner where banner_id = #{bannerId}
+    </delete>
+
+    <delete id="deleteBizBannerByBannerIds" parameterType="String">
+        delete from biz_banner where banner_id in 
+        <foreach item="bannerId" collection="array" open="(" separator="," close=")">
+            #{bannerId}
+        </foreach>
+    </delete>
+</mapper>

+ 120 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizFinancialAdjustmentRecordMapper.xml

@@ -0,0 +1,120 @@
+<?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.logistics.mapper.BizFinancialAdjustmentRecordMapper">
+    
+    <resultMap type="com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord" id="BizFinancialAdjustmentRecordResult">
+        <result property="financialAdjustId"    column="financial_adjust_id"    />
+        <result property="waybillNo"    column="waybill_no"    />
+        <result property="waybillCostDetailId"    column="waybill_cost_detail_id"    />
+        <result property="adjustmentType"    column="adjustment_type"    />
+        <result property="originalAmount"    column="original_amount"    />
+        <result property="adjustedAmount"    column="adjusted_amount"    />
+        <result property="adjustmentAmount"    column="adjustment_amount"    />
+        <result property="adjustmentReason"    column="adjustment_reason"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectBizFinancialAdjustmentRecordVo">
+        select financial_adjust_id, waybill_no, waybill_cost_detail_id, adjustment_type, original_amount, adjusted_amount, adjustment_amount, adjustment_reason, create_time, update_time, remark, dept_id, user_id, del_flag, create_by, update_by from biz_financial_adjustment_record
+    </sql>
+
+    <select id="selectBizFinancialAdjustmentRecordList" parameterType="com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord" resultMap="BizFinancialAdjustmentRecordResult">
+        <include refid="selectBizFinancialAdjustmentRecordVo"/>
+        <where>  
+            <if test="waybillNo != null  and waybillNo != ''"> and waybill_no = #{waybillNo}</if>
+            <if test="waybillCostDetailId != null "> and waybill_cost_detail_id = #{waybillCostDetailId}</if>
+            <if test="adjustmentType != null  and adjustmentType != ''"> and adjustment_type = #{adjustmentType}</if>
+            <if test="originalAmount != null "> and original_amount = #{originalAmount}</if>
+            <if test="adjustedAmount != null "> and adjusted_amount = #{adjustedAmount}</if>
+            <if test="adjustmentAmount != null "> and adjustment_amount = #{adjustmentAmount}</if>
+            <if test="adjustmentReason != null  and adjustmentReason != ''"> and adjustment_reason = #{adjustmentReason}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+        </where>
+    </select>
+    
+    <select id="selectBizFinancialAdjustmentRecordByFinancialAdjustId" parameterType="Long" resultMap="BizFinancialAdjustmentRecordResult">
+        <include refid="selectBizFinancialAdjustmentRecordVo"/>
+        where financial_adjust_id = #{financialAdjustId}
+    </select>
+
+    <insert id="insertBizFinancialAdjustmentRecord" parameterType="com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord" useGeneratedKeys="true" keyProperty="financialAdjustId">
+        insert into biz_financial_adjustment_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="waybillNo != null">waybill_no,</if>
+            <if test="waybillCostDetailId != null">waybill_cost_detail_id,</if>
+            <if test="adjustmentType != null">adjustment_type,</if>
+            <if test="originalAmount != null">original_amount,</if>
+            <if test="adjustedAmount != null">adjusted_amount,</if>
+            <if test="adjustmentAmount != null">adjustment_amount,</if>
+            <if test="adjustmentReason != null">adjustment_reason,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="waybillNo != null">#{waybillNo},</if>
+            <if test="waybillCostDetailId != null">#{waybillCostDetailId},</if>
+            <if test="adjustmentType != null">#{adjustmentType},</if>
+            <if test="originalAmount != null">#{originalAmount},</if>
+            <if test="adjustedAmount != null">#{adjustedAmount},</if>
+            <if test="adjustmentAmount != null">#{adjustmentAmount},</if>
+            <if test="adjustmentReason != null">#{adjustmentReason},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBizFinancialAdjustmentRecord" parameterType="com.ruoyi.logistics.domain.BizFinancialAdjustmentRecord">
+        update biz_financial_adjustment_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="waybillNo != null">waybill_no = #{waybillNo},</if>
+            <if test="waybillCostDetailId != null">waybill_cost_detail_id = #{waybillCostDetailId},</if>
+            <if test="adjustmentType != null">adjustment_type = #{adjustmentType},</if>
+            <if test="originalAmount != null">original_amount = #{originalAmount},</if>
+            <if test="adjustedAmount != null">adjusted_amount = #{adjustedAmount},</if>
+            <if test="adjustmentAmount != null">adjustment_amount = #{adjustmentAmount},</if>
+            <if test="adjustmentReason != null">adjustment_reason = #{adjustmentReason},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+        </trim>
+        where financial_adjust_id = #{financialAdjustId}
+    </update>
+
+    <delete id="deleteBizFinancialAdjustmentRecordByFinancialAdjustId" parameterType="Long">
+        delete from biz_financial_adjustment_record where financial_adjust_id = #{financialAdjustId}
+    </delete>
+
+    <delete id="deleteBizFinancialAdjustmentRecordByFinancialAdjustIds" parameterType="String">
+        delete from biz_financial_adjustment_record where financial_adjust_id in 
+        <foreach item="financialAdjustId" collection="array" open="(" separator="," close=")">
+            #{financialAdjustId}
+        </foreach>
+    </delete>
+</mapper>

+ 110 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizInancialFeeItemsMapper.xml

@@ -0,0 +1,110 @@
+<?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.logistics.mapper.BizInancialFeeItemsMapper">
+    
+    <resultMap type="com.ruoyi.logistics.domain.BizInancialFeeItems" id="BizInancialFeeItemsResult">
+        <result property="feeItemId"    column="fee_item_id"    />
+        <result property="feeItemCode"    column="fee_item_code"    />
+        <result property="feeItemName"    column="fee_item_name"    />
+        <result property="feeItemCategory"    column="fee_item_category"    />
+        <result property="extFeeCode"    column="ext_fee_code"    />
+        <result property="extFeeName"    column="ext_fee_name"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectBizInancialFeeItemsVo">
+        select fee_item_id, fee_item_code, fee_item_name, fee_item_category, ext_fee_code, ext_fee_name, create_time, update_time, remark, dept_id, user_id, del_flag, create_by, update_by from biz_inancial_fee_items
+    </sql>
+
+    <select id="selectBizInancialFeeItemsList" parameterType="com.ruoyi.logistics.domain.BizInancialFeeItems" resultMap="BizInancialFeeItemsResult">
+        <include refid="selectBizInancialFeeItemsVo"/>
+        <where>  
+            <if test="feeItemCode != null  and feeItemCode != ''"> and fee_item_code = #{feeItemCode}</if>
+            <if test="feeItemName != null  and feeItemName != ''"> and fee_item_name like concat('%', #{feeItemName}, '%')</if>
+            <if test="feeItemCategory != null  and feeItemCategory != ''"> and fee_item_category = #{feeItemCategory}</if>
+            <if test="extFeeCode != null  and extFeeCode != ''"> and ext_fee_code = #{extFeeCode}</if>
+            <if test="extFeeName != null  and extFeeName != ''"> and ext_fee_name like concat('%', #{extFeeName}, '%')</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+        </where>
+    </select>
+    
+    <select id="selectBizInancialFeeItemsByFeeItemId" parameterType="Long" resultMap="BizInancialFeeItemsResult">
+        <include refid="selectBizInancialFeeItemsVo"/>
+        where fee_item_id = #{feeItemId}
+    </select>
+
+    <insert id="insertBizInancialFeeItems" parameterType="com.ruoyi.logistics.domain.BizInancialFeeItems" useGeneratedKeys="true" keyProperty="feeItemId">
+        insert into biz_inancial_fee_items
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="feeItemCode != null">fee_item_code,</if>
+            <if test="feeItemName != null">fee_item_name,</if>
+            <if test="feeItemCategory != null">fee_item_category,</if>
+            <if test="extFeeCode != null">ext_fee_code,</if>
+            <if test="extFeeName != null">ext_fee_name,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="feeItemCode != null">#{feeItemCode},</if>
+            <if test="feeItemName != null">#{feeItemName},</if>
+            <if test="feeItemCategory != null">#{feeItemCategory},</if>
+            <if test="extFeeCode != null">#{extFeeCode},</if>
+            <if test="extFeeName != null">#{extFeeName},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBizInancialFeeItems" parameterType="com.ruoyi.logistics.domain.BizInancialFeeItems">
+        update biz_inancial_fee_items
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="feeItemCode != null">fee_item_code = #{feeItemCode},</if>
+            <if test="feeItemName != null">fee_item_name = #{feeItemName},</if>
+            <if test="feeItemCategory != null">fee_item_category = #{feeItemCategory},</if>
+            <if test="extFeeCode != null">ext_fee_code = #{extFeeCode},</if>
+            <if test="extFeeName != null">ext_fee_name = #{extFeeName},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+        </trim>
+        where fee_item_id = #{feeItemId}
+    </update>
+
+    <delete id="deleteBizInancialFeeItemsByFeeItemId" parameterType="Long">
+        delete from biz_inancial_fee_items where fee_item_id = #{feeItemId}
+    </delete>
+
+    <delete id="deleteBizInancialFeeItemsByFeeItemIds" parameterType="String">
+        delete from biz_inancial_fee_items where fee_item_id in 
+        <foreach item="feeItemId" collection="array" open="(" separator="," close=")">
+            #{feeItemId}
+        </foreach>
+    </delete>
+</mapper>

+ 125 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillCostDetailsMapper.xml

@@ -0,0 +1,125 @@
+<?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.logistics.mapper.BizWaybillCostDetailsMapper">
+    
+    <resultMap type="com.ruoyi.logistics.domain.BizWaybillCostDetails" id="BizWaybillCostDetailsResult">
+        <result property="waybillDetailId"    column="waybill_detail_id"    />
+        <result property="waybillId"    column="waybill_id"    />
+        <result property="externalWaybillNo"    column="external_waybill_no"    />
+        <result property="feeItemCode"    column="fee_item_code"    />
+        <result property="feeItemName"    column="fee_item_name"    />
+        <result property="feeName"    column="fee_name"    />
+        <result property="amount"    column="amount"    />
+        <result property="rateAmount"    column="rate_amount"    />
+        <result property="adjustAmount"    column="adjust_amount"    />
+        <result property="remark"    column="remark"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+    </resultMap>
+
+    <sql id="selectBizWaybillCostDetailsVo">
+        select waybill_detail_id, waybill_id, external_waybill_no, fee_item_code, fee_item_name, fee_name, amount, rate_amount, adjust_amount, remark, create_time, update_time, dept_id, user_id, del_flag, create_by, update_by from biz_waybill_cost_details
+    </sql>
+
+    <select id="selectBizWaybillCostDetailsList" parameterType="com.ruoyi.logistics.domain.BizWaybillCostDetails" resultMap="BizWaybillCostDetailsResult">
+        <include refid="selectBizWaybillCostDetailsVo"/>
+        <where>  
+            <if test="waybillId != null "> and waybill_id = #{waybillId}</if>
+            <if test="externalWaybillNo != null  and externalWaybillNo != ''"> and external_waybill_no = #{externalWaybillNo}</if>
+            <if test="feeItemCode != null  and feeItemCode != ''"> and fee_item_code = #{feeItemCode}</if>
+            <if test="feeItemName != null  and feeItemName != ''"> and fee_item_name like concat('%', #{feeItemName}, '%')</if>
+            <if test="feeName != null  and feeName != ''"> and fee_name like concat('%', #{feeName}, '%')</if>
+            <if test="amount != null "> and amount = #{amount}</if>
+            <if test="rateAmount != null "> and rate_amount = #{rateAmount}</if>
+            <if test="adjustAmount != null "> and adjust_amount = #{adjustAmount}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+        </where>
+    </select>
+    
+    <select id="selectBizWaybillCostDetailsByWaybillDetailId" parameterType="Long" resultMap="BizWaybillCostDetailsResult">
+        <include refid="selectBizWaybillCostDetailsVo"/>
+        where waybill_detail_id = #{waybillDetailId}
+    </select>
+
+    <insert id="insertBizWaybillCostDetails" parameterType="com.ruoyi.logistics.domain.BizWaybillCostDetails" useGeneratedKeys="true" keyProperty="waybillDetailId">
+        insert into biz_waybill_cost_details
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="waybillId != null">waybill_id,</if>
+            <if test="externalWaybillNo != null">external_waybill_no,</if>
+            <if test="feeItemCode != null">fee_item_code,</if>
+            <if test="feeItemName != null">fee_item_name,</if>
+            <if test="feeName != null">fee_name,</if>
+            <if test="amount != null">amount,</if>
+            <if test="rateAmount != null">rate_amount,</if>
+            <if test="adjustAmount != null">adjust_amount,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="waybillId != null">#{waybillId},</if>
+            <if test="externalWaybillNo != null">#{externalWaybillNo},</if>
+            <if test="feeItemCode != null">#{feeItemCode},</if>
+            <if test="feeItemName != null">#{feeItemName},</if>
+            <if test="feeName != null">#{feeName},</if>
+            <if test="amount != null">#{amount},</if>
+            <if test="rateAmount != null">#{rateAmount},</if>
+            <if test="adjustAmount != null">#{adjustAmount},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBizWaybillCostDetails" parameterType="com.ruoyi.logistics.domain.BizWaybillCostDetails">
+        update biz_waybill_cost_details
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="waybillId != null">waybill_id = #{waybillId},</if>
+            <if test="externalWaybillNo != null">external_waybill_no = #{externalWaybillNo},</if>
+            <if test="feeItemCode != null">fee_item_code = #{feeItemCode},</if>
+            <if test="feeItemName != null">fee_item_name = #{feeItemName},</if>
+            <if test="feeName != null">fee_name = #{feeName},</if>
+            <if test="amount != null">amount = #{amount},</if>
+            <if test="rateAmount != null">rate_amount = #{rateAmount},</if>
+            <if test="adjustAmount != null">adjust_amount = #{adjustAmount},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+        </trim>
+        where waybill_detail_id = #{waybillDetailId}
+    </update>
+
+    <delete id="deleteBizWaybillCostDetailsByWaybillDetailId" parameterType="Long">
+        delete from biz_waybill_cost_details where waybill_detail_id = #{waybillDetailId}
+    </delete>
+
+    <delete id="deleteBizWaybillCostDetailsByWaybillDetailIds" parameterType="String">
+        delete from biz_waybill_cost_details where waybill_detail_id in 
+        <foreach item="waybillDetailId" collection="array" open="(" separator="," close=")">
+            #{waybillDetailId}
+        </foreach>
+    </delete>
+</mapper>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 230 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillOrderMapper.xml


+ 125 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/RptFinancialMonthSummaryMapper.xml

@@ -0,0 +1,125 @@
+<?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.logistics.mapper.RptFinancialMonthSummaryMapper">
+    
+    <resultMap type="com.ruoyi.logistics.domain.RptFinancialMonthSummary" id="RptFinancialMonthSummaryResult">
+        <result property="summaryId"    column="summary_id"    />
+        <result property="summaryMonth"    column="summary_month"    />
+        <result property="payableAmount"    column="payable_amount"    />
+        <result property="transactionCount"    column="transaction_count"    />
+        <result property="status"    column="status"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="deptId"    column="dept_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="bwDjbh"    column="bw_djbh"    />
+        <result property="bwDzfpPdfUrl"    column="bw_dzfp_pdf_url"    />
+        <result property="bwDzfpOfdUrl"    column="bw_dzfp_ofd_url"    />
+        <result property="bwDzfpXmlUrl"    column="bw_dzfp_xml_url"    />
+    </resultMap>
+
+    <sql id="selectRptFinancialMonthSummaryVo">
+        select summary_id, summary_month, payable_amount, transaction_count, status, create_time, update_time, remark, del_flag, create_by, update_by, dept_id, user_id, bw_djbh, bw_dzfp_pdf_url, bw_dzfp_ofd_url, bw_dzfp_xml_url from rpt_financial_month_summary
+    </sql>
+
+    <select id="selectRptFinancialMonthSummaryList" parameterType="com.ruoyi.logistics.domain.RptFinancialMonthSummary" resultMap="RptFinancialMonthSummaryResult">
+        <include refid="selectRptFinancialMonthSummaryVo"/>
+        <where>  
+            <if test="summaryMonth != null  and summaryMonth != ''"> and summary_month = #{summaryMonth}</if>
+            <if test="payableAmount != null  and payableAmount != ''"> and payable_amount = #{payableAmount}</if>
+            <if test="transactionCount != null  and transactionCount != ''"> and transaction_count = #{transactionCount}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="bwDjbh != null  and bwDjbh != ''"> and bw_djbh = #{bwDjbh}</if>
+            <if test="bwDzfpPdfUrl != null  and bwDzfpPdfUrl != ''"> and bw_dzfp_pdf_url = #{bwDzfpPdfUrl}</if>
+            <if test="bwDzfpOfdUrl != null  and bwDzfpOfdUrl != ''"> and bw_dzfp_ofd_url = #{bwDzfpOfdUrl}</if>
+            <if test="bwDzfpXmlUrl != null  and bwDzfpXmlUrl != ''"> and bw_dzfp_xml_url = #{bwDzfpXmlUrl}</if>
+        </where>
+    </select>
+    
+    <select id="selectRptFinancialMonthSummaryBySummaryId" parameterType="Long" resultMap="RptFinancialMonthSummaryResult">
+        <include refid="selectRptFinancialMonthSummaryVo"/>
+        where summary_id = #{summaryId}
+    </select>
+
+    <insert id="insertRptFinancialMonthSummary" parameterType="com.ruoyi.logistics.domain.RptFinancialMonthSummary" useGeneratedKeys="true" keyProperty="summaryId">
+        insert into rpt_financial_month_summary
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="summaryMonth != null">summary_month,</if>
+            <if test="payableAmount != null">payable_amount,</if>
+            <if test="transactionCount != null">transaction_count,</if>
+            <if test="status != null">status,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="deptId != null">dept_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="bwDjbh != null">bw_djbh,</if>
+            <if test="bwDzfpPdfUrl != null">bw_dzfp_pdf_url,</if>
+            <if test="bwDzfpOfdUrl != null">bw_dzfp_ofd_url,</if>
+            <if test="bwDzfpXmlUrl != null">bw_dzfp_xml_url,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="summaryMonth != null">#{summaryMonth},</if>
+            <if test="payableAmount != null">#{payableAmount},</if>
+            <if test="transactionCount != null">#{transactionCount},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="deptId != null">#{deptId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="bwDjbh != null">#{bwDjbh},</if>
+            <if test="bwDzfpPdfUrl != null">#{bwDzfpPdfUrl},</if>
+            <if test="bwDzfpOfdUrl != null">#{bwDzfpOfdUrl},</if>
+            <if test="bwDzfpXmlUrl != null">#{bwDzfpXmlUrl},</if>
+         </trim>
+    </insert>
+
+    <update id="updateRptFinancialMonthSummary" parameterType="com.ruoyi.logistics.domain.RptFinancialMonthSummary">
+        update rpt_financial_month_summary
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="summaryMonth != null">summary_month = #{summaryMonth},</if>
+            <if test="payableAmount != null">payable_amount = #{payableAmount},</if>
+            <if test="transactionCount != null">transaction_count = #{transactionCount},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="deptId != null">dept_id = #{deptId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="bwDjbh != null">bw_djbh = #{bwDjbh},</if>
+            <if test="bwDzfpPdfUrl != null">bw_dzfp_pdf_url = #{bwDzfpPdfUrl},</if>
+            <if test="bwDzfpOfdUrl != null">bw_dzfp_ofd_url = #{bwDzfpOfdUrl},</if>
+            <if test="bwDzfpXmlUrl != null">bw_dzfp_xml_url = #{bwDzfpXmlUrl},</if>
+        </trim>
+        where summary_id = #{summaryId}
+    </update>
+
+    <delete id="deleteRptFinancialMonthSummaryBySummaryId" parameterType="Long">
+        delete from rpt_financial_month_summary where summary_id = #{summaryId}
+    </delete>
+
+    <delete id="deleteRptFinancialMonthSummaryBySummaryIds" parameterType="String">
+        delete from rpt_financial_month_summary where summary_id in 
+        <foreach item="summaryId" collection="array" open="(" separator="," close=")">
+            #{summaryId}
+        </foreach>
+    </delete>
+</mapper>

+ 120 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/SysCityMapper.xml

@@ -0,0 +1,120 @@
+<?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.logistics.mapper.SysCityMapper">
+    
+    <resultMap type="com.ruoyi.logistics.domain.SysCity" id="SysCityResult">
+        <result property="id"    column="id"    />
+        <result property="cityId"    column="city_id"    />
+        <result property="level"    column="level"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="areaCode"    column="area_code"    />
+        <result property="name"    column="name"    />
+        <result property="mergerName"    column="merger_name"    />
+        <result property="lng"    column="lng"    />
+        <result property="lat"    column="lat"    />
+        <result property="isShow"    column="is_show"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="remark"    column="remark"    />
+        <result property="delFlag"    column="del_flag"    />
+    </resultMap>
+
+    <sql id="selectSysCityVo">
+        select id, city_id, level, parent_id, area_code, name, merger_name, lng, lat, is_show, create_time, update_time, create_by, update_by, remark, del_flag from sys_city
+    </sql>
+
+    <select id="selectSysCityList" parameterType="com.ruoyi.logistics.domain.SysCity" resultMap="SysCityResult">
+        <include refid="selectSysCityVo"/>
+        <where>  
+            <if test="cityId != null "> and city_id = #{cityId}</if>
+            <if test="level != null "> and level = #{level}</if>
+            <if test="parentId != null "> and parent_id = #{parentId}</if>
+            <if test="areaCode != null  and areaCode != ''"> and area_code = #{areaCode}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="mergerName != null  and mergerName != ''"> and merger_name like concat('%', #{mergerName}, '%')</if>
+            <if test="lng != null  and lng != ''"> and lng = #{lng}</if>
+            <if test="lat != null  and lat != ''"> and lat = #{lat}</if>
+            <if test="isShow != null "> and is_show = #{isShow}</if>
+        </where>
+    </select>
+    
+    <select id="selectSysCityById" parameterType="Long" resultMap="SysCityResult">
+        <include refid="selectSysCityVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertSysCity" parameterType="com.ruoyi.logistics.domain.SysCity" useGeneratedKeys="true" keyProperty="id">
+        insert into sys_city
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="cityId != null">city_id,</if>
+            <if test="level != null">level,</if>
+            <if test="parentId != null">parent_id,</if>
+            <if test="areaCode != null and areaCode != ''">area_code,</if>
+            <if test="name != null and name != ''">name,</if>
+            <if test="mergerName != null and mergerName != ''">merger_name,</if>
+            <if test="lng != null and lng != ''">lng,</if>
+            <if test="lat != null and lat != ''">lat,</if>
+            <if test="isShow != null">is_show,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="remark != null">remark,</if>
+            <if test="delFlag != null">del_flag,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="cityId != null">#{cityId},</if>
+            <if test="level != null">#{level},</if>
+            <if test="parentId != null">#{parentId},</if>
+            <if test="areaCode != null and areaCode != ''">#{areaCode},</if>
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="mergerName != null and mergerName != ''">#{mergerName},</if>
+            <if test="lng != null and lng != ''">#{lng},</if>
+            <if test="lat != null and lat != ''">#{lat},</if>
+            <if test="isShow != null">#{isShow},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysCity" parameterType="com.ruoyi.logistics.domain.SysCity">
+        update sys_city
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="cityId != null">city_id = #{cityId},</if>
+            <if test="level != null">level = #{level},</if>
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="areaCode != null and areaCode != ''">area_code = #{areaCode},</if>
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="mergerName != null and mergerName != ''">merger_name = #{mergerName},</if>
+            <if test="lng != null and lng != ''">lng = #{lng},</if>
+            <if test="lat != null and lat != ''">lat = #{lat},</if>
+            <if test="isShow != null">is_show = #{isShow},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteSysCityById" parameterType="Long">
+        delete from sys_city where id = #{id}
+    </delete>
+
+    <delete id="deleteSysCityByIds" parameterType="String">
+        delete from sys_city where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 26 - 1
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -20,10 +20,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="createTime" column="create_time" />
 		<result property="updateBy"   column="update_by"   />
 		<result property="updateTime" column="update_time" />
+		<result property="invoiceName" column="invoice_name" />
+		<result property="invoiceNum" column="invoice_num" />
+		<result property="rateValue" column="rate_value" />
+		<result property="openBank" column="open_bank" />
+		<result property="bankAccount" column="bank_account" />
+		<result property="companyAddress" column="company_address" />
 	</resultMap>
 	
 	<sql id="selectDeptVo">
-        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time 
+        select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time,
+        d.invoice_name, d.invoice_num, d.rate_value, d.open_bank, d.bank_account, d.company_address
         from sys_dept d
     </sql>
     
@@ -97,6 +104,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="email != null and email != ''">email,</if>
  			<if test="status != null">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
+  			<if test="invoiceName != null and invoiceName != ''">invoice_name,</if>
+  			<if test="invoiceNum != null and invoiceNum != ''">invoice_num,</if>
+  			<if test="rateValue != null and rateValue != ''">rate_value,</if>
+  			<if test="openBank != null and openBank != ''">open_bank,</if>
+  			<if test="bankAccount != null and bankAccount != ''">bank_account,</if>
+  			<if test="companyAddress != null and companyAddress != ''">company_address,</if>
  			create_time
  		)values(
  			<if test="deptId != null and deptId != 0">#{deptId},</if>
@@ -109,6 +122,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="email != null and email != ''">#{email},</if>
  			<if test="status != null">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
+  			<if test="invoiceName != null and invoiceName != ''">#{invoiceName},</if>
+  			<if test="invoiceNum != null and invoiceNum != ''">#{invoiceNum},</if>
+  			<if test="rateValue != null and rateValue != ''">#{rateValue},</if>
+  			<if test="openBank != null and openBank != ''">#{openBank},</if>
+  			<if test="bankAccount != null and bankAccount != ''">#{bankAccount},</if>
+  			<if test="companyAddress != null and companyAddress != ''">#{companyAddress},</if>
  			sysdate()
  		)
 	</insert>
@@ -125,6 +144,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="email != null">email = #{email},</if>
  			<if test="status != null and status != ''">status = #{status},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+            <if test="invoiceName != null and invoiceName != ''">invoice_name = #{invoiceName},</if>
+            <if test="invoiceNum != null and invoiceNum != ''">invoice_num = #{invoiceNum},</if>
+            <if test="rateValue != null and rateValue != ''">rate_value = #{rateValue},</if>
+            <if test="openBank != null and openBank != ''">open_bank = #{openBank},</if>
+            <if test="bankAccount != null and bankAccount != ''">bank_account = #{bankAccount},</if>
+            <if test="companyAddress != null and companyAddress != ''">company_address = #{companyAddress},</if>
  			update_time = sysdate()
  		</set>
  		where dept_id = #{deptId}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/adjustmentRecord.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询调账流水记录列表
+export function listAdjustmentRecord(query) {
+  return request({
+    url: '/system/adjustmentRecord/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询调账流水记录详细
+export function getAdjustmentRecord(financialAdjustId) {
+  return request({
+    url: '/system/adjustmentRecord/' + financialAdjustId,
+    method: 'get'
+  })
+}
+
+// 新增调账流水记录
+export function addAdjustmentRecord(data) {
+  return request({
+    url: '/system/adjustmentRecord',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改调账流水记录
+export function updateAdjustmentRecord(data) {
+  return request({
+    url: '/system/adjustmentRecord',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除调账流水记录
+export function delAdjustmentRecord(financialAdjustId) {
+  return request({
+    url: '/system/adjustmentRecord/' + financialAdjustId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/banner.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询系统轮播图列表
+export function listBanner(query) {
+  return request({
+    url: '/system/banner/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询系统轮播图详细
+export function getBanner(bannerId) {
+  return request({
+    url: '/system/banner/' + bannerId,
+    method: 'get'
+  })
+}
+
+// 新增系统轮播图
+export function addBanner(data) {
+  return request({
+    url: '/system/banner',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改系统轮播图
+export function updateBanner(data) {
+  return request({
+    url: '/system/banner',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除系统轮播图
+export function delBanner(bannerId) {
+  return request({
+    url: '/system/banner/' + bannerId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/book.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询地址簿管理列表
+export function listBook(query) {
+  return request({
+    url: '/system/book/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询地址簿管理详细
+export function getBook(addressId) {
+  return request({
+    url: '/system/book/' + addressId,
+    method: 'get'
+  })
+}
+
+// 新增地址簿管理
+export function addBook(data) {
+  return request({
+    url: '/system/book',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改地址簿管理
+export function updateBook(data) {
+  return request({
+    url: '/system/book',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除地址簿管理
+export function delBook(addressId) {
+  return request({
+    url: '/system/book/' + addressId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/city.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询城市管理列表
+export function listCity(query) {
+  return request({
+    url: '/system/city/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询城市管理详细
+export function getCity(id) {
+  return request({
+    url: '/system/city/' + id,
+    method: 'get'
+  })
+}
+
+// 新增城市管理
+export function addCity(data) {
+  return request({
+    url: '/system/city',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改城市管理
+export function updateCity(data) {
+  return request({
+    url: '/system/city',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除城市管理
+export function delCity(id) {
+  return request({
+    url: '/system/city/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/costDetails.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询运单明细列表
+export function listCostDetails(query) {
+  return request({
+    url: '/system/costDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询运单明细详细
+export function getCostDetails(waybillDetailId) {
+  return request({
+    url: '/system/costDetails/' + waybillDetailId,
+    method: 'get'
+  })
+}
+
+// 新增运单明细
+export function addCostDetails(data) {
+  return request({
+    url: '/system/costDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改运单明细
+export function updateCostDetails(data) {
+  return request({
+    url: '/system/costDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除运单明细
+export function delCostDetails(waybillDetailId) {
+  return request({
+    url: '/system/costDetails/' + waybillDetailId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/dept.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询部门列表
+export function listDept(query) {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询部门详细
+export function getDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'get'
+  })
+}
+
+// 新增部门
+export function addDept(data) {
+  return request({
+    url: '/system/dept',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改部门
+export function updateDept(data) {
+  return request({
+    url: '/system/dept',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除部门
+export function delDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/inancialFee.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询费用类型管理列表
+export function listInancialFee(query) {
+  return request({
+    url: '/system/inancialFee/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询费用类型管理详细
+export function getInancialFee(feeItemId) {
+  return request({
+    url: '/system/inancialFee/' + feeItemId,
+    method: 'get'
+  })
+}
+
+// 新增费用类型管理
+export function addInancialFee(data) {
+  return request({
+    url: '/system/inancialFee',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改费用类型管理
+export function updateInancialFee(data) {
+  return request({
+    url: '/system/inancialFee',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除费用类型管理
+export function delInancialFee(feeItemId) {
+  return request({
+    url: '/system/inancialFee/' + feeItemId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/monthSummary.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询财务月度汇总列表
+export function listMonthSummary(query) {
+  return request({
+    url: '/system/monthSummary/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询财务月度汇总详细
+export function getMonthSummary(summaryId) {
+  return request({
+    url: '/system/monthSummary/' + summaryId,
+    method: 'get'
+  })
+}
+
+// 新增财务月度汇总
+export function addMonthSummary(data) {
+  return request({
+    url: '/system/monthSummary',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改财务月度汇总
+export function updateMonthSummary(data) {
+  return request({
+    url: '/system/monthSummary',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除财务月度汇总
+export function delMonthSummary(summaryId) {
+  return request({
+    url: '/system/monthSummary/' + summaryId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/order.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询运单管理列表
+export function listOrder(query) {
+  return request({
+    url: '/system/order/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询运单管理详细
+export function getOrder(waybillId) {
+  return request({
+    url: '/system/order/' + waybillId,
+    method: 'get'
+  })
+}
+
+// 新增运单管理
+export function addOrder(data) {
+  return request({
+    url: '/system/order',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改运单管理
+export function updateOrder(data) {
+  return request({
+    url: '/system/order',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除运单管理
+export function delOrder(waybillId) {
+  return request({
+    url: '/system/order/' + waybillId,
+    method: 'delete'
+  })
+}

+ 341 - 0
jd-logistics-ui-v3/src/views/logistics/adjustmentRecord/index.vue

@@ -0,0 +1,341 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="运单号" prop="waybillNo">
+        <el-input
+          v-model="queryParams.waybillNo"
+          placeholder="请输入运单号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用明细id" prop="waybillCostDetailId">
+        <el-input
+          v-model="queryParams.waybillCostDetailId"
+          placeholder="请输入费用明细id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="原金额" prop="originalAmount">
+        <el-input
+          v-model="queryParams.originalAmount"
+          placeholder="请输入原金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调整后金额" prop="adjustedAmount">
+        <el-input
+          v-model="queryParams.adjustedAmount"
+          placeholder="请输入调整后金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调整金额" prop="adjustmentAmount">
+        <el-input
+          v-model="queryParams.adjustmentAmount"
+          placeholder="请输入调整金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调账原因" prop="adjustmentReason">
+        <el-input
+          v-model="queryParams.adjustmentReason"
+          placeholder="请输入调账原因"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:adjustmentRecord:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:adjustmentRecord:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:adjustmentRecord:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:adjustmentRecord:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="adjustmentRecordList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="调账流水id" align="center" prop="financialAdjustId" />
+      <el-table-column label="运单号" align="center" prop="waybillNo" />
+      <el-table-column label="费用明细id" align="center" prop="waybillCostDetailId" />
+      <el-table-column label="调账类型" align="center" prop="adjustmentType" />
+      <el-table-column label="原金额" align="center" prop="originalAmount" />
+      <el-table-column label="调整后金额" align="center" prop="adjustedAmount" />
+      <el-table-column label="调整金额" align="center" prop="adjustmentAmount" />
+      <el-table-column label="调账原因" align="center" prop="adjustmentReason" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:adjustmentRecord:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:adjustmentRecord:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改调账流水记录对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="adjustmentRecordRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="运单号" prop="waybillNo">
+          <el-input v-model="form.waybillNo" placeholder="请输入运单号" />
+        </el-form-item>
+        <el-form-item label="费用明细id" prop="waybillCostDetailId">
+          <el-input v-model="form.waybillCostDetailId" placeholder="请输入费用明细id" />
+        </el-form-item>
+        <el-form-item label="原金额" prop="originalAmount">
+          <el-input v-model="form.originalAmount" placeholder="请输入原金额" />
+        </el-form-item>
+        <el-form-item label="调整后金额" prop="adjustedAmount">
+          <el-input v-model="form.adjustedAmount" placeholder="请输入调整后金额" />
+        </el-form-item>
+        <el-form-item label="调整金额" prop="adjustmentAmount">
+          <el-input v-model="form.adjustmentAmount" placeholder="请输入调整金额" />
+        </el-form-item>
+        <el-form-item label="调账原因" prop="adjustmentReason">
+          <el-input v-model="form.adjustmentReason" placeholder="请输入调账原因" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="AdjustmentRecord">
+import { listAdjustmentRecord, getAdjustmentRecord, delAdjustmentRecord, addAdjustmentRecord, updateAdjustmentRecord } from "@/api/logistics/adjustmentRecord"
+
+const { proxy } = getCurrentInstance()
+
+const adjustmentRecordList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    waybillNo: null,
+    waybillCostDetailId: null,
+    adjustmentType: null,
+    originalAmount: null,
+    adjustedAmount: null,
+    adjustmentAmount: null,
+    adjustmentReason: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询调账流水记录列表 */
+function getList() {
+  loading.value = true
+  listAdjustmentRecord(queryParams.value).then(response => {
+    adjustmentRecordList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    financialAdjustId: null,
+    waybillNo: null,
+    waybillCostDetailId: null,
+    adjustmentType: null,
+    originalAmount: null,
+    adjustedAmount: null,
+    adjustmentAmount: null,
+    adjustmentReason: null,
+    createTime: null,
+    updateTime: null,
+    remark: null,
+    deptId: null,
+    userId: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("adjustmentRecordRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.financialAdjustId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加调账流水记录"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _financialAdjustId = row.financialAdjustId || ids.value
+  getAdjustmentRecord(_financialAdjustId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改调账流水记录"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["adjustmentRecordRef"].validate(valid => {
+    if (valid) {
+      if (form.value.financialAdjustId != null) {
+        updateAdjustmentRecord(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addAdjustmentRecord(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _financialAdjustIds = row.financialAdjustId || ids.value
+  proxy.$modal.confirm('是否确认删除调账流水记录编号为"' + _financialAdjustIds + '"的数据项?').then(function() {
+    return delAdjustmentRecord(_financialAdjustIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/adjustmentRecord/export', {
+    ...queryParams.value
+  }, `adjustmentRecord_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 397 - 0
jd-logistics-ui-v3/src/views/logistics/banner/index.vue

@@ -0,0 +1,397 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="名称" prop="bannerName">
+        <el-input
+          v-model="queryParams.bannerName"
+          placeholder="请输入名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否显示" prop="isActive">
+        <el-select
+          v-model="queryParams.isActive"
+          placeholder="请选择是否显示"
+          clearable
+        >
+          <el-option label="是" :value="1" />
+          <el-option label="否" :value="0" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="系统类型" prop="sysType">
+        <el-select
+          v-model="queryParams.sysType"
+          placeholder="请选择系统类型"
+          clearable
+        >
+          <el-option
+            v-for="dict in banner_sys_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:banner:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:banner:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:banner:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:banner:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="bannerList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="名称" align="center" prop="bannerName" />
+      <el-table-column label="轮播图" align="center" prop="imageUrl">
+        <template #default="scope">
+          <el-image
+            :src="scope.row.imageUrl"
+            :preview-src-list="[scope.row.imageUrl]"
+            fit="cover"
+            style="width: 60px; height: 60px; border-radius: 4px;"
+            :z-index="9999"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column label="跳转的链接" align="center" prop="linkUrl" />
+      <el-table-column label="排序值" align="center" prop="sortOrder" />
+      <el-table-column label="是否显示" align="center" prop="isActive">
+        <template #default="scope">
+          <div>{{ scope.row.isActive === "1" ? '是' : '否' }}</div>
+        </template>
+      </el-table-column>
+      <el-table-column label="系统类型" align="center" prop="sysType">
+        <template #default="scope">
+          <dict-tag :options="banner_sys_type" :value="scope.row.sysType" />
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:banner:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:banner:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改系统轮播图对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="bannerRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="轮播图名称" prop="bannerName">
+          <el-input v-model="form.bannerName" placeholder="请输入轮播图名称" />
+        </el-form-item>
+        <el-form-item label="上传图片" prop="imageUrl">
+          <el-upload
+            class="avatar-uploader"
+            :action="uploadUrl"
+            :show-file-list="false"
+            :on-success="handleAvatarSuccess"
+            :before-upload="beforeAvatarUpload"
+            :headers="headers"
+          >
+            <img v-if="form.imageUrl" :src="form.imageUrl" class="avatar" />
+            <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="跳转的链接" prop="linkUrl">
+          <el-input v-model="form.linkUrl" placeholder="请输入点击图片时跳转的链接" />
+        </el-form-item>
+        <el-form-item label="排序值" prop="sortOrder">
+          <el-input v-model="form.sortOrder" placeholder="请输入排序值" />
+        </el-form-item>
+        <el-form-item label="是否显示" prop="isActive">
+          <el-select v-model="form.isActive" placeholder="请选择是否显示">
+            <el-option label="否" :value="0" />
+            <el-option label="是" :value="1" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="系统类型" prop="sysType">
+          <el-select v-model="form.sysType" placeholder="请选择系统类型">
+            <el-option
+              v-for="dict in banner_sys_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Banner">
+import { listBanner, getBanner, delBanner, addBanner, updateBanner } from "@/api/logistics/banner"
+import { Plus } from '@element-plus/icons-vue'
+import { getToken } from "@/utils/auth"
+import DictTag from '@/components/DictTag'
+import { useDict } from '@/utils/dict'
+
+const { proxy } = getCurrentInstance()
+
+// 使用标准字典类型,但不在表单中使用
+const { banner_sys_type } = proxy.useDict("banner_sys_type")
+
+// 定义上传地址和请求头
+const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/file/upload")
+const headers = ref({ Authorization: "Bearer " + getToken() })
+
+const bannerList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    bannerName: null,
+    isActive: null,
+    sysType: null,
+    deptId: null,
+    userId: null
+  },
+  rules: {}
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询系统轮播图列表 */
+function getList() {
+  loading.value = true
+  listBanner(queryParams.value).then(response => {
+    bannerList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 图片上传成功后的回调
+function handleAvatarSuccess(res, file) {
+  if(res.code === 200) {
+    // 根据实际返回的数据结构设置图片URL
+    form.value.imageUrl = res.data.url
+  } else {
+    proxy.$message.error('上传失败:' + res.msg)
+  }
+}
+
+// 上传前的校验
+function beforeAvatarUpload(file) {
+  const acceptTypes = ['image/jpeg', 'image/png', 'image/gif']
+  const isAcceptedType = acceptTypes.includes(file.type)
+  const isLt2M = file.size / 1024 / 1024 < 2
+
+  if (!isAcceptedType) {
+    proxy.$message.error('上传图片只能是 JPG/PNG/GIF 格式!')
+  }
+  if (!isLt2M) {
+    proxy.$message.error('上传图片大小不能超过 2MB!')
+  }
+  return isAcceptedType && isLt2M
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    bannerId: null,
+    bannerName: null,
+    imageUrl: null,
+    linkUrl: null,
+    sortOrder: null,
+    isActive: null,
+    sysType: null,
+    remark: null,
+    delFlag: null,
+    createTime: null,
+    updateTime: null,
+    createBy: null,
+    updateBy: null,
+    deptId: null,
+    userId: null
+  }
+  proxy.resetForm("bannerRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.bannerId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加系统轮播图"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _bannerId = row.bannerId || ids.value
+  getBanner(_bannerId).then(response => {
+    form.value = response.data
+    // 确保isActive字段的值被正确转换为数字类型,以便与选项值匹配
+    if (form.value.isActive !== null && form.value.isActive !== undefined) {
+      form.value.isActive = Number(form.value.isActive)
+    }
+    open.value = true
+    title.value = "修改系统轮播图"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["bannerRef"].validate(valid => {
+    if (valid) {
+      if (form.value.bannerId != null) {
+        updateBanner(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addBanner(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _bannerIds = row.bannerId || ids.value
+  proxy.$modal.confirm('是否确认删除系统轮播图编号为"' + _bannerIds + '"的数据项?').then(function() {
+    return delBanner(_bannerIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/banner/export', {
+    ...queryParams.value
+  }, `banner_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>
+
+<style>
+.avatar-uploader .el-upload {
+  border: 1px dashed var(--el-border-color);
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+  transition: var(--el-transition-duration-fast);
+}
+
+.avatar-uploader .el-upload:hover {
+  border-color: var(--el-color-primary);
+}
+
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 178px;
+  height: 178px;
+  text-align: center;
+}
+
+.avatar {
+  width: 178px;
+  height: 178px;
+  display: block;
+}
+</style>

+ 366 - 0
jd-logistics-ui-v3/src/views/logistics/book/index.vue

@@ -0,0 +1,366 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="公司名称" prop="companyName">
+        <el-input
+          v-model="queryParams.companyName"
+          placeholder="请输入公司名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系人姓名" prop="contactName">
+        <el-input
+          v-model="queryParams.contactName"
+          placeholder="请输入联系人姓名"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系人电话" prop="contactPhone">
+        <el-input
+          v-model="queryParams.contactPhone"
+          placeholder="请输入联系人电话"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="省" prop="provinceName">
+        <el-input
+          v-model="queryParams.provinceName"
+          placeholder="请输入省"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="市" prop="cityName">
+        <el-input
+          v-model="queryParams.cityName"
+          placeholder="请输入市"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="区/县" prop="countyName">
+        <el-input
+          v-model="queryParams.countyName"
+          placeholder="请输入区/县"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="详细地址" prop="detailedAddress">
+        <el-input
+          v-model="queryParams.detailedAddress"
+          placeholder="请输入详细地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否默认 0非默认1默认" prop="defaultFlag">
+        <el-input
+          v-model="queryParams.defaultFlag"
+          placeholder="请输入是否默认 0非默认1默认"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:book:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:book:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:book:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:book:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="bookList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="地址薄id" align="center" prop="addressId" />
+      <el-table-column label="公司名称" align="center" prop="companyName" />
+      <el-table-column label="联系人姓名" align="center" prop="contactName" />
+      <el-table-column label="联系人电话" align="center" prop="contactPhone" />
+      <el-table-column label="省" align="center" prop="provinceName" />
+      <el-table-column label="市" align="center" prop="cityName" />
+      <el-table-column label="区/县" align="center" prop="countyName" />
+      <el-table-column label="详细地址" align="center" prop="detailedAddress" />
+      <el-table-column label="是否默认 0非默认1默认" align="center" prop="defaultFlag" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:book:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:book:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改地址簿管理对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="bookRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="公司名称" prop="companyName">
+          <el-input v-model="form.companyName" placeholder="请输入公司名称" />
+        </el-form-item>
+        <el-form-item label="联系人姓名" prop="contactName">
+          <el-input v-model="form.contactName" placeholder="请输入联系人姓名" />
+        </el-form-item>
+        <el-form-item label="联系人电话" prop="contactPhone">
+          <el-input v-model="form.contactPhone" placeholder="请输入联系人电话" />
+        </el-form-item>
+        <el-form-item label="省" prop="provinceName">
+          <el-input v-model="form.provinceName" placeholder="请输入省" />
+        </el-form-item>
+        <el-form-item label="市" prop="cityName">
+          <el-input v-model="form.cityName" placeholder="请输入市" />
+        </el-form-item>
+        <el-form-item label="区/县" prop="countyName">
+          <el-input v-model="form.countyName" placeholder="请输入区/县" />
+        </el-form-item>
+        <el-form-item label="详细地址" prop="detailedAddress">
+          <el-input v-model="form.detailedAddress" placeholder="请输入详细地址" />
+        </el-form-item>
+        <el-form-item label="是否默认 0非默认1默认" prop="defaultFlag">
+          <el-input v-model="form.defaultFlag" placeholder="请输入是否默认 0非默认1默认" />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Book">
+import { listBook, getBook, delBook, addBook, updateBook } from "@/api/logistics/book"
+
+const { proxy } = getCurrentInstance()
+
+const bookList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    companyName: null,
+    contactName: null,
+    contactPhone: null,
+    provinceName: null,
+    cityName: null,
+    countyName: null,
+    detailedAddress: null,
+    defaultFlag: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询地址簿管理列表 */
+function getList() {
+  loading.value = true
+  listBook(queryParams.value).then(response => {
+    bookList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    addressId: null,
+    companyName: null,
+    contactName: null,
+    contactPhone: null,
+    provinceName: null,
+    cityName: null,
+    countyName: null,
+    detailedAddress: null,
+    defaultFlag: null,
+    deptId: null,
+    userId: null,
+    remark: null,
+    delFlag: null,
+    createTime: null,
+    updateTime: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("bookRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.addressId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加地址簿管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _addressId = row.addressId || ids.value
+  getBook(_addressId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改地址簿管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["bookRef"].validate(valid => {
+    if (valid) {
+      if (form.value.addressId != null) {
+        updateBook(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addBook(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _addressIds = row.addressId || ids.value
+  proxy.$modal.confirm('是否确认删除地址簿管理编号为"' + _addressIds + '"的数据项?').then(function() {
+    return delBook(_addressIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/book/export', {
+    ...queryParams.value
+  }, `book_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 385 - 0
jd-logistics-ui-v3/src/views/logistics/city/index.vue

@@ -0,0 +1,385 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="城市id" prop="cityId">
+        <el-input
+          v-model="queryParams.cityId"
+          placeholder="请输入城市id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="省市级别" prop="level">
+        <el-input
+          v-model="queryParams.level"
+          placeholder="请输入省市级别"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="父级id" prop="parentId">
+        <el-input
+          v-model="queryParams.parentId"
+          placeholder="请输入父级id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="区号" prop="areaCode">
+        <el-input
+          v-model="queryParams.areaCode"
+          placeholder="请输入区号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="合并名称" prop="mergerName">
+        <el-input
+          v-model="queryParams.mergerName"
+          placeholder="请输入合并名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="经度" prop="lng">
+        <el-input
+          v-model="queryParams.lng"
+          placeholder="请输入经度"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="纬度" prop="lat">
+        <el-input
+          v-model="queryParams.lat"
+          placeholder="请输入纬度"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否展示" prop="isShow">
+        <el-input
+          v-model="queryParams.isShow"
+          placeholder="请输入是否展示"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:city:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:city:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:city:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:city:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="cityList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="城市id" align="center" prop="cityId" />
+      <el-table-column label="省市级别" align="center" prop="level" />
+      <el-table-column label="父级id" align="center" prop="parentId" />
+      <el-table-column label="区号" align="center" prop="areaCode" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="合并名称" align="center" prop="mergerName" />
+      <el-table-column label="经度" align="center" prop="lng" />
+      <el-table-column label="纬度" align="center" prop="lat" />
+      <el-table-column label="是否展示" align="center" prop="isShow" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:city:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:city:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改城市管理对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="cityRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="城市id" prop="cityId">
+          <el-input v-model="form.cityId" placeholder="请输入城市id" />
+        </el-form-item>
+        <el-form-item label="省市级别" prop="level">
+          <el-input v-model="form.level" placeholder="请输入省市级别" />
+        </el-form-item>
+        <el-form-item label="父级id" prop="parentId">
+          <el-input v-model="form.parentId" placeholder="请输入父级id" />
+        </el-form-item>
+        <el-form-item label="区号" prop="areaCode">
+          <el-input v-model="form.areaCode" placeholder="请输入区号" />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="合并名称" prop="mergerName">
+          <el-input v-model="form.mergerName" placeholder="请输入合并名称" />
+        </el-form-item>
+        <el-form-item label="经度" prop="lng">
+          <el-input v-model="form.lng" placeholder="请输入经度" />
+        </el-form-item>
+        <el-form-item label="纬度" prop="lat">
+          <el-input v-model="form.lat" placeholder="请输入纬度" />
+        </el-form-item>
+        <el-form-item label="是否展示" prop="isShow">
+          <el-input v-model="form.isShow" placeholder="请输入是否展示" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="City">
+import { listCity, getCity, delCity, addCity, updateCity } from "@/api/logistics/city"
+
+const { proxy } = getCurrentInstance()
+
+const cityList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    cityId: null,
+    level: null,
+    parentId: null,
+    areaCode: null,
+    name: null,
+    mergerName: null,
+    lng: null,
+    lat: null,
+    isShow: null,
+  },
+  rules: {
+    cityId: [
+      { required: true, message: "城市id不能为空", trigger: "blur" }
+    ],
+    level: [
+      { required: true, message: "省市级别不能为空", trigger: "blur" }
+    ],
+    parentId: [
+      { required: true, message: "父级id不能为空", trigger: "blur" }
+    ],
+    areaCode: [
+      { required: true, message: "区号不能为空", trigger: "blur" }
+    ],
+    name: [
+      { required: true, message: "名称不能为空", trigger: "blur" }
+    ],
+    mergerName: [
+      { required: true, message: "合并名称不能为空", trigger: "blur" }
+    ],
+    lng: [
+      { required: true, message: "经度不能为空", trigger: "blur" }
+    ],
+    lat: [
+      { required: true, message: "纬度不能为空", trigger: "blur" }
+    ],
+    isShow: [
+      { required: true, message: "是否展示不能为空", trigger: "blur" }
+    ],
+    createTime: [
+      { required: true, message: "创建时间不能为空", trigger: "blur" }
+    ],
+    updateTime: [
+      { required: true, message: "更新时间不能为空", trigger: "blur" }
+    ],
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询城市管理列表 */
+function getList() {
+  loading.value = true
+  listCity(queryParams.value).then(response => {
+    cityList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    cityId: null,
+    level: null,
+    parentId: null,
+    areaCode: null,
+    name: null,
+    mergerName: null,
+    lng: null,
+    lat: null,
+    isShow: null,
+    createTime: null,
+    updateTime: null,
+    createBy: null,
+    updateBy: null,
+    remark: null,
+    delFlag: null
+  }
+  proxy.resetForm("cityRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加城市管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _id = row.id || ids.value
+  getCity(_id).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改城市管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["cityRef"].validate(valid => {
+    if (valid) {
+      if (form.value.id != null) {
+        updateCity(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addCity(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _ids = row.id || ids.value
+  proxy.$modal.confirm('是否确认删除城市管理编号为"' + _ids + '"的数据项?').then(function() {
+    return delCity(_ids)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/city/export', {
+    ...queryParams.value
+  }, `city_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 366 - 0
jd-logistics-ui-v3/src/views/logistics/costDetails/index.vue

@@ -0,0 +1,366 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="运单ID" prop="waybillId">
+        <el-input
+          v-model="queryParams.waybillId"
+          placeholder="请输入运单ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部运单号" prop="externalWaybillNo">
+        <el-input
+          v-model="queryParams.externalWaybillNo"
+          placeholder="请输入外部运单号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用项目编码" prop="feeItemCode">
+        <el-input
+          v-model="queryParams.feeItemCode"
+          placeholder="请输入费用项目编码"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用项目名称" prop="feeItemName">
+        <el-input
+          v-model="queryParams.feeItemName"
+          placeholder="请输入费用项目名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用名称" prop="feeName">
+        <el-input
+          v-model="queryParams.feeName"
+          placeholder="请输入费用名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="金额" prop="amount">
+        <el-input
+          v-model="queryParams.amount"
+          placeholder="请输入金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="金额*费率" prop="rateAmount">
+        <el-input
+          v-model="queryParams.rateAmount"
+          placeholder="请输入金额*费率"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调整金额" prop="adjustAmount">
+        <el-input
+          v-model="queryParams.adjustAmount"
+          placeholder="请输入调整金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户id" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:costDetails:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:costDetails:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:costDetails:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:costDetails:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="costDetailsList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="运单明细id" align="center" prop="waybillDetailId" />
+      <el-table-column label="运单ID" align="center" prop="waybillId" />
+      <el-table-column label="外部运单号" align="center" prop="externalWaybillNo" />
+      <el-table-column label="费用项目编码" align="center" prop="feeItemCode" />
+      <el-table-column label="费用项目名称" align="center" prop="feeItemName" />
+      <el-table-column label="费用名称" align="center" prop="feeName" />
+      <el-table-column label="金额" align="center" prop="amount" />
+      <el-table-column label="金额*费率" align="center" prop="rateAmount" />
+      <el-table-column label="调整金额" align="center" prop="adjustAmount" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门id" align="center" prop="deptId" />
+      <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:costDetails:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:costDetails:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改运单明细对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="costDetailsRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="运单ID" prop="waybillId">
+          <el-input v-model="form.waybillId" placeholder="请输入运单ID" />
+        </el-form-item>
+        <el-form-item label="外部运单号" prop="externalWaybillNo">
+          <el-input v-model="form.externalWaybillNo" placeholder="请输入外部运单号" />
+        </el-form-item>
+        <el-form-item label="费用项目编码" prop="feeItemCode">
+          <el-input v-model="form.feeItemCode" placeholder="请输入费用项目编码" />
+        </el-form-item>
+        <el-form-item label="费用项目名称" prop="feeItemName">
+          <el-input v-model="form.feeItemName" placeholder="请输入费用项目名称" />
+        </el-form-item>
+        <el-form-item label="费用名称" prop="feeName">
+          <el-input v-model="form.feeName" placeholder="请输入费用名称" />
+        </el-form-item>
+        <el-form-item label="金额" prop="amount">
+          <el-input v-model="form.amount" placeholder="请输入金额" />
+        </el-form-item>
+        <el-form-item label="金额*费率" prop="rateAmount">
+          <el-input v-model="form.rateAmount" placeholder="请输入金额*费率" />
+        </el-form-item>
+        <el-form-item label="调整金额" prop="adjustAmount">
+          <el-input v-model="form.adjustAmount" placeholder="请输入调整金额" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="部门id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门id" />
+        </el-form-item>
+        <el-form-item label="用户id" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户id" />
+        </el-form-item>
+        <el-form-item label="删除标志 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志 " />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="CostDetails">
+import { listCostDetails, getCostDetails, delCostDetails, addCostDetails, updateCostDetails } from "@/api/logistics/costDetails"
+
+const { proxy } = getCurrentInstance()
+
+const costDetailsList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    waybillId: null,
+    externalWaybillNo: null,
+    feeItemCode: null,
+    feeItemName: null,
+    feeName: null,
+    amount: null,
+    rateAmount: null,
+    adjustAmount: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询运单明细列表 */
+function getList() {
+  loading.value = true
+  listCostDetails(queryParams.value).then(response => {
+    costDetailsList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    waybillDetailId: null,
+    waybillId: null,
+    externalWaybillNo: null,
+    feeItemCode: null,
+    feeItemName: null,
+    feeName: null,
+    amount: null,
+    rateAmount: null,
+    adjustAmount: null,
+    remark: null,
+    createTime: null,
+    updateTime: null,
+    deptId: null,
+    userId: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("costDetailsRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.waybillDetailId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加运单明细"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _waybillDetailId = row.waybillDetailId || ids.value
+  getCostDetails(_waybillDetailId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改运单明细"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["costDetailsRef"].validate(valid => {
+    if (valid) {
+      if (form.value.waybillDetailId != null) {
+        updateCostDetails(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addCostDetails(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _waybillDetailIds = row.waybillDetailId || ids.value
+  proxy.$modal.confirm('是否确认删除运单明细编号为"' + _waybillDetailIds + '"的数据项?').then(function() {
+    return delCostDetails(_waybillDetailIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/costDetails/export', {
+    ...queryParams.value
+  }, `costDetails_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 318 - 0
jd-logistics-ui-v3/src/views/logistics/inancialFee/index.vue

@@ -0,0 +1,318 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="费用项目编码" prop="feeItemCode">
+        <el-input
+          v-model="queryParams.feeItemCode"
+          placeholder="请输入费用项目编码"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用项目名称" prop="feeItemName">
+        <el-input
+          v-model="queryParams.feeItemName"
+          placeholder="请输入费用项目名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部渠道" prop="feeItemCategory">
+        <el-select
+          v-model="queryParams.feeItemCategory"
+          placeholder="请选择外部渠道"
+          clearable
+        >
+          <el-option
+            v-for="dict in logistics_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="外部费用编码" prop="extFeeCode">
+        <el-input
+          v-model="queryParams.extFeeCode"
+          placeholder="请输入外部费用编码"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部费用名称" prop="extFeeName">
+        <el-input
+          v-model="queryParams.extFeeName"
+          placeholder="请输入外部费用名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:inancialFee:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:inancialFee:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:inancialFee:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:inancialFee:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="inancialFeeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="费用项目编码" align="center" prop="feeItemCode" />
+      <el-table-column label="费用项目名称" align="center" prop="feeItemName" />
+      <el-table-column label="外部渠道" align="center" prop="feeItemCategory">
+        <template #default="scope">
+          <dict-tag :options="logistics_type" :value="scope.row.feeItemCategory" />
+        </template>
+      </el-table-column>
+      <el-table-column label="外部费用编码" align="center" prop="extFeeCode" />
+      <el-table-column label="外部费用名称" align="center" prop="extFeeName" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:inancialFee:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:inancialFee:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改费用类型管理对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="inancialFeeRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="费用项目编码" prop="feeItemCode">
+          <el-input v-model="form.feeItemCode" placeholder="请输入费用项目编码" />
+        </el-form-item>
+        <el-form-item label="费用项目名称" prop="feeItemName">
+          <el-input v-model="form.feeItemName" placeholder="请输入费用项目名称" />
+        </el-form-item>
+        <el-form-item label="外部渠道" prop="feeItemCategory">
+          <el-select v-model="form.feeItemCategory" placeholder="请选择外部渠道">
+            <el-option
+              v-for="dict in logistics_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="外部费用编码" prop="extFeeCode">
+          <el-input v-model="form.extFeeCode" placeholder="请输入外部费用编码" />
+        </el-form-item>
+        <el-form-item label="外部费用名称" prop="extFeeName">
+          <el-input v-model="form.extFeeName" placeholder="请输入外部费用名称" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="InancialFee">
+import { listInancialFee, getInancialFee, delInancialFee, addInancialFee, updateInancialFee } from "@/api/logistics/inancialFee"
+import DictTag from '@/components/DictTag'
+import { useDict } from '@/utils/dict'
+
+const { proxy } = getCurrentInstance()
+
+// 使用物流类型字典
+const { logistics_type } = proxy.useDict("logistics_type")
+
+const inancialFeeList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    feeItemCode: null,
+    feeItemName: null,
+    feeItemCategory: null,  // 外部渠道字段
+    extFeeCode: null,
+    extFeeName: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询费用类型管理列表 */
+function getList() {
+  loading.value = true
+  listInancialFee(queryParams.value).then(response => {
+    inancialFeeList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    feeItemId: null,
+    feeItemCode: null,
+    feeItemName: null,
+    feeItemCategory: null,  // 外部渠道字段
+    extFeeCode: null,
+    extFeeName: null,
+    createTime: null,
+    updateTime: null,
+    remark: null,
+    deptId: null,
+    userId: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("inancialFeeRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.feeItemId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加费用类型管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _feeItemId = row.feeItemId || ids.value
+  getInancialFee(_feeItemId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改费用类型管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["inancialFeeRef"].validate(valid => {
+    if (valid) {
+      if (form.value.feeItemId != null) {
+        updateInancialFee(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addInancialFee(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _feeItemIds = row.feeItemId || ids.value
+  proxy.$modal.confirm('是否确认删除费用类型管理编号为"' + _feeItemIds + '"的数据项?').then(function() {
+    return delInancialFee(_feeItemIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/inancialFee/export', {
+    ...queryParams.value
+  }, `inancialFee_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 355 - 0
jd-logistics-ui-v3/src/views/logistics/monthSummary/index.vue

@@ -0,0 +1,355 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="汇总月份" prop="summaryMonth">
+        <el-input
+          v-model="queryParams.summaryMonth"
+          placeholder="请输入汇总月份"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="应付金额" prop="payableAmount">
+        <el-input
+          v-model="queryParams.payableAmount"
+          placeholder="请输入应付金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="交易笔数" prop="transactionCount">
+        <el-input
+          v-model="queryParams.transactionCount"
+          placeholder="请输入交易笔数"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户id" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="百旺开票单据编号" prop="bwDjbh">
+        <el-input
+          v-model="queryParams.bwDjbh"
+          placeholder="请输入百旺开票单据编号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="电子发票pdf地址" prop="bwDzfpPdfUrl">
+        <el-input
+          v-model="queryParams.bwDzfpPdfUrl"
+          placeholder="请输入电子发票pdf地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="电子发票ofd地址" prop="bwDzfpOfdUrl">
+        <el-input
+          v-model="queryParams.bwDzfpOfdUrl"
+          placeholder="请输入电子发票ofd地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="电子发票xml地址" prop="bwDzfpXmlUrl">
+        <el-input
+          v-model="queryParams.bwDzfpXmlUrl"
+          placeholder="请输入电子发票xml地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:monthSummary:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:monthSummary:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:monthSummary:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:monthSummary:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="monthSummaryList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="月度汇总id" align="center" prop="summaryId" />
+      <el-table-column label="汇总月份" align="center" prop="summaryMonth" />
+      <el-table-column label="应付金额" align="center" prop="payableAmount" />
+      <el-table-column label="交易笔数" align="center" prop="transactionCount" />
+      <el-table-column label="账单状态 1.待对账 2.已对账 3.待开票 4.已开票" align="center" prop="status" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="百旺开票单据编号" align="center" prop="bwDjbh" />
+      <el-table-column label="电子发票pdf地址" align="center" prop="bwDzfpPdfUrl" />
+      <el-table-column label="电子发票ofd地址" align="center" prop="bwDzfpOfdUrl" />
+      <el-table-column label="电子发票xml地址" align="center" prop="bwDzfpXmlUrl" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:monthSummary:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:monthSummary:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改财务月度汇总对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="monthSummaryRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="汇总月份" prop="summaryMonth">
+          <el-input v-model="form.summaryMonth" placeholder="请输入汇总月份" />
+        </el-form-item>
+        <el-form-item label="应付金额" prop="payableAmount">
+          <el-input v-model="form.payableAmount" placeholder="请输入应付金额" />
+        </el-form-item>
+        <el-form-item label="交易笔数" prop="transactionCount">
+          <el-input v-model="form.transactionCount" placeholder="请输入交易笔数" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户id" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户id" />
+        </el-form-item>
+        <el-form-item label="百旺开票单据编号" prop="bwDjbh">
+          <el-input v-model="form.bwDjbh" placeholder="请输入百旺开票单据编号" />
+        </el-form-item>
+        <el-form-item label="电子发票pdf地址" prop="bwDzfpPdfUrl">
+          <el-input v-model="form.bwDzfpPdfUrl" placeholder="请输入电子发票pdf地址" />
+        </el-form-item>
+        <el-form-item label="电子发票ofd地址" prop="bwDzfpOfdUrl">
+          <el-input v-model="form.bwDzfpOfdUrl" placeholder="请输入电子发票ofd地址" />
+        </el-form-item>
+        <el-form-item label="电子发票xml地址" prop="bwDzfpXmlUrl">
+          <el-input v-model="form.bwDzfpXmlUrl" placeholder="请输入电子发票xml地址" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="MonthSummary">
+import { listMonthSummary, getMonthSummary, delMonthSummary, addMonthSummary, updateMonthSummary } from "@/api/logistics/monthSummary"
+
+const { proxy } = getCurrentInstance()
+
+const monthSummaryList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    summaryMonth: null,
+    payableAmount: null,
+    transactionCount: null,
+    status: null,
+    deptId: null,
+    userId: null,
+    bwDjbh: null,
+    bwDzfpPdfUrl: null,
+    bwDzfpOfdUrl: null,
+    bwDzfpXmlUrl: null
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询财务月度汇总列表 */
+function getList() {
+  loading.value = true
+  listMonthSummary(queryParams.value).then(response => {
+    monthSummaryList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    summaryId: null,
+    summaryMonth: null,
+    payableAmount: null,
+    transactionCount: null,
+    status: null,
+    createTime: null,
+    updateTime: null,
+    remark: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null,
+    deptId: null,
+    userId: null,
+    bwDjbh: null,
+    bwDzfpPdfUrl: null,
+    bwDzfpOfdUrl: null,
+    bwDzfpXmlUrl: null
+  }
+  proxy.resetForm("monthSummaryRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.summaryId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加财务月度汇总"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _summaryId = row.summaryId || ids.value
+  getMonthSummary(_summaryId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改财务月度汇总"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["monthSummaryRef"].validate(valid => {
+    if (valid) {
+      if (form.value.summaryId != null) {
+        updateMonthSummary(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addMonthSummary(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _summaryIds = row.summaryId || ids.value
+  proxy.$modal.confirm('是否确认删除财务月度汇总编号为"' + _summaryIds + '"的数据项?').then(function() {
+    return delMonthSummary(_summaryIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/monthSummary/export', {
+    ...queryParams.value
+  }, `monthSummary_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 663 - 0
jd-logistics-ui-v3/src/views/logistics/order/index.vue

@@ -0,0 +1,663 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="运单号 内部生成" prop="waybillNo">
+        <el-input
+          v-model="queryParams.waybillNo"
+          placeholder="请输入运单号 内部生成"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部运单号 JD/SF的运单号" prop="externalWaybillNo">
+        <el-input
+          v-model="queryParams.externalWaybillNo"
+          placeholder="请输入外部运单号 JD/SF的运单号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件人姓名" prop="senderName">
+        <el-input
+          v-model="queryParams.senderName"
+          placeholder="请输入发件人姓名"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件人电话" prop="senderPhone">
+        <el-input
+          v-model="queryParams.senderPhone"
+          placeholder="请输入发件人电话"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件省" prop="senderProvince">
+        <el-input
+          v-model="queryParams.senderProvince"
+          placeholder="请输入发件省"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件市" prop="senderCity">
+        <el-input
+          v-model="queryParams.senderCity"
+          placeholder="请输入发件市"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件区县" prop="senderCounty">
+        <el-input
+          v-model="queryParams.senderCounty"
+          placeholder="请输入发件区县"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件详细地址" prop="senderAddress">
+        <el-input
+          v-model="queryParams.senderAddress"
+          placeholder="请输入发件详细地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件人姓名" prop="receiverName">
+        <el-input
+          v-model="queryParams.receiverName"
+          placeholder="请输入收件人姓名"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件人电话" prop="receiverPhone">
+        <el-input
+          v-model="queryParams.receiverPhone"
+          placeholder="请输入收件人电话"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件省" prop="receiverProvince">
+        <el-input
+          v-model="queryParams.receiverProvince"
+          placeholder="请输入收件省"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件市" prop="receiverCity">
+        <el-input
+          v-model="queryParams.receiverCity"
+          placeholder="请输入收件市"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件区县" prop="receiverCounty">
+        <el-input
+          v-model="queryParams.receiverCounty"
+          placeholder="请输入收件区县"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件详细地址" prop="receiverAddress">
+        <el-input
+          v-model="queryParams.receiverAddress"
+          placeholder="请输入收件详细地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物名称" prop="goodsName">
+        <el-input
+          v-model="queryParams.goodsName"
+          placeholder="请输入货物名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物重量" prop="goodsWeight">
+        <el-input
+          v-model="queryParams.goodsWeight"
+          placeholder="请输入货物重量"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物体积" prop="goodsVolume">
+        <el-input
+          v-model="queryParams.goodsVolume"
+          placeholder="请输入货物体积"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物数量" prop="goodsQty">
+        <el-input
+          v-model="queryParams.goodsQty"
+          placeholder="请输入货物数量"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="上门取件时间" prop="sendStartTime">
+        <el-date-picker clearable
+          v-model="queryParams.sendStartTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择上门取件时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="揽收时间" prop="pickupTime">
+        <el-date-picker clearable
+          v-model="queryParams.pickupTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择揽收时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="派送时间" prop="deliveryTime">
+        <el-date-picker clearable
+          v-model="queryParams.deliveryTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择派送时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="签收时间" prop="signTime">
+        <el-date-picker clearable
+          v-model="queryParams.signTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择签收时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="取消原因" prop="cancelReason">
+        <el-input
+          v-model="queryParams.cancelReason"
+          placeholder="请输入取消原因"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="父运单ID" prop="parentWaybillId">
+        <el-input
+          v-model="queryParams.parentWaybillId"
+          placeholder="请输入父运单ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否结算开票" prop="invoiceFlag">
+        <el-input
+          v-model="queryParams.invoiceFlag"
+          placeholder="请输入是否结算开票"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否调账" prop="adjustFlag">
+        <el-input
+          v-model="queryParams.adjustFlag"
+          placeholder="请输入是否调账"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['system:order:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:order:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:order:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:order:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="运单id" align="center" prop="waybillId" />
+      <el-table-column label="运单号 内部生成" align="center" prop="waybillNo" />
+      <el-table-column label="外部运单号 JD/SF的运单号" align="center" prop="externalWaybillNo" />
+      <el-table-column label="订单类型 1-非时效件(京东),2-时效件(顺丰)" align="center" prop="orderType" />
+      <el-table-column label="发件人姓名" align="center" prop="senderName" />
+      <el-table-column label="发件人电话" align="center" prop="senderPhone" />
+      <el-table-column label="发件省" align="center" prop="senderProvince" />
+      <el-table-column label="发件市" align="center" prop="senderCity" />
+      <el-table-column label="发件区县" align="center" prop="senderCounty" />
+      <el-table-column label="发件详细地址" align="center" prop="senderAddress" />
+      <el-table-column label="收件人姓名" align="center" prop="receiverName" />
+      <el-table-column label="收件人电话" align="center" prop="receiverPhone" />
+      <el-table-column label="收件省" align="center" prop="receiverProvince" />
+      <el-table-column label="收件市" align="center" prop="receiverCity" />
+      <el-table-column label="收件区县" align="center" prop="receiverCounty" />
+      <el-table-column label="收件详细地址" align="center" prop="receiverAddress" />
+      <el-table-column label="货物名称" align="center" prop="goodsName" />
+      <el-table-column label="货物重量" align="center" prop="goodsWeight" />
+      <el-table-column label="货物体积" align="center" prop="goodsVolume" />
+      <el-table-column label="货物数量" align="center" prop="goodsQty" />
+      <el-table-column label="订单状态" align="center" prop="orderStatus" />
+      <el-table-column label="取件类型" align="center" prop="pickupType" />
+      <el-table-column label="上门取件时间" align="center" prop="sendStartTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.sendStartTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="揽收时间" align="center" prop="pickupTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.pickupTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="派送时间" align="center" prop="deliveryTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.deliveryTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="签收时间" align="center" prop="signTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.signTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="取消原因" align="center" prop="cancelReason" />
+      <el-table-column label="父运单ID" align="center" prop="parentWaybillId" />
+      <el-table-column label="是否结算开票" align="center" prop="invoiceFlag" />
+      <el-table-column label="是否调账" align="center" prop="adjustFlag" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:order:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:order:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改运单管理对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="orderRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="运单号 内部生成" prop="waybillNo">
+          <el-input v-model="form.waybillNo" placeholder="请输入运单号 内部生成" />
+        </el-form-item>
+        <el-form-item label="外部运单号 JD/SF的运单号" prop="externalWaybillNo">
+          <el-input v-model="form.externalWaybillNo" placeholder="请输入外部运单号 JD/SF的运单号" />
+        </el-form-item>
+        <el-form-item label="发件人姓名" prop="senderName">
+          <el-input v-model="form.senderName" placeholder="请输入发件人姓名" />
+        </el-form-item>
+        <el-form-item label="发件人电话" prop="senderPhone">
+          <el-input v-model="form.senderPhone" placeholder="请输入发件人电话" />
+        </el-form-item>
+        <el-form-item label="发件省" prop="senderProvince">
+          <el-input v-model="form.senderProvince" placeholder="请输入发件省" />
+        </el-form-item>
+        <el-form-item label="发件市" prop="senderCity">
+          <el-input v-model="form.senderCity" placeholder="请输入发件市" />
+        </el-form-item>
+        <el-form-item label="发件区县" prop="senderCounty">
+          <el-input v-model="form.senderCounty" placeholder="请输入发件区县" />
+        </el-form-item>
+        <el-form-item label="发件详细地址" prop="senderAddress">
+          <el-input v-model="form.senderAddress" placeholder="请输入发件详细地址" />
+        </el-form-item>
+        <el-form-item label="收件人姓名" prop="receiverName">
+          <el-input v-model="form.receiverName" placeholder="请输入收件人姓名" />
+        </el-form-item>
+        <el-form-item label="收件人电话" prop="receiverPhone">
+          <el-input v-model="form.receiverPhone" placeholder="请输入收件人电话" />
+        </el-form-item>
+        <el-form-item label="收件省" prop="receiverProvince">
+          <el-input v-model="form.receiverProvince" placeholder="请输入收件省" />
+        </el-form-item>
+        <el-form-item label="收件市" prop="receiverCity">
+          <el-input v-model="form.receiverCity" placeholder="请输入收件市" />
+        </el-form-item>
+        <el-form-item label="收件区县" prop="receiverCounty">
+          <el-input v-model="form.receiverCounty" placeholder="请输入收件区县" />
+        </el-form-item>
+        <el-form-item label="收件详细地址" prop="receiverAddress">
+          <el-input v-model="form.receiverAddress" placeholder="请输入收件详细地址" />
+        </el-form-item>
+        <el-form-item label="货物名称" prop="goodsName">
+          <el-input v-model="form.goodsName" placeholder="请输入货物名称" />
+        </el-form-item>
+        <el-form-item label="货物重量" prop="goodsWeight">
+          <el-input v-model="form.goodsWeight" placeholder="请输入货物重量" />
+        </el-form-item>
+        <el-form-item label="货物体积" prop="goodsVolume">
+          <el-input v-model="form.goodsVolume" placeholder="请输入货物体积" />
+        </el-form-item>
+        <el-form-item label="货物数量" prop="goodsQty">
+          <el-input v-model="form.goodsQty" placeholder="请输入货物数量" />
+        </el-form-item>
+        <el-form-item label="上门取件时间" prop="sendStartTime">
+          <el-date-picker clearable
+            v-model="form.sendStartTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择上门取件时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="揽收时间" prop="pickupTime">
+          <el-date-picker clearable
+            v-model="form.pickupTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择揽收时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="派送时间" prop="deliveryTime">
+          <el-date-picker clearable
+            v-model="form.deliveryTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择派送时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="签收时间" prop="signTime">
+          <el-date-picker clearable
+            v-model="form.signTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择签收时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="取消原因" prop="cancelReason">
+          <el-input v-model="form.cancelReason" placeholder="请输入取消原因" />
+        </el-form-item>
+        <el-form-item label="父运单ID" prop="parentWaybillId">
+          <el-input v-model="form.parentWaybillId" placeholder="请输入父运单ID" />
+        </el-form-item>
+        <el-form-item label="是否结算开票" prop="invoiceFlag">
+          <el-input v-model="form.invoiceFlag" placeholder="请输入是否结算开票" />
+        </el-form-item>
+        <el-form-item label="是否调账" prop="adjustFlag">
+          <el-input v-model="form.adjustFlag" placeholder="请输入是否调账" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志 " />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Order">
+import { listOrder, getOrder, delOrder, addOrder, updateOrder } from "@/api/logistics/order"
+
+const { proxy } = getCurrentInstance()
+
+const orderList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    waybillNo: null,
+    externalWaybillNo: null,
+    orderType: null,
+    senderName: null,
+    senderPhone: null,
+    senderProvince: null,
+    senderCity: null,
+    senderCounty: null,
+    senderAddress: null,
+    receiverName: null,
+    receiverPhone: null,
+    receiverProvince: null,
+    receiverCity: null,
+    receiverCounty: null,
+    receiverAddress: null,
+    goodsName: null,
+    goodsWeight: null,
+    goodsVolume: null,
+    goodsQty: null,
+    orderStatus: null,
+    pickupType: null,
+    sendStartTime: null,
+    pickupTime: null,
+    deliveryTime: null,
+    signTime: null,
+    cancelReason: null,
+    parentWaybillId: null,
+    invoiceFlag: null,
+    adjustFlag: null,
+    deptId: null,
+    userId: null
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询运单管理列表 */
+function getList() {
+  loading.value = true
+  listOrder(queryParams.value).then(response => {
+    orderList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    waybillId: null,
+    waybillNo: null,
+    externalWaybillNo: null,
+    orderType: null,
+    senderName: null,
+    senderPhone: null,
+    senderProvince: null,
+    senderCity: null,
+    senderCounty: null,
+    senderAddress: null,
+    receiverName: null,
+    receiverPhone: null,
+    receiverProvince: null,
+    receiverCity: null,
+    receiverCounty: null,
+    receiverAddress: null,
+    goodsName: null,
+    goodsWeight: null,
+    goodsVolume: null,
+    goodsQty: null,
+    orderStatus: null,
+    pickupType: null,
+    sendStartTime: null,
+    pickupTime: null,
+    deliveryTime: null,
+    signTime: null,
+    cancelReason: null,
+    parentWaybillId: null,
+    invoiceFlag: null,
+    adjustFlag: null,
+    remark: null,
+    createTime: null,
+    updateTime: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null,
+    deptId: null,
+    userId: null
+  }
+  proxy.resetForm("orderRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.waybillId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加运单管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _waybillId = row.waybillId || ids.value
+  getOrder(_waybillId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改运单管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["orderRef"].validate(valid => {
+    if (valid) {
+      if (form.value.waybillId != null) {
+        updateOrder(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addOrder(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _waybillIds = row.waybillId || ids.value
+  proxy.$modal.confirm('是否确认删除运单管理编号为"' + _waybillIds + '"的数据项?').then(function() {
+    return delOrder(_waybillIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/order/export', {
+    ...queryParams.value
+  }, `order_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 46 - 3
jd-logistics-ui-v3/src/views/system/dept/index.vue

@@ -62,6 +62,12 @@
                <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
             </template>
          </el-table-column>
+         <el-table-column prop="invoiceName" label="开票名称" width="150"></el-table-column>
+         <el-table-column prop="invoiceNum" label="税号" width="200"></el-table-column>
+         <el-table-column prop="rateValue" label="费率" width="100"></el-table-column>
+         <el-table-column prop="openBank" label="开户银行" width="200"></el-table-column>
+         <el-table-column prop="bankAccount" label="银行账号" width="200"></el-table-column>
+         <el-table-column prop="companyAddress" label="公司地址" width="250"></el-table-column>
          <el-table-column label="创建时间" align="center" prop="createTime" width="200">
             <template #default="scope">
                <span>{{ parseTime(scope.row.createTime) }}</span>
@@ -128,6 +134,36 @@
                      </el-radio-group>
                   </el-form-item>
                </el-col>
+               <el-col :span="24">
+                  <el-form-item label="开票名称" prop="invoiceName">
+                     <el-input v-model="form.invoiceName" placeholder="请输入开票名称" />
+                  </el-form-item>
+               </el-col>
+               <el-col :span="24">
+                  <el-form-item label="税号" prop="invoiceNum">
+                     <el-input v-model="form.invoiceNum" placeholder="请输入税号" />
+                  </el-form-item>
+               </el-col>
+               <el-col :span="12">
+                  <el-form-item label="费率" prop="rateValue">
+                     <el-input-number v-model="form.rateValue" controls-position="right" :min="0" :max="100" :precision="2" placeholder="请输入费率(%)" />
+                  </el-form-item>
+               </el-col>
+               <el-col :span="24">
+                  <el-form-item label="开户银行" prop="openBank">
+                     <el-input v-model="form.openBank" placeholder="请输入开户银行" />
+                  </el-form-item>
+               </el-col>
+               <el-col :span="24">
+                  <el-form-item label="银行账号" prop="bankAccount">
+                     <el-input v-model="form.bankAccount" placeholder="请输入银行账号" />
+                  </el-form-item>
+               </el-col>
+               <el-col :span="24">
+                  <el-form-item label="公司地址" prop="companyAddress">
+                     <el-input v-model="form.companyAddress" placeholder="请输入公司地址" type="textarea" :rows="2" />
+                  </el-form-item>
+               </el-col>
             </el-row>
          </el-form>
          <template #footer>
@@ -166,7 +202,8 @@ const data = reactive({
     deptName: [{ required: true, message: "部门名称不能为空", trigger: "blur" }],
     orderNum: [{ required: true, message: "显示排序不能为空", trigger: "blur" }],
     email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
-    phone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
+    phone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
+    rateValue: [{ pattern: /^\d+(\.\d{1,2})?$/, message: "请输入正确的费率格式,最多两位小数", trigger: "blur" }]
   },
 })
 
@@ -197,7 +234,13 @@ function reset() {
     leader: undefined,
     phone: undefined,
     email: undefined,
-    status: "0"
+    status: "0",
+    invoiceName: undefined,
+    invoiceNum: undefined,
+    rateValue: 0,
+    openBank: undefined,
+    bankAccount: undefined,
+    companyAddress: undefined
   }
   proxy.resetForm("deptRef")
 }
@@ -280,4 +323,4 @@ function handleDelete(row) {
 }
 
 getList()
-</script>
+</script>