diff --git a/sql/table.sql b/sql/table.sql
index da91e98..64a6784 100644
--- a/sql/table.sql
+++ b/sql/table.sql
@@ -20,6 +20,7 @@ CREATE TABLE `order_base_info` (
           `order_hod_time` varchar(32) DEFAULT NULL COMMENT '订单上HOD时间',
           `outbound_type` varchar(32) DEFAULT NULL COMMENT '出库类型',
           `packet_type` varchar(64) DEFAULT NULL COMMENT '包装类型',
+          `order_status`    INT          NOT NULL COMMENT '订单状态',
           `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
           `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
           `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
@@ -43,6 +44,7 @@ CREATE TABLE `order_profit_analysis` (
 		  `packet_total_price` DOUBLE DEFAULT 0 COMMENT '包装费用合计¥',
 		  `exchange_rate` DOUBLE DEFAULT 0 COMMENT '汇率',
 		  `profit_rate` DOUBLE DEFAULT 0 COMMENT '利润率',
+		  `order_status`    INT          NOT NULL COMMENT '订单状态',
           `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
           `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
           `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
@@ -60,6 +62,7 @@ CREATE TABLE `order_completion_report` (
           `idea_source`    varchar(64)  DEFAULT NULL COMMENT '想法来源',
           `manual_preform` varchar(64)  DEFAULT NULL COMMENT '手工初型',
           `idea_manual_rate` DOUBLE DEFAULT 0 COMMENT '想法和手工比例分配',
+          `order_status`    INT          NOT NULL COMMENT '订单状态',
           `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
           `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
           `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
@@ -78,15 +81,16 @@ CREATE TABLE `order_track_stage` (
           `pp_confirm_result` varchar(64)  DEFAULT NULL COMMENT 'pp样品确认意见',
           `eso_sample_send_time`  varchar(64)  DEFAULT NULL COMMENT 'EXTRA,SHOWROOM,ONLINE sample发送时间',
           `shippment_sample_send_time`  varchar(64)  DEFAULT NULL COMMENT 'shippment sample 发送时间',
-          `shippment_sample_confirm_time`  varchar(64)  DEFAULT NULL COMMENT 'shipment sample确认意见',
+          `shippment_sample_confirm_result`  varchar(64)  DEFAULT NULL COMMENT 'shipment sample确认意见',
           `self_test_pass_time`  varchar(64)  DEFAULT NULL COMMENT '自测通过时间',
           `aitex_test_send_time`  varchar(64)  DEFAULT NULL COMMENT 'Aitex测试发送时间',
-          `aitex_test_finish_time`  varchar(64)  DEFAULT NULL COMMENT 'Aitex测试结果时间',
+          `aitex_test_finish_result`  varchar(64)  DEFAULT NULL COMMENT 'Aitex测试结果',
           `sgs_test_send_time`  varchar(64)  DEFAULT NULL COMMENT 'SGS测试发送时间',
-          `sgs_test_finish_time`  varchar(64)  DEFAULT NULL COMMENT 'SGS测试结果时间',
+          `sgs_test_finish_result`  varchar(64)  DEFAULT NULL COMMENT 'SGS测试结果',
           `barcode_sticker_arrival_time`  varchar(64)  DEFAULT NULL COMMENT 'Barcode sticker arrival time',
           `latest_arrival_time`  varchar(64)  DEFAULT NULL COMMENT '最晚包材到货时间',
           `latest_bk_time`  varchar(64)  DEFAULT NULL COMMENT '最晚订舱+报关资料时间',
+          `order_status`    INT          NOT NULL COMMENT '订单状态',
           `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
           `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
           `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
@@ -113,6 +117,7 @@ CREATE TABLE `order_inspection_stage` (
           `value3`  varchar(128)  DEFAULT NULL COMMENT '其他不良3',
           `box_packet`  varchar(64)  DEFAULT NULL COMMENT '包装:卡片、条码、箱贴,箱单',
           `end_check_result`  varchar(16)  DEFAULT NULL COMMENT '尾期验货结果PASS / FAIL',
+          `order_status`    INT          NOT NULL COMMENT '订单状态',
           `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
           `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
           `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
@@ -147,6 +152,8 @@ CREATE TABLE `order_field_lock_apply` (
           `audit_user_id` bigint DEFAULT NULL COMMENT '审批用户id',
           `fields`  text  DEFAULT NULL COMMENT '锁定字段 json字符串',
           `status`    INT DEFAULT 0 COMMENT '状态:0 待审批,1 通过,2 拒绝',
+          `type`    INT          NOT NULL COMMENT '申请类型',
+          `remark`    varchar(64)  DEFAULT NULL COMMENT '申请类型描述',
           `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
           `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
           `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
diff --git a/src/main/java/com/order/erp/common/constant/ServerResultCode.java b/src/main/java/com/order/erp/common/constant/ServerResultCode.java
index 8877c0a..e708966 100644
--- a/src/main/java/com/order/erp/common/constant/ServerResultCode.java
+++ b/src/main/java/com/order/erp/common/constant/ServerResultCode.java
@@ -62,6 +62,10 @@ public enum ServerResultCode implements ErrorInfo {
 
     //订单
     ORDER_BASE_INFO_EMPTY(70001, "订单基础信息不能为空!"),
+
+    //申请
+    APPLY_UNLOCK_FIELD_EXIST(80001, "还有未审批完结的申请,请等上一个申请单完结!"),
+    APPLY_NOT_EXIST(80002, "申请单不存在!"),
     ;
 
 
diff --git a/src/main/java/com/order/erp/common/utils/OrderFieldUtils.java b/src/main/java/com/order/erp/common/utils/OrderFieldUtils.java
new file mode 100644
index 0000000..1bcef4c
--- /dev/null
+++ b/src/main/java/com/order/erp/common/utils/OrderFieldUtils.java
@@ -0,0 +1,142 @@
+package com.order.erp.common.utils;
+
+import com.order.erp.domain.OrderLockFieldEnum;
+import com.order.erp.domain.vo.order.*;
+
+import java.util.Objects;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/9/13 20:02
+ * @version: 1.0
+ */
+public class OrderFieldUtils {
+
+    /**
+     * @param lockFieldEnum
+     * @return
+     */
+    public static OrderLockFieldVO initField(OrderLockFieldEnum lockFieldEnum) {
+        if (Objects.isNull(lockFieldEnum)) {
+            lockFieldEnum = OrderLockFieldEnum.LOCKED;
+        }
+        return OrderLockFieldVO.builder()
+                .baseFields(initOrderBaseField(lockFieldEnum))
+                .reportFields(initReportField(lockFieldEnum))
+                .profitAnalysisFields(initProfitAnalysisField(lockFieldEnum))
+                .trackStageFields(initTrackStageField(lockFieldEnum))
+                .inspectionStageFields(initInspectionStageField(lockFieldEnum))
+                .build();
+    }
+
+    /**
+     * @param lockFieldEnum
+     * @return
+     */
+    public static OrderBaseFieldVO initOrderBaseField(OrderLockFieldEnum lockFieldEnum) {
+        String locked = lockFieldEnum.getStatus();
+        return OrderBaseFieldVO.builder()
+                .cnColor(locked)
+                .collection(locked)
+                .customerCode(locked)
+                .customerPo(locked)
+                .customerStyle(locked)
+                .innerNo(locked)
+                .modeleLo(locked)
+                .orderComposition(locked)
+                .orderCount(locked)
+                .orderHodTime(locked)
+                .orderStatus(locked)
+                .outboundType(locked)
+                .packetType(locked)
+                .picUrl(locked)
+                .poColor(locked)
+                .productionComment(locked)
+                .productionDepartment(locked)
+                .productionDepartmentConsignTime(locked)
+                .productStyle(locked)
+                .projectNo(locked)
+                .build();
+    }
+
+    /**
+     * @param lockFieldEnum
+     * @return
+     */
+    public static OrderCompletionReportFieldVO initReportField(OrderLockFieldEnum lockFieldEnum) {
+        String locked = lockFieldEnum.getStatus();
+        return OrderCompletionReportFieldVO.builder()
+                .ideaManualRate(locked)
+                .ideaSource(locked)
+                .manualPreform(locked)
+                .orderStatus(locked)
+                .build();
+    }
+
+    /**
+     * @param lockFieldEnum
+     * @return
+     */
+    public static OrderProfitAnalysisFieldVO initProfitAnalysisField(OrderLockFieldEnum lockFieldEnum) {
+        String locked = lockFieldEnum.getStatus();
+        return OrderProfitAnalysisFieldVO.builder()
+                .customerPrice(locked)
+                .customerTotalPrice(locked)
+                .exchangeRate(locked)
+                .orderStatus(locked)
+                .packetPrice(locked)
+                .packetTotalPrice(locked)
+                .productionDepartmentPrice(locked)
+                .productionDepartmentTotalPrice(locked)
+                .profitRate(locked)
+                .build();
+    }
+
+    /**
+     * @param lockFieldEnum
+     * @return
+     */
+    public static OrderTrackStageFieldVO initTrackStageField(OrderLockFieldEnum lockFieldEnum) {
+        String locked = lockFieldEnum.getStatus();
+        return OrderTrackStageFieldVO.builder()
+                .aitexTestFinishResult(locked)
+                .aitexTestSendTime(locked)
+                .barcodeStickerArrivalTime(locked)
+                .esoSampleSendTime(locked)
+                .latestArrivalTime(locked)
+                .latestBkTime(locked)
+                .orderStatus(locked)
+                .ppConfirmResult(locked)
+                .ppTime(locked)
+                .selfTestPassTime(locked)
+                .sgsTestFinishResult(locked)
+                .sgsTestSendTime(locked)
+                .shippmentSampleConfirmResult(locked)
+                .shippmentSampleSendTime(locked)
+                .build();
+    }
+
+    /**
+     * @param lockFieldEnum
+     * @return
+     */
+    public static OrderInspectionStageFieldVO initInspectionStageField(OrderLockFieldEnum lockFieldEnum) {
+        String locked = lockFieldEnum.getStatus();
+        return OrderInspectionStageFieldVO.builder()
+                .boxPacket(locked)
+                .electroplate(locked)
+                .endCheckApplyTime(locked)
+                .endCheckResult(locked)
+                .functionality(locked)
+                .midCheckApplyTime(locked)
+                .midCheckComment(locked)
+                .midCheckResult(locked)
+                .orderStatus(locked)
+                .specification(locked)
+                .value1(locked)
+                .value2(locked)
+                .value3(locked)
+                .build();
+    }
+}
diff --git a/src/main/java/com/order/erp/config/DataScope.java b/src/main/java/com/order/erp/config/DataScope.java
index 80ceb3d..7b057c7 100644
--- a/src/main/java/com/order/erp/config/DataScope.java
+++ b/src/main/java/com/order/erp/config/DataScope.java
@@ -27,6 +27,14 @@ public class DataScope {
     }
 
     /**
+     *
+     * @return
+     */
+    public String getLoginUserName(){
+        return SecurityUtils.getUsername();
+    }
+
+    /**
      * @return
      */
     public UserVO getUser() {
diff --git a/src/main/java/com/order/erp/controller/AuditController.java b/src/main/java/com/order/erp/controller/AuditController.java
new file mode 100644
index 0000000..aab9d28
--- /dev/null
+++ b/src/main/java/com/order/erp/controller/AuditController.java
@@ -0,0 +1,55 @@
+package com.order.erp.controller;
+
+import com.order.erp.common.annotation.AnonymousAccess;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.vo.order.AuditVO;
+import com.order.erp.domain.vo.order.OrderFieldLockApplyQueryVO;
+import com.order.erp.service.order.OrderFieldLockApplyService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 订单基础信息表(OrderBaseInfo)表控制层
+ *
+ * @author makejava
+ * @since 2023-09-08 15:26:43
+ */
+@RestController
+@RequestMapping("/order/erp/audit")
+public class AuditController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private OrderFieldLockApplyService applyService;
+
+    /**
+     * 分页查询
+     *
+     * @param queryVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping("/list_by_page")
+    @AnonymousAccess
+    public ServerResult listByPage(@RequestBody @Validated OrderFieldLockApplyQueryVO queryVO) {
+        return applyService.listByPage(queryVO);
+    }
+
+    /**
+     * 审核
+     *
+     * @param auditVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping("/do_audit")
+    @AnonymousAccess
+    public ServerResult doAudit(@RequestBody @Validated AuditVO auditVO) {
+        return applyService.doAudit(auditVO);
+    }
+}
+
diff --git a/src/main/java/com/order/erp/controller/DeptController.java b/src/main/java/com/order/erp/controller/DeptController.java
index ba9badb..6a51ad4 100644
--- a/src/main/java/com/order/erp/controller/DeptController.java
+++ b/src/main/java/com/order/erp/controller/DeptController.java
@@ -54,6 +54,6 @@ public class DeptController {
     @DeleteMapping
     @PreAuthorize("@el.check('dept:del')")
     public ServerResult delete(@RequestBody @Validated AdminDeptQueryVO queryVO) {
-        return ServerResult.success(deptService.deleteById(queryVO));
+        return deptService.deleteById(queryVO);
     }
 }
\ No newline at end of file
diff --git a/src/main/java/com/order/erp/controller/DictionaryController.java b/src/main/java/com/order/erp/controller/DictionaryController.java
new file mode 100644
index 0000000..2257f87
--- /dev/null
+++ b/src/main/java/com/order/erp/controller/DictionaryController.java
@@ -0,0 +1,70 @@
+package com.order.erp.controller;
+
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.vo.admin.DictionaryQueryVO;
+import com.order.erp.domain.vo.admin.DictionaryVO;
+import com.order.erp.log.Log;
+import com.order.erp.service.admin.DictionaryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @author xms
+ */
+@RestController
+@Api(tags = "系统:字典管理")
+@RequestMapping("/order/erp/dictionary")
+public class DictionaryController {
+
+    @Resource
+    private DictionaryService dictionaryService;
+
+
+    @Log("查询字典列表")
+    @ApiOperation("查询字典列表")
+    @PostMapping(value = "/list_by_page")
+    @PreAuthorize("@el.check('user:list','dept:list')")
+    public ServerResult listByPage(@RequestBody @Validated DictionaryQueryVO queryVO) {
+        return dictionaryService.listByPage(queryVO);
+    }
+
+    @Log("获取所有字典")
+    @ApiOperation("获取所有字典")
+    @PostMapping(value = "/get_all")
+    @PreAuthorize("@el.check('user:list','dept:list')")
+    public ServerResult getAll(@RequestBody @Validated DictionaryQueryVO queryVO) {
+        return dictionaryService.getAll(queryVO);
+    }
+
+    @Log("新增字典")
+    @ApiOperation("新增字典")
+    @PostMapping("/add")
+    @PreAuthorize("@el.check('dept:add')")
+    public ServerResult add(@RequestBody @Validated DictionaryVO dictionaryVO) {
+        return dictionaryService.add(dictionaryVO);
+    }
+
+    @Log("修改字典")
+    @ApiOperation("修改字典")
+    @PostMapping("/edit")
+    @PreAuthorize("@el.check('dept:edit')")
+    public ServerResult edit(@RequestBody @Validated DictionaryVO dictionaryVO) {
+        return dictionaryService.edit(dictionaryVO);
+    }
+
+    @Log("删除字典")
+    @ApiOperation("删除字典")
+    @PostMapping("/delete")
+    @PreAuthorize("@el.check('dept:del')")
+    public ServerResult delete(@RequestBody @Validated DictionaryQueryVO queryVO) {
+        return dictionaryService.deleteById(queryVO);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/order/erp/controller/OrderController.java b/src/main/java/com/order/erp/controller/OrderController.java
index eaabee2..f918317 100644
--- a/src/main/java/com/order/erp/controller/OrderController.java
+++ b/src/main/java/com/order/erp/controller/OrderController.java
@@ -2,9 +2,7 @@ package com.order.erp.controller;
 
 import com.order.erp.common.annotation.AnonymousAccess;
 import com.order.erp.common.constant.ServerResult;
-import com.order.erp.domain.vo.order.OrderAddVO;
-import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
-import com.order.erp.domain.vo.order.OrderBaseInfoVO;
+import com.order.erp.domain.vo.order.*;
 import com.order.erp.service.order.OrderBaseInfoService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -65,6 +63,19 @@ public class OrderController {
     }
 
     /**
+     * 字段解锁申请
+     *
+     * @param fieldVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping("/field_unlock_apply")
+    @AnonymousAccess
+    public ServerResult fieldUnlockApply(@RequestBody @Validated OrderUnlockFieldApplyVO fieldVO) {
+        return orderBaseInfoService.fieldUnlockApply(fieldVO);
+    }
+
+
+    /**
      * 编辑数据
      *
      * @param orderBaseInfoVO 数据VO
diff --git a/src/main/java/com/order/erp/domain/ApplyStatusEnum.java b/src/main/java/com/order/erp/domain/ApplyStatusEnum.java
new file mode 100644
index 0000000..5a6b6ce
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/ApplyStatusEnum.java
@@ -0,0 +1,25 @@
+package com.order.erp.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/9/13 18:05
+ * @version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum ApplyStatusEnum {
+
+    WAIT_AUDIT(0, "待审批"),
+
+    AUDIT_PASS(10, "已通过"),
+
+    AUDIT_REFUSE(20, "已驳回"),
+    ;
+    private Integer status;
+
+    private String desc;
+}
diff --git a/src/main/java/com/order/erp/domain/ApplyTypeEnum.java b/src/main/java/com/order/erp/domain/ApplyTypeEnum.java
new file mode 100644
index 0000000..aa0aee2
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/ApplyTypeEnum.java
@@ -0,0 +1,25 @@
+package com.order.erp.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/9/13 18:05
+ * @version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum ApplyTypeEnum {
+
+    FIELD_EDIT_APPLY(0, "字段编辑申请"),
+
+    ORDER_PROFIT_APPLY(10, "利润分析申请"),
+
+    ORDER_REPORT_APPLY(20, "项目报告书申请"),
+    ;
+    private Integer type;
+
+    private String desc;
+}
diff --git a/src/main/java/com/order/erp/domain/DictionaryEnum.java b/src/main/java/com/order/erp/domain/DictionaryEnum.java
new file mode 100644
index 0000000..3efd8ae
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/DictionaryEnum.java
@@ -0,0 +1,21 @@
+package com.order.erp.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/9/13 18:05
+ * @version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum DictionaryEnum {
+
+    EXCHANGE_RATE("exchange_rate", "汇率"),
+    ;
+    private String code;
+
+    private String name;
+}
diff --git a/src/main/java/com/order/erp/domain/OrderLockFieldEnum.java b/src/main/java/com/order/erp/domain/OrderLockFieldEnum.java
new file mode 100644
index 0000000..f3c87ba
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/OrderLockFieldEnum.java
@@ -0,0 +1,23 @@
+package com.order.erp.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/9/13 18:05
+ * @version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum OrderLockFieldEnum {
+
+    LOCKED("LOCKED", "锁定"),
+
+    UN_LOCKED("UN_LOCKED", "解锁"),
+    ;
+    private String status;
+
+    private String desc;
+}
diff --git a/src/main/java/com/order/erp/domain/OrderStatusEnum.java b/src/main/java/com/order/erp/domain/OrderStatusEnum.java
new file mode 100644
index 0000000..ab5bd65
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/OrderStatusEnum.java
@@ -0,0 +1,43 @@
+package com.order.erp.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: xms
+ * @description: TODO
+ * @date: 2023/9/13 18:05
+ * @version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum OrderStatusEnum {
+
+    CREATE_FINISH(0, "订单创建完成"),
+
+    PROFIT_WAIT_AUDIT(10, "利润分析表待审核"),
+
+    PROFIT_AUDIT_PASS(11, "利润分析表审核通过"),
+
+    PROFIT_AUDIT_REFUSE(12, "利润分析表审核驳回"),
+
+    REPORT_WAIT_AUDIT(20, "项目报告书待审核"),
+
+    REPORT_AUDIT_PASS(21, "项目报告书审核通过"),
+
+    REPORT_AUDIT_REFUSE(22, "项目报告书审核驳回"),
+
+    TRACK_ING(30, "跟单中"),
+
+    TRACK_PASS(31, "跟单完成"),
+
+    INSPECT_ING(40, "质检中"),
+
+    INSPECT_PASS(41, "质检完成"),
+
+    ORDER_FINISH(50, "订单完成"),
+    ;
+    private Integer status;
+
+    private String desc;
+}
diff --git a/src/main/java/com/order/erp/domain/dto/order/OrderBaseInfoDO.java b/src/main/java/com/order/erp/domain/dto/order/OrderBaseInfoDO.java
index 8881ec3..83c25f3 100644
--- a/src/main/java/com/order/erp/domain/dto/order/OrderBaseInfoDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/OrderBaseInfoDO.java
@@ -101,4 +101,9 @@ public class OrderBaseInfoDO extends BaseDO implements Serializable {
      */
     private String packetType;
 
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
+
 }
diff --git a/src/main/java/com/order/erp/domain/dto/order/OrderCompletionReportDO.java b/src/main/java/com/order/erp/domain/dto/order/OrderCompletionReportDO.java
index ee3ef61..e7a48c7 100644
--- a/src/main/java/com/order/erp/domain/dto/order/OrderCompletionReportDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/OrderCompletionReportDO.java
@@ -41,4 +41,10 @@ public class OrderCompletionReportDO extends BaseDO implements Serializable {
      */
     private Double ideaManualRate;
 
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
+
+
 }
diff --git a/src/main/java/com/order/erp/domain/dto/order/OrderFieldLockApplyDO.java b/src/main/java/com/order/erp/domain/dto/order/OrderFieldLockApplyDO.java
index 1a72f96..ce67fd7 100644
--- a/src/main/java/com/order/erp/domain/dto/order/OrderFieldLockApplyDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/OrderFieldLockApplyDO.java
@@ -21,7 +21,6 @@ import java.io.Serializable;
 @EqualsAndHashCode(callSuper = false)
 @SuperBuilder
 public class OrderFieldLockApplyDO extends BaseDO implements Serializable {
-    private static final long serialVersionUID = 646989609392883241L;
 
     private Long id;
     /**
@@ -45,4 +44,14 @@ public class OrderFieldLockApplyDO extends BaseDO implements Serializable {
      */
     private Integer status;
 
+    /**
+     * 申请类型:枚举类ApplyTypeEnum
+     */
+    private Integer type;
+
+    /**
+     * 申请类型描述
+     */
+    private String remark;
+
 }
diff --git a/src/main/java/com/order/erp/domain/dto/order/OrderInspectionStageDO.java b/src/main/java/com/order/erp/domain/dto/order/OrderInspectionStageDO.java
index fcc67c1..ca9ef04 100644
--- a/src/main/java/com/order/erp/domain/dto/order/OrderInspectionStageDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/OrderInspectionStageDO.java
@@ -77,4 +77,10 @@ public class OrderInspectionStageDO extends BaseDO implements Serializable {
      */
     private String endCheckResult;
 
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
+
+
 }
diff --git a/src/main/java/com/order/erp/domain/dto/order/OrderProfitAnalysisDO.java b/src/main/java/com/order/erp/domain/dto/order/OrderProfitAnalysisDO.java
index f9c7355..eb89ff6 100644
--- a/src/main/java/com/order/erp/domain/dto/order/OrderProfitAnalysisDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/OrderProfitAnalysisDO.java
@@ -61,4 +61,10 @@ public class OrderProfitAnalysisDO extends BaseDO implements Serializable {
      */
     private Double profitRate;
 
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
+
+
 }
diff --git a/src/main/java/com/order/erp/domain/dto/order/OrderTrackStageDO.java b/src/main/java/com/order/erp/domain/dto/order/OrderTrackStageDO.java
index 2bf892e..adb5d51 100644
--- a/src/main/java/com/order/erp/domain/dto/order/OrderTrackStageDO.java
+++ b/src/main/java/com/order/erp/domain/dto/order/OrderTrackStageDO.java
@@ -47,7 +47,7 @@ public class OrderTrackStageDO extends BaseDO implements Serializable {
     /**
      * shipment sample确认意见
      */
-    private String shippmentSampleConfirmTime;
+    private String shippmentSampleConfirmResult;
     /**
      * 自测通过时间
      */
@@ -57,17 +57,17 @@ public class OrderTrackStageDO extends BaseDO implements Serializable {
      */
     private String aitexTestSendTime;
     /**
-     * Aitex测试结果时间
+     * Aitex测试结果
      */
-    private String aitexTestFinishTime;
+    private String aitexTestFinishResult;
     /**
      * SGS测试发送时间
      */
     private String sgsTestSendTime;
     /**
-     * SGS测试结果时间
+     * SGS测试结果
      */
-    private String sgsTestFinishTime;
+    private String sgsTestFinishResult;
     /**
      * Barcode sticker arrival time
      */
@@ -81,4 +81,10 @@ public class OrderTrackStageDO extends BaseDO implements Serializable {
      */
     private String latestBkTime;
 
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
+
+
 }
diff --git a/src/main/java/com/order/erp/domain/vo/admin/DictionaryResultVO.java b/src/main/java/com/order/erp/domain/vo/admin/DictionaryResultVO.java
new file mode 100644
index 0000000..c389d91
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/admin/DictionaryResultVO.java
@@ -0,0 +1,43 @@
+package com.order.erp.domain.vo.admin;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * @author makejava
+ * @since 2023-08-30 17:51:48
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class DictionaryResultVO implements Serializable {
+
+    private Long id;
+    /**
+     * 字典编码
+     */
+    private String dictCode;
+    /**
+     * 名称
+     */
+    private String dictName;
+    /**
+     * 值
+     */
+    private String dictValue;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 排序字段
+     */
+    private Integer sort;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/AuditVO.java b/src/main/java/com/order/erp/domain/vo/order/AuditVO.java
new file mode 100644
index 0000000..4eddf12
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/AuditVO.java
@@ -0,0 +1,34 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.vo.BasePageVO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author makejava
+ * @since 2023-09-08 15:26:44
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class AuditVO extends BasePageVO implements Serializable {
+
+    /**
+     * 申请id
+     */
+    @NotNull(message = "申请id不能为空")
+    private Long id;
+
+    /**
+     * 状态:1 通过,2 拒绝
+     */
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+}
+
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderApplyResultVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderApplyResultVO.java
new file mode 100644
index 0000000..325e94b
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderApplyResultVO.java
@@ -0,0 +1,84 @@
+package com.order.erp.domain.vo.order;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+import org.apache.ibatis.type.LocalDateTimeTypeHandler;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 订单基础信息表(OrderBaseInfo)实体类
+ *
+ * @author makejava
+ * @since 2023-09-08 15:26:43
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderApplyResultVO implements Serializable {
+
+    private Long id;
+
+    /**
+     * 订单id
+     */
+    private Long orderId;
+    /**
+     * 申请用户id
+     */
+    private Long applyUserId;
+    /**
+     * 审批用户id
+     */
+    private Long auditUserId;
+    /**
+     * 锁定字段 json字符串
+     */
+    private OrderLockFieldVO fieldInfos;
+    /**
+     * 状态:0 待审批,1 通过,2 拒绝
+     */
+    private Integer status;
+
+    /**
+     * 申请类型:枚举类ApplyTypeEnum
+     */
+    private Integer type;
+
+    /**
+     * 申请类型描述
+     */
+    private String desc;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime modifyTime;
+
+    /**
+     * 修改人
+     */
+    private String modifyBy;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderBaseFieldVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderBaseFieldVO.java
new file mode 100644
index 0000000..c2b5e77
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderBaseFieldVO.java
@@ -0,0 +1,104 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.OrderLockFieldEnum;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author makejava
+ * @since 2023-09-08 15:26:43
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderBaseFieldVO implements Serializable {
+
+    /**
+     * 客户编码
+     */
+    private String customerCode = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 项目号
+     */
+    private String projectNo = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 生产科
+     */
+    private String productionDepartment = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 内部编号
+     */
+    private String innerNo = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 客户po号
+     */
+    private String customerPo = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 客户STYLE#
+     */
+    private String customerStyle = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * Modelo(REFERENCE)
+     */
+    private String modeleLo = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * COLLECTION (style description)
+     */
+    private String collection = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * PO COLOR
+     */
+    private String poColor = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 颜色中文
+     */
+    private String cnColor = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * pic图片地址
+     */
+    private String picUrl = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 生产要求
+     */
+    private String productionComment = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 数量
+     */
+    private String orderCount = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 订单成分
+     */
+    private String orderComposition = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 款式类型
+     */
+    private String productStyle = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 生成科拖货时间
+     */
+    private String productionDepartmentConsignTime = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 订单上HOD时间
+     */
+    private String orderHodTime = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 出库类型
+     */
+    private String outboundType = OrderLockFieldEnum.LOCKED.getStatus();
+    /**
+     * 包装类型
+     */
+    private String packetType = OrderLockFieldEnum.LOCKED.getStatus();
+
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private String orderStatus = OrderLockFieldEnum.LOCKED.getStatus();
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoVO.java
index e8e1758..34fd157 100644
--- a/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoVO.java
@@ -98,5 +98,9 @@ public class OrderBaseInfoVO implements Serializable {
      */
     private String packetType;
 
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
 
 }
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderCompletionReportFieldVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderCompletionReportFieldVO.java
new file mode 100644
index 0000000..93f280d
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderCompletionReportFieldVO.java
@@ -0,0 +1,38 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author makejava
+ * @since 2023-09-08 15:26:44
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderCompletionReportFieldVO implements Serializable {
+
+    /**
+     * 想法来源
+     */
+    private String ideaSource;
+    /**
+     * 手工初型
+     */
+    private String manualPreform;
+    /**
+     * 想法和手工比例分配
+     */
+    private String ideaManualRate;
+
+    /**
+     * 订单状态
+     */
+    private String orderStatus;
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderCompletionReportVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderCompletionReportVO.java
index 950391d..212cc57 100644
--- a/src/main/java/com/order/erp/domain/vo/order/OrderCompletionReportVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderCompletionReportVO.java
@@ -38,5 +38,8 @@ public class OrderCompletionReportVO implements Serializable {
      */
     private Double ideaManualRate;
 
-
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
 }
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderInfoResultVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderInfoResultVO.java
index 4771f8a..d9439e5 100644
--- a/src/main/java/com/order/erp/domain/vo/order/OrderInfoResultVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderInfoResultVO.java
@@ -39,4 +39,9 @@ public class OrderInfoResultVO extends OrderBaseInfoVO implements Serializable {
      */
     private OrderInspectionStageVO inspectionStageInfo;
 
+    /**
+     * 字段锁定集合
+     */
+    private OrderLockFieldVO lockFields;
+
 }
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderInspectionStageFieldVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderInspectionStageFieldVO.java
new file mode 100644
index 0000000..b8f147d
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderInspectionStageFieldVO.java
@@ -0,0 +1,73 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author makejava
+ * @since 2023-09-08 15:26:45
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderInspectionStageFieldVO implements Serializable {
+    /**
+     * 中期验货申请时间
+     */
+    private String midCheckApplyTime;
+    /**
+     * 中期验货(功能性-拉力/跌落等、外观性-颜色/规格等、耐久性-烤厅等)
+     */
+    private String midCheckComment;
+    /**
+     * 中期验货结果PASS / FAIL
+     */
+    private String midCheckResult;
+    /**
+     * 尾期验货申请时间
+     */
+    private String endCheckApplyTime;
+    /**
+     * 长度/规格
+     */
+    private String specification;
+    /**
+     * 功能性不良
+     */
+    private String functionality;
+    /**
+     * 电镀不良
+     */
+    private String electroplate;
+    /**
+     * 不良1
+     */
+    private String value1;
+    /**
+     * 不良2
+     */
+    private String value2;
+    /**
+     * 其他不良3
+     */
+    private String value3;
+    /**
+     * 包装:卡片、条码、箱贴,箱单
+     */
+    private String boxPacket;
+    /**
+     * 尾期验货结果PASS / FAIL
+     */
+    private String endCheckResult;
+
+    /**
+     * 订单状态
+     */
+    private String orderStatus;
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderInspectionStageVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderInspectionStageVO.java
index 5005c41..a7961eb 100644
--- a/src/main/java/com/order/erp/domain/vo/order/OrderInspectionStageVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderInspectionStageVO.java
@@ -74,5 +74,8 @@ public class OrderInspectionStageVO implements Serializable {
      */
     private String endCheckResult;
 
-
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
 }
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderLockFieldVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderLockFieldVO.java
new file mode 100644
index 0000000..2e07435
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderLockFieldVO.java
@@ -0,0 +1,45 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * @author makejava
+ * @since 2023-09-08 15:26:43
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderLockFieldVO implements Serializable {
+
+    /**
+     * 基础信息字段
+     */
+    private OrderBaseFieldVO baseFields;
+
+    /**
+     * 利润分析字段
+     */
+    private OrderProfitAnalysisFieldVO profitAnalysisFields;
+
+    /**
+     * 项目报告书字段
+     */
+    private OrderCompletionReportFieldVO reportFields;
+
+    /**
+     * 跟单字段
+     */
+    private OrderTrackStageFieldVO trackStageFields;
+
+    /**
+     * 质检字段
+     */
+    private OrderInspectionStageFieldVO inspectionStageFields;
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisFieldVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisFieldVO.java
new file mode 100644
index 0000000..bf86d91
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisFieldVO.java
@@ -0,0 +1,59 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author makejava
+ * @since 2023-09-08 15:26:47
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderProfitAnalysisFieldVO implements Serializable {
+    /**
+     * 客户单价$
+     */
+    private String customerPrice;
+    /**
+     * 客户总价$
+     */
+    private String customerTotalPrice;
+    /**
+     * 生成科单价¥
+     */
+    private String productionDepartmentPrice;
+    /**
+     * 生成科总价¥
+     */
+    private String productionDepartmentTotalPrice;
+    /**
+     * 包装费用¥
+     */
+    private String packetPrice;
+    /**
+     * 包装费用合计¥
+     */
+    private String packetTotalPrice;
+    /**
+     * 汇率
+     */
+    private String exchangeRate;
+    /**
+     * 利润率
+     */
+    private String profitRate;
+
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private String orderStatus;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisVO.java
index fa3057a..51f5565 100644
--- a/src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderProfitAnalysisVO.java
@@ -58,5 +58,10 @@ public class OrderProfitAnalysisVO implements Serializable {
      */
     private Double profitRate;
 
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
+
 
 }
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderTrackStageFieldVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderTrackStageFieldVO.java
new file mode 100644
index 0000000..7339c54
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderTrackStageFieldVO.java
@@ -0,0 +1,77 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * @author makejava
+ * @since 2023-09-08 15:26:48
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderTrackStageFieldVO implements Serializable {
+
+    /**
+     * pp date
+     */
+    private String ppTime;
+    /**
+     * pp样品确认意见
+     */
+    private String ppConfirmResult;
+    /**
+     * EXTRA,SHOWROOM,ONLINE sample发送时间
+     */
+    private String esoSampleSendTime;
+    /**
+     * shippment sample 发送时间
+     */
+    private String shippmentSampleSendTime;
+    /**
+     * shipment sample确认意见
+     */
+    private String shippmentSampleConfirmResult;
+    /**
+     * 自测通过时间
+     */
+    private String selfTestPassTime;
+    /**
+     * Aitex测试发送时间
+     */
+    private String aitexTestSendTime;
+    /**
+     * Aitex测试结果
+     */
+    private String aitexTestFinishResult;
+    /**
+     * SGS测试发送时间
+     */
+    private String sgsTestSendTime;
+    /**
+     * SGS测试结果
+     */
+    private String sgsTestFinishResult;
+    /**
+     * Barcode sticker arrival time
+     */
+    private String barcodeStickerArrivalTime;
+    /**
+     * 最晚包材到货时间
+     */
+    private String latestArrivalTime;
+    /**
+     * 最晚订舱+报关资料时间
+     */
+    private String latestBkTime;
+
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private String orderStatus;
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderTrackStageVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderTrackStageVO.java
index f15dd22..537bdda 100644
--- a/src/main/java/com/order/erp/domain/vo/order/OrderTrackStageVO.java
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderTrackStageVO.java
@@ -78,5 +78,8 @@ public class OrderTrackStageVO implements Serializable {
      */
     private String latestBkTime;
 
-
+    /**
+     * 订单状态:枚举类 OrderStatusEnum
+     */
+    private Integer orderStatus;
 }
diff --git a/src/main/java/com/order/erp/domain/vo/order/OrderUnlockFieldApplyVO.java b/src/main/java/com/order/erp/domain/vo/order/OrderUnlockFieldApplyVO.java
new file mode 100644
index 0000000..66df5f0
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/OrderUnlockFieldApplyVO.java
@@ -0,0 +1,49 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author makejava
+ * @since 2023-09-08 15:26:43
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class OrderUnlockFieldApplyVO implements Serializable {
+
+    @NotNull(message = "订单id不能为空!")
+    private Long orderId;
+
+    /**
+     * 基础信息字段
+     */
+    private OrderBaseFieldVO baseFields;
+
+    /**
+     * 利润分析字段
+     */
+    private OrderProfitAnalysisFieldVO profitAnalysisFields;
+
+    /**
+     * 项目报告书字段
+     */
+    private OrderCompletionReportFieldVO reportFields;
+
+    /**
+     * 跟单字段
+     */
+    private OrderTrackStageFieldVO trackStageFields;
+
+    /**
+     * 质检字段
+     */
+    private OrderInspectionStageFieldVO inspectionStageFields;
+
+}
diff --git a/src/main/java/com/order/erp/service/admin/DictionaryService.java b/src/main/java/com/order/erp/service/admin/DictionaryService.java
index c56a0fb..99b38f6 100644
--- a/src/main/java/com/order/erp/service/admin/DictionaryService.java
+++ b/src/main/java/com/order/erp/service/admin/DictionaryService.java
@@ -31,6 +31,20 @@ public interface DictionaryService extends IService<DictionaryDO> {
     ServerResult list(DictionaryQueryVO dictionaryQueryVO);
 
     /**
+     *
+     * @param dictionaryQueryVO
+     * @return
+     */
+    ServerResult listByPage(DictionaryQueryVO dictionaryQueryVO);
+
+    /**
+     *
+     * @param dictionaryQueryVO
+     * @return
+     */
+    ServerResult getAll(DictionaryQueryVO dictionaryQueryVO);
+
+    /**
      * 新增数据
      *
      * @param dictionaryVO 数据VO
diff --git a/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java b/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
index 25d0b07..0406cb4 100644
--- a/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
+++ b/src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
@@ -2,20 +2,29 @@ package com.order.erp.service.admin.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.dto.BaseDO;
 import com.order.erp.domain.dto.admin.DictionaryDO;
 import com.order.erp.domain.vo.admin.DictionaryQueryVO;
+import com.order.erp.domain.vo.admin.DictionaryResultVO;
 import com.order.erp.domain.vo.admin.DictionaryVO;
 import com.order.erp.mapper.admin.DictionaryMapper;
 import com.order.erp.service.admin.DictionaryService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 字典表(Dictionary)表服务实现类
@@ -59,6 +68,51 @@ public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, Diction
         return ServerResult.success();
     }
 
+    @Override
+    public ServerResult listByPage(DictionaryQueryVO queryVO) {
+
+        LambdaQueryWrapper<DictionaryDO> queryWrapper = buildQueryByParam(queryVO);
+        Page page = new Page<>(queryVO.getPageNo(), queryVO.getPageSize());
+        IPage<DictionaryDO> iPage = page(page, queryWrapper);
+
+        Page<DictionaryResultVO> webVOPage = new Page<>();
+        List<DictionaryDO> dictionaryDOList = iPage.getRecords();
+        if (CollectionUtils.isNotEmpty(dictionaryDOList)) {
+            List<DictionaryResultVO> queryVos = dictionaryDOList.stream().map(x -> {
+                DictionaryResultVO resultVO = new DictionaryResultVO();
+                BeanUtils.copyProperties(x, resultVO);
+                return resultVO;
+            }).collect(Collectors.toList());
+            webVOPage.setRecords(queryVos);
+        }
+        BeanUtils.copyProperties(page, webVOPage, "records");
+        return ServerResult.success(webVOPage);
+    }
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    private LambdaQueryWrapper<DictionaryDO> buildQueryByParam(DictionaryQueryVO queryVO) {
+        return new LambdaQueryWrapper<DictionaryDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .like(StringUtils.isNotBlank(queryVO.getDictName()), DictionaryDO::getDictName, queryVO.getDictName())
+                .eq(StringUtils.isNotBlank(queryVO.getDictCode()), DictionaryDO::getDictCode, queryVO.getDictCode());
+    }
+
+    @Override
+    public ServerResult getAll(DictionaryQueryVO dictionaryQueryVO) {
+        List<DictionaryDO> dictionaryDOList = list(buildQueryByParam(dictionaryQueryVO));
+        if (CollectionUtils.isEmpty(dictionaryDOList)) {
+            return ServerResult.success();
+        }
+        return ServerResult.success(dictionaryDOList.stream().map(x -> {
+            DictionaryResultVO resultVO = new DictionaryResultVO();
+            BeanUtils.copyProperties(x, resultVO);
+            return resultVO;
+        }).collect(Collectors.toList()));
+    }
+
     /**
      * 新增数据
      *
diff --git a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
index 7e75b88..de6c124 100644
--- a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
+++ b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
@@ -3,9 +3,7 @@ package com.order.erp.service.order;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.domain.dto.order.OrderBaseInfoDO;
-import com.order.erp.domain.vo.order.OrderAddVO;
-import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
-import com.order.erp.domain.vo.order.OrderBaseInfoVO;
+import com.order.erp.domain.vo.order.*;
 
 /**
  * 订单基础信息表(OrderBaseInfo)表服务接口
@@ -40,6 +38,13 @@ public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> {
     ServerResult listByPage(OrderBaseInfoQueryVO orderBaseInfoQueryVO);
 
     /**
+     *
+     * @param fieldVO
+     * @return
+     */
+    ServerResult fieldUnlockApply(OrderUnlockFieldApplyVO fieldVO);
+
+    /**
      * 新增数据
      *
      * @param orderAddVO 数据VO
diff --git a/src/main/java/com/order/erp/service/order/OrderFieldLockApplyService.java b/src/main/java/com/order/erp/service/order/OrderFieldLockApplyService.java
index 40455a4..9c0812d 100644
--- a/src/main/java/com/order/erp/service/order/OrderFieldLockApplyService.java
+++ b/src/main/java/com/order/erp/service/order/OrderFieldLockApplyService.java
@@ -3,6 +3,7 @@ package com.order.erp.service.order;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.domain.dto.order.OrderFieldLockApplyDO;
+import com.order.erp.domain.vo.order.AuditVO;
 import com.order.erp.domain.vo.order.OrderFieldLockApplyQueryVO;
 import com.order.erp.domain.vo.order.OrderFieldLockApplyVO;
 
@@ -31,6 +32,12 @@ public interface OrderFieldLockApplyService extends IService<OrderFieldLockApply
     ServerResult list(OrderFieldLockApplyQueryVO orderFieldLockApplyQueryVO);
 
     /**
+     * @param orderFieldLockApplyQueryVO
+     * @return
+     */
+    ServerResult listByPage(OrderFieldLockApplyQueryVO orderFieldLockApplyQueryVO);
+
+    /**
      * 新增数据
      *
      * @param orderFieldLockApplyVO 数据VO
@@ -39,6 +46,12 @@ public interface OrderFieldLockApplyService extends IService<OrderFieldLockApply
     ServerResult add(OrderFieldLockApplyVO orderFieldLockApplyVO);
 
     /**
+     * @param auditVO
+     * @return
+     */
+    ServerResult doAudit(AuditVO auditVO);
+
+    /**
      * 修改数据
      *
      * @param orderFieldLockApplyVO 数据VO
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
index 8353fd5..9bf7fa8 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
@@ -2,6 +2,7 @@ package com.order.erp.service.order.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -13,6 +14,12 @@ import com.canrd.shop.common.constant.ServerResultCode;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.common.exception.BusinessException;
+import com.order.erp.common.utils.OrderFieldUtils;
+import com.order.erp.config.DataScope;
+import com.order.erp.domain.ApplyStatusEnum;
+import com.order.erp.domain.ApplyTypeEnum;
+import com.order.erp.domain.OrderLockFieldEnum;
+import com.order.erp.domain.OrderStatusEnum;
 import com.order.erp.domain.dto.BaseDO;
 import com.order.erp.domain.dto.order.*;
 import com.order.erp.domain.vo.order.*;
@@ -53,6 +60,15 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
     @Resource
     private OrderInspectionStageService inspectionStageService;
 
+    @Resource
+    private OrderFieldLockRecordService fieldLockRecordService;
+
+    @Resource
+    private OrderFieldLockApplyService orderFieldLockApplyService;
+
+    @Resource
+    private DataScope dataScope;
+
     /**
      * 通过ID查询单条数据
      * <p>
@@ -111,12 +127,61 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             // 填充质检信息
             fillInspectionStageInfo(resultVOList);
 
+            // 填充字段锁定信息
+            fillLockFields(resultVOList);
+
             webVOPage.setRecords(resultVOList);
         }
         BeanUtils.copyProperties(page, webVOPage, "records");
         return ServerResult.success(webVOPage);
     }
 
+    @Override
+    public ServerResult fieldUnlockApply(OrderUnlockFieldApplyVO fieldVO) {
+        Long userId = dataScope.getLoginUserId();
+        checkApply(fieldVO, userId);
+
+        OrderFieldLockApplyDO applyDO = initOrderFieldLockApplyDO(fieldVO, userId);
+
+        orderFieldLockApplyService.save(applyDO);
+        return ServerResult.success();
+    }
+
+    /**
+     * @param fieldVO
+     * @param userId
+     */
+    private void checkApply(OrderUnlockFieldApplyVO fieldVO, Long userId) {
+        List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(OrderFieldLockApplyDO::getOrderId, fieldVO.getOrderId())
+                .eq(OrderFieldLockApplyDO::getApplyUserId, userId)
+                .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.FIELD_EDIT_APPLY.getType())
+                .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
+        if (CollectionUtils.isNotEmpty(applyDOS)) {
+            throw new BusinessException(ServerResultCode.APPLY_UNLOCK_FIELD_EXIST);
+        }
+    }
+
+    /**
+     * @param fieldVO
+     * @param userId
+     * @return
+     */
+    private OrderFieldLockApplyDO initOrderFieldLockApplyDO(OrderUnlockFieldApplyVO fieldVO, Long userId) {
+        OrderLockFieldVO lockFieldVO = new OrderLockFieldVO();
+        BeanUtils.copyProperties(fieldVO, lockFieldVO);
+        return OrderFieldLockApplyDO.builder()
+                .applyUserId(userId)
+                .auditUserId(null)
+                .fields(JSONObject.toJSONString(lockFieldVO))
+                .orderId(fieldVO.getOrderId())
+                .type(ApplyTypeEnum.FIELD_EDIT_APPLY.getType())
+                .remark(ApplyTypeEnum.FIELD_EDIT_APPLY.getDesc())
+                .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
+                .build();
+    }
+
     /**
      * @param orderInfoResultVOList
      */
@@ -129,18 +194,19 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
         List<OrderProfitAnalysisDO> orderProfitAnalysisDOS = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
                 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
                 .in(OrderProfitAnalysisDO::getOrderId, orderIds));
-        if (CollectionUtils.isEmpty(orderProfitAnalysisDOS)) {
-            return;
+
+        if (CollectionUtils.isNotEmpty(orderProfitAnalysisDOS)) {
+            Map<Long, OrderProfitAnalysisDO> profitAnalysisDOMap = orderProfitAnalysisDOS.stream().collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, Function.identity()));
+            orderInfoResultVOList.forEach(result -> {
+                if (profitAnalysisDOMap.containsKey(result.getId())) {
+                    OrderProfitAnalysisDO profitAnalysisDO = profitAnalysisDOMap.get(result.getId());
+                    OrderProfitAnalysisVO profitAnalysisVO = new OrderProfitAnalysisVO();
+                    BeanUtils.copyProperties(profitAnalysisDO, profitAnalysisVO);
+                    result.setProfitAnalysisInfo(profitAnalysisVO);
+                }
+            });
         }
-        Map<Long, OrderProfitAnalysisDO> profitAnalysisDOMap = orderProfitAnalysisDOS.stream().collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, Function.identity()));
-        orderInfoResultVOList.forEach(result -> {
-            if (profitAnalysisDOMap.containsKey(result.getId())) {
-                OrderProfitAnalysisDO profitAnalysisDO = profitAnalysisDOMap.get(result.getId());
-                OrderProfitAnalysisVO profitAnalysisVO = new OrderProfitAnalysisVO();
-                BeanUtils.copyProperties(profitAnalysisDO, profitAnalysisVO);
-                result.setProfitAnalysisInfo(profitAnalysisVO);
-            }
-        });
+
     }
 
     /**
@@ -198,6 +264,45 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
     /**
      * @param orderInfoResultVOList
      */
+    private void fillLockFields(List<OrderInfoResultVO> orderInfoResultVOList) {
+        if (CollectionUtils.isEmpty(orderInfoResultVOList)) {
+            return;
+        }
+
+        Set<Long> orderIds = orderInfoResultVOList.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet());
+
+        List<OrderFieldLockRecordDO> fieldLockRecordDOList = fieldLockRecordService.list(new LambdaQueryWrapper<OrderFieldLockRecordDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(OrderFieldLockRecordDO::getUserId, dataScope.getLoginUserId())
+                .in(OrderFieldLockRecordDO::getOrderId, orderIds));
+
+        if (CollectionUtils.isNotEmpty(fieldLockRecordDOList)) {
+            Map<Long, OrderFieldLockRecordDO> recordDOMap = fieldLockRecordDOList.stream().collect(Collectors.toMap(OrderFieldLockRecordDO::getOrderId, Function.identity()));
+            orderInfoResultVOList.forEach(x -> {
+                OrderFieldLockRecordDO recordDO = recordDOMap.get(x.getId());
+                if (Objects.nonNull(recordDO)) {
+                    String fields = recordDO.getFields();
+                    if (StringUtils.isNotBlank(fields)) {
+                        OrderLockFieldVO fieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class);
+                        x.setLockFields(fieldVO);
+                    } else {
+                        x.setLockFields(OrderFieldUtils.initField(OrderLockFieldEnum.LOCKED));
+                    }
+                } else {
+                    x.setLockFields(OrderFieldUtils.initField(OrderLockFieldEnum.LOCKED));
+                }
+            });
+        } else {
+            orderInfoResultVOList.forEach(x -> {
+                x.setLockFields(OrderFieldUtils.initField(OrderLockFieldEnum.LOCKED));
+            });
+        }
+
+    }
+
+    /**
+     * @param orderInfoResultVOList
+     */
     private void fillInspectionStageInfo(List<OrderInfoResultVO> orderInfoResultVOList) {
         if (CollectionUtils.isEmpty(orderInfoResultVOList)) {
             return;
@@ -258,6 +363,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
         }
         OrderBaseInfoDO baseInfoDO = new OrderBaseInfoDO();
         BeanUtils.copyProperties(baseInfoVO, baseInfoDO);
+        baseInfoDO.setOrderStatus(OrderStatusEnum.CREATE_FINISH.getStatus());
         save(baseInfoDO);
 
         OrderProfitAnalysisVO profitAnalysisVO = orderAddVO.getProfitAnalysisInfo();
@@ -265,6 +371,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             OrderProfitAnalysisDO profitAnalysisDO = new OrderProfitAnalysisDO();
             BeanUtils.copyProperties(profitAnalysisVO, profitAnalysisDO);
             profitAnalysisDO.setOrderId(baseInfoDO.getId());
+            profitAnalysisDO.setOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus());
             profitAnalysisService.save(profitAnalysisDO);
         }
 
@@ -273,6 +380,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             OrderCompletionReportDO reportDO = new OrderCompletionReportDO();
             BeanUtils.copyProperties(reportVO, reportDO);
             reportDO.setOrderId(baseInfoDO.getId());
+            reportDO.setOrderStatus(OrderStatusEnum.REPORT_WAIT_AUDIT.getStatus());
             reportService.save(reportDO);
         }
 
@@ -281,6 +389,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             OrderTrackStageDO trackStageDO = new OrderTrackStageDO();
             BeanUtils.copyProperties(trackStageVO, trackStageDO);
             trackStageDO.setOrderId(baseInfoDO.getId());
+            trackStageDO.setOrderStatus(OrderStatusEnum.TRACK_ING.getStatus());
             trackStageService.save(trackStageDO);
         }
 
@@ -289,6 +398,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             OrderInspectionStageDO inspectionStageDO = new OrderInspectionStageDO();
             BeanUtils.copyProperties(inspectionStageVO, inspectionStageDO);
             inspectionStageDO.setOrderId(baseInfoDO.getId());
+            inspectionStageDO.setOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
             inspectionStageService.save(inspectionStageDO);
         }
 
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
index 2b2d444..9e8703f 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
@@ -2,20 +2,39 @@ package com.order.erp.service.order.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.canrd.shop.common.constant.ServerResultCode;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.exception.BusinessException;
+import com.order.erp.config.DataScope;
+import com.order.erp.domain.ApplyStatusEnum;
+import com.order.erp.domain.ApplyTypeEnum;
+import com.order.erp.domain.dto.BaseDO;
+import com.order.erp.domain.dto.order.OrderAuditLogDO;
 import com.order.erp.domain.dto.order.OrderFieldLockApplyDO;
-import com.order.erp.domain.vo.order.OrderFieldLockApplyQueryVO;
-import com.order.erp.domain.vo.order.OrderFieldLockApplyVO;
+import com.order.erp.domain.dto.order.OrderFieldLockRecordDO;
+import com.order.erp.domain.vo.order.*;
 import com.order.erp.mapper.order.OrderFieldLockApplyMapper;
+import com.order.erp.service.order.OrderAuditLogService;
 import com.order.erp.service.order.OrderFieldLockApplyService;
+import com.order.erp.service.order.OrderFieldLockRecordService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 用户订单-字段锁定申请表(OrderFieldLockApply)表服务实现类
@@ -27,6 +46,17 @@ import java.util.Objects;
 @Service
 public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockApplyMapper, OrderFieldLockApplyDO> implements OrderFieldLockApplyService {
 
+    @Resource
+    private DataScope dataScope;
+
+    @Resource
+    private OrderFieldLockRecordService fieldLockRecordService;
+
+    @Resource
+    private OrderFieldLockApplyService applyService;
+
+    @Resource
+    private OrderAuditLogService auditLogService;
 
     /**
      * 通过ID查询单条数据
@@ -59,6 +89,42 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
         return ServerResult.success();
     }
 
+    @Override
+    public ServerResult listByPage(OrderFieldLockApplyQueryVO queryVO) {
+        LambdaQueryWrapper<OrderFieldLockApplyDO> queryWrapper = buildQueryByParam(queryVO);
+        Page page = new Page<>(queryVO.getPageNo(), queryVO.getPageSize());
+        IPage<OrderFieldLockApplyDO> iPage = page(page, queryWrapper);
+
+        Page<OrderApplyResultVO> webVOPage = new Page<>();
+        List<OrderFieldLockApplyDO> applyDOList = iPage.getRecords();
+        if (CollectionUtils.isNotEmpty(applyDOList)) {
+            List<OrderApplyResultVO> resultVOList = applyDOList.stream().map(x -> {
+                OrderApplyResultVO resultVO = new OrderApplyResultVO();
+                BeanUtils.copyProperties(x, resultVO);
+                String fields = x.getFields();
+                if (StringUtils.isNotBlank(fields)) {
+                    resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class));
+                }
+                return resultVO;
+            }).collect(Collectors.toList());
+
+            webVOPage.setRecords(resultVOList);
+        }
+        BeanUtils.copyProperties(page, webVOPage, "records");
+        return ServerResult.success(webVOPage);
+    }
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    private LambdaQueryWrapper<OrderFieldLockApplyDO> buildQueryByParam(OrderFieldLockApplyQueryVO queryVO) {
+        return new LambdaQueryWrapper<OrderFieldLockApplyDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(Objects.nonNull(queryVO.getApplyUserId()), OrderFieldLockApplyDO::getApplyUserId, queryVO.getApplyUserId())
+                .eq(Objects.nonNull(queryVO.getStatus()), OrderFieldLockApplyDO::getStatus, queryVO.getStatus());
+    }
+
     /**
      * 新增数据
      *
@@ -78,6 +144,71 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
         return ServerResult.success();
     }
 
+    @Override
+    public ServerResult doAudit(AuditVO auditVO) {
+        OrderFieldLockApplyDO applyDO = getById(auditVO.getId());
+        if (Objects.isNull(applyDO)) {
+            throw new BusinessException(ServerResultCode.APPLY_NOT_EXIST);
+        }
+        Long auditUserId = dataScope.getLoginUserId();
+        // 申请通过
+        if (ApplyStatusEnum.AUDIT_PASS.getStatus().equals(auditVO.getStatus())) {
+            doPass(applyDO, auditUserId);
+        }
+        if (ApplyStatusEnum.AUDIT_REFUSE.getStatus().equals(auditVO.getStatus())) {
+            doRefuse(applyDO, auditUserId);
+        }
+        return ServerResult.success();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void doRefuse(OrderFieldLockApplyDO applyDO, Long auditUserId) {
+        applyDO.setAuditUserId(auditUserId);
+        applyDO.setStatus(ApplyStatusEnum.AUDIT_REFUSE.getStatus());
+
+        OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_REFUSE.getDesc()).build();
+
+        applyService.updateById(applyDO);
+        auditLogService.save(auditLogDO);
+    }
+
+    /**
+     * @param applyDO
+     * @param auditUserId
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void doPass(OrderFieldLockApplyDO applyDO, Long auditUserId) {
+        OrderFieldLockRecordDO recordDO = null;
+        if (ApplyTypeEnum.FIELD_EDIT_APPLY.getType().equals(applyDO.getType())) {
+            applyDO.setAuditUserId(auditUserId);
+            applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
+
+            recordDO = fieldLockRecordService.getOne(new LambdaQueryWrapper<OrderFieldLockRecordDO>()
+                    .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                    .eq(OrderFieldLockRecordDO::getOrderId, applyDO.getOrderId())
+                    .eq(OrderFieldLockRecordDO::getUserId, applyDO.getApplyUserId()));
+            if (Objects.isNull(recordDO)) {
+                recordDO = OrderFieldLockRecordDO.builder()
+                        .orderId(applyDO.getOrderId())
+                        .userId(applyDO.getApplyUserId())
+                        .fields(applyDO.getFields()).build();
+            }
+            recordDO.setFields(applyDO.getFields());
+        }
+
+        OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_PASS.getDesc()).build();
+
+        applyService.updateById(applyDO);
+
+        if (Objects.isNull(recordDO.getId())) {
+            fieldLockRecordService.save(recordDO);
+        } else {
+            fieldLockRecordService.updateById(recordDO);
+        }
+
+        auditLogService.save(auditLogDO);
+    }
+
     /**
      * 修改数据
      *