From 8675eb4f0e674e6a5785292d1ea72959ff90c0d2 Mon Sep 17 00:00:00 2001
From: chenhao <852066789@qq.com>
Date: Fri, 30 May 2025 16:27:52 +0800
Subject: [PATCH] =?UTF-8?q?feat(sip):=20=E6=96=B0=E5=A2=9E=E8=AE=A2?=
 =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 添加订单管理相关的 HTML 模板文件
- 实现订单管理的前端页面,包括列表、添加和编辑功能
- 新增订单管理的后端接口和实现类
- 在项目信息中集成订单管理功能,增加生成订单的判断逻辑
---
 .../manage/delivery/selectOrder.html          |   4 +
 .../templates/project/order/add.html          | 213 +++++++++++++++
 .../templates/project/order/edit.html         | 214 +++++++++++++++
 .../templates/project/order/order.html        | 250 ++++++++++++++++++
 .../ProjectOrderInfoController.java           | 128 +++++++++
 .../com/ruoyi/sip/domain/ProjectInfo.java     |   7 +
 .../ruoyi/sip/domain/ProjectOrderInfo.java    | 170 ++++++++++++
 .../sip/mapper/ProjectOrderInfoMapper.java    |  63 +++++
 .../sip/service/IProjectOrderInfoService.java |  71 +++++
 .../service/impl/ProjectInfoServiceImpl.java  |  21 +-
 .../impl/ProjectOrderInfoServiceImpl.java     | 101 +++++++
 .../mapper/sip/ProjectInfoMapper.xml          |  41 +++
 .../mapper/sip/ProjectOrderInfoMapper.xml     | 204 ++++++++++++++
 13 files changed, 1481 insertions(+), 6 deletions(-)
 create mode 100644 ruoyi-admin/src/main/resources/templates/project/order/add.html
 create mode 100644 ruoyi-admin/src/main/resources/templates/project/order/edit.html
 create mode 100644 ruoyi-admin/src/main/resources/templates/project/order/order.html
 create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java
 create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java
 create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java
 create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java
 create mode 100644 ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java
 create mode 100644 ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml

