From f7a6a108af93eb225299e771f9958eae36f776bf Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: 星期二, 23 九月 2025 14:29:05 +0800
Subject: [PATCH] 修改

---
 multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewRequire.java                  |   47 +
 multi-system/src/main/resources/mapper/system/CustomerCommunicationMapper.xml                      |   50 +
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/MonthlyInspectionServiceImpl.java     |   90 ++
 multi-system/src/main/resources/mapper/system/CustomerInventoryMapper.xml                          |   32 
 multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerInventory.java                      |   70 +
 multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecordNeed.java                     |   63 +
 multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspection.java                      |   54 +
 multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMapper.java                |   12 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/PostSalesMapper.java                        |   12 
 multi-system/src/main/resources/mapper/system/CustomerRecordNeedMapper.xml                         |   39 
 multi-system/src/main/java/com/gkhy/exam/system/service/ContractReviewService.java                 |   16 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordNeedMapper.java               |   17 
 multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMessb.java                    |   34 
 multi-system/src/main/java/com/gkhy/exam/system/service/MonthlyInspectionService.java              |   16 
 multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecord.java                         |   54 +
 multi-system/src/main/resources/mapper/system/ContractReviewMessMapper.xml                         |   59 +
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerRecordServiceImpl.java        |  100 ++
 multi-system/src/main/resources/mapper/system/PostSalesMapper.xml                                  |   42 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerInventoryMapper.java                |   13 
 multi-system/src/main/resources/mapper/system/ContractLedgerMapper.xml                             |   29 
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractLedgerServiceImpl.java        |   71 +
 multi-system/src/main/java/com/gkhy/exam/system/service/ContractLedgerService.java                 |   16 
 multi-system/src/main/java/com/gkhy/exam/system/service/CustomerCommunicationService.java          |   16 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMapper.java                   |   15 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMessMapper.java            |   17 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordMapper.java                   |   12 
 multi-system/src/main/resources/mapper/system/CustomerRecordMapper.xml                             |   27 
 multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspectionMess.java                  |   65 +
 multi-system/src/main/java/com/gkhy/exam/system/domain/PostSales.java                              |  108 ++
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysRoleServiceImpl.java               |    2 
 multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReview.java                         |  137 +++
 multi-system/src/main/resources/mapper/system/ContractReviewMapper.xml                             |   52 +
 multi-system/src/main/java/com/gkhy/exam/system/domain/ContractLedger.java                         |   61 +
 multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractLedgerMapper.java                   |   12 
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractReviewServiceImpl.java        |  172 +++
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/PostSalesServiceImpl.java             |   72 +
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerInventoryServiceImpl.java     |   82 +
 multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewRequireMapper.java            |   17 
 multi-system/src/main/resources/mapper/system/MonthlyInspectionMessMapper.xml                      |   42 
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerCommunicationServiceImpl.java |   73 +
 multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMess.java                     |   37 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMessMapper.java               |   22 
 multi-system/src/main/java/com/gkhy/exam/system/service/PostSalesService.java                      |   16 
 multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerCommunicationMapper.java            |   12 
 multi-system/src/main/java/com/gkhy/exam/system/service/CustomerInventoryService.java              |   19 
 multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerCommunication.java                  |  136 +++
 multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/MarketController.java                 |  402 +++++++++
 multi-system/src/main/resources/mapper/system/MonthlyInspectionMapper.xml                          |   27 
 multi-system/src/main/resources/mapper/system/ContractReviewRequireMapper.xml                      |   33 
 multi-system/src/main/java/com/gkhy/exam/system/service/CustomerRecordService.java                 |   17 
 50 files changed, 2,638 insertions(+), 1 deletions(-)

diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/MarketController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/MarketController.java
new file mode 100644
index 0000000..1d75833
--- /dev/null
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/MarketController.java
@@ -0,0 +1,402 @@
+package com.gkhy.exam.admin.controller.web;
+
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.*;
+import com.gkhy.exam.system.service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/market")
+@Api(tags = "管理评审会议、输入、报告")
+public class MarketController {
+
+
+    @Autowired
+    private CustomerInventoryService customerInventoryService;
+
+    @Autowired
+    private CustomerRecordService customerRecordService;
+
+    @Autowired
+    private CustomerCommunicationService customerCommunicationService;
+
+    @Autowired
+    private ContractLedgerService contractLedgerService;
+
+    @Autowired
+    private ContractReviewService contractReviewService;
+
+    @Autowired
+    private PostSalesService postSalesService;
+
+    @Autowired
+    private MonthlyInspectionService monthlyInspectionService;
+
+
+
+    /**
+     * 顾客清单列表
+     * @param customerInventory
+     * @return
+     */
+    @ApiOperation(value = "顾客清单列表(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+    })
+    @GetMapping("/inventory/list")
+    public CommonResult listCustomer(CustomerInventory customerInventory){
+        return CommonResult.success(customerInventoryService.selectCustomerInventoryList(customerInventory));
+    }
+
+
+    /**
+     * 顾客清单新增
+     * @param customerInventory
+     * @return
+     */
+    @ApiOperation(value = "顾客清单新增")
+    @PostMapping("/inventory/insert")
+    public CommonResult insertCustomer(@RequestBody CustomerInventory customerInventory){
+        return customerInventoryService.insertCustomerInventory(customerInventory);
+    }
+
+    /**
+     * 顾客清单修改
+     * @param customerInventory
+     * @return
+     */
+    @ApiOperation(value = "顾客清单修改")
+    @PostMapping("/inventory/update")
+    public CommonResult updateCustomer(@RequestBody CustomerInventory customerInventory){
+        return customerInventoryService.updateCustomerInventory(customerInventory);
+    }
+
+    /**
+     * 顾客清单删除
+     * @param customerId
+     * @return
+     */
+    @ApiOperation(value = "顾客清单删除")
+    @GetMapping("/inventory/deleted")
+    public CommonResult deletedCustomer(@RequestParam("customerId") Integer customerId){
+        return customerInventoryService.deletedCustomerInventory(customerId);
+    }
+
+
+
+    /**
+     * 顾客需求登记列表
+     * @param customerRecord
+     * @return
+     */
+    @ApiOperation(value = "顾客需求登记列表(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+    })
+    @GetMapping("/record/list")
+    public CommonResult listCustomerRecord(CustomerRecord customerRecord){
+        return CommonResult.success(customerRecordService.selectCustomerRecordList(customerRecord));
+    }
+
+
+    /**
+     * 顾客需求登记新增
+     * @param customerRecord
+     * @return
+     */
+    @ApiOperation(value = "顾客需求登记新增")
+    @PostMapping("/record/insert")
+    public CommonResult insertCustomerRecord(@RequestBody CustomerRecord customerRecord){
+        return customerRecordService.insertCustomerRecord(customerRecord);
+    }
+
+    /**
+     * 顾客需求登记修改
+     * @param customerRecord
+     * @return
+     */
+    @ApiOperation(value = "顾客需求登记修改")
+    @PostMapping("/record/update")
+    public CommonResult updateCustomerRecord(@RequestBody CustomerRecord customerRecord){
+        return customerRecordService.updateCustomerRecord(customerRecord);
+    }
+
+    /**
+     * 顾客需求登记删除
+     * @param recordId
+     * @return
+     */
+    @ApiOperation(value = "顾客需求登记删除")
+    @GetMapping("/record/deleted")
+    public CommonResult deletedCustomerRecord(@RequestParam("recordId") Integer recordId){
+        return customerRecordService.deletedCustomerRecord(recordId);
+    }
+
+
+
+
+    /**
+     * 顾客沟通记录列表
+     * @param customerCommunication
+     * @return
+     */
+    @ApiOperation(value = "顾客沟通记录列表(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+    })
+    @GetMapping("/communication/list")
+    public CommonResult listCustomerCommunication(CustomerCommunication customerCommunication){
+        return CommonResult.success(customerCommunicationService.selectCustomerCommunicationList(customerCommunication));
+    }
+
+
+    /**
+     * 顾客沟通记录新增
+     * @param customerCommunication
+     * @return
+     */
+    @ApiOperation(value = "顾客沟通记录新增")
+    @PostMapping("/communication/insert")
+    public CommonResult insertCustomerCommunication(@RequestBody CustomerCommunication customerCommunication){
+        return customerCommunicationService.insertCustomerCommunication(customerCommunication);
+    }
+
+    /**
+     * 顾客沟通记录修改
+     * @param customerCommunication
+     * @return
+     */
+    @ApiOperation(value = "顾客沟通记录修改")
+    @PostMapping("/communication/update")
+    public CommonResult updateCustomerCommunication(@RequestBody CustomerCommunication customerCommunication){
+        return customerCommunicationService.updateCustomerCommunication(customerCommunication);
+    }
+
+    /**
+     * 顾客沟通记录删除
+     * @param communId
+     * @return
+     */
+    @ApiOperation(value = "顾客沟通记录删除")
+    @GetMapping("/communication/deleted")
+    public CommonResult deletedCustomerCommunication(@RequestParam("communId") Integer communId){
+        return customerCommunicationService.deletedCustomerCommunication(communId);
+    }
+
+
+
+    /**
+     * 合同台账列表
+     * @param contractLedger
+     * @return
+     */
+    @ApiOperation(value = "合同台账(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+    })
+    @GetMapping("/ledger/list")
+    public CommonResult listContractLedger(ContractLedger contractLedger){
+        return CommonResult.success(contractLedgerService.selectContractLedgerList(contractLedger));
+    }
+
+
+    /**
+     * 合同台账新增
+     * @param contractLedger
+     * @return
+     */
+    @ApiOperation(value = "合同台账新增")
+    @PostMapping("/ledger/insert")
+    public CommonResult insertContractLedger(@RequestBody ContractLedger contractLedger){
+        return contractLedgerService.insertContractLedger(contractLedger);
+    }
+
+    /**
+     * 合同台账修改
+     * @param contractLedger
+     * @return
+     */
+    @ApiOperation(value = "合同台账修改")
+    @PostMapping("/ledger/update")
+    public CommonResult updateContractLedger(@RequestBody ContractLedger contractLedger){
+        return contractLedgerService.updateContractLedger(contractLedger);
+    }
+
+    /**
+     * 合同台账删除
+     * @param ledgerId
+     * @return
+     */
+    @ApiOperation(value = "合同台账删除")
+    @GetMapping("/ledger/deleted")
+    public CommonResult deletedContractLedger(@RequestParam("ledgerId") Integer ledgerId){
+        return contractLedgerService.deletedContractLedger(ledgerId);
+    }
+
+
+    /**
+     * 合同评审列表
+     * @param contractReview
+     * @return
+     */
+    @ApiOperation(value = "合同评审(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+    })
+    @GetMapping("/review/list")
+    public CommonResult listContractReview(ContractReview contractReview){
+        return CommonResult.success(contractReviewService.selectContractReviewList(contractReview));
+    }
+
+
+    /**
+     * 合同评审新增
+     * @param contractReview
+     * @return
+     */
+    @ApiOperation(value = "合同评审新增")
+    @PostMapping("/review/insert")
+    public CommonResult insertContractReview(@RequestBody ContractReview contractReview){
+        return contractReviewService.insertContractReview(contractReview);
+    }
+
+    /**
+     * 合同评审修改
+     * @param contractReview
+     * @return
+     */
+    @ApiOperation(value = "合同评审修改")
+    @PostMapping("/review/update")
+    public CommonResult updateContractReview(@RequestBody ContractReview contractReview){
+        return contractReviewService.updateContractReview(contractReview);
+    }
+
+    /**
+     * 合同评审删除
+     * @param reviewId
+     * @return
+     */
+    @ApiOperation(value = "合同评审删除")
+    @GetMapping("/review/deleted")
+    public CommonResult deletedContractReview(@RequestParam("reviewId") Integer reviewId){
+        return contractReviewService.deletedContractReview(reviewId);
+    }
+
+
+
+    /**
+     * 售后服务
+     * @param postSales
+     * @return
+     */
+    @ApiOperation(value = "售后服务(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+    })
+    @GetMapping("/sales/list")
+    public CommonResult listPostsales(PostSales postSales){
+        return CommonResult.success(postSalesService.selectPostSalesList(postSales));
+    }
+
+
+    /**
+     * 售后服务新增
+     * @param postSales
+     * @return
+     */
+    @ApiOperation(value = "售后服务新增")
+    @PostMapping("/sales/insert")
+    public CommonResult insertPostsales(@RequestBody PostSales postSales){
+        return postSalesService.insertPostSales(postSales);
+    }
+
+    /**
+     * 售后服务修改
+     * @param postSales
+     * @return
+     */
+    @ApiOperation(value = "售后服务修改")
+    @PostMapping("/sales/update")
+    public CommonResult updatePostsales(@RequestBody PostSales postSales){
+        return postSalesService.updatePostSales(postSales);
+    }
+
+    /**
+     * 售后服务删除
+     * @param salesId
+     * @return
+     */
+    @ApiOperation(value = "售后服务删除")
+    @GetMapping("/sales/deleted")
+    public CommonResult deletedPostsales(@RequestParam("salesId") Integer salesId){
+        return postSalesService.deletedPostSales(salesId);
+    }
+
+    /**
+     * 月度检查记录
+     * @param monthlyInspection
+     * @return
+     */
+    @ApiOperation(value = "月度检查记录(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10"),
+    })
+    @GetMapping("/monthly/list")
+    public CommonResult listMonthlyInspection(MonthlyInspection monthlyInspection){
+        return CommonResult.success(monthlyInspectionService.selectMonthlyInspectionList(monthlyInspection));
+    }
+
+
+    /**
+     * 月度检查记录新增
+     * @param monthlyInspection
+     * @return
+     */
+    @ApiOperation(value = "月度检查记录新增")
+    @PostMapping("/monthly/insert")
+    public CommonResult insertMonthlyInspection(@RequestBody MonthlyInspection monthlyInspection){
+        return monthlyInspectionService.insertMonthlyInspection(monthlyInspection);
+    }
+
+    /**
+     * 月度检查记录修改
+     * @param monthlyInspection
+     * @return
+     */
+    @ApiOperation(value = "月度检查记录修改")
+    @PostMapping("/monthly/update")
+    public CommonResult updateMonthlyInspection(@RequestBody MonthlyInspection monthlyInspection){
+        return monthlyInspectionService.updateMonthlyInspection(monthlyInspection);
+    }
+
+    /**
+     * 月度检查记录删除
+     * @param monthlyId
+     * @return
+     */
+    @ApiOperation(value = "月度检查记录删除")
+    @GetMapping("/monthly/deleted")
+    public CommonResult deletedMonthlyInspection(@RequestParam("monthlyId") Integer monthlyId){
+        return monthlyInspectionService.deletedMonthlyInspection(monthlyId);
+    }
+
+
+
+
+
+
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractLedger.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractLedger.java
new file mode 100644
index 0000000..58cb8c7
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractLedger.java
@@ -0,0 +1,61 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("contract_ledger")
+@ApiModel(value = "ContractLedger", description = "合同台账")
+public class ContractLedger implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "企业id",required = true)
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "编号")
+    @TableField("number")
+    private String number;
+
+    @ApiModelProperty(value = "合同名称")
+    @TableField("contract_name")
+    private String contractName;
+
+    @ApiModelProperty(value = "签订日期")
+    @TableField("sign_date")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate signDate;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("create_by")
+    private String createBy;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @TableField("update_by")
+    private String updateBy;
+
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReview.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReview.java
new file mode 100644
index 0000000..8fe4a4c
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReview.java
@@ -0,0 +1,137 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@TableName("contract_review")
+@ApiModel(value = "ContractReview", description = "合同评审主表")
+public class ContractReview implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "企业id",required = true)
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "评审类型 1评审  2变更")
+    @TableField("type")
+    private Integer type;
+
+    @ApiModelProperty(value = "合同台账id")
+    @TableField("contract_id")
+    private Integer contractId;
+
+    @TableField(exist = false)
+    private String contractName;
+
+    @TableField(exist = false)
+    private String number;
+
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate signDate;
+
+    @ApiModelProperty(value = "记录日期")
+    @TableField("record_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate recordTime;
+
+    @ApiModelProperty(value = "记录人")
+    @TableField("registrant_id")
+    private Integer registrantId;
+
+    @TableField(exist = false)
+    private String registrantName;
+
+    @ApiModelProperty(value = "顾客名称")
+    @TableField("customer_name")
+    private String customerName;
+
+    @ApiModelProperty(value = "联系人")
+    @TableField("customer_user")
+    private String customerUser;
+
+    @ApiModelProperty(value = "联系电话")
+    @TableField("costomer_phone")
+    private String costomerPhone;
+
+    @ApiModelProperty(value = "交货期限")
+    @TableField("delivery_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate deliveryTime;
+
+    @ApiModelProperty(value = "交货地址")
+    @TableField("delivery_addr")
+    private String deliveryAddr;
+
+    @ApiModelProperty(value = "交付方式")
+    @TableField("delivery_type")
+    private String deliveryType;
+
+    @ApiModelProperty(value = "付款方式")
+    @TableField("pay_type")
+    private String payType;
+
+    @ApiModelProperty(value = "产品和服务要求内容")
+    @TableField("product_mess")
+    private String productMess;
+
+    @ApiModelProperty(value = "风险识别")
+    @TableField("risk_mess")
+    private String riskMess;
+
+    @ApiModelProperty(value = "审批意见")
+    @TableField("suggest")
+    private String suggest;
+
+    @ApiModelProperty(value = "法人")
+    @TableField("legal_person")
+    private Integer legalPerson;
+
+    @TableField(exist = false)
+    private String legalName;
+
+    @ApiModelProperty(value = "日期")
+    @TableField("legal_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate legalTime;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("create_by")
+    private String createBy;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @TableField("update_by")
+    private String updateBy;
+
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private List<ContractReviewRequire> contractReviewRequires;
+
+    @TableField(exist = false)
+    private List<ContractReviewMess> reviewMesses;
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMess.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMess.java
new file mode 100644
index 0000000..c005ce0
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMess.java
@@ -0,0 +1,37 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@TableName("contract_review_mess")
+@ApiModel(value = "ContractReviewMess", description = "合同评审内容")
+public class ContractReviewMess implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "主表ID")
+    @TableField("review_id")
+    private Integer reviewId;
+
+    @ApiModelProperty(value = "评审变更部门")
+    @TableField("dept_name")
+    private String deptName;
+
+
+    @TableField(exist = false)
+    private List<ContractReviewMessb> contractReviewMessbs;
+
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMessb.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMessb.java
new file mode 100644
index 0000000..f4a09ad
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewMessb.java
@@ -0,0 +1,34 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ContractReviewMessb {
+
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "主表ID")
+    @TableField("mess_id")
+    private Integer messId;
+
+    @ApiModelProperty(value = "评审变更内容")
+    @TableField("review_mess")
+    private String reviewMess;
+
+    @ApiModelProperty(value = "评审变更意见")
+    @TableField("review_opinion")
+    private String reviewOpinion;
+
+    @ApiModelProperty(value = "签字")
+    @TableField("review_sign")
+    private String reviewSign;
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewRequire.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewRequire.java
new file mode 100644
index 0000000..56e3f23
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/ContractReviewRequire.java
@@ -0,0 +1,47 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@TableName("contract_review_require")
+@ApiModel(value = "ContractReviewRequire", description = "合同评审变更顾客要求表")
+public class ContractReviewRequire implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "主表ID")
+    @TableField("review_id")
+    private Integer reviewId;
+
+    @ApiModelProperty(value = "产品名称")
+    @TableField("product_name")
+    private String productName;
+
+    @ApiModelProperty(value = "规格型号")
+    @TableField("specification")
+    private String specification;
+
+    @ApiModelProperty(value = "数量")
+    @TableField("amount")
+    private Integer amount;
+
+    @ApiModelProperty(value = "单价")
+    @TableField("price")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "其他")
+    @TableField("remark")
+    private String remark;
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerCommunication.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerCommunication.java
new file mode 100644
index 0000000..c27483b
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerCommunication.java
@@ -0,0 +1,136 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("customer_communication")
+@ApiModel(value = "CustomerCommunication", description = "顾客沟通记录")
+public class CustomerCommunication implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "企业id",required = true)
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "记录名称")
+    @TableField("record_name")
+    private String recordName;
+
+    @ApiModelProperty(value = "编号")
+    @TableField("number")
+    private String number;
+
+    @ApiModelProperty(value = "客户单位/姓名")
+    @TableField("client")
+    private String client;
+
+    @ApiModelProperty(value = "联系电话")
+    @TableField("phone")
+    private String phone;
+
+    @ApiModelProperty(value = "沟通时间")
+    @TableField("com_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate comTime;
+
+    @ApiModelProperty(value = "沟通地点")
+    @TableField("com_addr")
+    private String comAddr;
+
+    @ApiModelProperty(value = "沟通方式 1面谈  2电话  3信函 4有件  5其他")
+    @TableField("com_method")
+    private String comMethod;
+
+    @ApiModelProperty(value = "方式其他详细内容")
+    @TableField("method_mess")
+    private String methodMess;
+
+    @ApiModelProperty(value = "沟通类型 1建议  2咨询  3反馈 4抱怨  5其他")
+    @TableField("com_type")
+    private String comType;
+
+    @ApiModelProperty(value = "类型其他详细内容")
+    @TableField("type_mess")
+    private String typeMess;
+
+    @ApiModelProperty(value = "详细内容")
+    @TableField("detail_mess")
+    private String detailMess;
+
+    @ApiModelProperty(value = "详细内容记录人")
+    @TableField("detail_user")
+    private Integer detailUser;
+
+    @TableField(exist = false)
+    private String detailName;
+
+    @ApiModelProperty(value = "时间")
+    @TableField("detail_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate detailTime;
+
+    @ApiModelProperty(value = "处理过程描述")
+    @TableField("dispose_mess")
+    private String disposeMess;
+
+    @ApiModelProperty(value = "处理过程记录人")
+    @TableField("dispose_user")
+    private Integer disposeUser;
+
+    @TableField(exist = false)
+    private String disposeName;
+
+    @ApiModelProperty(value = "时间")
+    @TableField("dispose_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate disposeTime;
+
+    @ApiModelProperty(value = "领导审阅")
+    @TableField("leader_mess")
+    private String leaderMess;
+
+    @ApiModelProperty(value = "领导")
+    @TableField("leader_user")
+    private Integer leaderUser;
+
+    @TableField(exist = false)
+    private String leaderName;
+
+    @ApiModelProperty(value = "时间")
+    @TableField("leader_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate leaderTime;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("create_by")
+    private String createBy;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @TableField("update_by")
+    private String updateBy;
+
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerInventory.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerInventory.java
new file mode 100644
index 0000000..5b575c0
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerInventory.java
@@ -0,0 +1,70 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("customer_inventory")
+@ApiModel(value = "CustomerInventory", description = "顾客清单表")
+public class CustomerInventory implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "企业id",required = true)
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "顾客名称")
+    @TableField("customer_name")
+    private String customerName;
+
+    @ApiModelProperty(value = "顾客地址")
+    @TableField("customer_addr")
+    private String customerAddr;
+
+    @ApiModelProperty(value = "联系人")
+    @TableField("person")
+    private String person;
+
+    @ApiModelProperty(value = "联系电话")
+    @TableField("phone")
+    private String phone;
+
+    @ApiModelProperty(value = "邮件")
+    @TableField("emil")
+    private String emil;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("create_by")
+    private String createBy;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @TableField("update_by")
+    private String updateBy;
+
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecord.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecord.java
new file mode 100644
index 0000000..e034798
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecord.java
@@ -0,0 +1,54 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@TableName("customer_record")
+@ApiModel(value = "CustomerRecord", description = "顾客需求登记")
+public class CustomerRecord implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "企业id",required = true)
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "记录名称")
+    @TableField("record_name")
+    private String recordName;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("create_by")
+    private String createBy;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @TableField("update_by")
+    private String updateBy;
+
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private List<CustomerRecordNeed> customerRecordNeeds;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecordNeed.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecordNeed.java
new file mode 100644
index 0000000..9e7a276
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/CustomerRecordNeed.java
@@ -0,0 +1,63 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName("customer_record_need")
+@ApiModel(value = "CustomerRecordNeed", description = "顾客需求登记副表")
+public class CustomerRecordNeed implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "主表id",required = true)
+    @TableField("record_id")
+    private Integer recordId;
+
+    @ApiModelProperty(value = "顾客名称")
+    @TableField("customer_name")
+    private String customerName;
+
+    @ApiModelProperty(value = "顾客需求 1走访  2网调  3其他")
+    @TableField("customer_need")
+    private String customerNeed;
+
+    @ApiModelProperty(value = "需求来源")
+    @TableField("need_source")
+    private String needSource;
+
+    @ApiModelProperty(value = "登记人")
+    @TableField("registrant_id")
+    private Integer registrantId;
+
+    @TableField(exist = false)
+    private String registrantName;
+
+    @ApiModelProperty(value = "处理部门")
+    @TableField("dispose_id")
+    private Integer disposeId;
+
+    @TableField(exist = false)
+    private String disposeName;
+
+    @ApiModelProperty(value = "处理结果")
+    @TableField("dispose_mess")
+    private String disposeMess;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspection.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspection.java
new file mode 100644
index 0000000..6726a43
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspection.java
@@ -0,0 +1,54 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@TableName("monthly_inspection")
+@ApiModel(value = "MonthlyInspection", description = "月度检查记录主表")
+public class MonthlyInspection implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "企业id",required = true)
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "记录名称")
+    @TableField("record_name")
+    private String recordName;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("create_by")
+    private String createBy;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @TableField("update_by")
+    private String updateBy;
+
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private List<MonthlyInspectionMess> inspectionMesses;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspectionMess.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspectionMess.java
new file mode 100644
index 0000000..01a660c
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/MonthlyInspectionMess.java
@@ -0,0 +1,65 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@TableName("monthly_inspection_mess")
+@ApiModel(value = "MonthlyInspectionMess", description = "月度检查记录副表")
+public class MonthlyInspectionMess implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "月度检查记录主表")
+    @TableField("monthly_id")
+    private Integer monthlyId;
+
+    @ApiModelProperty(value = "时间")
+    @TableField("monthly_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate monthlyTime;
+
+    @ApiModelProperty(value = "检查人")
+    @TableField("check_user")
+    private String checkUser;
+
+    @ApiModelProperty(value = "防护")
+    @TableField("entrench")
+    private String entrench;
+
+    @ApiModelProperty(value = "标识")
+    @TableField("identification")
+    private String identification;
+
+    @ApiModelProperty(value = "摆放")
+    @TableField("place")
+    private String place;
+
+    @ApiModelProperty(value = "清洁")
+    @TableField("clean")
+    private String clean;
+
+    @ApiModelProperty(value = "安全")
+    @TableField("safety")
+    private String safety;
+
+    @ApiModelProperty(value = "环境")
+    @TableField("environment")
+    private String environment;
+
+    @ApiModelProperty(value = "一致性")
+    @TableField("consistency")
+    private String consistency;
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/PostSales.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/PostSales.java
new file mode 100644
index 0000000..eff591a
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/PostSales.java
@@ -0,0 +1,108 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("post_sales")
+@ApiModel(value = "PostSales", description = "售后服务")
+public class PostSales implements Serializable {
+
+    @ApiModelProperty("主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "企业id",required = true)
+    @TableField("company_id")
+    private Integer companyId;
+
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "记录名称")
+    @TableField("record_name")
+    private String recordName;
+
+    @ApiModelProperty(value = "编号")
+    @TableField("number")
+    private String number;
+
+    @ApiModelProperty(value = "客户名称")
+    @TableField("client_name")
+    private String clientName;
+
+    @ApiModelProperty(value = "服务时间")
+    @TableField("server_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate serverTime;
+
+    @ApiModelProperty(value = "地址")
+    @TableField("addr")
+    private String addr;
+
+    @ApiModelProperty(value = "联系人")
+    @TableField("person")
+    private String person;
+
+    @ApiModelProperty(value = "联系电话")
+    @TableField("phone")
+    private String phone;
+
+    @ApiModelProperty(value = "服务内容")
+    @TableField("server_mess")
+    private String serverMess;
+
+    @ApiModelProperty(value = "对客户建议")
+    @TableField("suggest")
+    private String suggest;
+
+    @ApiModelProperty(value = "服务人员")
+    @TableField("person_id")
+    private Integer personId;
+
+    @TableField(exist = false)
+    private String personName;
+
+    @ApiModelProperty(value = "服务人员联系电话")
+    @TableField("server_phone")
+    private String serverPhone;
+
+    @ApiModelProperty(value = "服务评价 1非常满意  2满意  3不满意")
+    @TableField("server_evlauate")
+    private String serverEvlauate;
+
+    @ApiModelProperty(value = "意见")
+    @TableField("opinion")
+    private String opinion;
+
+    @ApiModelProperty(value = "客户")
+    @TableField("custom")
+    private String custom;
+
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @TableField("create_by")
+    private String createBy;
+
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @TableField("update_by")
+    private String updateBy;
+
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractLedgerMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractLedgerMapper.java
new file mode 100644
index 0000000..da1360e
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractLedgerMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.ContractLedger;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ContractLedgerMapper extends BaseMapper<ContractLedger> {
+    List<ContractLedger> selectLedgerList(ContractLedger contractLedger);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMapper.java
new file mode 100644
index 0000000..47c4b47
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMapper.java
@@ -0,0 +1,15 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.ContractReview;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ContractReviewMapper extends BaseMapper<ContractReview> {
+    List<ContractReview> selectReviewList(ContractReview contractReview);
+
+    Integer selectByContractId(@Param("contractId") Integer contractId);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMessMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMessMapper.java
new file mode 100644
index 0000000..157ef67
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewMessMapper.java
@@ -0,0 +1,22 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.ContractReviewMess;
+import com.gkhy.exam.system.domain.ContractReviewMessb;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ContractReviewMessMapper extends BaseMapper<ContractReviewMess> {
+    List<ContractReviewMess> selectByReviewId(@Param("id") Integer id);
+
+    void insertMesses(@Param("reviewMesses") List<ContractReviewMess> reviewMesses);
+
+    void deleteByReviewId(@Param("id") Integer id);
+
+    List<ContractReviewMessb> selectByMessId(@Param("id") Integer id);
+
+    void insertMessbs(@Param("contractReviewMessbs") List<ContractReviewMessb> contractReviewMessbs);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewRequireMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewRequireMapper.java
new file mode 100644
index 0000000..083755e
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/ContractReviewRequireMapper.java
@@ -0,0 +1,17 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.ContractReviewRequire;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ContractReviewRequireMapper extends BaseMapper<ContractReviewRequire> {
+    List<ContractReviewRequire> selectByReviewId(@Param("id") Integer id);
+
+    void insertRequires(@Param("requires") List<ContractReviewRequire> contractReviewRequires);
+
+    void deleteByReviewId(@Param("id") Integer id);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerCommunicationMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerCommunicationMapper.java
new file mode 100644
index 0000000..cc999de
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerCommunicationMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.CustomerCommunication;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface CustomerCommunicationMapper extends BaseMapper<CustomerCommunication> {
+    List<CustomerCommunication> selectCommunicationList(CustomerCommunication customerCommunication);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerInventoryMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerInventoryMapper.java
new file mode 100644
index 0000000..192b364
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerInventoryMapper.java
@@ -0,0 +1,13 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.CustomerInventory;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface CustomerInventoryMapper extends BaseMapper<CustomerInventory> {
+    List<CustomerInventory> selectInventoryList(CustomerInventory customerInventory);
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordMapper.java
new file mode 100644
index 0000000..72bc1b0
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.CustomerRecord;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface CustomerRecordMapper extends BaseMapper<CustomerRecord> {
+    List<CustomerRecord> selectRecordList(CustomerRecord customerRecord);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordNeedMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordNeedMapper.java
new file mode 100644
index 0000000..4424c47
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/CustomerRecordNeedMapper.java
@@ -0,0 +1,17 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.CustomerRecordNeed;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface CustomerRecordNeedMapper extends BaseMapper<CustomerRecordNeed> {
+    Integer insertNeeds(@Param("customerRecordNeeds") List<CustomerRecordNeed> customerRecordNeeds);
+
+    List<CustomerRecordNeed> selectByRecordId(@Param("id") Integer id);
+
+    void deleteByRecordId(@Param("id") Integer id);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMapper.java
new file mode 100644
index 0000000..5256055
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.MonthlyInspection;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MonthlyInspectionMapper extends BaseMapper<MonthlyInspection> {
+    List<MonthlyInspection> selectInspectionList(MonthlyInspection monthlyInspection);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMessMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMessMapper.java
new file mode 100644
index 0000000..c4c5e3f
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/MonthlyInspectionMessMapper.java
@@ -0,0 +1,17 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.MonthlyInspectionMess;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MonthlyInspectionMessMapper extends BaseMapper<MonthlyInspectionMess> {
+    List<MonthlyInspectionMess> selectByMonthlyId(@Param("id") Integer id);
+
+    void insertMonthlys(@Param("inspectionMesses") List<MonthlyInspectionMess> inspectionMesses);
+
+    void deleteByMonthlyId(@Param("id") Integer id);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/PostSalesMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/PostSalesMapper.java
new file mode 100644
index 0000000..abbdf91
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/PostSalesMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.system.domain.PostSales;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PostSalesMapper extends BaseMapper<PostSales> {
+    List<PostSales> selectSalesList(PostSales postSales);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/ContractLedgerService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/ContractLedgerService.java
new file mode 100644
index 0000000..10ca003
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/ContractLedgerService.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.ContractLedger;
+
+public interface ContractLedgerService extends IService<ContractLedger> {
+    CommonPage selectContractLedgerList(ContractLedger contractLedger);
+
+    CommonResult insertContractLedger(ContractLedger contractLedger);
+
+    CommonResult updateContractLedger(ContractLedger contractLedger);
+
+    CommonResult deletedContractLedger(Integer ledgerId);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/ContractReviewService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/ContractReviewService.java
new file mode 100644
index 0000000..137016f
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/ContractReviewService.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.ContractReview;
+
+public interface ContractReviewService extends IService<ContractReview> {
+    CommonPage selectContractReviewList(ContractReview contractReview);
+
+    CommonResult insertContractReview(ContractReview contractReview);
+
+    CommonResult updateContractReview(ContractReview contractReview);
+
+    CommonResult deletedContractReview(Integer reviewId);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerCommunicationService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerCommunicationService.java
new file mode 100644
index 0000000..f03bb98
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerCommunicationService.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.CustomerCommunication;
+
+public interface CustomerCommunicationService extends IService<CustomerCommunication> {
+    CommonPage selectCustomerCommunicationList(CustomerCommunication customerCommunication);
+
+    CommonResult insertCustomerCommunication(CustomerCommunication customerCommunication);
+
+    CommonResult updateCustomerCommunication(CustomerCommunication customerCommunication);
+
+    CommonResult deletedCustomerCommunication(Integer communId);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerInventoryService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerInventoryService.java
new file mode 100644
index 0000000..0c7d0f1
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerInventoryService.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.CustomerInventory;
+import com.gkhy.exam.system.domain.CustomerRecord;
+
+public interface CustomerInventoryService extends IService<CustomerInventory> {
+    CommonPage selectCustomerInventoryList(CustomerInventory customerInventory);
+
+    CommonResult insertCustomerInventory(CustomerInventory customerInventory);
+
+    CommonResult updateCustomerInventory(CustomerInventory customerInventory);
+
+    CommonResult deletedCustomerInventory(Integer customerId);
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerRecordService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerRecordService.java
new file mode 100644
index 0000000..725f583
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/CustomerRecordService.java
@@ -0,0 +1,17 @@
+package com.gkhy.exam.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.CustomerRecord;
+
+public interface CustomerRecordService extends IService<CustomerRecord> {
+
+    CommonPage selectCustomerRecordList(CustomerRecord customerRecord);
+
+    CommonResult insertCustomerRecord(CustomerRecord customerRecord);
+
+    CommonResult updateCustomerRecord(CustomerRecord customerRecord);
+
+    CommonResult deletedCustomerRecord(Integer recordId);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/MonthlyInspectionService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/MonthlyInspectionService.java
new file mode 100644
index 0000000..b0466cb
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/MonthlyInspectionService.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.MonthlyInspection;
+
+public interface MonthlyInspectionService extends IService<MonthlyInspection> {
+    CommonPage selectMonthlyInspectionList(MonthlyInspection monthlyInspection);
+
+    CommonResult insertMonthlyInspection(MonthlyInspection monthlyInspection);
+
+    CommonResult updateMonthlyInspection(MonthlyInspection monthlyInspection);
+
+    CommonResult deletedMonthlyInspection(Integer monthlyId);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/PostSalesService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/PostSalesService.java
new file mode 100644
index 0000000..02384ea
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/PostSalesService.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.PostSales;
+
+public interface PostSalesService extends IService<PostSales> {
+    CommonPage selectPostSalesList(PostSales postSales);
+
+    CommonResult insertPostSales(PostSales postSales);
+
+    CommonResult updatePostSales(PostSales postSales);
+
+    CommonResult deletedPostSales(Integer salesId);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractLedgerServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractLedgerServiceImpl.java
new file mode 100644
index 0000000..664fd2c
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractLedgerServiceImpl.java
@@ -0,0 +1,71 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.ContractLedger;
+import com.gkhy.exam.system.mapper.ContractLedgerMapper;
+import com.gkhy.exam.system.service.ContractLedgerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class ContractLedgerServiceImpl extends ServiceImpl<ContractLedgerMapper, ContractLedger> implements ContractLedgerService {
+
+    @Autowired
+    private ContractLedgerMapper contractLedgerMapper;
+
+    @Override
+    public CommonPage selectContractLedgerList(ContractLedger contractLedger) {
+        if (!SecurityUtils.adminUser()){
+            if (contractLedger.getCompanyId()==null){
+                throw new ApiException("非管理员操作,查询条件不可为空");
+            }
+        }
+        PageUtils.startPage();
+        List<ContractLedger> contractLedgers = contractLedgerMapper.selectLedgerList(contractLedger);
+        return CommonPage.restPage(contractLedgers);
+    }
+
+    @Override
+    public CommonResult insertContractLedger(ContractLedger contractLedger) {
+        contractLedger.setCreateBy(SecurityUtils.getUsername());
+        contractLedger.setCreateTime(LocalDateTime.now());
+        int insert = contractLedgerMapper.insert(contractLedger);
+        if (insert>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult updateContractLedger(ContractLedger contractLedger) {
+        contractLedger.setUpdateBy(SecurityUtils.getUsername());
+        contractLedger.setUpdateTime(LocalDateTime.now());
+        int update = contractLedgerMapper.updateById(contractLedger);
+        if (update>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult deletedContractLedger(Integer ledgerId) {
+        ContractLedger contractLedger = new ContractLedger();
+        contractLedger.setUpdateBy(SecurityUtils.getUsername());
+        contractLedger.setUpdateTime(LocalDateTime.now());
+        contractLedger.setDelFlag(2);
+        contractLedger.setId(ledgerId);
+        int i = contractLedgerMapper.updateById(contractLedger);
+        if (i>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractReviewServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractReviewServiceImpl.java
new file mode 100644
index 0000000..8e8f6a4
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/ContractReviewServiceImpl.java
@@ -0,0 +1,172 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.ContractReview;
+import com.gkhy.exam.system.domain.ContractReviewMess;
+import com.gkhy.exam.system.domain.ContractReviewMessb;
+import com.gkhy.exam.system.domain.ContractReviewRequire;
+import com.gkhy.exam.system.mapper.ContractReviewMapper;
+import com.gkhy.exam.system.mapper.ContractReviewMessMapper;
+import com.gkhy.exam.system.mapper.ContractReviewRequireMapper;
+import com.gkhy.exam.system.service.ContractReviewService;
+import org.apache.tomcat.websocket.AuthenticationException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class ContractReviewServiceImpl extends ServiceImpl<ContractReviewMapper, ContractReview> implements ContractReviewService {
+
+    @Autowired
+    private ContractReviewMapper contractReviewMapper;
+
+    @Autowired
+    private ContractReviewMessMapper contractReviewMessMapper;
+
+    @Autowired
+    private ContractReviewRequireMapper contractReviewRequireMapper;
+
+
+    @Override
+    public CommonPage selectContractReviewList(ContractReview contractReview) {
+        if (!SecurityUtils.adminUser()){
+            if (contractReview.getCompanyId()==null){
+                throw new ApiException("非管理员操作,查询条件不可为空");
+            }
+        }
+        PageUtils.startPage();
+        List<ContractReview> contractReviews = contractReviewMapper.selectReviewList(contractReview);
+        for (ContractReview review : contractReviews) {
+            List<ContractReviewMess> contractReviewMesses = contractReviewMessMapper.selectByReviewId(review.getId());
+            List<ContractReviewRequire> contractReviewRequires = contractReviewRequireMapper.selectByReviewId(review.getId());
+            review.setReviewMesses(contractReviewMesses);
+            review.setContractReviewRequires(contractReviewRequires);
+        }
+        return CommonPage.restPage(contractReviews);
+    }
+
+    @Override
+    @Transactional
+    public CommonResult insertContractReview(ContractReview contractReview) {
+        Integer i = contractReviewMapper.selectByContractId(contractReview.getContractId());
+        if (i>0){
+           return CommonResult.failed("请勿重复添加数据");
+        }
+        List<ContractReviewMess> reviewMesses = contractReview.getReviewMesses();
+        List<ContractReviewRequire> contractReviewRequires = contractReview.getContractReviewRequires();
+        contractReview.setCreateBy(SecurityUtils.getUsername());
+        contractReview.setCreateTime(LocalDateTime.now());
+        int insert = contractReviewMapper.insert(contractReview);
+        if (insert>0){
+            Integer reviewId = contractReview.getId();
+
+            // 批量插入ContractReviewMess
+            for (ContractReviewMess reviewMess : reviewMesses) {
+                reviewMess.setReviewId(reviewId);
+            }
+            contractReviewMessMapper.insertMesses(reviewMesses);
+
+            // 收集所有ContractReviewMessb
+            List<ContractReviewMessb> allMessbs = new ArrayList<>();
+            for (ContractReviewMess reviewMess : reviewMesses) {
+                List<ContractReviewMessb> contractReviewMessbs = reviewMess.getContractReviewMessbs();
+                if (contractReviewMessbs != null && !contractReviewMessbs.isEmpty()) {
+                    for (ContractReviewMessb contractReviewMessb : contractReviewMessbs) {
+                        contractReviewMessb.setMessId(reviewMess.getId());
+                    }
+                    allMessbs.addAll(contractReviewMessbs);
+                }
+            }
+            // 批量插入ContractReviewMessb
+            if (!allMessbs.isEmpty()) {
+                contractReviewMessMapper.insertMessbs(allMessbs);
+            }
+
+            // 批量插入ContractReviewRequire
+            for (ContractReviewRequire contractReviewRequire : contractReviewRequires) {
+                contractReviewRequire.setReviewId(reviewId);
+            }
+            contractReviewRequireMapper.insertRequires(contractReviewRequires);
+        }
+        return CommonResult.success();
+    }
+
+    @Override
+    @Transactional
+    public CommonResult updateContractReview(ContractReview contractReview) {
+        try {
+            List<ContractReviewMess> reviewMesses = contractReview.getReviewMesses();
+            List<ContractReviewRequire> contractReviewRequires = contractReview.getContractReviewRequires();
+            // 更新主表信息
+            contractReview.setUpdateBy(SecurityUtils.getUsername());
+            contractReview.setUpdateTime(LocalDateTime.now());
+            int i = contractReviewMapper.updateById(contractReview);
+            if (i > 0) {
+                Integer reviewId = contractReview.getId();
+                // 删除旧的关联数据
+                contractReviewMessMapper.deleteByReviewId(reviewId);
+                contractReviewRequireMapper.deleteByReviewId(reviewId);
+                // 插入新的ContractReviewMess数据并处理其子项
+                if (reviewMesses != null && !reviewMesses.isEmpty()) {
+                    // 设置reviewId并插入主表数据
+                    for (ContractReviewMess reviewMess : reviewMesses) {
+                        reviewMess.setReviewId(reviewId);
+                    }
+                    contractReviewMessMapper.insertMesses(reviewMesses);
+                    // 处理ContractReviewMessb子项
+                    List<ContractReviewMessb> allMessbs = new ArrayList<>();
+                    for (ContractReviewMess reviewMess : reviewMesses) {
+                        List<ContractReviewMessb> contractReviewMessbs = reviewMess.getContractReviewMessbs();
+                        if (contractReviewMessbs != null && !contractReviewMessbs.isEmpty()) {
+                            for (ContractReviewMessb contractReviewMessb : contractReviewMessbs) {
+                                contractReviewMessb.setMessId(reviewMess.getId());
+                            }
+                            allMessbs.addAll(contractReviewMessbs);
+                        }
+                    }
+                    // 批量插入ContractReviewMessb
+                    if (!allMessbs.isEmpty()) {
+                        contractReviewMessMapper.insertMessbs(allMessbs);
+                    }
+                }
+                // 插入新的ContractReviewRequire数据
+                if (contractReviewRequires != null && !contractReviewRequires.isEmpty()) {
+                    for (ContractReviewRequire contractReviewRequire : contractReviewRequires) {
+                        contractReviewRequire.setReviewId(reviewId);
+                    }
+                    contractReviewRequireMapper.insertRequires(contractReviewRequires);
+                }
+            }
+            return CommonResult.success();
+        } catch (Exception e) {
+            // 记录日志
+            log.error("更新合同评审失败", e);
+            return CommonResult.failed("更新失败");
+        }
+    }
+
+    @Override
+    public CommonResult deletedContractReview(Integer reviewId) {
+        ContractReview contractReview = new ContractReview();
+        contractReview.setDelFlag(2);
+        contractReview.setUpdateBy(SecurityUtils.getUsername());
+        contractReview.setUpdateTime(LocalDateTime.now());
+        contractReview.setId(reviewId);
+        int i = contractReviewMapper.updateById(contractReview);
+        if (i>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerCommunicationServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerCommunicationServiceImpl.java
new file mode 100644
index 0000000..e17170f
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerCommunicationServiceImpl.java
@@ -0,0 +1,73 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.CustomerCommunication;
+import com.gkhy.exam.system.mapper.CustomerCommunicationMapper;
+import com.gkhy.exam.system.service.CustomerCommunicationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class CustomerCommunicationServiceImpl extends ServiceImpl<CustomerCommunicationMapper, CustomerCommunication> implements CustomerCommunicationService {
+
+    @Autowired
+    private CustomerCommunicationMapper customerCommunicationMapper;
+
+
+
+    @Override
+    public CommonPage selectCustomerCommunicationList(CustomerCommunication customerCommunication) {
+        if (!SecurityUtils.adminUser()){
+            if (customerCommunication.getCompanyId()==null){
+                throw new ApiException("非管理员操作,查询条件不可为空");
+            }
+        }
+        PageUtils.startPage();
+        List<CustomerCommunication> customerCommunications = customerCommunicationMapper.selectCommunicationList(customerCommunication);
+        return CommonPage.restPage(customerCommunications);
+    }
+
+    @Override
+    public CommonResult insertCustomerCommunication(CustomerCommunication customerCommunication) {
+        customerCommunication.setCreateBy(SecurityUtils.getUsername());
+        customerCommunication.setCreateTime(LocalDateTime.now());
+        int insert = customerCommunicationMapper.insert(customerCommunication);
+        if (insert>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult updateCustomerCommunication(CustomerCommunication customerCommunication) {
+        customerCommunication.setUpdateBy(SecurityUtils.getUsername());
+        customerCommunication.setUpdateTime(LocalDateTime.now());
+        int i = customerCommunicationMapper.updateById(customerCommunication);
+        if (i>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult deletedCustomerCommunication(Integer communId) {
+        CustomerCommunication customerCommunication = new CustomerCommunication();
+        customerCommunication.setId(communId);
+        customerCommunication.setUpdateBy(SecurityUtils.getUsername());
+        customerCommunication.setUpdateTime(LocalDateTime.now());
+        customerCommunication.setDelFlag(2);
+        int i = customerCommunicationMapper.updateById(customerCommunication);
+        if (i>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerInventoryServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerInventoryServiceImpl.java
new file mode 100644
index 0000000..1756632
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerInventoryServiceImpl.java
@@ -0,0 +1,82 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.CustomerInventory;
+import com.gkhy.exam.system.domain.CustomerRecord;
+import com.gkhy.exam.system.domain.CustomerRecordNeed;
+import com.gkhy.exam.system.mapper.CustomerCommunicationMapper;
+import com.gkhy.exam.system.mapper.CustomerInventoryMapper;
+import com.gkhy.exam.system.mapper.CustomerRecordMapper;
+import com.gkhy.exam.system.mapper.CustomerRecordNeedMapper;
+import com.gkhy.exam.system.service.CustomerInventoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class CustomerInventoryServiceImpl extends ServiceImpl<CustomerInventoryMapper, CustomerInventory> implements CustomerInventoryService {
+
+    @Autowired
+    private CustomerInventoryMapper customerInventoryMapper;
+
+
+
+
+
+    @Override
+    public CommonPage selectCustomerInventoryList(CustomerInventory customerInventory) {
+        if (!SecurityUtils.adminUser()){
+            if (customerInventory.getCompanyId()==null){
+                throw new ApiException("非管理员操作,查询条件不可为空");
+            }
+        }
+        PageUtils.startPage();
+        List<CustomerInventory> customerInventories = customerInventoryMapper.selectInventoryList(customerInventory);
+        return CommonPage.restPage(customerInventories);
+    }
+
+    @Override
+    public CommonResult insertCustomerInventory(CustomerInventory customerInventory) {
+        customerInventory.setCreateBy(SecurityUtils.getUsername());
+        customerInventory.setCreateTime(LocalDateTime.now());
+        int insert = customerInventoryMapper.insert(customerInventory);
+        if (insert > 0) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult updateCustomerInventory(CustomerInventory customerInventory) {
+        customerInventory.setUpdateBy(SecurityUtils.getUsername());
+        customerInventory.setUpdateTime(LocalDateTime.now());
+        int insert = customerInventoryMapper.updateById(customerInventory);
+        if (insert > 0) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult deletedCustomerInventory(Integer customerId) {
+        CustomerInventory customerInventory = new CustomerInventory();
+        customerInventory.setId(customerId);
+        customerInventory.setUpdateBy(SecurityUtils.getUsername());
+        customerInventory.setUpdateTime(LocalDateTime.now());
+        customerInventory.setDelFlag(2);
+        int insert = customerInventoryMapper.updateById(customerInventory);
+        if (insert > 0) {
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerRecordServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerRecordServiceImpl.java
new file mode 100644
index 0000000..c56cf1a
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/CustomerRecordServiceImpl.java
@@ -0,0 +1,100 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.CustomerRecord;
+import com.gkhy.exam.system.domain.CustomerRecordNeed;
+import com.gkhy.exam.system.mapper.CustomerRecordMapper;
+import com.gkhy.exam.system.mapper.CustomerRecordNeedMapper;
+import com.gkhy.exam.system.service.CustomerRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class CustomerRecordServiceImpl extends ServiceImpl<CustomerRecordMapper, CustomerRecord> implements CustomerRecordService {
+
+
+    @Autowired
+    private CustomerRecordMapper customerRecordMapper;
+
+    @Autowired
+    private CustomerRecordNeedMapper customerRecordNeedMapper;
+
+    @Override
+    public CommonPage selectCustomerRecordList(CustomerRecord customerRecord) {
+        if (!SecurityUtils.adminUser()){
+            if (customerRecord.getCompanyId()==null){
+                throw new ApiException("非管理员操作,查询条件不可为空");
+            }
+        }
+        PageUtils.startPage();
+        List<CustomerRecord> customerRecords = customerRecordMapper.selectRecordList(customerRecord);
+        for (CustomerRecord record : customerRecords) {
+            List<CustomerRecordNeed> customerRecordNeeds = customerRecordNeedMapper.selectByRecordId(record.getId());
+            record.setCustomerRecordNeeds(customerRecordNeeds);
+        }
+        return CommonPage.restPage(customerRecords);
+    }
+
+    @Override
+    @Transactional
+    public CommonResult insertCustomerRecord(CustomerRecord customerRecord) {
+        customerRecord.setCreateBy(SecurityUtils.getUsername());
+        customerRecord.setCreateTime(LocalDateTime.now());
+        int insert = customerRecordMapper.insert(customerRecord);
+        if (insert>0){
+            List<CustomerRecordNeed> customerRecordNeeds = customerRecord.getCustomerRecordNeeds();
+            for (CustomerRecordNeed customerRecordNeed : customerRecordNeeds) {
+                customerRecordNeed.setRecordId(customerRecord.getId());
+            }
+            Integer i = customerRecordNeedMapper.insertNeeds(customerRecordNeeds);
+            if (i>0){
+                return CommonResult.success();
+            }else {
+                return CommonResult.failed();
+            }
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    @Transactional
+    public CommonResult updateCustomerRecord(CustomerRecord customerRecord) {
+        customerRecord.setUpdateBy(SecurityUtils.getUsername());
+        customerRecord.setUpdateTime(LocalDateTime.now());
+        int insert = customerRecordMapper.updateById(customerRecord);
+        if (insert>0){
+            customerRecordNeedMapper.deleteByRecordId(customerRecord.getId());
+            Integer i = customerRecordNeedMapper.insertNeeds(customerRecord.getCustomerRecordNeeds());
+            if (i>0){
+                return CommonResult.success();
+            }else {
+                return CommonResult.failed();
+            }
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult deletedCustomerRecord(Integer recordId) {
+        CustomerRecord customerRecord = new CustomerRecord();
+        customerRecord.setId(recordId);
+        customerRecord.setUpdateBy(SecurityUtils.getUsername());
+        customerRecord.setUpdateTime(LocalDateTime.now());
+        customerRecord.setDelFlag(2);
+        int i = customerRecordMapper.updateById(customerRecord);
+        if (i>0){
+            return CommonResult.success();
+        }else {
+            return CommonResult.failed();
+        }
+    }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/MonthlyInspectionServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/MonthlyInspectionServiceImpl.java
new file mode 100644
index 0000000..f42f7e5
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/MonthlyInspectionServiceImpl.java
@@ -0,0 +1,90 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.MonthlyInspection;
+import com.gkhy.exam.system.domain.MonthlyInspectionMess;
+import com.gkhy.exam.system.mapper.MonthlyInspectionMapper;
+import com.gkhy.exam.system.mapper.MonthlyInspectionMessMapper;
+import com.gkhy.exam.system.service.MonthlyInspectionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class MonthlyInspectionServiceImpl extends ServiceImpl<MonthlyInspectionMapper, MonthlyInspection> implements MonthlyInspectionService {
+
+    @Autowired
+    private MonthlyInspectionMapper monthlyInspectionMapper;
+
+    @Autowired
+    private MonthlyInspectionMessMapper monthlyInspectionMessMapper;
+
+
+    @Override
+    public CommonPage selectMonthlyInspectionList(MonthlyInspection monthlyInspection) {
+        if (!SecurityUtils.adminUser()){
+            if (monthlyInspection.getCompanyId()==null){
+                throw new ApiException("非管理员操作,查询条件不可为空");
+            }
+        }
+        PageUtils.startPage();
+        List<MonthlyInspection> monthlyInspections = monthlyInspectionMapper.selectInspectionList(monthlyInspection);
+        for (MonthlyInspection inspection : monthlyInspections) {
+            List<MonthlyInspectionMess> monthlyInspectionMesses = monthlyInspectionMessMapper.selectByMonthlyId(inspection.getId());
+            inspection.setInspectionMesses(monthlyInspectionMesses);
+        }
+        return CommonPage.restPage(monthlyInspections);
+    }
+
+    @Override
+    @Transactional
+    public CommonResult insertMonthlyInspection(MonthlyInspection monthlyInspection) {
+        monthlyInspection.setCreateBy(SecurityUtils.getUsername());
+        monthlyInspection.setCreateTime(LocalDateTime.now());
+        int insert = monthlyInspectionMapper.insert(monthlyInspection);
+        if (insert>0){
+            List<MonthlyInspectionMess> inspectionMesses = monthlyInspection.getInspectionMesses();
+            for (MonthlyInspectionMess inspectionMess : inspectionMesses) {
+                inspectionMess.setMonthlyId(monthlyInspection.getId());
+            }
+            monthlyInspectionMessMapper.insertMonthlys(inspectionMesses);
+        }
+        return CommonResult.success();
+    }
+
+    @Override
+    @Transactional
+    public CommonResult updateMonthlyInspection(MonthlyInspection monthlyInspection) {
+        monthlyInspection.setUpdateBy(SecurityUtils.getUsername());
+        monthlyInspection.setUpdateTime(LocalDateTime.now());
+        int i = monthlyInspectionMapper.updateById(monthlyInspection);
+        if (i>0){
+            List<MonthlyInspectionMess> inspectionMesses = monthlyInspection.getInspectionMesses();
+            monthlyInspectionMessMapper.deleteByMonthlyId(monthlyInspection.getId());
+            monthlyInspectionMessMapper.insertMonthlys(inspectionMesses);
+        }
+        return CommonResult.success();
+    }
+
+    @Override
+    public CommonResult deletedMonthlyInspection(Integer monthlyId) {
+        MonthlyInspection monthlyInspection = new MonthlyInspection();
+        monthlyInspection.setId(monthlyId);
+        monthlyInspection.setUpdateBy(SecurityUtils.getUsername());
+        monthlyInspection.setUpdateTime(LocalDateTime.now());
+        monthlyInspection.setDelFlag(2);
+        int i = monthlyInspectionMapper.updateById(monthlyInspection);
+        if (i>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/PostSalesServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/PostSalesServiceImpl.java
new file mode 100644
index 0000000..2a0e54a
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/PostSalesServiceImpl.java
@@ -0,0 +1,72 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.exception.ApiException;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.PostSales;
+import com.gkhy.exam.system.mapper.PostSalesMapper;
+import com.gkhy.exam.system.service.PostSalesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class PostSalesServiceImpl extends ServiceImpl<PostSalesMapper, PostSales> implements PostSalesService {
+
+    @Autowired
+    private PostSalesMapper postSalesMapper;
+
+
+    @Override
+    public CommonPage selectPostSalesList(PostSales postSales) {
+        if (!SecurityUtils.adminUser()){
+            if (postSales.getCompanyId()==null){
+                throw new ApiException("非管理员操作,查询条件不可为空");
+            }
+        }
+        PageUtils.startPage();
+        List<PostSales> postSales1 = postSalesMapper.selectSalesList(postSales);
+        return CommonPage.restPage(postSales1);
+    }
+
+    @Override
+    public CommonResult insertPostSales(PostSales postSales) {
+        postSales.setCreateBy(SecurityUtils.getUsername());
+        postSales.setCreateTime(LocalDateTime.now());
+        int insert = postSalesMapper.insert(postSales);
+        if (insert>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult updatePostSales(PostSales postSales) {
+        postSales.setUpdateBy(SecurityUtils.getUsername());
+        postSales.setUpdateTime(LocalDateTime.now());
+        int update = postSalesMapper.updateById(postSales);
+        if (update>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+
+    @Override
+    public CommonResult deletedPostSales(Integer salesId) {
+        PostSales postSales = new PostSales();
+        postSales.setId(salesId);
+        postSales.setUpdateBy(SecurityUtils.getUsername());
+        postSales.setUpdateTime(LocalDateTime.now());
+        postSales.setDelFlag(2);
+        int update = postSalesMapper.updateById(postSales);
+        if (update>0){
+            return CommonResult.success();
+        }
+        return CommonResult.failed();
+    }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysRoleServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysRoleServiceImpl.java
index 3ef86c3..7efa97e 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysRoleServiceImpl.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysRoleServiceImpl.java
@@ -203,7 +203,7 @@
             {
                 SysRole role = new SysRole();
                 role.setRoleId(roleId);
-                List<SysRole> roles = (List<SysRole>) SpringUtils.getAopProxy(this).selectRoleList(role);
+                List<SysRole> roles = (List<SysRole>) SpringUtils.getAopProxy(this).selectRoleList(role).getList();
                 if (ObjectUtil.isEmpty(roles))
                 {
                     throw new ApiException("没有权限访问角色数据!");
diff --git a/multi-system/src/main/resources/mapper/system/ContractLedgerMapper.xml b/multi-system/src/main/resources/mapper/system/ContractLedgerMapper.xml
new file mode 100644
index 0000000..a764d7b
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/ContractLedgerMapper.xml
@@ -0,0 +1,29 @@
+<?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.gkhy.exam.system.mapper.ContractLedgerMapper">
+
+    <select id="selectLedgerList" resultType="com.gkhy.exam.system.domain.ContractLedger">
+        SELECT
+            cl.`id`,
+            cl.`company_id`,
+            sc.`name` AS company_name,
+            cl.`number`,
+            cl.`contract_name`,
+            cl.`sign_date`,
+            cl.`del_flag`,
+            cl.`create_by`,
+            cl.`create_time`,
+            cl.`update_by`,
+            cl.`update_time`
+        FROM
+            `contract_ledger` cl
+                LEFT JOIN sys_company sc ON cl.company_id = sc.id
+        WHERE
+            cl.del_flag = 1
+            <if test="companyId!=null">
+                and cl.company_id = #{companyId}
+            </if>
+        ORDER BY
+            cl.create_time DESC
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/ContractReviewMapper.xml b/multi-system/src/main/resources/mapper/system/ContractReviewMapper.xml
new file mode 100644
index 0000000..af92fcc
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/ContractReviewMapper.xml
@@ -0,0 +1,52 @@
+<?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.gkhy.exam.system.mapper.ContractReviewMapper">
+
+    <select id="selectReviewList" resultType="com.gkhy.exam.system.domain.ContractReview">
+        SELECT
+            cr.`id`,
+            cr.`company_id`,
+            cr.`type`,
+            cr.`contract_id`,
+            cl.contract_name,
+            cl.number,
+            cl.sign_date,
+            cr.`record_time`,
+            cr.`registrant_id`,
+            su1.`name` as registrant_name,
+            cr.`customer_name`,
+            cr.`customer_user`,
+            cr.`costomer_phone`,
+            cr.`delivery_time`,
+            cr.`delivery_addr`,
+            cr.`delivery_type`,
+            cr.`pay_type`,
+            cr.`product_mess`,
+            cr.`risk_mess`,
+            cr.`suggest`,
+            cr.`legal_person`,
+            su2.`name` as legal_name,
+            cr.`legal_time`,
+            cr.`del_flag`,
+            cr.`create_by`,
+            cr.`create_time`,
+            cr.`update_by`,
+            cr.`update_time`
+        FROM
+            `contract_review` cr
+                LEFT JOIN sys_company sc ON cr.company_id = sc.id
+                LEFT JOIN sys_user su1 ON cr.registrant_id = su1.id
+                LEFT JOIN sys_user su2 ON cr.legal_person = su2.id
+                LEFT JOIN contract_ledger cl ON cr.contract_id = cl.id
+        WHERE
+            cr.del_flag = 1
+        <if test="companyId!=null">
+            and cr.company_id =#{companyId}
+        </if>
+        ORDER BY
+            cr.create_time DESC
+    </select>
+    <select id="selectByContractId" resultType="java.lang.Integer">
+        select count(*) from contract_review where contract_id =#{contractId} and type = 1
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/ContractReviewMessMapper.xml b/multi-system/src/main/resources/mapper/system/ContractReviewMessMapper.xml
new file mode 100644
index 0000000..77f1535
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/ContractReviewMessMapper.xml
@@ -0,0 +1,59 @@
+<?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.gkhy.exam.system.mapper.ContractReviewMessMapper">
+
+    <insert id="insertMesses" keyProperty="id" useGeneratedKeys="true">
+
+        INSERT INTO `contract_review_mess` (`review_id`, `dept_name` )
+        VALUES
+            <foreach collection="reviewMesses" item="item" separator=",">
+                (#{item.reviewId},
+                #{item.deptName})
+            </foreach>
+    </insert>
+    <insert id="insertMessbs">
+        INSERT INTO `contract_review_mess_b` (`mess_id`, `review_mess`,`review_opinion`,`review_sign` )
+        VALUES
+        <foreach collection="contractReviewMessbs" item="item" separator=",">
+            (#{item.messId},
+            #{item.reviewMess},
+            #{item.reviewOpinion},
+            #{item.reviewSign})
+        </foreach>
+    </insert>
+    <delete id="deleteByReviewId">
+        delete from contract_review_mess where review_id = #{id}
+    </delete>
+    <resultMap id="ContractReviewMessResult" type="com.gkhy.exam.system.domain.ContractReviewMess">
+        <id property="id" column="id"/>
+        <result property="reviewId" column="review_id"/>
+        <result property="deptName" column="dept_name"/>
+        <collection property="contractReviewMessbs" column="id" select="selectByMessId" fetchType="lazy"/>
+    </resultMap>
+
+
+
+    <select id="selectByReviewId" resultMap="ContractReviewMessResult">
+        SELECT
+            `id`,
+            `review_id`,
+            `dept_name`
+        FROM
+            `contract_review_mess`
+        where review_id = #{id}
+    </select>
+
+
+    <select id="selectByMessId" resultType="com.gkhy.exam.system.domain.ContractReviewMessb">
+        SELECT
+            `id`,
+            `mess_id`,
+            `review_mess`,
+            `review_opinion`,
+            `review_sign`
+        FROM
+            `contract_review_mess_b`
+        where mess_id = #{id}
+    </select>
+
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/ContractReviewRequireMapper.xml b/multi-system/src/main/resources/mapper/system/ContractReviewRequireMapper.xml
new file mode 100644
index 0000000..86d6eb6
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/ContractReviewRequireMapper.xml
@@ -0,0 +1,33 @@
+<?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.gkhy.exam.system.mapper.ContractReviewRequireMapper">
+    <insert id="insertRequires">
+        INSERT INTO `contract_review_require` (`review_id`, `product_name`, `specification`, `amount`, `price`, `remark` )
+        VALUES
+            <foreach collection="requires" separator="," item="item">
+                (#{item.reviewId},
+                #{item.productName},
+                #{item.specification},
+                #{item.amount},
+                #{item.price},
+                #{item.remark})
+            </foreach>
+    </insert>
+    <delete id="deleteByReviewId">
+        delete from contract_review_require where  review_id = #{id}
+    </delete>
+
+    <select id="selectByReviewId" resultType="com.gkhy.exam.system.domain.ContractReviewRequire">
+        SELECT
+            `id`,
+            `review_id`,
+            `product_name`,
+            `specification`,
+            `amount`,
+            `price`,
+            `remark`
+        FROM
+            `contract_review_require`
+        where review_id =#{id}
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/CustomerCommunicationMapper.xml b/multi-system/src/main/resources/mapper/system/CustomerCommunicationMapper.xml
new file mode 100644
index 0000000..578526b
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/CustomerCommunicationMapper.xml
@@ -0,0 +1,50 @@
+<?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.gkhy.exam.system.mapper.CustomerCommunicationMapper">
+
+    <select id="selectCommunicationList" resultType="com.gkhy.exam.system.domain.CustomerCommunication">
+        SELECT
+            cc.`id`,
+            cc.`company_id`,
+            sc.`name` as company_name,
+            cc.`record_name`,
+            cc.`number`,
+            cc.`client`,
+            cc.`phone`,
+            cc.`com_time`,
+            cc.`com_addr`,
+            cc.`com_method`,
+            cc.`method_mess`,
+            cc.`com_type`,
+            cc.`type_mess`,
+            cc.`detail_mess`,
+            cc.`detail_user`,
+            su1.`name` as detail_name,
+            cc.`detail_time`,
+            cc.`dispose_mess`,
+            cc.`dispose_user`,
+            su2.`name` as dispose_name,
+            cc.`dispose_time`,
+            cc.`leader_mess`,
+            cc.`leader_user`,
+            su3.`name` as leader_name,
+            cc.`leader_time`,
+            cc.`del_flag`,
+            cc.`create_by`,
+            cc.`create_time`,
+            cc.`update_by`,
+            cc.`update_time`
+        FROM
+            `customer_communication` cc
+                LEFT JOIN sys_company sc on cc.company_id= sc.id
+                LEFT JOIN sys_user su1 on cc.detail_user = su1.id
+                LEFT JOIN sys_user su2 on cc.dispose_user = su2.id
+                LEFT JOIN sys_user su3 on cc.leader_user = su3.id
+        WHERE cc.del_flag = 1
+        <if test="companyId!=null">
+            and cc.company_id = #{companyId}
+        </if>
+        ORDER BY
+            cc.create_time DESC
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/CustomerInventoryMapper.xml b/multi-system/src/main/resources/mapper/system/CustomerInventoryMapper.xml
new file mode 100644
index 0000000..1b993f7
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/CustomerInventoryMapper.xml
@@ -0,0 +1,32 @@
+<?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.gkhy.exam.system.mapper.CustomerInventoryMapper">
+
+    <select id="selectInventoryList" resultType="com.gkhy.exam.system.domain.CustomerInventory">
+        SELECT
+            ci.`id`,
+            ci.`company_id`,
+            sc.`name` as company_name,
+            ci.`customer_name`,
+            ci.`customer_addr`,
+            ci.`person`,
+            ci.`phone`,
+            ci.`emil`,
+            ci.`remark`,
+            ci.`del_flag`,
+            ci.`create_by`,
+            ci.`create_time`,
+            ci.`update_by`,
+            ci.`update_time`
+        FROM
+            `customer_inventory` ci
+                LEFT JOIN sys_company sc ON ci.company_id = sc.id
+        WHERE
+            ci.del_flag = 1
+        <if test="companyId!=null">
+            and ci.company_id = #{companyId}
+        </if>
+        ORDER BY
+            ci.create_time DESC
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/CustomerRecordMapper.xml b/multi-system/src/main/resources/mapper/system/CustomerRecordMapper.xml
new file mode 100644
index 0000000..0a0e821
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/CustomerRecordMapper.xml
@@ -0,0 +1,27 @@
+<?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.gkhy.exam.system.mapper.CustomerRecordMapper">
+
+    <select id="selectRecordList" resultType="com.gkhy.exam.system.domain.CustomerRecord">
+        SELECT
+            cr.`id`,
+            cr.`company_id`,
+            sc.`name` AS company_name,
+            cr.`record_name`,
+            cr.`del_flag`,
+            cr.`create_by`,
+            cr.`create_time`,
+            cr.`update_by`,
+            cr.`update_time`
+        FROM
+            `customer_record` cr
+                LEFT JOIN sys_company sc ON cr.company_id = sc.id
+        WHERE
+            cr.del_flag = 1
+            <if test="companyId!=null">
+                and cr.company_id = #{companyId}
+            </if>
+        ORDER BY
+            cr.create_time DESC
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/CustomerRecordNeedMapper.xml b/multi-system/src/main/resources/mapper/system/CustomerRecordNeedMapper.xml
new file mode 100644
index 0000000..e351cb4
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/CustomerRecordNeedMapper.xml
@@ -0,0 +1,39 @@
+<?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.gkhy.exam.system.mapper.CustomerRecordNeedMapper">
+
+    <insert id="insertNeeds">
+
+        INSERT INTO
+            `customer_record_need`
+            (`record_id`, `customer_name`, `customer_need`, `need_source`, `registrant_id`, `dispose_id`, `dispose_mess`, `remark` )
+        VALUES
+            <foreach collection="customerRecordNeeds" item="item" separator=",">
+                ( #{item.recordId}, #{item.customerName}, #{item.customerNeed}, #{item.needSource}, #{item.registrantId}, #{item.disposeId}, #{item.disposeMess}, #{item.remark})
+            </foreach>
+
+
+    </insert>
+    <delete id="deleteByRecordId">
+        delete from customer_record_need where record_id = #{id}
+    </delete>
+    <select id="selectByRecordId" resultType="com.gkhy.exam.system.domain.CustomerRecordNeed">
+        SELECT
+            crn.`id`,
+            crn.`record_id`,
+            crn.`customer_name`,
+            crn.`customer_need`,
+            crn.`need_source`,
+            crn.`registrant_id`,
+            su.`name` as registrant_name,
+            crn.`dispose_id`,
+            sd.`dept_name` as dispose_name,
+            crn.`dispose_mess`,
+            crn.`remark`
+        FROM
+            `customer_record_need` crn
+        left join sys_user su on crn.registrant_id = su.id
+        left join sys_dept sd on crn.dispose_id = sd.dept_id
+        where record_id = #{id}
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/MonthlyInspectionMapper.xml b/multi-system/src/main/resources/mapper/system/MonthlyInspectionMapper.xml
new file mode 100644
index 0000000..3ac56f5
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/MonthlyInspectionMapper.xml
@@ -0,0 +1,27 @@
+<?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.gkhy.exam.system.mapper.MonthlyInspectionMapper">
+
+    <select id="selectInspectionList" resultType="com.gkhy.exam.system.domain.MonthlyInspection">
+        SELECT
+            mi.`id`,
+            mi.`company_id`,
+            sc.`name` AS company_name,
+            mi.`record_name`,
+            mi.`del_flag`,
+            mi.`create_by`,
+            mi.`create_time`,
+            mi.`update_by`,
+            mi.`update_time`
+        FROM
+            `monthly_inspection` mi
+                LEFT JOIN sys_company sc ON mi.company_id = sc.id
+        WHERE
+            mi.del_flag = 1
+        <if test="companyId!=null">
+            and mi.company_id =#{companyId}
+        </if>
+        ORDER BY
+            mi.create_time DESC
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/MonthlyInspectionMessMapper.xml b/multi-system/src/main/resources/mapper/system/MonthlyInspectionMessMapper.xml
new file mode 100644
index 0000000..bd22f77
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/MonthlyInspectionMessMapper.xml
@@ -0,0 +1,42 @@
+<?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.gkhy.exam.system.mapper.MonthlyInspectionMessMapper">
+    <insert id="insertMonthlys">
+        INSERT INTO `monthly_inspection_mess` ( `monthly_id`, `monthly_time`, `check_user`, `entrench`, `identification`, `place`, `clean`, `safety`, `environment`, `consistency` )
+        VALUES
+            <foreach collection="inspectionMesses" item="item" separator=",">
+                ( #{item.monthlyId} ,
+                #{item.monthlyTime},
+                #{item.checkUser},
+                #{item.entrench},
+                #{item.identification},
+                #{item.place},
+                #{item.clean},
+                #{item.safety},
+                #{item.environment},
+                #{item.consistency})
+            </foreach>
+    </insert>
+    <delete id="deleteByMonthlyId">
+        delete from monthly_inspection_mess where monthly_id = #{id}
+    </delete>
+
+    <select id="selectByMonthlyId" resultType="com.gkhy.exam.system.domain.MonthlyInspectionMess">
+        SELECT
+            `id`,
+            `monthly_id`,
+            `monthly_time`,
+            `check_user`,
+            `entrench`,
+            `identification`,
+            `place`,
+            `clean`,
+            `safety`,
+            `environment`,
+            `consistency`
+        FROM
+            `monthly_inspection_mess`
+        WHERE monthly_id = #{id}
+
+    </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/PostSalesMapper.xml b/multi-system/src/main/resources/mapper/system/PostSalesMapper.xml
new file mode 100644
index 0000000..62fe62f
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/PostSalesMapper.xml
@@ -0,0 +1,42 @@
+<?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.gkhy.exam.system.mapper.PostSalesMapper">
+
+    <select id="selectSalesList" resultType="com.gkhy.exam.system.domain.PostSales">
+        SELECT
+            ps.`id`,
+            ps.`company_id`,
+            sc.`name` as company_name,
+            ps.`record_name`,
+            ps.`number`,
+            ps.`client_name`,
+            ps.`server_time`,
+            ps.`addr`,
+            ps.`person`,
+            ps.`phone`,
+            ps.`server_mess`,
+            ps.`suggest`,
+            ps.`person_id`,
+            su.`name` as person_name,
+            ps.`server_phone`,
+            ps.`server_evlauate`,
+            ps.`opinion`,
+            ps.`custom`,
+            ps.`del_flag`,
+            ps.`create_by`,
+            ps.`create_time`,
+            ps.`update_by`,
+            ps.`update_time`
+        FROM
+            `post_sales` ps
+                LEFT JOIN sys_company sc ON ps.company_id = sc.id
+                LEFT JOIN sys_user su ON ps.person_id = su.id
+        WHERE
+            ps.del_flag = 1
+        <if test="companyId!=null">
+            and ps.company_id = #{companyId}
+        </if>
+        ORDER BY
+            ps.create_time DESC
+    </select>
+</mapper>

--
Gitblit v1.9.2