From 407885cde2e4b434509d0f97d4c627c9636f4735 Mon Sep 17 00:00:00 2001
From: heheng <475597332@qq.com>
Date: 星期四, 14 八月 2025 17:23:52 +0800
Subject: [PATCH] 部分新功能
---
multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecord.java | 80 ++
multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewSubsidiaryMapper.java | 18
multi-system/src/main/resources/mapper/system/OutsourcedUnqualifiedMapper.xml | 16
multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedProductServiceImpl.java | 63 ++
multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordDetailsMapper.java | 18
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedCommonController.java | 60 +
multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedCommonService.java | 25
multi-system/src/main/resources/mapper/system/OutsourcedCommonMapper.xml | 15
multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReviewSubsidiary.java | 78 ++
multi-system/src/main/resources/mapper/system/OutsourcedProductMapper.xml | 16
multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedCommon.java | 97 +++
multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedProduct.java | 80 ++
multi-system/src/main/java/com/gkhy/exam/system/service/WarehousingRecordService.java | 27
multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedReviewServiceImpl.java | 128 ++++
multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedUnqualifiedMapper.java | 21
multi-system/src/main/resources/mapper/system/WarehousingRecordDetailsMapper.xml | 5
multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedUnqualifiedService.java | 24
multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedUnqualified.java | 92 ++
multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedProductMapper.java | 21
multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReview.java | 185 +++++
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedReviewController.java | 67 ++
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/WarehousingRecordController.java | 65 ++
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedUnqualifiedController.java | 58 +
multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecordDetails.java | 104 +++
multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewMapper.java | 22
multi-system/src/main/resources/mapper/system/OutsourcedReviewMapper.xml | 14
multi-system/src/main/resources/mapper/system/WarehousingRecordMapper.xml | 14
multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedProductController.java | 61 +
multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedUnqualifiedServiceImpl.java | 66 ++
multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedCommonServiceImpl.java | 63 ++
multi-system/src/main/java/com/gkhy/exam/system/service/impl/WarehousingRecordServiceImpl.java | 120 +++
multi-system/src/main/resources/mapper/system/OutsourcedReviewSubsidiaryMapper.xml | 5
multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordMapper.java | 21
multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedCommonMapper.java | 21
multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedReviewService.java | 27
multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedProductService.java | 25
36 files changed, 1,822 insertions(+), 0 deletions(-)
diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedCommonController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedCommonController.java
new file mode 100644
index 0000000..a54e520
--- /dev/null
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedCommonController.java
@@ -0,0 +1,60 @@
+package com.gkhy.exam.admin.controller.web;
+
+
+import com.gkhy.exam.common.annotation.RepeatSubmit;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedCommon;
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.gkhy.exam.system.service.OutsourcedCommonService;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 外包 前端控制器
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@RestController
+@RequestMapping("/system/outsourcedCommon")
+@Api(tags = "外包工艺流程图/加工合同质量协议/产品检验合格记录管理")
+public class OutsourcedCommonController {
+
+ @Autowired
+ private OutsourcedCommonService outsourcedCommonService;
+
+ @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"),
+ @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = false, value = "公司id"),
+ @ApiImplicitParam(paramType = "query", name = "osType", dataType = "int", required = true, value = "1、外包工艺流程图2、加工合同质量协议3、产品检验合格记录"),
+ })
+ @GetMapping("/selectOutsourcedCommonList")
+ public CommonResult selectOutsourcedCommonList(OutsourcedCommon outsourcedCommon){
+ return CommonResult.success(outsourcedCommonService.selectOutsourcedCommonList(outsourcedCommon));
+ }
+ @RepeatSubmit
+ @ApiOperation(value = "新增编辑工艺流程图/加工合同质量协议/产品检验合格记录")
+ @PostMapping("/saveOutsourcedCommon")
+ public CommonResult saveOutsourcedCommon(@RequestBody @Validated OutsourcedCommon outsourcedCommon){
+ return outsourcedCommonService.saveOutsourcedCommon(outsourcedCommon);
+ }
+
+ @ApiOperation(value = "删除外包工艺流程图/加工合同质量协议/产品检验合格记录")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
+ })
+ @GetMapping("/deletedOutsourcedCommon")
+ public CommonResult deletedOutsourcedCommon(@RequestParam Long id){
+ return outsourcedCommonService.deletedOutsourcedCommon(id);
+ }
+
+}
diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedProductController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedProductController.java
new file mode 100644
index 0000000..5db46e3
--- /dev/null
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedProductController.java
@@ -0,0 +1,61 @@
+package com.gkhy.exam.admin.controller.web;
+
+
+import com.gkhy.exam.common.annotation.RepeatSubmit;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.AnnualMaintenance;
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.gkhy.exam.system.domain.vo.AnnualMaintenanceSaveDTOReq;
+import com.gkhy.exam.system.service.AnnualMaintenanceService;
+import com.gkhy.exam.system.service.OutsourcedProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 外包产品名称 前端控制器
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@RestController
+@RequestMapping("/system/outsourcedProduct")
+@Api(tags = "外包产品名称管理")
+public class OutsourcedProductController {
+
+ @Resource
+ private OutsourcedProductService outsourcedProductService;
+
+ @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"),
+ @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = false, value = "公司id"),
+ })
+ @GetMapping("/selectOutsourcedProductList")
+ public CommonResult selectOutsourcedProductList(OutsourcedProduct outsourcedProduct){
+ return CommonResult.success(outsourcedProductService.selectOutsourcedProductList(outsourcedProduct));
+ }
+ @RepeatSubmit
+ @ApiOperation(value = "新增编辑外包产品名称")
+ @PostMapping("/saveOutsourcedProduct")
+ public CommonResult saveOutsourcedProduct(@RequestBody @Validated OutsourcedProduct outsourcedProduct){
+ return outsourcedProductService.saveOutsourcedProduct(outsourcedProduct);
+ }
+
+ @ApiOperation(value = "删除外包产品名称")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
+ })
+ @GetMapping("/deletedOutsourcedProduct")
+ public CommonResult deletedOutsourcedProduct(@RequestParam Long id){
+ return outsourcedProductService.deletedOutsourcedProduct(id);
+ }
+}
diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedReviewController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedReviewController.java
new file mode 100644
index 0000000..2686587
--- /dev/null
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedReviewController.java
@@ -0,0 +1,67 @@
+package com.gkhy.exam.admin.controller.web;
+
+
+import com.gkhy.exam.common.annotation.RepeatSubmit;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedReview;
+import com.gkhy.exam.system.domain.WarehousingRecord;
+import com.gkhy.exam.system.service.OutsourcedReviewService;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 外包过程评审 前端控制器
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@RestController
+@RequestMapping("/system/outsourcedReview")
+@Api(tags = "外包过程评审")
+public class OutsourcedReviewController {
+
+ @Autowired
+ private OutsourcedReviewService outsourcedReviewService;
+
+ @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"),
+ @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = false, value = "公司id"),
+ })
+ @GetMapping("/selectOutsourcedReviewList")
+ public CommonResult selectOutsourcedReviewList(OutsourcedReview outsourcedReview){
+ return CommonResult.success(outsourcedReviewService.selectOutsourcedReviewList(outsourcedReview));
+ }
+ @RepeatSubmit
+ @ApiOperation(value = "新增编辑外包过程评审")
+ @PostMapping("/saveOutsourcedReview")
+ public CommonResult saveOutsourcedReview(@RequestBody @Validated OutsourcedReview outsourcedReview){
+ return outsourcedReviewService.saveOutsourcedReview(outsourcedReview);
+ }
+ @ApiOperation(value = "外包过程评审详情")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
+ })
+ @GetMapping("/getOutsourcedReview")
+ public CommonResult getOutsourcedReview(@RequestParam Long id){
+ return outsourcedReviewService.getOutsourcedReview(id);
+ }
+ @ApiOperation(value = "删除外包过程评审")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
+ })
+ @GetMapping("/deletedOutsourcedReview")
+ public CommonResult deletedOutsourcedReview(@RequestParam Long id){
+ return outsourcedReviewService.deletedOutsourcedReview(id);
+ }
+
+
+}
diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedUnqualifiedController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedUnqualifiedController.java
new file mode 100644
index 0000000..a06ea80
--- /dev/null
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/OutsourcedUnqualifiedController.java
@@ -0,0 +1,58 @@
+package com.gkhy.exam.admin.controller.web;
+
+
+import com.gkhy.exam.common.annotation.RepeatSubmit;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.gkhy.exam.system.domain.OutsourcedUnqualified;
+import com.gkhy.exam.system.service.OutsourcedUnqualifiedService;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 外包不合格品处理及纠错 前端控制器
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@RestController
+@RequestMapping("/system/outsourcedUnqualified")
+@Api(tags = "外包不合格品处理及纠错管理")
+public class OutsourcedUnqualifiedController {
+
+ @Autowired
+ private OutsourcedUnqualifiedService outsourcedUnqualifiedService;
+
+ @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"),
+ @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = false, value = "公司id"),
+ })
+ @GetMapping("/selectOutsourcedUnqualifiedList")
+ public CommonResult selectOutsourcedUnqualifiedList(OutsourcedUnqualified outsourcedUnqualified){
+ return CommonResult.success(outsourcedUnqualifiedService.selectOutsourcedUnqualifiedList(outsourcedUnqualified));
+ }
+ @RepeatSubmit
+ @ApiOperation(value = "新增编辑外包不合格品处理及纠错")
+ @PostMapping("/saveOutsourcedUnqualified")
+ public CommonResult saveOutsourcedUnqualified(@RequestBody @Validated OutsourcedUnqualified outsourcedUnqualified){
+ return outsourcedUnqualifiedService.saveOutsourcedUnqualified(outsourcedUnqualified);
+ }
+
+ @ApiOperation(value = "删除外包不合格品处理及纠错")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
+ })
+ @GetMapping("/deletedOutsourcedUnqualified")
+ public CommonResult deletedOutsourcedUnqualified(@RequestParam Long id){
+ return outsourcedUnqualifiedService.deletedOutsourcedUnqualified(id);
+ }
+}
diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/WarehousingRecordController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/WarehousingRecordController.java
new file mode 100644
index 0000000..6b1fb49
--- /dev/null
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/web/WarehousingRecordController.java
@@ -0,0 +1,65 @@
+package com.gkhy.exam.admin.controller.web;
+
+
+import com.gkhy.exam.common.annotation.RepeatSubmit;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedUnqualified;
+import com.gkhy.exam.system.domain.WarehousingRecord;
+import com.gkhy.exam.system.service.WarehousingRecordService;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 出入库记录主表 前端控制器
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@RestController
+@RequestMapping("/system/warehousingRecord")
+@Api(tags = "出入库记录")
+public class WarehousingRecordController {
+ @Autowired
+ private WarehousingRecordService warehousingRecordService;
+
+ @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"),
+ @ApiImplicitParam(paramType = "query", name = "companyId", dataType = "int", required = false, value = "公司id"),
+ })
+ @GetMapping("/selectWarehousingRecordList")
+ public CommonResult selectWarehousingRecordList(WarehousingRecord warehousingRecord){
+ return CommonResult.success(warehousingRecordService.selectWarehousingRecordList(warehousingRecord));
+ }
+ @RepeatSubmit
+ @ApiOperation(value = "新增编辑出入库记录")
+ @PostMapping("/saveWarehousingRecord")
+ public CommonResult saveWarehousingRecord(@RequestBody @Validated WarehousingRecord warehousingRecord){
+ return warehousingRecordService.saveWarehousingRecord(warehousingRecord);
+ }
+ @ApiOperation(value = "入库记录详情")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
+ })
+ @GetMapping("/getWarehousingRecord")
+ public CommonResult getWarehousingRecord(@RequestParam Long id){
+ return warehousingRecordService.getWarehousingRecord(id);
+ }
+ @ApiOperation(value = "删除出入库记录")
+ @ApiImplicitParams({
+ @ApiImplicitParam(paramType = "query", name = "id", dataType = "int", required = true, value = "id"),
+ })
+ @GetMapping("/deletedWarehousingRecord")
+ public CommonResult deletedWarehousingRecord(@RequestParam Long id){
+ return warehousingRecordService.deletedWarehousingRecord(id);
+ }
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedCommon.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedCommon.java
new file mode 100644
index 0000000..b856787
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedCommon.java
@@ -0,0 +1,97 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 外包工艺流程图/加工合同质量协议/产品检验合格记录
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Getter
+@Setter
+@TableName("outsourced_common")
+@ApiModel(value = "OutsourcedCommon对象", description = "外包工艺流程图/加工合同质量协议/产品检验合格记录")
+public class OutsourcedCommon implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty(value = "公司id",required = true)
+ @TableField("company_id")
+ @NotNull(message = "公司id不能为空")
+ private Long companyId;
+
+ @ApiModelProperty(value = "供应商id",required = true)
+ @TableField("supplier_id")
+ @NotNull(message = "供应商id不能为空")
+ private Integer supplierId;
+
+ @ApiModelProperty(value = "供应商名称")
+ @TableField(exist = false)
+ private String supplierName;
+
+// @ApiModelProperty(value = "产品名称",required = true)
+// @TableField("product_name")
+// @NotBlank(message = "产品名称不能为空")
+// private String productName;
+
+ @ApiModelProperty(value = "1、外包工艺流程图2、加工合同质量协议3、产品检验合格记录",required = true)
+ @TableField("os_type")
+ @NotNull(message = "类型不能为空")
+ private Integer osType;
+
+ @ApiModelProperty("附件名称")
+ @TableField("file_name")
+ private String fileName;
+
+ @ApiModelProperty("附件地址")
+ @TableField("file_path")
+ private String filePath;
+
+ @ApiModelProperty("格式")
+ @TableField("format")
+ private String format;
+
+ @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
+ @TableField("del_flag")
+ private Integer delFlag;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("乐观锁")
+ @TableField("version")
+ private Integer version;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedProduct.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedProduct.java
new file mode 100644
index 0000000..16f5069
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedProduct.java
@@ -0,0 +1,80 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 外包产品名称
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Getter
+@Setter
+@TableName("outsourced_product")
+@ApiModel(value = "OutsourcedProduct对象", description = "外包产品名称")
+public class OutsourcedProduct implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty(value = "公司id",required = true)
+ @TableField("company_id")
+ @NotNull(message = "公司id不能为空")
+ private Long companyId;
+
+ @ApiModelProperty(value = "供应商id",required = true)
+ @TableField("supplier_id")
+ @NotNull(message = "供应商id不能为空")
+ private Integer supplierId;
+
+ @ApiModelProperty(value = "供应商名称")
+ @TableField(exist = false)
+ private String supplierName;
+
+ @ApiModelProperty(value = "产品名称",required = true)
+ @TableField("product_name")
+ @NotBlank(message = "产品名称不能为空")
+ private String productName;
+
+ @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
+ @TableField("del_flag")
+ private Integer delFlag;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("乐观锁")
+ @TableField("version")
+ private Integer version;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReview.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReview.java
new file mode 100644
index 0000000..dff74ff
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReview.java
@@ -0,0 +1,185 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 外包过程评审
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Getter
+@Setter
+@TableName("outsourced_review")
+@ApiModel(value = "OutsourcedReview对象", description = "外包过程评审")
+public class OutsourcedReview implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty(value = "公司id",required = true)
+ @TableField("company_id")
+ @NotNull(message = "公司id不能为空")
+ private Long companyId;
+
+ @ApiModelProperty(value = "评审名称",required = true)
+ @TableField("review_name")
+ @NotBlank(message = "评审名称不能为空")
+ private String reviewName;
+
+ @ApiModelProperty(value = "产品名称",required = true)
+ @TableField("product_name")
+ @NotBlank(message = "产品名称不能为空")
+ private String productName;
+
+ @ApiModelProperty(value = "部门id",required = true)
+ @TableField("dept_id")
+ @NotNull(message = "部门id不能为空")
+ private Long deptId;
+
+ @ApiModelProperty(value = "部门负责人id",required = true)
+ @TableField("dept_leader_id")
+ @NotNull(message = "部门负责人id不能为空")
+ private Integer deptLeaderId;
+
+ @ApiModelProperty(value = "外包过程",required = true)
+ @TableField("outsourced_process")
+ @NotBlank(message = "外包过程不能为空")
+ private String outsourcedProcess;
+
+ @ApiModelProperty(value = "是否为关键件重要件:1、重要2、关键3、普通",required = true)
+ @TableField("piece_type")
+ @NotNull(message = "是否为关键件重要件不能为空")
+ private Integer pieceType;
+
+ @ApiModelProperty(value = "过程重要性:1、关键2、一般",required = true)
+ @TableField("process_type")
+ @NotNull(message = "过程重要性不能为空")
+ private Integer processType;
+
+ @ApiModelProperty(value = "是否可外包:1、是2、否",required = true)
+ @TableField("outsource_type")
+ @NotNull(message = "是否可外包不能为空")
+ private Integer outsourceType;
+
+ @ApiModelProperty("措施内容")
+ @TableField("measure")
+ private String measure;
+
+ @ApiModelProperty(value = "申请部门",required = true)
+ @TableField("apply_dept")
+ @NotBlank(message = "申请部门不能为空")
+ private String applyDept;
+
+ @ApiModelProperty(value = "申请部门日期",required = true)
+ @TableField("apply_dept_date")
+ @NotNull(message = "申请部门日期不能为空")
+ private LocalDateTime applyDeptDate;
+
+ @ApiModelProperty(value = "质检部",required = true)
+ @TableField("quality_inspection")
+ @NotBlank(message = "质检部不能为空")
+ private String qualityInspection;
+
+ @ApiModelProperty(value = "质检部日期",required = true)
+ @TableField("quality_inspection_date")
+ @NotNull(message = "质检部日期不能为空")
+ private LocalDateTime qualityInspectionDate;
+
+ @ApiModelProperty(value = "管理者代表",required = true)
+ @TableField("management_representative")
+ @NotBlank(message = "管理者代表不能为空")
+ private String managementRepresentative;
+
+ @ApiModelProperty(value = "管理者代表日期",required = true)
+ @TableField("management_representative_date")
+ @NotNull(message = "质检部日期不能为空")
+ private LocalDateTime managementRepresentativeDate;
+
+ @ApiModelProperty("批准意见")
+ @TableField("approval_opinions")
+ private String approvalOpinions;
+
+ @ApiModelProperty(value = "主管领导",required = true)
+ @TableField("executive")
+ @NotBlank(message = "主管领导不能为空")
+ private String executive;
+
+ @ApiModelProperty(value = "主管领导日期",required = true)
+ @TableField("executive_date")
+ @NotNull(message = "主管领导日期不能为空")
+ private LocalDateTime executiveDate;
+
+ @ApiModelProperty("过程重要性:1、本单位2、生产急需3、其他")
+ @TableField("necessity")
+ private String necessity;
+
+ @ApiModelProperty("过程可行性:1、本单位图纸2、本单位合格原材料3、本单位实施过程4、其他")
+ @TableField("feasibility")
+ private String feasibility;
+
+ @ApiModelProperty("风险识别:1、质量影响2、供货影响3、经济效益4、其他")
+ @TableField("risk_recognition")
+ private String riskRecognition;
+
+ @ApiModelProperty("质量措施:1、进货检验2、我方检验3、顾客方检验")
+ @TableField("quality_measures")
+ private String qualityMeasures;
+
+ @ApiModelProperty("进度措施:1、供方沟通2、供方出计划3、列出制约")
+ @TableField("progress_measures")
+ private String progressMeasures;
+
+ @ApiModelProperty("经济措施:1、我司财务2、预算范围内3、协商解决")
+ @TableField("economic_measure")
+ private String economicMeasure;
+
+ @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
+ @TableField("del_flag")
+ private Integer delFlag;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("乐观锁")
+ @TableField("version")
+ @Version
+ private Integer version;
+
+ @ApiModelProperty("协作单位")
+ @TableField(exist = false)
+ private List<OutsourcedReviewSubsidiary> outsourcedReviewSubsidiaryList;
+
+ @ApiModelProperty("删除的协作单位id")
+ @TableField(exist = false)
+ private List<Long> delOutsourcedReviewSubsidiaryIds;
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReviewSubsidiary.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReviewSubsidiary.java
new file mode 100644
index 0000000..12c3691
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedReviewSubsidiary.java
@@ -0,0 +1,78 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 外包过程评审附属表
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Getter
+@Setter
+@TableName("outsourced_review_subsidiary")
+@ApiModel(value = "OutsourcedReviewSubsidiary对象", description = "外包过程评审附属表")
+public class OutsourcedReviewSubsidiary implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("主表id")
+ @TableField("review_id")
+ private Long reviewId;
+
+ @ApiModelProperty("协作单位地址")
+ @TableField("assist_address")
+ private String assistAddress;
+
+ @ApiModelProperty("协作单位名称")
+ @TableField("assist_name")
+ private String assistName;
+
+ @ApiModelProperty("电话")
+ @TableField("phone")
+ private String phone;
+
+ @ApiModelProperty("排序")
+ @TableField("sort")
+ private Integer sort;
+
+ @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
+ @TableField("del_flag")
+ private Integer delFlag;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("乐观锁")
+ @TableField("version")
+ private Integer version;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedUnqualified.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedUnqualified.java
new file mode 100644
index 0000000..36b35cd
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/OutsourcedUnqualified.java
@@ -0,0 +1,92 @@
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 外包不合格品处理及纠错
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Getter
+@Setter
+@TableName("outsourced_unqualified")
+@ApiModel(value = "OutsourcedUnqualified对象", description = "外包不合格品处理及纠错")
+public class OutsourcedUnqualified implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty(value = "公司id",required = true)
+ @TableField("company_id")
+ @NotNull(message = "公司id不能为空")
+ private Long companyId;
+
+ @ApiModelProperty(value = "供应商id",required = true)
+ @TableField("supplier_id")
+ @NotNull(message = "供应商id不能为空")
+ private Integer supplierId;
+
+ @ApiModelProperty(value = "供应商名称")
+ @TableField(exist = false)
+ private String supplierName;
+
+ @ApiModelProperty(value = "产品名称",required = true)
+ @TableField("unqualified_product_name")
+ @NotBlank(message = "产品名称不能为空")
+ private String unqualifiedProductName;
+
+ @ApiModelProperty("附件名称")
+ @TableField("file_name")
+ private String fileName;
+
+ @ApiModelProperty("附件地址")
+ @TableField("file_path")
+ private String filePath;
+
+ @ApiModelProperty("格式")
+ @TableField("format")
+ private String format;
+
+ @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
+ @TableField("del_flag")
+ private Integer delFlag;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("乐观锁")
+ @TableField("version")
+ private Integer version;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecord.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecord.java
new file mode 100644
index 0000000..11dcfde
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecord.java
@@ -0,0 +1,80 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 出入库记录主表
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Getter
+@Setter
+@TableName("warehousing_record")
+@ApiModel(value = "WarehousingRecord对象", description = "出入库记录主表")
+public class WarehousingRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty(value = "公司id",required = true)
+ @TableField("company_id")
+ @NotNull(message = "公司id不能为空")
+ private Long companyId;
+
+ @ApiModelProperty(value = "记录名称",required = true)
+ @TableField("record_name")
+ @NotNull(message = "记录名称不能为空")
+ private String recordName;
+
+ @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
+ @TableField("del_flag")
+ private Integer delFlag;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("乐观锁")
+ @TableField("version")
+ @Version
+ private Integer version;
+
+ @ApiModelProperty("出入库记录详情")
+ @TableField(exist = false)
+ @NotEmpty
+ private List<WarehousingRecordDetails> warehousingRecordDetails;
+
+ @ApiModelProperty("出入库记录详情删除数据")
+ @TableField(exist = false)
+ private List<Long> delDetails;
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecordDetails.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecordDetails.java
new file mode 100644
index 0000000..4848deb
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/domain/WarehousingRecordDetails.java
@@ -0,0 +1,104 @@
+package com.gkhy.exam.system.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 出入库记录主表详情/
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Getter
+@Setter
+@TableName("warehousing_record_details")
+@ApiModel(value = "WarehousingRecordDetails对象", description = "出入库记录主表详情")
+public class WarehousingRecordDetails implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("记录主id")
+ @TableField("record_id")
+ private Long recordId;
+
+ @ApiModelProperty("登记时间")
+ @TableField("boarding_time")
+ @NotNull(message = "登记时间不能为空")
+ private LocalDateTime boardingTime;
+
+ @ApiModelProperty("名称")
+ @TableField("name")
+ private String name;
+
+ @ApiModelProperty("入库单位")
+ @TableField("enter_company")
+ private String enterCompany;
+
+ @ApiModelProperty("入库数量")
+ @TableField("enter_num")
+ private Integer enterNum;
+
+ @ApiModelProperty("入库经手人")
+ @TableField("enter_person")
+ private String enterPerson;
+
+ @ApiModelProperty("出库单位")
+ @TableField("outbound_company")
+ private String outboundCompany;
+
+ @ApiModelProperty("出库数量")
+ @TableField("outbound_num")
+ private Integer outboundNum;
+
+ @ApiModelProperty("出库经手人")
+ @TableField("outbound_person")
+ private String outboundPerson;
+
+ @ApiModelProperty("库存")
+ @TableField("amount")
+ private Integer amount;
+
+ @ApiModelProperty("备注")
+ @TableField("remark")
+ private String remark;
+
+ @ApiModelProperty("删除标志(0为删除,1删除,默认0)")
+ @TableField("del_flag")
+ private Integer delFlag;
+
+ @ApiModelProperty("创建时间")
+ @TableField("create_time")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("创建人")
+ @TableField("create_by")
+ private String createBy;
+
+ @ApiModelProperty("更新时间")
+ @TableField("update_time")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("更新人")
+ @TableField("update_by")
+ private String updateBy;
+
+ @ApiModelProperty("乐观锁")
+ @TableField("version")
+ @Version
+ private Integer version;
+
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedCommonMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedCommonMapper.java
new file mode 100644
index 0000000..2c62d56
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedCommonMapper.java
@@ -0,0 +1,21 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.OutsourcedCommon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 外包工艺流程图/加工合同质量协议/产品检验合格记录 Mapper 接口
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Mapper
+public interface OutsourcedCommonMapper extends BaseMapper<OutsourcedCommon> {
+
+ List<OutsourcedCommon> selectOutsourcedCommonList(OutsourcedCommon outsourcedCommon);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedProductMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedProductMapper.java
new file mode 100644
index 0000000..cc206a0
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedProductMapper.java
@@ -0,0 +1,21 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 外包产品名称 Mapper 接口
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Mapper
+public interface OutsourcedProductMapper extends BaseMapper<OutsourcedProduct> {
+
+ List<OutsourcedProduct> getOutsourcedProductList(OutsourcedProduct outsourcedProduct);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewMapper.java
new file mode 100644
index 0000000..5e26832
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewMapper.java
@@ -0,0 +1,22 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.OutsourcedReview;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 外包过程评审 Mapper 接口
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Mapper
+public interface OutsourcedReviewMapper extends BaseMapper<OutsourcedReview> {
+
+ List<OutsourcedReview> getOutsourcedReviewList(OutsourcedReview outsourcedReview);
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewSubsidiaryMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewSubsidiaryMapper.java
new file mode 100644
index 0000000..0ea1547
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedReviewSubsidiaryMapper.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.OutsourcedReviewSubsidiary;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 外包过程评审附属表 Mapper 接口
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Mapper
+public interface OutsourcedReviewSubsidiaryMapper extends BaseMapper<OutsourcedReviewSubsidiary> {
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedUnqualifiedMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedUnqualifiedMapper.java
new file mode 100644
index 0000000..d03583d
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/OutsourcedUnqualifiedMapper.java
@@ -0,0 +1,21 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.OutsourcedUnqualified;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 外包不合格品处理及纠错 Mapper 接口
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Mapper
+public interface OutsourcedUnqualifiedMapper extends BaseMapper<OutsourcedUnqualified> {
+
+ List<OutsourcedUnqualified> getOutsourcedUnqualifiedList(OutsourcedUnqualified outsourcedUnqualified);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordDetailsMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordDetailsMapper.java
new file mode 100644
index 0000000..ccbfb67
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordDetailsMapper.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.WarehousingRecordDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 出入库记录主表详情 Mapper 接口
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Mapper
+public interface WarehousingRecordDetailsMapper extends BaseMapper<WarehousingRecordDetails> {
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordMapper.java b/multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordMapper.java
new file mode 100644
index 0000000..e6c912d
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/mapper/WarehousingRecordMapper.java
@@ -0,0 +1,21 @@
+package com.gkhy.exam.system.mapper;
+
+import com.gkhy.exam.system.domain.WarehousingRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 出入库记录主表 Mapper 接口
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Mapper
+public interface WarehousingRecordMapper extends BaseMapper<WarehousingRecord> {
+
+ List<WarehousingRecord> selectWarehousingRecordList(WarehousingRecord warehousingRecord);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedCommonService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedCommonService.java
new file mode 100644
index 0000000..2f5dd53
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedCommonService.java
@@ -0,0 +1,25 @@
+package com.gkhy.exam.system.service;
+
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedCommon;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.system.domain.OutsourcedUnqualified;
+
+/**
+ * <p>
+ * 外包工艺流程图/加工合同质量协议/产品检验合格记录 服务类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+public interface OutsourcedCommonService extends IService<OutsourcedCommon> {
+
+ CommonPage selectOutsourcedCommonList(OutsourcedCommon outsourcedCommon);
+
+ CommonResult saveOutsourcedCommon(OutsourcedCommon outsourcedCommon);
+
+ CommonResult deletedOutsourcedCommon(Long id);
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedProductService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedProductService.java
new file mode 100644
index 0000000..63430c4
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedProductService.java
@@ -0,0 +1,25 @@
+package com.gkhy.exam.system.service;
+
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.AnnualMaintenanceService;
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 外包产品名称 服务类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+public interface OutsourcedProductService extends IService<OutsourcedProduct> {
+
+
+ CommonPage selectOutsourcedProductList(OutsourcedProduct outsourcedProduct);
+
+ CommonResult saveOutsourcedProduct(OutsourcedProduct outsourcedProduct);
+
+ CommonResult deletedOutsourcedProduct(Long id);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedReviewService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedReviewService.java
new file mode 100644
index 0000000..08c7e77
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedReviewService.java
@@ -0,0 +1,27 @@
+package com.gkhy.exam.system.service;
+
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedReview;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.system.domain.WarehousingRecord;
+
+/**
+ * <p>
+ * 外包过程评审 服务类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+public interface OutsourcedReviewService extends IService<OutsourcedReview> {
+
+ CommonPage selectOutsourcedReviewList(OutsourcedReview outsourcedReview);
+
+ CommonResult saveOutsourcedReview(OutsourcedReview outsourcedReview);
+
+ CommonResult getOutsourcedReview(Long id);
+
+ CommonResult deletedOutsourcedReview(Long id);
+
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedUnqualifiedService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedUnqualifiedService.java
new file mode 100644
index 0000000..3d80ab0
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/OutsourcedUnqualifiedService.java
@@ -0,0 +1,24 @@
+package com.gkhy.exam.system.service;
+
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.gkhy.exam.system.domain.OutsourcedUnqualified;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 外包不合格品处理及纠错 服务类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+public interface OutsourcedUnqualifiedService extends IService<OutsourcedUnqualified> {
+
+ CommonPage selectOutsourcedUnqualifiedList(OutsourcedUnqualified outsourcedUnqualified);
+
+ CommonResult saveOutsourcedUnqualified(OutsourcedUnqualified outsourcedUnqualified);
+
+ CommonResult deletedOutsourcedUnqualified(Long id);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/WarehousingRecordService.java b/multi-system/src/main/java/com/gkhy/exam/system/service/WarehousingRecordService.java
new file mode 100644
index 0000000..a2d0bbf
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/WarehousingRecordService.java
@@ -0,0 +1,27 @@
+package com.gkhy.exam.system.service;
+
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.system.domain.OutsourcedCommon;
+import com.gkhy.exam.system.domain.WarehousingRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 出入库记录主表 服务类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+public interface WarehousingRecordService extends IService<WarehousingRecord> {
+
+
+ CommonPage selectWarehousingRecordList(WarehousingRecord warehousingRecord);
+
+ CommonResult saveWarehousingRecord(WarehousingRecord warehousingRecord);
+
+ CommonResult getWarehousingRecord(Long id);
+
+ CommonResult deletedWarehousingRecord(Long id);
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedCommonServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedCommonServiceImpl.java
new file mode 100644
index 0000000..6eaf84d
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedCommonServiceImpl.java
@@ -0,0 +1,63 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.constant.UserConstant;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.OutsourcedCommon;
+import com.gkhy.exam.system.mapper.OutsourcedCommonMapper;
+import com.gkhy.exam.system.service.OutsourcedCommonService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 外包工艺流程图/加工合同质量协议/产品检验合格记录 服务实现类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Service
+public class OutsourcedCommonServiceImpl extends ServiceImpl<OutsourcedCommonMapper, OutsourcedCommon> implements OutsourcedCommonService {
+
+ @Autowired
+ private OutsourcedCommonMapper outsourcedCommonMapper;
+
+ @Override
+ public CommonPage selectOutsourcedCommonList(OutsourcedCommon outsourcedCommon) {
+ PageUtils.startPage();
+ List<OutsourcedCommon> outsourcedCommons = outsourcedCommonMapper.selectOutsourcedCommonList(outsourcedCommon);
+ return CommonPage.restPage(outsourcedCommons);
+ }
+
+ @Override
+ public CommonResult saveOutsourcedCommon(OutsourcedCommon outsourcedCommon) {
+ if (outsourcedCommon.getId() == null){
+ outsourcedCommon.setCreateBy(SecurityUtils.getUsername());
+ outsourcedCommon.setCreateTime(LocalDateTime.now());
+ return outsourcedCommonMapper.insert(outsourcedCommon) > 0 ? CommonResult.success("保存成功") : CommonResult.failed("保存失败");
+ }
+
+ outsourcedCommon.setUpdateBy(SecurityUtils.getUsername());
+ outsourcedCommon.setUpdateTime(LocalDateTime.now());
+ return outsourcedCommonMapper.updateById(outsourcedCommon) > 0 ? CommonResult.success("保存成功") : CommonResult.failed("保存失败");
+ }
+
+ @Override
+ public CommonResult deletedOutsourcedCommon(Long id) {
+ outsourcedCommonMapper.update(new OutsourcedCommon(),
+ new LambdaUpdateWrapper<OutsourcedCommon>().eq(OutsourcedCommon::getId, id)
+ .set(OutsourcedCommon::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(OutsourcedCommon::getUpdateTime, LocalDateTime.now())
+ .set(OutsourcedCommon::getUpdateBy, SecurityUtils.getUsername()));
+
+ return CommonResult.success();
+ }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedProductServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedProductServiceImpl.java
new file mode 100644
index 0000000..7746a03
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedProductServiceImpl.java
@@ -0,0 +1,63 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.constant.UserConstant;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.AnnualMaintenanceEvaluateDevice;
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.gkhy.exam.system.mapper.OutsourcedProductMapper;
+import com.gkhy.exam.system.service.OutsourcedProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 外包产品名称 服务实现类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Service
+public class OutsourcedProductServiceImpl extends ServiceImpl<OutsourcedProductMapper, OutsourcedProduct> implements OutsourcedProductService {
+
+ @Autowired
+ private OutsourcedProductMapper outsourcedProductMapper;
+ @Override
+ public CommonPage selectOutsourcedProductList(OutsourcedProduct outsourcedProduct) {
+ PageUtils.startPage();
+ List<OutsourcedProduct> outsourcedProducts = outsourcedProductMapper.getOutsourcedProductList(outsourcedProduct);
+ return CommonPage.restPage(outsourcedProducts);
+ }
+
+ @Override
+ public CommonResult saveOutsourcedProduct(OutsourcedProduct outsourcedProduct) {
+ if (outsourcedProduct.getId() == null){
+ outsourcedProduct.setCreateBy(SecurityUtils.getUsername());
+ outsourcedProduct.setCreateTime(LocalDateTime.now());
+ return outsourcedProductMapper.insert(outsourcedProduct) > 0 ? CommonResult.success("保存成功") : CommonResult.failed("保存失败");
+ }
+
+ outsourcedProduct.setUpdateBy(SecurityUtils.getUsername());
+ outsourcedProduct.setUpdateTime(LocalDateTime.now());
+ return outsourcedProductMapper.updateById(outsourcedProduct) > 0 ? CommonResult.success("保存成功") : CommonResult.failed("保存失败");
+ }
+
+ @Override
+ public CommonResult deletedOutsourcedProduct(Long id) {
+ outsourcedProductMapper.update(new OutsourcedProduct(),
+ new LambdaUpdateWrapper<OutsourcedProduct>().eq(OutsourcedProduct::getId, id)
+ .set(OutsourcedProduct::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(OutsourcedProduct::getUpdateTime, LocalDateTime.now())
+ .set(OutsourcedProduct::getUpdateBy, SecurityUtils.getUsername()));
+
+ return CommonResult.success();
+ }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedReviewServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedReviewServiceImpl.java
new file mode 100644
index 0000000..373964a
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedReviewServiceImpl.java
@@ -0,0 +1,128 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.constant.UserConstant;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.OutsourcedReview;
+import com.gkhy.exam.system.domain.OutsourcedReviewSubsidiary;
+import com.gkhy.exam.system.domain.WarehousingRecordDetails;
+import com.gkhy.exam.system.mapper.OutsourcedReviewMapper;
+import com.gkhy.exam.system.mapper.OutsourcedReviewSubsidiaryMapper;
+import com.gkhy.exam.system.service.OutsourcedReviewService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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;
+
+/**
+ * <p>
+ * 外包过程评审 服务实现类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Service
+public class OutsourcedReviewServiceImpl extends ServiceImpl<OutsourcedReviewMapper, OutsourcedReview> implements OutsourcedReviewService {
+
+ @Autowired
+ private OutsourcedReviewMapper outsourcedReviewMapper;
+
+ @Autowired
+ private OutsourcedReviewSubsidiaryMapper outsourcedReviewSubsidiaryMapper;
+
+ @Override
+ public CommonPage selectOutsourcedReviewList(OutsourcedReview outsourcedReview) {
+ PageUtils.startPage();
+ List<OutsourcedReview> outsourcedReviewList = outsourcedReviewMapper.getOutsourcedReviewList(outsourcedReview);
+ return CommonPage.restPage(outsourcedReviewList);
+ }
+
+ @Override
+ @Transactional
+ public CommonResult saveOutsourcedReview(OutsourcedReview outsourcedReview) {
+ List<OutsourcedReviewSubsidiary> outsourcedReviewSubsidiaryList = outsourcedReview.getOutsourcedReviewSubsidiaryList();
+ if (ObjectUtils.isEmpty(outsourcedReviewSubsidiaryList)){
+ return CommonResult.failed("保存参数不能为空");
+ }
+ int i = 0;
+ if (outsourcedReview.getId() == null){
+ outsourcedReview.setCreateBy(SecurityUtils.getUsername());
+ outsourcedReview.setCreateTime(LocalDateTime.now());
+ i = outsourcedReviewMapper.insert(outsourcedReview);
+ }else {
+ outsourcedReview.setUpdateTime(LocalDateTime.now());
+ outsourcedReview.setUpdateBy(SecurityUtils.getUsername());
+ i = outsourcedReviewMapper.updateById(outsourcedReview);
+ }
+ if (i > 0){
+ batchSaveSubsidiary(outsourcedReview.getId(), outsourcedReviewSubsidiaryList, outsourcedReview.getDelOutsourcedReviewSubsidiaryIds());
+ }
+ return i > 0 ? CommonResult.success() : CommonResult.failed();
+ }
+
+ private void batchSaveSubsidiary(Long outsourcedReviewId, List<OutsourcedReviewSubsidiary> outsourcedReviewSubsidiaryList,List<Long> delOutsourcedReviewSubsidiaryIds) {
+
+ if (ObjectUtils.isNotEmpty(delOutsourcedReviewSubsidiaryIds)){
+ int update = outsourcedReviewSubsidiaryMapper.update(new OutsourcedReviewSubsidiary(),
+ new LambdaUpdateWrapper<OutsourcedReviewSubsidiary>().eq(OutsourcedReviewSubsidiary::getId, delOutsourcedReviewSubsidiaryIds).set(OutsourcedReviewSubsidiary::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(OutsourcedReviewSubsidiary::getUpdateTime, LocalDateTime.now()).set(OutsourcedReviewSubsidiary::getUpdateBy, SecurityUtils.getUsername())
+ );
+ if (update <= 0){
+ throw new RuntimeException("操作失败");
+ }
+ }
+ outsourcedReviewSubsidiaryList.forEach(outsourcedReviewSubsidiary -> {
+ if (outsourcedReviewSubsidiary.getId() == null){
+ outsourcedReviewSubsidiary.setReviewId(outsourcedReviewId);
+ outsourcedReviewSubsidiary.setCreateTime(LocalDateTime.now());
+ outsourcedReviewSubsidiary.setCreateBy(SecurityUtils.getUsername());
+ outsourcedReviewSubsidiaryMapper.insert(outsourcedReviewSubsidiary);
+ }else {
+ outsourcedReviewSubsidiary.setUpdateTime(LocalDateTime.now());
+ outsourcedReviewSubsidiary.setUpdateBy(SecurityUtils.getUsername());
+ outsourcedReviewSubsidiaryMapper.updateById(outsourcedReviewSubsidiary);
+ }
+ });
+
+ }
+
+ @Override
+ public CommonResult getOutsourcedReview(Long id) {
+
+ OutsourcedReview outsourcedReview = outsourcedReviewMapper.selectById(id);
+ if (outsourcedReview != null){
+ List<OutsourcedReviewSubsidiary> outsourcedReviewSubsidiaryList = outsourcedReviewSubsidiaryMapper.selectList(
+ new LambdaQueryWrapper<>(OutsourcedReviewSubsidiary.class).eq(OutsourcedReviewSubsidiary::getReviewId, id)
+ .eq(OutsourcedReviewSubsidiary::getDelFlag, UserConstant.ENABLE).orderByDesc(OutsourcedReviewSubsidiary::getCreateTime)
+ );
+ outsourcedReview.setOutsourcedReviewSubsidiaryList(outsourcedReviewSubsidiaryList);
+ }
+ return CommonResult.success(outsourcedReview);
+ }
+
+ @Override
+ @Transactional
+ public CommonResult deletedOutsourcedReview(Long id) {
+ int i = outsourcedReviewMapper.update(new OutsourcedReview(),
+ new LambdaUpdateWrapper<OutsourcedReview>().eq(OutsourcedReview::getId, id).set(OutsourcedReview::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(OutsourcedReview::getUpdateTime, LocalDateTime.now()).set(OutsourcedReview::getUpdateBy, SecurityUtils.getUsername())
+ );
+ if (i > 0){
+ outsourcedReviewSubsidiaryMapper.update(new OutsourcedReviewSubsidiary(),
+ new LambdaUpdateWrapper<OutsourcedReviewSubsidiary>().eq(OutsourcedReviewSubsidiary::getReviewId, id)
+ .set(OutsourcedReviewSubsidiary::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(OutsourcedReviewSubsidiary::getUpdateTime, LocalDateTime.now())
+ .set(OutsourcedReviewSubsidiary::getUpdateBy, SecurityUtils.getUsername()));
+ }
+ return CommonResult.success();
+ }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedUnqualifiedServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedUnqualifiedServiceImpl.java
new file mode 100644
index 0000000..4218687
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/OutsourcedUnqualifiedServiceImpl.java
@@ -0,0 +1,66 @@
+package com.gkhy.exam.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.constant.UserConstant;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.OutsourcedProduct;
+import com.gkhy.exam.system.domain.OutsourcedUnqualified;
+import com.gkhy.exam.system.mapper.OutsourcedUnqualifiedMapper;
+import com.gkhy.exam.system.service.OutsourcedUnqualifiedService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 外包不合格品处理及纠错 服务实现类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Service
+public class OutsourcedUnqualifiedServiceImpl extends ServiceImpl<OutsourcedUnqualifiedMapper, OutsourcedUnqualified> implements OutsourcedUnqualifiedService {
+
+
+ @Autowired
+ private OutsourcedUnqualifiedMapper outsourcedUnqualifiedMapper;
+
+
+ @Override
+ public CommonPage selectOutsourcedUnqualifiedList(OutsourcedUnqualified outsourcedUnqualified) {
+ PageUtils.startPage();
+ List<OutsourcedUnqualified> outsourcedUnqualifieds = outsourcedUnqualifiedMapper.getOutsourcedUnqualifiedList(outsourcedUnqualified);
+ return CommonPage.restPage(outsourcedUnqualifieds);
+ }
+
+ @Override
+ public CommonResult saveOutsourcedUnqualified(OutsourcedUnqualified outsourcedUnqualified) {
+ if (outsourcedUnqualified.getId() == null){
+ outsourcedUnqualified.setCreateBy(SecurityUtils.getUsername());
+ outsourcedUnqualified.setCreateTime(LocalDateTime.now());
+ return outsourcedUnqualifiedMapper.insert(outsourcedUnqualified) > 0 ? CommonResult.success("保存成功") : CommonResult.failed("保存失败");
+ }
+
+ outsourcedUnqualified.setUpdateBy(SecurityUtils.getUsername());
+ outsourcedUnqualified.setUpdateTime(LocalDateTime.now());
+ return outsourcedUnqualifiedMapper.updateById(outsourcedUnqualified) > 0 ? CommonResult.success("保存成功") : CommonResult.failed("保存失败");
+ }
+
+ @Override
+ public CommonResult deletedOutsourcedUnqualified(Long id) {
+ outsourcedUnqualifiedMapper.update(new OutsourcedUnqualified(),
+ new LambdaUpdateWrapper<OutsourcedUnqualified>().eq(OutsourcedUnqualified::getId, id)
+ .set(OutsourcedUnqualified::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(OutsourcedUnqualified::getUpdateTime, LocalDateTime.now())
+ .set(OutsourcedUnqualified::getUpdateBy, SecurityUtils.getUsername()));
+
+ return CommonResult.success();
+ }
+}
diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/WarehousingRecordServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/WarehousingRecordServiceImpl.java
new file mode 100644
index 0000000..609f1fb
--- /dev/null
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/WarehousingRecordServiceImpl.java
@@ -0,0 +1,120 @@
+package com.gkhy.exam.system.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.gkhy.exam.common.api.CommonPage;
+import com.gkhy.exam.common.api.CommonResult;
+import com.gkhy.exam.common.constant.UserConstant;
+import com.gkhy.exam.common.utils.PageUtils;
+import com.gkhy.exam.common.utils.SecurityUtils;
+import com.gkhy.exam.system.domain.OutsourcedUnqualified;
+import com.gkhy.exam.system.domain.WarehousingRecord;
+import com.gkhy.exam.system.domain.WarehousingRecordDetails;
+import com.gkhy.exam.system.mapper.WarehousingRecordDetailsMapper;
+import com.gkhy.exam.system.mapper.WarehousingRecordMapper;
+import com.gkhy.exam.system.service.WarehousingRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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;
+
+/**
+ * <p>
+ * 出入库记录主表 服务实现类
+ * </p>
+ *
+ * @author hh
+ * @since 2025-08-13 09:16:37
+ */
+@Service
+public class WarehousingRecordServiceImpl extends ServiceImpl<WarehousingRecordMapper, WarehousingRecord> implements WarehousingRecordService {
+
+ @Autowired
+ private WarehousingRecordMapper warehousingRecordMapper;
+ @Autowired
+ private WarehousingRecordDetailsMapper warehousingRecordDetailsMapper;
+
+ @Override
+ public CommonPage selectWarehousingRecordList(WarehousingRecord warehousingRecord) {
+ PageUtils.startPage();
+ List<WarehousingRecord> warehousingRecords = warehousingRecordMapper.selectWarehousingRecordList(warehousingRecord);
+ return CommonPage.restPage(warehousingRecords);
+ }
+
+ @Override
+ @Transactional
+ public CommonResult saveWarehousingRecord(WarehousingRecord warehousingRecord) {
+ List<WarehousingRecordDetails> warehousingRecordDetails = warehousingRecord.getWarehousingRecordDetails();
+ if (ObjectUtil.isEmpty(warehousingRecordDetails)){
+ return CommonResult.validateFailed("请选择入库记录详情");
+ }
+ int i = 0;
+ if (warehousingRecord.getId() == null){
+ warehousingRecord.setCreateTime(LocalDateTime.now());
+ warehousingRecord.setCreateBy(SecurityUtils.getUsername());
+ i = warehousingRecordMapper.insert(warehousingRecord);
+ }else {
+
+ warehousingRecord.setUpdateTime(LocalDateTime.now());
+ warehousingRecord.setUpdateBy(SecurityUtils.getUsername());
+ i = warehousingRecordMapper.updateById(warehousingRecord);
+ }
+ if (i > 0){
+ batchSave(warehousingRecord.getId(), warehousingRecordDetails,warehousingRecord.getDelDetails());
+ }
+ return CommonResult.success();
+ }
+
+ private void batchSave(Long id, List<WarehousingRecordDetails> warehousingRecordDetails,List<Long> delDetails) {
+ warehousingRecordDetails.stream().filter(item -> item.getId() == null).forEach(item -> {
+ item.setRecordId(id);
+ item.setCreateTime(LocalDateTime.now());
+ item.setCreateBy(SecurityUtils.getUsername());
+ warehousingRecordDetailsMapper.insert(item);
+ });
+ warehousingRecordDetails.stream().filter(item -> item.getId() != null).forEach(item -> {
+ item.setRecordId(id);
+ item.setUpdateTime(LocalDateTime.now());
+ item.setUpdateBy(SecurityUtils.getUsername());
+ warehousingRecordDetailsMapper.updateById(item);
+ });
+ if (delDetails != null){
+ warehousingRecordDetailsMapper.update(new WarehousingRecordDetails(),
+ new LambdaUpdateWrapper<WarehousingRecordDetails>().in(WarehousingRecordDetails::getId, delDetails)
+ .set(WarehousingRecordDetails::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(WarehousingRecordDetails::getUpdateTime, LocalDateTime.now())
+ .set(WarehousingRecordDetails::getUpdateBy, SecurityUtils.getUsername()));
+ }
+
+ }
+
+ @Override
+ public CommonResult getWarehousingRecord(Long id) {
+ WarehousingRecord warehousingRecord = warehousingRecordMapper.selectById(id);
+ List<WarehousingRecordDetails > de = warehousingRecordDetailsMapper.selectList(
+ new LambdaQueryWrapper<>(WarehousingRecordDetails.class).eq(WarehousingRecordDetails::getRecordId, id)
+ .eq(WarehousingRecordDetails::getDelFlag, UserConstant.ENABLE).orderByAsc(WarehousingRecordDetails::getCreateTime));
+ warehousingRecord.setWarehousingRecordDetails(de);
+ return CommonResult.success(warehousingRecord);
+ }
+
+ @Override
+ @Transactional
+ public CommonResult deletedWarehousingRecord(Long id) {
+ warehousingRecordMapper.update(new WarehousingRecord(),
+ new LambdaUpdateWrapper<WarehousingRecord>().eq(WarehousingRecord::getId, id)
+ .set(WarehousingRecord::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(WarehousingRecord::getUpdateTime, LocalDateTime.now())
+ .set(WarehousingRecord::getUpdateBy, SecurityUtils.getUsername()));
+ warehousingRecordDetailsMapper.update(new WarehousingRecordDetails(),
+ new LambdaUpdateWrapper<WarehousingRecordDetails>().eq(WarehousingRecordDetails::getRecordId, id)
+ .set(WarehousingRecordDetails::getDelFlag, UserConstant.DEPT_DISABLE)
+ .set(WarehousingRecordDetails::getUpdateTime, LocalDateTime.now())
+ .set(WarehousingRecordDetails::getUpdateBy, SecurityUtils.getUsername()));
+ return CommonResult.success();
+ }
+}
diff --git a/multi-system/src/main/resources/mapper/system/OutsourcedCommonMapper.xml b/multi-system/src/main/resources/mapper/system/OutsourcedCommonMapper.xml
new file mode 100644
index 0000000..be0c561
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/OutsourcedCommonMapper.xml
@@ -0,0 +1,15 @@
+<?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.OutsourcedCommonMapper">
+
+ <select id="selectOutsourcedCommonList" resultType="com.gkhy.exam.system.domain.OutsourcedCommon"
+ parameterType="com.gkhy.exam.system.domain.OutsourcedCommon">
+ select a.*, b.supplier_name as supplierName from outsourced_common a
+ left join supplier_sure b on a.supplier_id = b.id
+ where a.del_flag = 0
+ <if test="companyId != null">
+ and a.company_id = #{companyId}
+ </if>
+ order by a.create_time desc
+ </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/OutsourcedProductMapper.xml b/multi-system/src/main/resources/mapper/system/OutsourcedProductMapper.xml
new file mode 100644
index 0000000..f249519
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/OutsourcedProductMapper.xml
@@ -0,0 +1,16 @@
+<?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.OutsourcedProductMapper">
+
+ <select id="getOutsourcedProductList" parameterType="com.gkhy.exam.system.domain.OutsourcedProduct"
+ resultType="com.gkhy.exam.system.domain.OutsourcedProduct">
+ select a.*, b.supplier_name as supplierName from outsourced_product a
+ left join supplier_sure b on a.supplier_id = b.id
+ where a.del_flag = 0
+ <if test="companyId != null">
+ and a.company_id = #{companyId}
+ </if>
+ order by a.create_time desc
+ </select>
+
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/OutsourcedReviewMapper.xml b/multi-system/src/main/resources/mapper/system/OutsourcedReviewMapper.xml
new file mode 100644
index 0000000..decb604
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/OutsourcedReviewMapper.xml
@@ -0,0 +1,14 @@
+<?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.OutsourcedReviewMapper">
+
+ <select id="getOutsourcedReviewList" resultType="com.gkhy.exam.system.domain.OutsourcedReview" parameterType="com.gkhy.exam.system.domain.OutsourcedReview">
+
+ select * from outsourced_review where del_flag = 0
+ <if test="companyId != null">
+ and company_id = #{companyId}
+ </if>
+ order by create_time desc
+
+ </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/OutsourcedReviewSubsidiaryMapper.xml b/multi-system/src/main/resources/mapper/system/OutsourcedReviewSubsidiaryMapper.xml
new file mode 100644
index 0000000..3314ddc
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/OutsourcedReviewSubsidiaryMapper.xml
@@ -0,0 +1,5 @@
+<?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.OutsourcedReviewSubsidiaryMapper">
+
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/OutsourcedUnqualifiedMapper.xml b/multi-system/src/main/resources/mapper/system/OutsourcedUnqualifiedMapper.xml
new file mode 100644
index 0000000..81dd57a
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/OutsourcedUnqualifiedMapper.xml
@@ -0,0 +1,16 @@
+<?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.OutsourcedUnqualifiedMapper">
+
+
+ <select id="getOutsourcedUnqualifiedList" parameterType="com.gkhy.exam.system.domain.OutsourcedUnqualified"
+ resultType="com.gkhy.exam.system.domain.OutsourcedUnqualified">
+ select a.*, b.supplier_name as supplierName from outsourced_unqualified a
+ left join supplier_sure b on a.supplier_id = b.id
+ where a.del_flag = 0
+ <if test="companyId != null">
+ and a.company_id = #{companyId}
+ </if>
+ order by a.create_time desc
+ </select>
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/WarehousingRecordDetailsMapper.xml b/multi-system/src/main/resources/mapper/system/WarehousingRecordDetailsMapper.xml
new file mode 100644
index 0000000..666339e
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/WarehousingRecordDetailsMapper.xml
@@ -0,0 +1,5 @@
+<?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.WarehousingRecordDetailsMapper">
+
+</mapper>
diff --git a/multi-system/src/main/resources/mapper/system/WarehousingRecordMapper.xml b/multi-system/src/main/resources/mapper/system/WarehousingRecordMapper.xml
new file mode 100644
index 0000000..83e45a5
--- /dev/null
+++ b/multi-system/src/main/resources/mapper/system/WarehousingRecordMapper.xml
@@ -0,0 +1,14 @@
+<?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.WarehousingRecordMapper">
+
+ <select id="selectWarehousingRecordList" parameterType="com.gkhy.exam.system.domain.WarehousingRecord"
+ resultType="com.gkhy.exam.system.domain.WarehousingRecord">
+ select * from warehousing_record
+ where del_flag = 0
+ <if test="companyId != null">
+ and company_id = #{companyId}
+ </if>
+ order by create_time desc
+ </select>
+</mapper>
--
Gitblit v1.9.2