Jelajahi Sumber

供应商接入审批流程

zhangcl 5 bulan lalu
induk
melakukan
15806ae654
19 mengubah file dengan 342 tambahan dan 54 penghapusan
  1. 18 18
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java
  2. 1 0
      yudao-module-supplier/yudao-module-supplier-api/src/main/java/cn/iocoder/yudao/module/supplier/enums/ErrorCodeConstant.java
  3. 34 0
      yudao-module-supplier/yudao-module-supplier-api/src/main/java/cn/iocoder/yudao/module/supplier/enums/common/SupplierAuditStatusEnum.java
  4. 5 0
      yudao-module-supplier/yudao-module-supplier-biz/pom.xml
  5. 17 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/SupplierController.java
  6. 4 4
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/vo/ContactRespVO.java
  7. 6 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/vo/SupplierPageReqVO.java
  8. 23 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/vo/SupplierRespVO.java
  9. 8 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/dataobject/product/SupplierDO.java
  10. 9 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/CertificateMapper.java
  11. 10 3
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/ConnectRecordMapper.java
  12. 10 3
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/ContactMapper.java
  13. 10 3
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/CoreProductMapper.java
  14. 2 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/SupplierMapper.java
  15. 32 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/listener/SupplierStatusListener.java
  16. 7 10
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/product/ContactServiceImpl.java
  17. 22 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/product/SupplierService.java
  18. 97 13
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/product/SupplierServiceImpl.java
  19. 27 0
      yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/util/SupplierAuditStatusUtils.java

+ 18 - 18
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java