diff --git a/ruoyi-admin/src/main/resources/templates/manage/delivery/selectOrder.html b/ruoyi-admin/src/main/resources/templates/manage/delivery/selectOrder.html
index 27774c6f..ae215ba3 100644
--- a/ruoyi-admin/src/main/resources/templates/manage/delivery/selectOrder.html
+++ b/ruoyi-admin/src/main/resources/templates/manage/delivery/selectOrder.html
@@ -53,6 +53,10 @@
         {
           field: 'orderCode',
           title: '合同编号'
+        },
+          {
+          field: 'versionCode',
+          title: '版本号'
         },
         {
           field: 'orderName',
diff --git a/ruoyi-admin/src/main/resources/templates/project/order/add.html b/ruoyi-admin/src/main/resources/templates/project/order/add.html
new file mode 100644
index 00000000..03be2bb9
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/templates/project/order/add.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('新增订单管理')" />
+    <th:block th:include="include :: datetimepicker-css" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-order-add">
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label is-required">项目主键:</label>
+                    <div class="col-sm-8">
+                        <input name="projectId" class="form-control" type="text" required>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">地市:</label>
+                    <div class="col-sm-8">
+                        <input name="city" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">进货商商务接口人姓名:</label>
+                    <div class="col-sm-8">
+                        <input name="businessPerson" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">邮箱:</label>
+                    <div class="col-sm-8">
+                        <input name="businessEmail" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">电话:</label>
+                    <div class="col-sm-8">
+                        <input name="businessPhone" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">合同编号:</label>
+                    <div class="col-sm-8">
+                        <input name="orderCode" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出货金额:</label>
+                    <div class="col-sm-8">
+                        <input name="shipmentAmount" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">实际进货金额:</label>
+                    <div class="col-sm-8">
+                        <input name="actualPurchaseAmount" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">执行单有效截止时间:</label>
+                    <div class="col-sm-8">
+                        <div class="input-group date">
+                            <input name="orderEndTime" class="form-control" placeholder="yyyy-MM-dd" type="text">
+                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">要求到货时间:</label>
+                    <div class="col-sm-8">
+                        <div class="input-group date">
+                            <input name="deliveryTime" class="form-control" placeholder="yyyy-MM-dd" type="text">
+                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">公司直发:</label>
+                    <div class="col-sm-8">
+                        <input name="companyDelivery" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">通知人:</label>
+                    <div class="col-sm-8">
+                        <input name="notifier" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">通知人邮箱:</label>
+                    <div class="col-sm-8">
+                        <input name="notifierEmail" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">通知人电话:</label>
+                    <div class="col-sm-8">
+                        <input name="notifierPhone" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">责任人:</label>
+                    <div class="col-sm-8">
+                        <input name="duty" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">责任人邮箱:</label>
+                    <div class="col-sm-8">
+                        <input name="dutyEmail" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">责任人电话:</label>
+                    <div class="col-sm-8">
+                        <input name="dutyPhone" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">下单通路:</label>
+                    <div class="col-sm-8">
+                        <input name="orderChannel" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">进货商:</label>
+                    <div class="col-sm-8">
+                        <input name="partnerCode" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">供货商:</label>
+                    <div class="col-sm-8">
+                        <input name="supplier" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">其它特别说明:</label>
+                    <div class="col-sm-8">
+                        <input name="remark" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <th:block th:include="include :: footer" />
+    <th:block th:include="include :: datetimepicker-js" />
+    <script th:inline="javascript">
+        var prefix = ctx + "project/order"
+        $("#form-order-add").validate({
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                $.operate.save(prefix + "/add", $('#form-order-add').serialize());
+            }
+        }
+
+        $("input[name='orderEndTime']").datetimepicker({
+            format: "yyyy-mm-dd",
+            minView: "month",
+            autoclose: true
+        });
+
+        $("input[name='deliveryTime']").datetimepicker({
+            format: "yyyy-mm-dd",
+            minView: "month",
+            autoclose: true
+        });
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/templates/project/order/edit.html b/ruoyi-admin/src/main/resources/templates/project/order/edit.html
new file mode 100644
index 00000000..60d0f2ef
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/templates/project/order/edit.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('修改订单管理')" />
+    <th:block th:include="include :: datetimepicker-css" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-order-edit" th:object="${projectOrderInfo}">
+            <input name="id" th:field="*{id}" type="hidden">
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label is-required">项目主键:</label>
+                    <div class="col-sm-8">
+                        <input name="projectId" th:field="*{projectId}" class="form-control" type="text" required>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">地市:</label>
+                    <div class="col-sm-8">
+                        <input name="city" th:field="*{city}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">进货商商务接口人姓名:</label>
+                    <div class="col-sm-8">
+                        <input name="businessPerson" th:field="*{businessPerson}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">邮箱:</label>
+                    <div class="col-sm-8">
+                        <input name="businessEmail" th:field="*{businessEmail}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">电话:</label>
+                    <div class="col-sm-8">
+                        <input name="businessPhone" th:field="*{businessPhone}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">合同编号:</label>
+                    <div class="col-sm-8">
+                        <input name="orderCode" th:field="*{orderCode}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">出货金额:</label>
+                    <div class="col-sm-8">
+                        <input name="shipmentAmount" th:field="*{shipmentAmount}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">实际进货金额:</label>
+                    <div class="col-sm-8">
+                        <input name="actualPurchaseAmount" th:field="*{actualPurchaseAmount}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">执行单有效截止时间:</label>
+                    <div class="col-sm-8">
+                        <div class="input-group date">
+                            <input name="orderEndTime" th:value="${#dates.format(projectOrderInfo.orderEndTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
+                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">要求到货时间:</label>
+                    <div class="col-sm-8">
+                        <div class="input-group date">
+                            <input name="deliveryTime" th:value="${#dates.format(projectOrderInfo.deliveryTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
+                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">公司直发:</label>
+                    <div class="col-sm-8">
+                        <input name="companyDelivery" th:field="*{companyDelivery}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">通知人:</label>
+                    <div class="col-sm-8">
+                        <input name="notifier" th:field="*{notifier}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">通知人邮箱:</label>
+                    <div class="col-sm-8">
+                        <input name="notifierEmail" th:field="*{notifierEmail}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">通知人电话:</label>
+                    <div class="col-sm-8">
+                        <input name="notifierPhone" th:field="*{notifierPhone}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">责任人:</label>
+                    <div class="col-sm-8">
+                        <input name="duty" th:field="*{duty}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">责任人邮箱:</label>
+                    <div class="col-sm-8">
+                        <input name="dutyEmail" th:field="*{dutyEmail}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">责任人电话:</label>
+                    <div class="col-sm-8">
+                        <input name="dutyPhone" th:field="*{dutyPhone}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">下单通路:</label>
+                    <div class="col-sm-8">
+                        <input name="orderChannel" th:field="*{orderChannel}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">进货商:</label>
+                    <div class="col-sm-8">
+                        <input name="partnerCode" th:field="*{partnerCode}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">供货商:</label>
+                    <div class="col-sm-8">
+                        <input name="supplier" th:field="*{supplier}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">其它特别说明:</label>
+                    <div class="col-sm-8">
+                        <input name="remark" th:field="*{remark}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <th:block th:include="include :: footer" />
+    <th:block th:include="include :: datetimepicker-js" />
+    <script th:inline="javascript">
+        var prefix = ctx + "project/order";
+        $("#form-order-edit").validate({
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                $.operate.save(prefix + "/edit", $('#form-order-edit').serialize());
+            }
+        }
+
+        $("input[name='orderEndTime']").datetimepicker({
+            format: "yyyy-mm-dd",
+            minView: "month",
+            autoclose: true
+        });
+
+        $("input[name='deliveryTime']").datetimepicker({
+            format: "yyyy-mm-dd",
+            minView: "month",
+            autoclose: true
+        });
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/templates/project/order/order.html b/ruoyi-admin/src/main/resources/templates/project/order/order.html
new file mode 100644
index 00000000..b33331ff
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/templates/project/order/order.html
@@ -0,0 +1,250 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <th:block th:include="include :: header('订单管理列表')" />
+</head>
+<body class="gray-bg">
+     <div class="container-div">
+        <div class="row">
+            <div class="col-sm-12 search-collapse">
+                <form id="formId">
+                    <div class="select-list">
+                        <ul>
+                            <li>
+                                <label>项目主键:</label>
+                                <input type="text" name="projectId"/>
+                            </li>
+                            <li>
+                                <label>地市:</label>
+                                <input type="text" name="city"/>
+                            </li>
+                            <li>
+                                <label>进货商商务接口人姓名:</label>
+                                <input type="text" name="businessPerson"/>
+                            </li>
+                            <li>
+                                <label>邮箱:</label>
+                                <input type="text" name="businessEmail"/>
+                            </li>
+                            <li>
+                                <label>电话:</label>
+                                <input type="text" name="businessPhone"/>
+                            </li>
+                            <li>
+                                <label>合同编号:</label>
+                                <input type="text" name="orderCode"/>
+                            </li>
+                            <li>
+                                <label>出货金额:</label>
+                                <input type="text" name="shipmentAmount"/>
+                            </li>
+                            <li>
+                                <label>实际进货金额:</label>
+                                <input type="text" name="actualPurchaseAmount"/>
+                            </li>
+                            <li>
+                                <label>执行单有效截止时间:</label>
+                                <input type="text" class="time-input" placeholder="请选择执行单有效截止时间" name="orderEndTime"/>
+                            </li>
+                            <li>
+                                <label>要求到货时间:</label>
+                                <input type="text" class="time-input" placeholder="请选择要求到货时间" name="deliveryTime"/>
+                            </li>
+                            <li>
+                                <label>公司直发:</label>
+                                <input type="text" name="companyDelivery"/>
+                            </li>
+                            <li>
+                                <label>通知人:</label>
+                                <input type="text" name="notifier"/>
+                            </li>
+                            <li>
+                                <label>通知人邮箱:</label>
+                                <input type="text" name="notifierEmail"/>
+                            </li>
+                            <li>
+                                <label>通知人电话:</label>
+                                <input type="text" name="notifierPhone"/>
+                            </li>
+                            <li>
+                                <label>责任人:</label>
+                                <input type="text" name="duty"/>
+                            </li>
+                            <li>
+                                <label>责任人邮箱:</label>
+                                <input type="text" name="dutyEmail"/>
+                            </li>
+                            <li>
+                                <label>责任人电话:</label>
+                                <input type="text" name="dutyPhone"/>
+                            </li>
+                            <li>
+                                <label>下单通路:</label>
+                                <input type="text" name="orderChannel"/>
+                            </li>
+                            <li>
+                                <label>进货商:</label>
+                                <input type="text" name="partnerCode"/>
+                            </li>
+                            <li>
+                                <label>供货商:</label>
+                                <input type="text" name="supplier"/>
+                            </li>
+                            <li>
+                                <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+                                <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+                            </li>
+                        </ul>
+                    </div>
+                </form>
+            </div>
+
+            <div class="btn-group-sm" id="toolbar" role="group">
+                <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="product:order:add">
+                    <i class="fa fa-plus"></i> 添加
+                </a>
+                <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="product:order:edit">
+                    <i class="fa fa-edit"></i> 修改
+                </a>
+                <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="product:order:remove">
+                    <i class="fa fa-remove"></i> 删除
+                </a>
+                <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="product:order:export">
+                    <i class="fa fa-download"></i> 导出
+                </a>
+            </div>
+            <div class="col-sm-12 select-table table-striped">
+                <table id="bootstrap-table"></table>
+            </div>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var editFlag = [[${@permission.hasPermi('product:order:edit')}]];
+        var removeFlag = [[${@permission.hasPermi('product:order:remove')}]];
+        var prefix = ctx + "project/order";
+
+        $(function() {
+            var options = {
+                url: prefix + "/list",
+                createUrl: prefix + "/add",
+                updateUrl: prefix + "/edit/{id}",
+                removeUrl: prefix + "/remove",
+                exportUrl: prefix + "/export",
+                modalName: "订单管理",
+                columns: [{
+                    checkbox: true
+                },
+                {
+                    field: 'id',
+                    title: '',
+                    visible: false
+                },
+                {
+                    field: 'projectId',
+                    title: '项目主键'
+                },
+                {
+                    field: 'city',
+                    title: '地市'
+                },
+                {
+                    field: 'businessPerson',
+                    title: '进货商商务接口人姓名'
+                },
+                {
+                    field: 'businessEmail',
+                    title: '邮箱'
+                },
+                {
+                    field: 'businessPhone',
+                    title: '电话'
+                },
+                {
+                    field: 'orderCode',
+                    title: '合同编号'
+                },
+                {
+                    field: 'currencyType',
+                    title: '币种'
+                },
+                {
+                    field: 'shipmentAmount',
+                    title: '出货金额'
+                },
+                {
+                    field: 'actualPurchaseAmount',
+                    title: '实际进货金额'
+                },
+                {
+                    field: 'orderEndTime',
+                    title: '执行单有效截止时间'
+                },
+                {
+                    field: 'deliveryTime',
+                    title: '要求到货时间'
+                },
+                {
+                    field: 'companyDelivery',
+                    title: '公司直发'
+                },
+                {
+                    field: 'notifier',
+                    title: '通知人'
+                },
+                {
+                    field: 'notifierEmail',
+                    title: '通知人邮箱'
+                },
+                {
+                    field: 'notifierPhone',
+                    title: '通知人电话'
+                },
+                {
+                    field: 'duty',
+                    title: '责任人'
+                },
+                {
+                    field: 'dutyEmail',
+                    title: '责任人邮箱'
+                },
+                {
+                    field: 'dutyPhone',
+                    title: '责任人电话'
+                },
+                {
+                    field: 'orderChannel',
+                    title: '下单通路'
+                },
+                {
+                    field: 'partnerCode',
+                    title: '进货商'
+                },
+                {
+                    field: 'supplier',
+                    title: '供货商'
+                },
+                {
+                    field: 'remark',
+                    title: '其它特别说明'
+                },
+                {
+                    field: 'orderStatus',
+                    title: '订单状态'
+                },
+                {
+                    title: '操作',
+                    align: 'center',
+                    formatter: function(value, row, index) {
+                        var actions = [];
+                        actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                        actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
+                        return actions.join('');
+                    }
+                }]
+            };
+            $.table.init(options);
+        });
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java
new file mode 100644
index 00000000..49896873
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/ProjectOrderInfoController.java
@@ -0,0 +1,128 @@
+package com.ruoyi.sip.controller;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.sip.domain.ProjectOrderInfo;
+import com.ruoyi.sip.service.IProjectOrderInfoService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 订单管理Controller
+ * 
+ * @author ruoyi
+ * @date 2025-05-30
+ */
+@Controller
+@RequestMapping("/project/order")
+public class ProjectOrderInfoController extends BaseController
+{
+    private String prefix = "project/order";
+
+    @Autowired
+    private IProjectOrderInfoService projectOrderInfoService;
+
+    @RequiresPermissions("project:order:view")
+    @GetMapping()
+    public String order()
+    {
+        return prefix + "/order";
+    }
+
+    /**
+     * 查询订单管理列表
+     */
+    @RequiresPermissions("project:order:list")
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(ProjectOrderInfo projectOrderInfo)
+    {
+        startPage();
+        List<ProjectOrderInfo> list = projectOrderInfoService.selectProjectOrderInfoList(projectOrderInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单管理列表
+     */
+    @RequiresPermissions("project:order:export")
+    @Log(title = "订单管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ResponseBody
+    public AjaxResult export(ProjectOrderInfo projectOrderInfo)
+    {
+        List<ProjectOrderInfo> list = projectOrderInfoService.selectProjectOrderInfoList(projectOrderInfo);
+        ExcelUtil<ProjectOrderInfo> util = new ExcelUtil<ProjectOrderInfo>(ProjectOrderInfo.class);
+        return util.exportExcel(list, "订单管理数据");
+    }
+
+    /**
+     * 新增订单管理
+     */
+    @RequiresPermissions("project:order:add")
+    @GetMapping("/add")
+    public String add()
+    {
+        return prefix + "/add";
+    }
+
+    /**
+     * 新增保存订单管理
+     */
+    @RequiresPermissions("project:order:add")
+    @Log(title = "订单管理", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    @ResponseBody
+    public AjaxResult addSave(ProjectOrderInfo projectOrderInfo)
+    {
+        return toAjax(projectOrderInfoService.insertProjectOrderInfo(projectOrderInfo));
+    }
+
+    /**
+     * 修改订单管理
+     */
+    @RequiresPermissions("project:order:edit")
+    @GetMapping("/edit/{id}")
+    public String edit(@PathVariable("id") Long id, ModelMap mmap)
+    {
+        ProjectOrderInfo projectOrderInfo = projectOrderInfoService.selectProjectOrderInfoById(id);
+        mmap.put("projectOrderInfo", projectOrderInfo);
+        return prefix + "/edit";
+    }
+
+    /**
+     * 修改保存订单管理
+     */
+    @RequiresPermissions("project:order:edit")
+    @Log(title = "订单管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(ProjectOrderInfo projectOrderInfo)
+    {
+        return toAjax(projectOrderInfoService.updateProjectOrderInfo(projectOrderInfo));
+    }
+
+    /**
+     * 删除订单管理
+     */
+    @RequiresPermissions("project:order:remove")
+    @Log(title = "订单管理", businessType = BusinessType.DELETE)
+    @PostMapping( "/remove")
+    @ResponseBody
+    public AjaxResult remove(String ids)
+    {
+        return toAjax(projectOrderInfoService.deleteProjectOrderInfoByIds(ids));
+    }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java
index c382a653..61a7cd95 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectInfo.java
@@ -87,11 +87,17 @@ public class ProjectInfo extends BaseEntity
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "预计下单时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date estimatedOrderTime;
+    private Date estimatedOrderTimeStart;
+    private Date estimatedOrderTimeEnd;
 
     /** 预计发货时间 */
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @Excel(name = "预计发货时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date estimatedDeliverTime;
+    private Date estimatedDeliverTimeStart;
+    private Date estimatedDeliverTimeEnd;
+    private Date updateTimeStart;
+    private Date updateTimeEnd;
 
     /** 竞争对手 */
     @Excel(name = "竞争对手")
@@ -113,6 +119,7 @@ public class ProjectInfo extends BaseEntity
     @Excel(name = "项目描述")
     private String projectDesc;
     private Boolean highlight;
+    private Boolean canGenerate;
     /** 软件项目产品信息 */
     private List<ProjectProductInfo> softwareProjectProductInfoList;
     /** 硬件项目产品信息 */
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java
new file mode 100644
index 00000000..69eeb2e0
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/ProjectOrderInfo.java
@@ -0,0 +1,170 @@
+package com.ruoyi.sip.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 订单管理对象 project_order_info
+ *
+ * @author ruoyi
+ * @date 2025-05-30
+ */
+@Data
+public class ProjectOrderInfo extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    private Long id;
+
+    /**
+     * 项目主键
+     */
+
+    private Long projectId;
+    private String projectCode;
+    private String projectName;
+    private String customerName;
+    private String industryType;
+    private String province;
+
+    /**
+     * 地市
+     */
+    @Excel(name = "地市")
+    private String city;
+
+    /**
+     * 进货商商务接口人姓名
+     */
+    @Excel(name = "进货商商务接口人姓名")
+    private String businessPerson;
+
+    /**
+     * 邮箱
+     */
+    @Excel(name = "邮箱")
+    private String businessEmail;
+
+    /**
+     * 电话
+     */
+    @Excel(name = "电话")
+    private String businessPhone;
+
+    /**
+     * 合同编号
+     */
+    @Excel(name = "合同编号")
+    private String orderCode;
+
+    /**
+     * 币种
+     */
+    @Excel(name = "币种")
+    private String currencyType;
+
+    /**
+     * 出货金额
+     */
+    @Excel(name = "出货金额")
+    private BigDecimal shipmentAmount;
+
+    /**
+     * 实际进货金额
+     */
+    @Excel(name = "实际进货金额")
+    private BigDecimal actualPurchaseAmount;
+
+    /**
+     * 执行单有效截止时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @Excel(name = "执行单有效截止时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date orderEndTime;
+
+    /**
+     * 要求到货时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @Excel(name = "要求到货时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date deliveryTime;
+
+    /**
+     * 公司直发
+     */
+    @Excel(name = "公司直发")
+    private String companyDelivery;
+
+    /**
+     * 通知人
+     */
+    @Excel(name = "通知人")
+    private String notifier;
+
+    /**
+     * 通知人邮箱
+     */
+    @Excel(name = "通知人邮箱")
+    private String notifierEmail;
+
+    /**
+     * 通知人电话
+     */
+    @Excel(name = "通知人电话")
+    private String notifierPhone;
+
+    /**
+     * 责任人
+     */
+    @Excel(name = "责任人")
+    private String duty;
+
+    /**
+     * 责任人邮箱
+     */
+    @Excel(name = "责任人邮箱")
+    private String dutyEmail;
+
+    /**
+     * 责任人电话
+     */
+    @Excel(name = "责任人电话")
+    private String dutyPhone;
+
+    /**
+     * 下单通路
+     */
+    @Excel(name = "下单通路")
+    private String orderChannel;
+
+    /**
+     * 进货商
+     */
+    @Excel(name = "进货商")
+    private String partnerCode;
+    private String partnerName;
+    private String level;
+
+
+    /**
+     * 供货商
+     */
+    @Excel(name = "供货商")
+    private String supplier;
+
+    /**
+     * 订单状态
+     */
+    @Excel(name = "订单状态")
+    private String orderStatus;
+
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java
new file mode 100644
index 00000000..3d3d7137
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.sip.mapper;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectOrderInfo;
+
+/**
+ * 订单管理Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-05-30
+ */
+public interface ProjectOrderInfoMapper 
+{
+    /**
+     * 查询订单管理
+     * 
+     * @param id 订单管理主键
+     * @return 订单管理
+     */
+    public ProjectOrderInfo selectProjectOrderInfoById(Long id);
+
+    /**
+     * 查询订单管理列表
+     * 
+     * @param projectOrderInfo 订单管理
+     * @return 订单管理集合
+     */
+    public List<ProjectOrderInfo> selectProjectOrderInfoList(ProjectOrderInfo projectOrderInfo);
+
+    /**
+     * 新增订单管理
+     * 
+     * @param projectOrderInfo 订单管理
+     * @return 结果
+     */
+    public int insertProjectOrderInfo(ProjectOrderInfo projectOrderInfo);
+
+    /**
+     * 修改订单管理
+     * 
+     * @param projectOrderInfo 订单管理
+     * @return 结果
+     */
+    public int updateProjectOrderInfo(ProjectOrderInfo projectOrderInfo);
+
+    /**
+     * 删除订单管理
+     * 
+     * @param id 订单管理主键
+     * @return 结果
+     */
+    public int deleteProjectOrderInfoById(Long id);
+
+    /**
+     * 批量删除订单管理
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteProjectOrderInfoByIds(String[] ids);
+
+    List<ProjectOrderInfo> selectProjectOrderInfoByProjectId(List<Long> projectId);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java
new file mode 100644
index 00000000..3eba2b26
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IProjectOrderInfoService.java
@@ -0,0 +1,71 @@
+package com.ruoyi.sip.service;
+
+import java.util.List;
+import com.ruoyi.sip.domain.ProjectOrderInfo;
+
+/**
+ * 订单管理Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-05-30
+ */
+public interface IProjectOrderInfoService 
+{
+    /**
+     * 查询订单管理
+     * 
+     * @param id 订单管理主键
+     * @return 订单管理
+     */
+    public ProjectOrderInfo selectProjectOrderInfoById(Long id);
+
+    /**
+     * 查询订单管理列表
+     * 
+     * @param projectOrderInfo 订单管理
+     * @return 订单管理集合
+     */
+    public List<ProjectOrderInfo> selectProjectOrderInfoList(ProjectOrderInfo projectOrderInfo);
+
+    /**
+     * 新增订单管理
+     * 
+     * @param projectOrderInfo 订单管理
+     * @return 结果
+     */
+    public int insertProjectOrderInfo(ProjectOrderInfo projectOrderInfo);
+
+    /**
+     * 修改订单管理
+     * 
+     * @param projectOrderInfo 订单管理
+     * @return 结果
+     */
+    public int updateProjectOrderInfo(ProjectOrderInfo projectOrderInfo);
+
+    /**
+     * 批量删除订单管理
+     * 
+     * @param ids 需要删除的订单管理主键集合
+     * @return 结果
+     */
+    public int deleteProjectOrderInfoByIds(String ids);
+
+    /**
+     * 删除订单管理信息
+     * 
+     * @param id 订单管理主键
+     * @return 结果
+     */
+    public int deleteProjectOrderInfoById(Long id);
+
+    /**
+     * 根据projectId查询订单信息
+     * @param projectId
+     * @return java.util.List<com.ruoyi.sip.domain.ProjectOrderInfo>
+     * @author ch
+     * @date 2025/05/30 16:13
+     */
+
+   List< ProjectOrderInfo> selectProjectOrderInfoByProjectId(List<Long> projectId);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java
index 6321134d..5a700af8 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectInfoServiceImpl.java
@@ -3,15 +3,13 @@ package com.ruoyi.sip.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DictUtils;
 import com.ruoyi.common.utils.ShiroUtils;
 import com.ruoyi.sip.domain.*;
 import com.ruoyi.sip.mapper.ProjectInfoMapper;
-import com.ruoyi.sip.service.IProjectInfoService;
-import com.ruoyi.sip.service.IProjectOperateLogService;
-import com.ruoyi.sip.service.IProjectProductInfoService;
-import com.ruoyi.sip.service.IProjectWorkProgressService;
+import com.ruoyi.sip.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -20,6 +18,7 @@ import java.time.LocalDate;
 import java.time.Period;
 import java.time.ZoneId;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -41,6 +40,8 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
     @Autowired
     private IProjectOperateLogService operateLogService;
 
+    @Autowired
+    private IProjectOrderInfoService orderInfoService;
     private static final String PROJECT_CODE_PREFIX = "V";
     private static final Integer PROJECT_CODE_LENGTH = 5;
 
@@ -80,13 +81,17 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
      */
     @Override
     public List<ProjectInfo> selectProjectInfoList(ProjectInfo projectInfo) {
-        //todo  生成订单按钮置灰查询
         List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
+
+        List<Long> idList = projectInfos.stream().map(ProjectInfo::getId).collect(Collectors.toList());
+        List<ProjectOrderInfo> projectOrderInfos = orderInfoService.selectProjectOrderInfoByProjectId(idList);
+        Map<Long, ProjectOrderInfo> orderInfoMap = projectOrderInfos.stream().collect(Collectors.toMap(ProjectOrderInfo::getProjectId, Function.identity(), (v1, v2) -> v1));
         LocalDate now = LocalDate.now();
         for (ProjectInfo info : projectInfos) {
             LocalDate localDate = info.getUpdateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
             Period between = Period.between(localDate, now);
             info.setHighlight(between.getMonths() >= 2);
+            info.setCanGenerate(orderInfoMap.get(info.getId()) == null);
         }
         return projectInfos;
     }
@@ -161,7 +166,11 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
         ProjectInfo oldProjectInfo = this.selectProjectInfoById(projectInfo.getId());
         //变更属地校验
         if (!projectInfo.getProvince().equals(oldProjectInfo.getProvince())) {
-            //todo  查询订单信息  如果有抛出异常
+            //查询订单信息  如果有抛出异常
+            List<ProjectOrderInfo> projectOrderInfos = orderInfoService.selectProjectOrderInfoByProjectId(Collections.singletonList(projectInfo.getId()));
+            if (CollUtil.isNotEmpty(projectOrderInfos)) {
+                throw new ServiceException("该项目存在订单流转,无法更改属地");
+            }
             //如果没有  变更编码  是否考虑高并发加锁
             setProjectCode(projectInfo);
         }
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java
new file mode 100644
index 00000000..1e7afe82
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/ProjectOrderInfoServiceImpl.java
@@ -0,0 +1,101 @@
+package com.ruoyi.sip.service.impl;
+
+import java.util.Collections;
+import java.util.List;
+
+import cn.hutool.core.collection.CollUtil;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.sip.mapper.ProjectOrderInfoMapper;
+import com.ruoyi.sip.domain.ProjectOrderInfo;
+import com.ruoyi.sip.service.IProjectOrderInfoService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 订单管理Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-30
+ */
+@Service
+public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService {
+    @Autowired
+    private ProjectOrderInfoMapper projectOrderInfoMapper;
+
+    /**
+     * 查询订单管理
+     *
+     * @param id 订单管理主键
+     * @return 订单管理
+     */
+    @Override
+    public ProjectOrderInfo selectProjectOrderInfoById(Long id) {
+        return projectOrderInfoMapper.selectProjectOrderInfoById(id);
+    }
+
+    /**
+     * 查询订单管理列表
+     *
+     * @param projectOrderInfo 订单管理
+     * @return 订单管理
+     */
+    @Override
+    public List<ProjectOrderInfo> selectProjectOrderInfoList(ProjectOrderInfo projectOrderInfo) {
+        return projectOrderInfoMapper.selectProjectOrderInfoList(projectOrderInfo);
+    }
+
+    /**
+     * 新增订单管理
+     *
+     * @param projectOrderInfo 订单管理
+     * @return 结果
+     */
+    @Override
+    public int insertProjectOrderInfo(ProjectOrderInfo projectOrderInfo) {
+        projectOrderInfo.setCreateTime(DateUtils.getNowDate());
+        return projectOrderInfoMapper.insertProjectOrderInfo(projectOrderInfo);
+    }
+
+    /**
+     * 修改订单管理
+     *
+     * @param projectOrderInfo 订单管理
+     * @return 结果
+     */
+    @Override
+    public int updateProjectOrderInfo(ProjectOrderInfo projectOrderInfo) {
+        projectOrderInfo.setUpdateTime(DateUtils.getNowDate());
+        return projectOrderInfoMapper.updateProjectOrderInfo(projectOrderInfo);
+    }
+
+    /**
+     * 批量删除订单管理
+     *
+     * @param ids 需要删除的订单管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProjectOrderInfoByIds(String ids) {
+        return projectOrderInfoMapper.deleteProjectOrderInfoByIds(Convert.toStrArray(ids));
+    }
+
+    /**
+     * 删除订单管理信息
+     *
+     * @param id 订单管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteProjectOrderInfoById(Long id) {
+        return projectOrderInfoMapper.deleteProjectOrderInfoById(id);
+    }
+
+    @Override
+    public List<ProjectOrderInfo> selectProjectOrderInfoByProjectId(List<Long> projectId) {
+        if (CollUtil.isNotEmpty(projectId)) {
+            return Collections.emptyList();
+        }
+        return projectOrderInfoMapper.selectProjectOrderInfoByProjectId(projectId);
+    }
+}
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml
index 7103415a..dda78f1a 100644
--- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectInfoMapper.xml
@@ -58,7 +58,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="estimatedAmount != null "> and estimated_amount = #{estimatedAmount}</if>
             <if test="currencyType != null  and currencyType != ''"> and currency_type = #{currencyType}</if>
             <if test="estimatedOrderTime != null "> and estimated_order_time = #{estimatedOrderTime}</if>
+            <if test="estimatedOrderTimeStart != null or estimatedOrderTimeEnd != null">
+                <choose>
+                    <when test="estimatedOrderTimeStart != null">
+                        and estimated_order_time <![CDATA[ >= ]]> #{estimatedOrderTimeStart}
+                    </when>
+                    <when test="estimatedOrderTimeEnd != null">
+                        and estimated_order_time <![CDATA[ <= ]]> #{estimatedOrderTimeEnd}
+                    </when>
+                    <otherwise>
+                        and estimated_order_time between #{estimatedOrderTimeStart} and #{estimatedOrderTimeEnd}
+                    </otherwise>
+                </choose>
+            </if>
             <if test="estimatedDeliverTime != null "> and estimated_deliver_time = #{estimatedDeliverTime}</if>
+            <if test="estimatedDeliverTimeStart != null or estimatedDeliverTimeEnd != null">
+                <choose>
+                    <when test="estimatedDeliverTimeStart != null">
+                        and estimated_deliver_time <![CDATA[ >= ]]> #{estimatedDeliverTimeStart}
+                    </when>
+                    <when test="estimatedDeliverTimeEnd != null">
+                        and estimated_deliver_time <![CDATA[ <= ]]> #{estimatedDeliverTimeEnd}
+                    </when>
+                    <otherwise>
+                        and estimated_deliver_time between #{estimatedDeliverTimeStart} and #{estimatedDeliverTimeEnd}
+                    </otherwise>
+                </choose>
+
+            </if>
+            <if test="updateTimeStart != null or updateTimeEnd != null">
+                <choose>
+                    <when test="updateTimeStart != null">
+                        and update_time <![CDATA[ >= ]]> #{updateTimeStart}
+                    </when>
+                    <when test="updateTimeEnd != null">
+                        and update_time <![CDATA[ <= ]]> #{updateTimeEnd}
+                    </when>
+                    <otherwise>
+                        and update_time between #{updateTimeStart} and #{updateTimeEnd}
+                    </otherwise>
+                </choose>
+
+            </if>
             <if test="competitor != null  and competitor != ''"> and competitor = #{competitor}</if>
             <if test="countryProduct != null  and countryProduct != ''"> and country_product = #{countryProduct}</if>
             <if test="serverConfiguration != null  and serverConfiguration != ''"> and server_configuration = #{serverConfiguration}</if>
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml
new file mode 100644
index 00000000..acb155c4
--- /dev/null
+++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml
@@ -0,0 +1,204 @@
+<?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.sip.mapper.ProjectOrderInfoMapper">
+    
+    <resultMap type="ProjectOrderInfo" id="ProjectOrderInfoResult">
+        <result property="id"    column="id"    />
+        <result property="projectId"    column="project_id"    />
+        <result property="city"    column="city"    />
+        <result property="businessPerson"    column="business_person"    />
+        <result property="businessEmail"    column="business_email"    />
+        <result property="businessPhone"    column="business_phone"    />
+        <result property="orderCode"    column="order_code"    />
+        <result property="currencyType"    column="currencyType"    />
+        <result property="shipmentAmount"    column="shipment_amount"    />
+        <result property="actualPurchaseAmount"    column="actual_purchase_amount"    />
+        <result property="orderEndTime"    column="order_end_time"    />
+        <result property="deliveryTime"    column="delivery_time"    />
+        <result property="companyDelivery"    column="company_delivery"    />
+        <result property="notifier"    column="notifier"    />
+        <result property="notifierEmail"    column="notifier_email"    />
+        <result property="notifierPhone"    column="notifier_phone"    />
+        <result property="duty"    column="duty"    />
+        <result property="dutyEmail"    column="duty_email"    />
+        <result property="dutyPhone"    column="duty_phone"    />
+        <result property="orderChannel"    column="order_channel"    />
+        <result property="partnerCode"    column="partner_code"    />
+        <result property="supplier"    column="supplier"    />
+        <result property="remark"    column="remark"    />
+        <result property="orderStatus"    column="order_status"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectProjectOrderInfoVo">
+        select id, project_id, city, business_person, business_email, business_phone, order_code, currencyType,
+               shipment_amount, actual_purchase_amount, order_end_time, delivery_time, company_delivery, notifier,
+               notifier_email, notifier_phone, duty, duty_email, duty_phone, order_channel, partner_code, supplier,
+               remark, order_status, create_by, create_time, update_by, update_time from project_order_info t1
+    </sql>
+    <sql id="selectProjectOrderInfoRelationVo">
+        select t1.id, t1.project_id, t1.city, t1.business_person, t1.business_email, t1.business_phone, t1.order_code, t1.currencyType,
+               t1.shipment_amount, t1.actual_purchase_amount, t1.order_end_time, t1.delivery_time, t1.company_delivery, t1.notifier,
+               t1.notifier_email, t1.notifier_phone, t1.duty, t1.duty_email, t1.duty_phone, t1.order_channel, t1.partner_code, t1.supplier,
+               t1.remark, t1.order_status, t1.create_by, t1.create_time, t1.update_by, t1.update_time
+                ,t2.project_code,t2.project_name,t2.province,t2.customer_name,t2.industry_type
+        ,t3.partner_name,t3.level
+        from project_order_info t1
+        left join project_info t2 on t1.project_id = t2.id
+        left join partner_info t3 on t1.partner_code=t3.partner_code
+    </sql>
+
+    <select id="selectProjectOrderInfoList" parameterType="ProjectOrderInfo" resultMap="ProjectOrderInfoResult">
+        <include refid="selectProjectOrderInfoRelationVo"/>
+        <where>  
+            <if test="projectId != null "> and t1.project_id = #{projectId}</if>
+            <if test="city != null  and city != ''"> and t1.city = #{city}</if>
+            <if test="businessPerson != null  and businessPerson != ''"> and t1.business_person = #{businessPerson}</if>
+            <if test="businessEmail != null  and businessEmail != ''"> and t1.business_email = #{businessEmail}</if>
+            <if test="businessPhone != null  and businessPhone != ''"> and t1.business_phone = #{businessPhone}</if>
+            <if test="orderCode != null  and orderCode != ''"> and t1.order_code = #{orderCode}</if>
+            <if test="currencyType != null  and currencyType != ''"> and t1.currencyType = #{currencyType}</if>
+            <if test="shipmentAmount != null "> and t1.shipment_amount = #{shipmentAmount}</if>
+            <if test="actualPurchaseAmount != null "> and t1.actual_purchase_amount = #{actualPurchaseAmount}</if>
+            <if test="orderEndTime != null "> and t1.order_end_time = #{orderEndTime}</if>
+            <if test="deliveryTime != null "> and t1.delivery_time = #{deliveryTime}</if>
+            <if test="companyDelivery != null  and companyDelivery != ''"> and t1.company_delivery = #{companyDelivery}</if>
+            <if test="notifier != null  and notifier != ''"> and t1.notifier = #{notifier}</if>
+            <if test="notifierEmail != null  and notifierEmail != ''"> and t1.notifier_email = #{notifierEmail}</if>
+            <if test="notifierPhone != null  and notifierPhone != ''"> and t1.notifier_phone = #{notifierPhone}</if>
+            <if test="duty != null  and duty != ''"> and t1.duty = #{duty}</if>
+            <if test="dutyEmail != null  and dutyEmail != ''"> and t1.duty_email = #{dutyEmail}</if>
+            <if test="dutyPhone != null  and dutyPhone != ''"> and t1.duty_phone = #{dutyPhone}</if>
+            <if test="orderChannel != null  and orderChannel != ''"> and t1.order_channel = #{orderChannel}</if>
+            <if test="partnerCode != null  and partnerCode != ''"> and t1.partner_code = #{partnerCode}</if>
+            <if test="supplier != null  and supplier != ''"> and t1.supplier = #{supplier}</if>
+            <if test="orderStatus != null  and orderStatus != ''"> and t1.order_status = #{orderStatus}</if>
+        </where>
+    </select>
+    
+    <select id="selectProjectOrderInfoById" parameterType="Long" resultMap="ProjectOrderInfoResult">
+        <include refid="selectProjectOrderInfoRelationVo"/>
+        where t1.id = #{id}
+    </select>
+    <select id="selectProjectOrderInfoByProjectId" resultType="com.ruoyi.sip.domain.ProjectOrderInfo">
+        <include refid="selectProjectOrderInfoVo"/>
+        where t1.project_id in (
+        <foreach item="item" collection="list" separator=",">
+            #{item}
+        </foreach>
+        )
+    </select>
+
+    <insert id="insertProjectOrderInfo" parameterType="ProjectOrderInfo" useGeneratedKeys="true" keyProperty="id">
+        insert into project_order_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="projectId != null">project_id,</if>
+            <if test="city != null">city,</if>
+            <if test="businessPerson != null">business_person,</if>
+            <if test="businessEmail != null">business_email,</if>
+            <if test="businessPhone != null">business_phone,</if>
+            <if test="orderCode != null">order_code,</if>
+            <if test="currencyType != null">currencyType,</if>
+            <if test="shipmentAmount != null">shipment_amount,</if>
+            <if test="actualPurchaseAmount != null">actual_purchase_amount,</if>
+            <if test="orderEndTime != null">order_end_time,</if>
+            <if test="deliveryTime != null">delivery_time,</if>
+            <if test="companyDelivery != null">company_delivery,</if>
+            <if test="notifier != null">notifier,</if>
+            <if test="notifierEmail != null">notifier_email,</if>
+            <if test="notifierPhone != null">notifier_phone,</if>
+            <if test="duty != null">duty,</if>
+            <if test="dutyEmail != null">duty_email,</if>
+            <if test="dutyPhone != null">duty_phone,</if>
+            <if test="orderChannel != null">order_channel,</if>
+            <if test="partnerCode != null">partner_code,</if>
+            <if test="supplier != null">supplier,</if>
+            <if test="remark != null">remark,</if>
+            <if test="orderStatus != null">order_status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="projectId != null">#{projectId},</if>
+            <if test="city != null">#{city},</if>
+            <if test="businessPerson != null">#{businessPerson},</if>
+            <if test="businessEmail != null">#{businessEmail},</if>
+            <if test="businessPhone != null">#{businessPhone},</if>
+            <if test="orderCode != null">#{orderCode},</if>
+            <if test="currencyType != null">#{currencyType},</if>
+            <if test="shipmentAmount != null">#{shipmentAmount},</if>
+            <if test="actualPurchaseAmount != null">#{actualPurchaseAmount},</if>
+            <if test="orderEndTime != null">#{orderEndTime},</if>
+            <if test="deliveryTime != null">#{deliveryTime},</if>
+            <if test="companyDelivery != null">#{companyDelivery},</if>
+            <if test="notifier != null">#{notifier},</if>
+            <if test="notifierEmail != null">#{notifierEmail},</if>
+            <if test="notifierPhone != null">#{notifierPhone},</if>
+            <if test="duty != null">#{duty},</if>
+            <if test="dutyEmail != null">#{dutyEmail},</if>
+            <if test="dutyPhone != null">#{dutyPhone},</if>
+            <if test="orderChannel != null">#{orderChannel},</if>
+            <if test="partnerCode != null">#{partnerCode},</if>
+            <if test="supplier != null">#{supplier},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="orderStatus != null">#{orderStatus},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateProjectOrderInfo" parameterType="ProjectOrderInfo">
+        update project_order_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="projectId != null">project_id = #{projectId},</if>
+            <if test="city != null">city = #{city},</if>
+            <if test="businessPerson != null">business_person = #{businessPerson},</if>
+            <if test="businessEmail != null">business_email = #{businessEmail},</if>
+            <if test="businessPhone != null">business_phone = #{businessPhone},</if>
+            <if test="orderCode != null">order_code = #{orderCode},</if>
+            <if test="currencyType != null">currencyType = #{currencyType},</if>
+            <if test="shipmentAmount != null">shipment_amount = #{shipmentAmount},</if>
+            <if test="actualPurchaseAmount != null">actual_purchase_amount = #{actualPurchaseAmount},</if>
+            <if test="orderEndTime != null">order_end_time = #{orderEndTime},</if>
+            <if test="deliveryTime != null">delivery_time = #{deliveryTime},</if>
+            <if test="companyDelivery != null">company_delivery = #{companyDelivery},</if>
+            <if test="notifier != null">notifier = #{notifier},</if>
+            <if test="notifierEmail != null">notifier_email = #{notifierEmail},</if>
+            <if test="notifierPhone != null">notifier_phone = #{notifierPhone},</if>
+            <if test="duty != null">duty = #{duty},</if>
+            <if test="dutyEmail != null">duty_email = #{dutyEmail},</if>
+            <if test="dutyPhone != null">duty_phone = #{dutyPhone},</if>
+            <if test="orderChannel != null">order_channel = #{orderChannel},</if>
+            <if test="partnerCode != null">partner_code = #{partnerCode},</if>
+            <if test="supplier != null">supplier = #{supplier},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="orderStatus != null">order_status = #{orderStatus},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteProjectOrderInfoById" parameterType="Long">
+        delete from project_order_info where id = #{id}
+    </delete>
+
+    <delete id="deleteProjectOrderInfoByIds" parameterType="String">
+        delete from project_order_info where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
\ No newline at end of file