@@ -52,7 +52,7 @@ import static java.util.Collections.singletonList;
 public class CrmContactServiceImpl implements CrmContactService {
 
     @Resource
-    private CrmContactMapper contactMapper;
+    private CrmContactMapper crmContactMapper;
 
     @Resource
     private CrmCustomerService customerService;
@@ -80,7 +80,7 @@ public class CrmContactServiceImpl implements CrmContactService {
 
         // 2. 插入联系人
         CrmContactDO contact = BeanUtils.toBean(createReqVO, CrmContactDO.class);
-        contactMapper.insert(contact);
+        crmContactMapper.insert(contact);
 
         // 3. 创建数据权限
         permissionService.createPermission(new CrmPermissionCreateReqBO().setUserId(userId)
@@ -111,7 +111,7 @@ public class CrmContactServiceImpl implements CrmContactService {
 
         // 2. 更新联系人
         CrmContactDO updateObj = BeanUtils.toBean(updateReqVO, CrmContactDO.class);
-        contactMapper.updateById(updateObj);
+        crmContactMapper.updateById(updateObj);
 
         // 3. 记录操作日志
         LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldContact, CrmContactSaveReqVO.class));
@@ -156,7 +156,7 @@ public class CrmContactServiceImpl implements CrmContactService {
         }
 
         // 2. 删除联系人
-        contactMapper.deleteById(id);
+        crmContactMapper.deleteById(id);
 
         // 4.1 删除数据权限
         permissionService.deletePermission(CrmBizTypeEnum.CRM_CONTACT.getType(), id);
@@ -168,7 +168,7 @@ public class CrmContactServiceImpl implements CrmContactService {
     }
 
     private CrmContactDO validateContactExists(Long id) {
-        CrmContactDO contact = contactMapper.selectById(id);
+        CrmContactDO contact = crmContactMapper.selectById(id);
         if (contact == null) {
             throw exception(CONTACT_NOT_EXISTS);
         }
@@ -188,7 +188,7 @@ public class CrmContactServiceImpl implements CrmContactService {
         permissionService.transferPermission(new CrmPermissionTransferReqBO(userId, CrmBizTypeEnum.CRM_CONTACT.getType(),
                 reqVO.getId(), reqVO.getNewOwnerUserId(), reqVO.getOldOwnerPermissionLevel()));
         // 2.2 设置新的负责人
-        contactMapper.updateById(new CrmContactDO().setId(reqVO.getId()).setOwnerUserId(reqVO.getNewOwnerUserId()));
+        crmContactMapper.updateById(new CrmContactDO().setId(reqVO.getId()).setOwnerUserId(reqVO.getNewOwnerUserId()));
 
         // 3. 记录转移日志
         LogRecordContext.putVariable("contact", contact);
@@ -199,11 +199,11 @@ public class CrmContactServiceImpl implements CrmContactService {
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#customerId", level = CrmPermissionLevelEnum.OWNER)
     public void updateOwnerUserIdByCustomerId(Long customerId, Long ownerUserId) {
         // 1. 校验存在
-        List<CrmContactDO> contacts = contactMapper.selectListByCustomerId(customerId);
+        List<CrmContactDO> contacts = crmContactMapper.selectListByCustomerId(customerId);
         if (CollUtil.isEmpty(contacts)) {
             return;
         }
-        int count = contactMapper.updateOwnerUserIdByCustomerId(customerId, ownerUserId);
+        int count = crmContactMapper.updateOwnerUserIdByCustomerId(customerId, ownerUserId);
         if (count == 0) {
             throw exception(CONTACT_UPDATE_OWNER_USER_FAIL);
         }
@@ -231,7 +231,7 @@ public class CrmContactServiceImpl implements CrmContactService {
         CrmContactDO contact = validateContactExists(id);
 
         // 2. 更新联系人的跟进信息
-        contactMapper.updateById(new CrmContactDO().setId(id).setContactNextTime(contactNextTime)
+        crmContactMapper.updateById(new CrmContactDO().setId(id).setContactNextTime(contactNextTime)
                 .setContactLastTime(LocalDateTime.now()).setContactLastContent(contactLastContent));
 
         // 3. 记录操作日志上下文
@@ -241,7 +241,7 @@ public class CrmContactServiceImpl implements CrmContactService {
     @Override
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACT, bizId = "#ids", level = CrmPermissionLevelEnum.WRITE)
     public void updateContactContactNextTime(Collection<Long> ids, LocalDateTime contactNextTime) {
-        contactMapper.updateBatch(convertList(ids, id -> new CrmContactDO().setId(id).setContactNextTime(contactNextTime)));
+        crmContactMapper.updateBatch(convertList(ids, id -> new CrmContactDO().setId(id).setContactNextTime(contactNextTime)));
     }
 
     //======================= 查询相关 =======================
@@ -249,7 +249,7 @@ public class CrmContactServiceImpl implements CrmContactService {
     @Override
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
     public CrmContactDO getContact(Long id) {
-        return contactMapper.selectById(id);
+        return crmContactMapper.selectById(id);
     }
 
     @Override
@@ -262,25 +262,25 @@ public class CrmContactServiceImpl implements CrmContactService {
         if (CollUtil.isEmpty(ids)) {
             return ListUtil.empty();
         }
-        return contactMapper.selectBatchIds(ids);
+        return crmContactMapper.selectBatchIds(ids);
     }
 
     @Override
     public List<CrmContactDO> getContactList(Long userId) {
         CrmContactPageReqVO reqVO = new CrmContactPageReqVO();
         reqVO.setPageSize(PAGE_SIZE_NONE); // 不分页
-        return contactMapper.selectPage(reqVO, userId).getList();
+        return crmContactMapper.selectPage(reqVO, userId).getList();
     }
 
     @Override
     public PageResult<CrmContactDO> getContactPage(CrmContactPageReqVO pageReqVO, Long userId) {
-        return contactMapper.selectPage(pageReqVO, userId);
+        return crmContactMapper.selectPage(pageReqVO, userId);
     }
 
     @Override
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#pageVO.customerId", level = CrmPermissionLevelEnum.READ)
     public PageResult<CrmContactDO> getContactPageByCustomerId(CrmContactPageReqVO pageVO) {
-        return contactMapper.selectPageByCustomerId(pageVO);
+        return crmContactMapper.selectPageByCustomerId(pageVO);
     }
 
     @Override
@@ -290,17 +290,17 @@ public class CrmContactServiceImpl implements CrmContactService {
         if (CollUtil.isEmpty(contactBusinessList)) {
             return PageResult.empty();
         }
-        return contactMapper.selectPageByBusinessId(pageVO, convertSet(contactBusinessList, CrmContactBusinessDO::getContactId));
+        return crmContactMapper.selectPageByBusinessId(pageVO, convertSet(contactBusinessList, CrmContactBusinessDO::getContactId));
     }
 
     @Override
     public Long getContactCountByCustomerId(Long customerId) {
-        return contactMapper.selectCount(CrmContactDO::getCustomerId, customerId);
+        return crmContactMapper.selectCount(CrmContactDO::getCustomerId, customerId);
     }
 
     @Override
     public List<CrmContactDO> getContactListByCustomerIdOwnerUserId(Long customerId, Long ownerUserId) {
-        return contactMapper.selectListByCustomerIdOwnerUserId(customerId, ownerUserId);
+        return crmContactMapper.selectListByCustomerIdOwnerUserId(customerId, ownerUserId);
     }
 
 }

+ 1 - 0
yudao-module-supplier/yudao-module-supplier-api/src/main/java/cn/iocoder/yudao/module/supplier/enums/ErrorCodeConstant.java

@@ -4,4 +4,5 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 
 public interface ErrorCodeConstant{
     ErrorCode NOT_EXISTS = new ErrorCode( 122, "供应商主数据不存在");
+    ErrorCode SUPPLIER_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1-060-000-002, "更新供应商审核状态失败,原因:供应商不是审核中状态");
 }

+ 34 - 0
yudao-module-supplier/yudao-module-supplier-api/src/main/java/cn/iocoder/yudao/module/supplier/enums/common/SupplierAuditStatusEnum.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.supplier.enums.common;
+
+import cn.iocoder.yudao.framework.common.core.ArrayValuable;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+import java.util.Arrays;
+
+/**
+ * 供应商 的审批状态
+ *
+ * @author suiyy
+ */
+@RequiredArgsConstructor
+@Getter
+public enum SupplierAuditStatusEnum implements ArrayValuable<Integer> {
+
+    DRAFT(0, "未提交"),
+    PROCESS(10, "审批中"),
+    APPROVE(20, "审核通过"),
+	REJECT(30, "审核不通过"),
+    CANCEL(40, "已取消");
+
+    private final Integer status;
+    private final String name;
+
+    public static final Integer[] ARRAYS = Arrays.stream(values()).map(SupplierAuditStatusEnum::getStatus).toArray(Integer[]::new);
+
+    @Override
+    public Integer[] array() {
+        return ARRAYS;
+    }
+
+}

+ 5 - 0
yudao-module-supplier/yudao-module-supplier-biz/pom.xml

@@ -22,6 +22,11 @@
             <artifactId>yudao-module-supplier-api</artifactId>
             <version>${revision}</version>
         </dependency>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-module-bpm-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
         <dependency>
             <groupId>cn.iocoder.boot</groupId>
             <artifactId>yudao-module-system-biz</artifactId>

+ 17 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/SupplierController.java

@@ -70,6 +70,15 @@ public class SupplierController {
         return success(BeanUtils.toBean(supplierDO, SupplierRespVO.class));
     }
 
+    @GetMapping("/allSupplierInfo")
+    @Operation(summary = "获得供应商主数据及包含的所有子表数据")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('supplier:base:query')")
+    public CommonResult<SupplierRespVO> allSupplierInfo(@RequestParam("id") Long id) {
+        SupplierRespVO supplier = supplierService.allSupplierInfo(id);
+        return success(supplier);
+    }
+
     @GetMapping("/page")
     @Operation(summary = "获得供应商主数据分页")
     @PreAuthorize("@ss.hasPermission('supplier:base:query')")
@@ -107,4 +116,12 @@ public class SupplierController {
         supplierService.changeStatus(id, status);
         return success(true);
     }
+
+    @PutMapping("/submitForApproval")
+    @Operation(summary = "提交审核")
+    @PreAuthorize("@ss.hasPermission('supplier:base:create')")
+    public CommonResult<Boolean> submitForApproval(@RequestParam("id") Long id) {
+        supplierService.submitForApproval(id);
+        return success(true);
+    }
 }

+ 4 - 4
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/vo/ContactRespVO.java

@@ -1,11 +1,11 @@
 package cn.iocoder.yudao.module.supplier.controller.admin.product.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+import lombok.Data;
+
 import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - 供应商联系人 Response VO")
 @Data

+ 6 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/vo/SupplierPageReqVO.java

@@ -64,6 +64,12 @@ public class SupplierPageReqVO extends PageParam {
     @Schema(description = "备注", example = "随便")
     private String remark;
 
+    @Schema(description = "工作流编号", example = "14558")
+    private String processInstanceId;
+
+    @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "2")
+    private Integer auditStatus;
+
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;

+ 23 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/controller/admin/product/vo/SupplierRespVO.java

@@ -5,6 +5,9 @@ import lombok.*;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
 import com.alibaba.excel.annotation.*;
 
 @Schema(description = "管理后台 - 供应商主数据 Response VO")
@@ -80,8 +83,28 @@ public class SupplierRespVO {
     @ExcelProperty("备注")
     private String remark;
 
+    @Schema(description = "工作流编号", example = "14558")
+    @ExcelProperty("工作流编号")
+    private String processInstanceId;
+
+    @Schema(description = "审批状态 未提交、审批中、审批通过、审批不通过、已取消", example = "2")
+    @ExcelProperty("审批状态 未提交、审批中、审批通过、审批不通过、已取消")
+    private Integer auditStatus;
+
     @Schema(description = "创建时间")
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "供应商证件列表")
+    private List<CertificateRespVO> certificates = new ArrayList<>();
+
+    @Schema(description = "供应商联系人信息列表")
+    private List<ContactRespVO> contacts = new ArrayList<>();
+
+    @Schema(description = "供应商核心产品列表")
+    private List<CoreProductRespVO> coreProducts = new ArrayList<>();
+
+    @Schema(description = "供应商联系记录列表")
+    private List<ConnectRecordRespVO> connectRecords = new ArrayList<>();
+
 }

+ 8 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/dataobject/product/SupplierDO.java

@@ -94,5 +94,13 @@ public class SupplierDO extends BaseDO {
      * 备注
      */
     private String remark;
+    /**
+     * 工作流编号
+     */
+    private String processInstanceId;
+    /**
+     * 审批状态 未提交、审批中、审批通过、审批不通过、已取消
+     */
+    private Integer auditStatus;
 
 }

+ 9 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/CertificateMapper.java

@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.CertificateP
 import cn.iocoder.yudao.module.supplier.dal.dataobject.product.CertificateDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 供应商证件资质 Mapper
  *
@@ -26,4 +28,11 @@ public interface CertificateMapper extends BaseMapperX<CertificateDO> {
                 .orderByDesc(CertificateDO::getId));
     }
 
+    default List<CertificateDO> selectListBySupplierId(Long supplierId) {
+        return selectList(new LambdaQueryWrapperX<CertificateDO>()
+                .eq(CertificateDO::getSupplierId, supplierId)
+                .orderByDesc(CertificateDO::getId));
+
+    }
+
 }

+ 10 - 3
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/ConnectRecordMapper.java

@@ -1,14 +1,14 @@
 package cn.iocoder.yudao.module.supplier.dal.mysql.product;
 
-import java.util.*;
-
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.ConnectRecordPageReqVO;
 import cn.iocoder.yudao.module.supplier.dal.dataobject.product.ConnectRecordDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 供应商联系记录 Mapper
  *
@@ -32,4 +32,11 @@ public interface ConnectRecordMapper extends BaseMapperX<ConnectRecordDO> {
                 .orderByDesc(ConnectRecordDO::getId));
     }
 
+    default List<ConnectRecordDO> selectListBySupplierId(Long supplierId) {
+        return selectList(new LambdaQueryWrapperX<ConnectRecordDO>()
+                .eq(ConnectRecordDO::getSupplierId, supplierId)
+                .orderByDesc(ConnectRecordDO::getId));
+
+    }
+
 }

+ 10 - 3
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/ContactMapper.java

@@ -1,14 +1,14 @@
 package cn.iocoder.yudao.module.supplier.dal.mysql.product;
 
-import java.util.*;
-
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.ContactPageReqVO;
 import cn.iocoder.yudao.module.supplier.dal.dataobject.product.ContactDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 供应商联系人 Mapper
  *
@@ -32,4 +32,11 @@ public interface ContactMapper extends BaseMapperX<ContactDO> {
                 .orderByDesc(ContactDO::getId));
     }
 
+    default List<ContactDO> selectListBySupplierId(Long supplierId) {
+        return selectList(new LambdaQueryWrapperX<ContactDO>()
+                .eq(ContactDO::getSupplierId, supplierId)
+                .orderByDesc(ContactDO::getId));
+
+    }
+
 }

+ 10 - 3
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/CoreProductMapper.java

@@ -1,14 +1,14 @@
 package cn.iocoder.yudao.module.supplier.dal.mysql.product;
 
-import java.util.*;
-
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.CoreProductPageReqVO;
 import cn.iocoder.yudao.module.supplier.dal.dataobject.product.CoreProductDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 供应商核心产品 Mapper
  *
@@ -28,4 +28,11 @@ public interface CoreProductMapper extends BaseMapperX<CoreProductDO> {
                 .orderByDesc(CoreProductDO::getId));
     }
 
+    default List<CoreProductDO> selectListBySupplierId(Long supplierId) {
+        return selectList(new LambdaQueryWrapperX<CoreProductDO>()
+                .eq(CoreProductDO::getSupplierId, supplierId)
+                .orderByDesc(CoreProductDO::getId));
+
+    }
+
 }

+ 2 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/SupplierMapper.java

@@ -35,6 +35,8 @@ public interface SupplierMapper extends BaseMapperX<SupplierDO> {
                 .eqIfPresent(SupplierDO::getSize, reqVO.getSize())
                 .eqIfPresent(SupplierDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(SupplierDO::getRemark, reqVO.getRemark())
+                .eqIfPresent(SupplierDO::getProcessInstanceId, reqVO.getProcessInstanceId())
+                .eqIfPresent(SupplierDO::getAuditStatus, reqVO.getAuditStatus())
                 .betweenIfPresent(SupplierDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(SupplierDO::getId));
     }

+ 32 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/listener/SupplierStatusListener.java

@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.supplier.service.listener;
+
+import cn.iocoder.yudao.module.bpm.event.BpmProcessInstanceStatusEvent;
+import cn.iocoder.yudao.module.bpm.event.BpmProcessInstanceStatusEventListener;
+import cn.iocoder.yudao.module.supplier.service.product.SupplierService;
+import cn.iocoder.yudao.module.supplier.service.product.SupplierServiceImpl;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 回款审批的结果的监听器实现类
+ *
+ * @author HUIHUI
+ */
+@Component
+public class SupplierStatusListener extends BpmProcessInstanceStatusEventListener {
+
+    @Resource
+    private SupplierService supplierService;
+
+    @Override
+    public String getProcessDefinitionKey() {
+        return SupplierServiceImpl.PROCESS_KEY;
+    }
+
+    @Override
+    public void onEvent(BpmProcessInstanceStatusEvent event) {
+        supplierService.updateSupplierAuditStatus(Long.parseLong(event.getBusinessKey()), event.getStatus());
+    }
+
+}

+ 7 - 10
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/product/ContactServiceImpl.java

@@ -8,11 +8,8 @@ import cn.iocoder.yudao.module.supplier.enums.ErrorCodeConstant;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.util.*;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 
 
@@ -28,13 +25,13 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
 public class ContactServiceImpl implements ContactService {
 
     @Resource
-    private ContactMapper contactMapper;
+    private ContactMapper supplierContactMapper;
 
     @Override
     public Long createContact(ContactSaveReqVO createReqVO) {
         // 插入
         ContactDO contact = BeanUtils.toBean(createReqVO, ContactDO.class);
-        contactMapper.insert(contact);
+        supplierContactMapper.insert(contact);
         // 返回
         return contact.getId();
     }
@@ -45,7 +42,7 @@ public class ContactServiceImpl implements ContactService {
         validateContactExists(updateReqVO.getId());
         // 更新
         ContactDO updateObj = BeanUtils.toBean(updateReqVO, ContactDO.class);
-        contactMapper.updateById(updateObj);
+        supplierContactMapper.updateById(updateObj);
     }
 
     @Override
@@ -53,23 +50,23 @@ public class ContactServiceImpl implements ContactService {
         // 校验存在
         validateContactExists(id);
         // 删除
-        contactMapper.deleteById(id);
+        supplierContactMapper.deleteById(id);
     }
 
     private void validateContactExists(Long id) {
-        if (contactMapper.selectById(id) == null) {
+        if (supplierContactMapper.selectById(id) == null) {
             throw exception(ErrorCodeConstant.NOT_EXISTS);
         }
     }
 
     @Override
     public ContactDO getContact(Long id) {
-        return contactMapper.selectById(id);
+        return supplierContactMapper.selectById(id);
     }
 
     @Override
     public PageResult<ContactDO> getContactPage(ContactPageReqVO pageReqVO) {
-        return contactMapper.selectPage(pageReqVO);
+        return supplierContactMapper.selectPage(pageReqVO);
     }
 
 }

+ 22 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/product/SupplierService.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.supplier.service.product;
 
 import javax.validation.*;
 import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.SupplierPageReqVO;
+import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.SupplierRespVO;
 import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.SupplierSaveReqVO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.supplier.dal.dataobject.product.SupplierDO;
@@ -55,4 +56,25 @@ public interface SupplierService {
 
     List<SupplierDO> getAll();
     void changeStatus(Long id, Integer status);
+
+    /**
+     * 提交供应商数据审核
+     *
+     */
+    Long submitForApproval(Long id);
+
+    /**
+     * 更新供应商审批结果
+     *
+     * @param id        供应商编号
+     * @param bpmResult BPM 审批结果
+     */
+    void updateSupplierAuditStatus(Long id, Integer bpmResult);
+
+    /**
+     * 供应商基本信息及所有子表信息
+     *
+     * @param id        供应商编号
+     */
+    SupplierRespVO allSupplierInfo(Long id);
 }

+ 97 - 13
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/service/product/SupplierServiceImpl.java

@@ -1,27 +1,32 @@
 package cn.iocoder.yudao.module.supplier.service.product;
 
-import cn.iocoder.yudao.framework.common.exception.ServerException;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
-import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.SupplierPageReqVO;
-import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.SupplierSaveReqVO;
-import cn.iocoder.yudao.module.supplier.dal.dataobject.product.SupplierDO;
-import cn.iocoder.yudao.module.supplier.dal.mysql.product.SupplierMapper;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
+import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.*;
+import cn.iocoder.yudao.module.supplier.dal.dataobject.product.*;
+import cn.iocoder.yudao.module.supplier.dal.mysql.product.*;
 import cn.iocoder.yudao.module.supplier.enums.ErrorCodeConstant;
+import cn.iocoder.yudao.module.supplier.enums.common.SupplierAuditStatusEnum;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-
-
-import java.util.Collections;
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.supplier.enums.ErrorCodeConstant.SUPPLIER_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS;
+import static cn.iocoder.yudao.module.supplier.util.SupplierAuditStatusUtils.convertBpmResultToAuditStatus;
 
 /**
  * 供应商主数据 Service 实现类
@@ -30,10 +35,24 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
  */
 @Service
 @Validated
+@Slf4j
 public class SupplierServiceImpl implements SupplierService {
 
+    public static final String PROCESS_KEY = "supplier";
+
     @Resource
     private SupplierMapper supplierMapper;
+    @Resource
+    private CertificateMapper certificateMapper;
+    @Resource
+    private ContactMapper supplierContactMapper;
+    @Resource
+    private CoreProductMapper coreProductMapper;
+    @Resource
+    private ConnectRecordMapper connectRecordMapper;
+
+    @Resource
+    private BpmProcessInstanceApi processInstanceApi;
 
     @Override
     public Long create(SupplierSaveReqVO createReqVO) {
@@ -68,10 +87,12 @@ public class SupplierServiceImpl implements SupplierService {
         supplierMapper.deleteById(id);
     }
 
-    private void validateExists(Long id) {
-        if (supplierMapper.selectById(id) == null) {
+    private SupplierDO validateExists(Long id) {
+        SupplierDO supplier = supplierMapper.selectById(id);
+        if (ObjUtil.isNull(supplier)) {
             throw exception(ErrorCodeConstant.NOT_EXISTS);
         }
+        return supplier;
     }
 
     @Override
@@ -97,4 +118,67 @@ public class SupplierServiceImpl implements SupplierService {
         supplierMapper.insertOrUpdate(supplierDO);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long submitForApproval(Long id) {
+        // 校验供应商主数据是否存在
+        validateExists(id);
+        // 发起BPM流程
+        // 获取当前登录人信息
+        String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(),
+                new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(id)));
+        // 将流程实例id 更新到 供应商主数据表
+        supplierMapper.updateById(new SupplierDO().setId(id).setProcessInstanceId(processInstanceId)
+                .setAuditStatus(SupplierAuditStatusEnum.PROCESS.getStatus()));
+        return 0l;
+    }
+
+    @Override
+    public void updateSupplierAuditStatus(Long id, Integer bpmResult) {
+        // 1.1 校验存在
+        SupplierDO supplier = validateExists(id);
+        // 1.2 只有审批中,可以更新审批结果
+        if (ObjUtil.notEqual(supplier.getAuditStatus(), SupplierAuditStatusEnum.PROCESS.getStatus())) {
+            log.error("[updateSupplierAuditStatus][supplier({}) 不处于审批中,无法更新审批结果({})]",
+                    supplier.getId(), bpmResult);
+            throw exception(SUPPLIER_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS);
+        }
+
+        // 2. 更新供应商审批状态
+        Integer auditStatus = convertBpmResultToAuditStatus(bpmResult);
+        supplierMapper.updateById(new SupplierDO().setId(id).setAuditStatus(auditStatus));
+    }
+
+    @Override
+    public SupplierRespVO allSupplierInfo(Long id) {
+        // 查询供应商基本信息
+        SupplierDO supplierDO = supplierMapper.selectById(id);
+        SupplierRespVO supplierRespVO = BeanUtils.toBean(supplierDO, SupplierRespVO.class);
+        // 查询供应商证件信息
+        List<CertificateDO> certificateDOS = certificateMapper.selectListBySupplierId(id);
+        if (CollUtil.isNotEmpty(certificateDOS)) {
+            List<CertificateRespVO> certificateRespVOS = BeanUtils.toBean(certificateDOS, CertificateRespVO.class);
+            supplierRespVO.setCertificates(certificateRespVOS);
+        }
+        // 查询联系人信息
+        List<ContactDO> contactsDOS = supplierContactMapper.selectListBySupplierId(id);
+        if (CollUtil.isNotEmpty(contactsDOS)) {
+            List<ContactRespVO> contactRespVOS = BeanUtils.toBean(contactsDOS, ContactRespVO.class);
+            supplierRespVO.setContacts(contactRespVOS);
+        }
+        // 查询核心产品信息
+        List<CoreProductDO> coreProductDOS = coreProductMapper.selectListBySupplierId(id);
+        if (CollUtil.isNotEmpty(coreProductDOS)) {
+            List<CoreProductRespVO> coreProductRespVOS = BeanUtils.toBean(coreProductDOS, CoreProductRespVO.class);
+            supplierRespVO.setCoreProducts(coreProductRespVOS);
+        }
+        // 查询联系记录信息
+        List<ConnectRecordDO> connectRecordDOS = connectRecordMapper.selectListBySupplierId(id);
+        if (CollUtil.isNotEmpty(connectRecordDOS)) {
+            List<ConnectRecordRespVO> connectRecordRespVOS = BeanUtils.toBean(connectRecordDOS, ConnectRecordRespVO.class);
+            supplierRespVO.setConnectRecords(connectRecordRespVOS);
+        }
+        return supplierRespVO;
+    }
+
 }

+ 27 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/util/SupplierAuditStatusUtils.java

@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.supplier.util;
+
+import cn.hutool.core.lang.Assert;
+import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
+import cn.iocoder.yudao.module.supplier.enums.common.SupplierAuditStatusEnum;
+
+/**
+ * CRM 流程工具类
+ *
+ * @author suiyy
+ */
+public class SupplierAuditStatusUtils {
+
+    /**
+     * BPM 审批结果转换
+     *
+     * @param bpmResult BPM 审批结果
+     */
+    public static Integer convertBpmResultToAuditStatus(Integer bpmResult) {
+        Integer auditStatus = BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult) ? SupplierAuditStatusEnum.APPROVE.getStatus()
+                : BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult) ? SupplierAuditStatusEnum.REJECT.getStatus()
+                : BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult) ? BpmTaskStatusEnum.CANCEL.getStatus() : null;
+        Assert.notNull(auditStatus, "BPM 审批结果({}) 转换失败", bpmResult);
+        return auditStatus;
+    }
+
+}