Commit 1cab3c009c516513a2128d37278f3cfcb77d2d8b
1 parent
a877bb47
CRM-合同:新增发起合同审批
Showing
9 changed files
with
85 additions
and
36 deletions
yudao-module-crm/yudao-module-crm-biz/pom.xml
| @@ -27,6 +27,11 @@ | @@ -27,6 +27,11 @@ | ||
| 27 | <artifactId>yudao-module-crm-api</artifactId> | 27 | <artifactId>yudao-module-crm-api</artifactId> |
| 28 | <version>${revision}</version> | 28 | <version>${revision}</version> |
| 29 | </dependency> | 29 | </dependency> |
| 30 | + <dependency> | ||
| 31 | + <groupId>cn.iocoder.boot</groupId> | ||
| 32 | + <artifactId>yudao-module-bpm-api</artifactId> | ||
| 33 | + <version>${revision}</version> | ||
| 34 | + </dependency> | ||
| 30 | 35 | ||
| 31 | <!-- 业务组件 --> | 36 | <!-- 业务组件 --> |
| 32 | <dependency> | 37 | <dependency> |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
| @@ -140,4 +140,12 @@ public class CrmContractController { | @@ -140,4 +140,12 @@ public class CrmContractController { | ||
| 140 | return success(true); | 140 | return success(true); |
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | + @PutMapping("/approve") | ||
| 144 | + @Operation(summary = "发起合同审批流程") | ||
| 145 | + @PreAuthorize("@ss.hasPermission('crm:contract:update')") | ||
| 146 | + public CommonResult<Boolean> transfer(@RequestParam("id") Long id) { | ||
| 147 | + contractService.handleApprove(id, getLoginUserId()); | ||
| 148 | + return success(true); | ||
| 149 | + } | ||
| 150 | + | ||
| 143 | } | 151 | } |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractSaveReqVO.java
| @@ -7,10 +7,13 @@ import cn.iocoder.yudao.module.crm.framework.operatelog.core.SysAdminUserParseFu | @@ -7,10 +7,13 @@ import cn.iocoder.yudao.module.crm.framework.operatelog.core.SysAdminUserParseFu | ||
| 7 | import com.mzt.logapi.starter.annotation.DiffLogField; | 7 | import com.mzt.logapi.starter.annotation.DiffLogField; |
| 8 | import io.swagger.v3.oas.annotations.media.Schema; | 8 | import io.swagger.v3.oas.annotations.media.Schema; |
| 9 | import jakarta.validation.constraints.NotNull; | 9 | import jakarta.validation.constraints.NotNull; |
| 10 | +import lombok.AllArgsConstructor; | ||
| 10 | import lombok.Data; | 11 | import lombok.Data; |
| 12 | +import lombok.NoArgsConstructor; | ||
| 11 | import org.springframework.format.annotation.DateTimeFormat; | 13 | import org.springframework.format.annotation.DateTimeFormat; |
| 12 | 14 | ||
| 13 | import java.time.LocalDateTime; | 15 | import java.time.LocalDateTime; |
| 16 | +import java.util.List; | ||
| 14 | 17 | ||
| 15 | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 18 | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 16 | 19 | ||
| @@ -35,10 +38,6 @@ public class CrmContractSaveReqVO { | @@ -35,10 +38,6 @@ public class CrmContractSaveReqVO { | ||
| 35 | @DiffLogField(name = "商机", function = CrmBusinessParseFunction.NAME) | 38 | @DiffLogField(name = "商机", function = CrmBusinessParseFunction.NAME) |
| 36 | private Long businessId; | 39 | private Long businessId; |
| 37 | 40 | ||
| 38 | - @Schema(description = "工作流编号", example = "1043") | ||
| 39 | - @DiffLogField(name = "工作流编号") | ||
| 40 | - private Long processInstanceId; | ||
| 41 | - | ||
| 42 | @Schema(description = "下单日期", requiredMode = Schema.RequiredMode.REQUIRED) | 41 | @Schema(description = "下单日期", requiredMode = Schema.RequiredMode.REQUIRED) |
| 43 | @DiffLogField(name = "下单日期") | 42 | @DiffLogField(name = "下单日期") |
| 44 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | 43 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| @@ -86,16 +85,30 @@ public class CrmContractSaveReqVO { | @@ -86,16 +85,30 @@ public class CrmContractSaveReqVO { | ||
| 86 | @DiffLogField(name = "公司签约人", function = SysAdminUserParseFunction.NAME) | 85 | @DiffLogField(name = "公司签约人", function = SysAdminUserParseFunction.NAME) |
| 87 | private Long signUserId; | 86 | private Long signUserId; |
| 88 | 87 | ||
| 89 | - @Schema(description = "最后跟进时间") | ||
| 90 | - @DiffLogField(name = "最后跟进时间") | ||
| 91 | - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||
| 92 | - private LocalDateTime contactLastTime; | ||
| 93 | - | ||
| 94 | @Schema(description = "备注", example = "你猜") | 88 | @Schema(description = "备注", example = "你猜") |
| 95 | @DiffLogField(name = "备注") | 89 | @DiffLogField(name = "备注") |
| 96 | private String remark; | 90 | private String remark; |
| 97 | 91 | ||
| 98 | - // TODO @dhb52:增加一个 status 字段:具体有哪些值,你来枚举下;主要页面上有个【草稿】【提交审核】的流程,可以看看。然后要对接工作流,这块也可以看看,不确定的地方问我。 | 92 | + @Schema(description = "产品列表") |
| 93 | + private List<CrmContractProductItem> productItems; | ||
| 94 | + | ||
| 95 | + @Schema(description = "商品属性") | ||
| 96 | + @Data | ||
| 97 | + @NoArgsConstructor | ||
| 98 | + @AllArgsConstructor | ||
| 99 | + public static class CrmContractProductItem { | ||
| 100 | + | ||
| 101 | + @Schema(description = "产品编号", example = "20529") | ||
| 102 | + @NotNull(message = "产品编号不能为空") | ||
| 103 | + private Long id; | ||
| 104 | + | ||
| 105 | + @Schema(description = "产品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") | ||
| 106 | + @NotNull(message = "产品数量不能为空") | ||
| 107 | + private Long count; | ||
| 108 | + | ||
| 109 | + @Schema(description = "产品折扣") | ||
| 110 | + private Integer discountPercent; | ||
| 99 | 111 | ||
| 112 | + } | ||
| 100 | 113 | ||
| 101 | } | 114 | } |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/business/CrmBusinessProductDO.java
| @@ -2,13 +2,12 @@ package cn.iocoder.yudao.module.crm.dal.dataobject.business; | @@ -2,13 +2,12 @@ package cn.iocoder.yudao.module.crm.dal.dataobject.business; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; | 4 | import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; |
| 5 | +import cn.iocoder.yudao.module.crm.enums.DictTypeConstants; | ||
| 5 | import com.baomidou.mybatisplus.annotation.KeySequence; | 6 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 6 | import com.baomidou.mybatisplus.annotation.TableId; | 7 | import com.baomidou.mybatisplus.annotation.TableId; |
| 7 | import com.baomidou.mybatisplus.annotation.TableName; | 8 | import com.baomidou.mybatisplus.annotation.TableName; |
| 8 | import lombok.*; | 9 | import lombok.*; |
| 9 | 10 | ||
| 10 | -import java.math.BigDecimal; | ||
| 11 | - | ||
| 12 | /** | 11 | /** |
| 13 | * 商机产品关联表 DO | 12 | * 商机产品关联表 DO |
| 14 | * | 13 | * |
| @@ -29,14 +28,12 @@ public class CrmBusinessProductDO extends BaseDO { | @@ -29,14 +28,12 @@ public class CrmBusinessProductDO extends BaseDO { | ||
| 29 | */ | 28 | */ |
| 30 | @TableId | 29 | @TableId |
| 31 | private Long id; | 30 | private Long id; |
| 32 | - | ||
| 33 | /** | 31 | /** |
| 34 | * 商机编号 | 32 | * 商机编号 |
| 35 | * | 33 | * |
| 36 | * 关联 {@link CrmBusinessDO#getId()} | 34 | * 关联 {@link CrmBusinessDO#getId()} |
| 37 | */ | 35 | */ |
| 38 | private Long businessId; | 36 | private Long businessId; |
| 39 | - | ||
| 40 | /** | 37 | /** |
| 41 | * 产品编号 | 38 | * 产品编号 |
| 42 | * | 39 | * |
| @@ -50,29 +47,27 @@ public class CrmBusinessProductDO extends BaseDO { | @@ -50,29 +47,27 @@ public class CrmBusinessProductDO extends BaseDO { | ||
| 50 | private Integer price; | 47 | private Integer price; |
| 51 | 48 | ||
| 52 | /** | 49 | /** |
| 53 | - * 销售价格 | 50 | + * 销售价格, 单位:分 |
| 54 | */ | 51 | */ |
| 55 | - private BigDecimal salesPrice; | ||
| 56 | - | 52 | + private Integer salesPrice; |
| 57 | /** | 53 | /** |
| 58 | * 数量 | 54 | * 数量 |
| 59 | */ | 55 | */ |
| 60 | - private BigDecimal count; | ||
| 61 | - | ||
| 62 | - // TODO @lzxhqs:改成 discountPercent | 56 | + private Integer count; |
| 63 | /** | 57 | /** |
| 64 | * 折扣 | 58 | * 折扣 |
| 65 | */ | 59 | */ |
| 66 | - private BigDecimal discountPercent; | ||
| 67 | - | ||
| 68 | - // TODO @lzxhqs:改成 totalPrice;总计价格,和现有项目风格一致; | 60 | + private Integer discountPercent; |
| 69 | /** | 61 | /** |
| 70 | - * 小计(折扣后价格) | 62 | + * 总计价格(折扣后价格) |
| 71 | */ | 63 | */ |
| 72 | - private BigDecimal totalPrice; | 64 | + private Integer totalPrice; |
| 73 | 65 | ||
| 74 | /** | 66 | /** |
| 75 | * 单位 | 67 | * 单位 |
| 68 | + * | ||
| 69 | + * 字典 {@link DictTypeConstants#CRM_PRODUCT_UNIT} | ||
| 76 | */ | 70 | */ |
| 77 | - private String unit; | 71 | + private Integer unit; |
| 72 | + | ||
| 78 | } | 73 | } |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contract/CrmContractDO.java
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/product/CrmProductDO.java
| 1 | package cn.iocoder.yudao.module.crm.dal.dataobject.product; | 1 | package cn.iocoder.yudao.module.crm.dal.dataobject.product; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | +import cn.iocoder.yudao.module.crm.enums.DictTypeConstants; | ||
| 4 | import cn.iocoder.yudao.module.crm.enums.product.CrmProductStatusEnum; | 5 | import cn.iocoder.yudao.module.crm.enums.product.CrmProductStatusEnum; |
| 5 | import com.baomidou.mybatisplus.annotation.KeySequence; | 6 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 6 | import com.baomidou.mybatisplus.annotation.TableId; | 7 | import com.baomidou.mybatisplus.annotation.TableId; |
| @@ -38,7 +39,7 @@ public class CrmProductDO extends BaseDO { | @@ -38,7 +39,7 @@ public class CrmProductDO extends BaseDO { | ||
| 38 | /** | 39 | /** |
| 39 | * 单位 | 40 | * 单位 |
| 40 | * | 41 | * |
| 41 | - * 字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants#CRM_PRODUCT_UNIT} | 42 | + * 字典 {@link DictTypeConstants#CRM_PRODUCT_UNIT} |
| 42 | */ | 43 | */ |
| 43 | private Integer unit; | 44 | private Integer unit; |
| 44 | /** | 45 | /** |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java
| @@ -41,7 +41,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | @@ -41,7 +41,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||
| 41 | default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId) { | 41 | default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId) { |
| 42 | MPJLambdaWrapperX<CrmContractDO> mpjLambdaWrapperX = new MPJLambdaWrapperX<>(); | 42 | MPJLambdaWrapperX<CrmContractDO> mpjLambdaWrapperX = new MPJLambdaWrapperX<>(); |
| 43 | // 拼接数据权限的查询条件 | 43 | // 拼接数据权限的查询条件 |
| 44 | - CrmQueryWrapperUtils.appendPermissionCondition(mpjLambdaWrapperX, CrmBizTypeEnum.CRM_CONTACT.getType(), | 44 | + CrmQueryWrapperUtils.appendPermissionCondition(mpjLambdaWrapperX, CrmBizTypeEnum.CRM_CONTRACT.getType(), |
| 45 | CrmContractDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); | 45 | CrmContractDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); |
| 46 | // 拼接自身的查询条件 | 46 | // 拼接自身的查询条件 |
| 47 | mpjLambdaWrapperX.selectAll(CrmContractDO.class) | 47 | mpjLambdaWrapperX.selectAll(CrmContractDO.class) |
| @@ -56,7 +56,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | @@ -56,7 +56,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||
| 56 | default List<CrmContractDO> selectBatchIds(Collection<Long> ids, Long userId) { | 56 | default List<CrmContractDO> selectBatchIds(Collection<Long> ids, Long userId) { |
| 57 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | 57 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 58 | // 构建数据权限连表条件 | 58 | // 构建数据权限连表条件 |
| 59 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), ids, userId); | 59 | + CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), ids, userId); |
| 60 | // 拼接自身的查询条件 | 60 | // 拼接自身的查询条件 |
| 61 | query.selectAll(CrmContractDO.class).in(CrmContractDO::getId, ids).orderByDesc(CrmContractDO::getId); | 61 | query.selectAll(CrmContractDO.class).in(CrmContractDO::getId, ids).orderByDesc(CrmContractDO::getId); |
| 62 | return selectJoinList(CrmContractDO.class, query); | 62 | return selectJoinList(CrmContractDO.class, query); |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java
| @@ -58,6 +58,14 @@ public interface CrmContractService { | @@ -58,6 +58,14 @@ public interface CrmContractService { | ||
| 58 | void updateContractFollowUp(CrmUpdateFollowUpReqBO contractUpdateFollowUpReqBO); | 58 | void updateContractFollowUp(CrmUpdateFollowUpReqBO contractUpdateFollowUpReqBO); |
| 59 | 59 | ||
| 60 | /** | 60 | /** |
| 61 | + * 发起合同审批流程 | ||
| 62 | + * | ||
| 63 | + * @param id 合同编号 | ||
| 64 | + * @param userId 用户编号 | ||
| 65 | + */ | ||
| 66 | + void handleApprove(Long id, Long userId); | ||
| 67 | + | ||
| 68 | + /** | ||
| 61 | * 获得合同 | 69 | * 获得合同 |
| 62 | * | 70 | * |
| 63 | * @param id 编号 | 71 | * @param id 编号 |
| @@ -111,9 +119,11 @@ public interface CrmContractService { | @@ -111,9 +119,11 @@ public interface CrmContractService { | ||
| 111 | Long getContractCountByCustomerId(Long customerId); | 119 | Long getContractCountByCustomerId(Long customerId); |
| 112 | 120 | ||
| 113 | /** | 121 | /** |
| 114 | - * 根据商机ID获取关联客户的合同数量 TODO @lzxhqs:1)方法注释,和参数注释之间要有空行;2)中英文之间有空格,更清晰,例如说 商机 ID | ||
| 115 | - * @param businessId 商机ID | 122 | + * 根据商机ID获取关联客户的合同数量 |
| 123 | + * | ||
| 124 | + * @param businessId 商机编号 | ||
| 116 | * @return 数量 | 125 | * @return 数量 |
| 117 | */ | 126 | */ |
| 118 | Long selectCountByBusinessId(Long businessId); | 127 | Long selectCountByBusinessId(Long businessId); |
| 128 | + | ||
| 119 | } | 129 | } |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
| @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil; | @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil; | ||
| 4 | import cn.hutool.core.collection.ListUtil; | 4 | import cn.hutool.core.collection.ListUtil; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 6 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 7 | +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; | ||
| 8 | +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; | ||
| 7 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO; | 9 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO; |
| 8 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractSaveReqVO; | 10 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractSaveReqVO; |
| 9 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractTransferReqVO; | 11 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractTransferReqVO; |
| @@ -13,6 +15,7 @@ import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper; | @@ -13,6 +15,7 @@ import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper; | ||
| 13 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | 15 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | 16 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 15 | import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | 17 | import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; |
| 18 | +import cn.iocoder.yudao.module.crm.service.business.CrmBusinessProductService; | ||
| 16 | import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO; | 19 | import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO; |
| 17 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | 20 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 18 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; | 21 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| @@ -40,28 +43,33 @@ import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*; | @@ -40,28 +43,33 @@ import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*; | ||
| 40 | @Validated | 43 | @Validated |
| 41 | public class CrmContractServiceImpl implements CrmContractService { | 44 | public class CrmContractServiceImpl implements CrmContractService { |
| 42 | 45 | ||
| 46 | + public static final String CONTRACT_APPROVE = "contract-approve"; // 合同审批流程标识 | ||
| 47 | + | ||
| 43 | @Resource | 48 | @Resource |
| 44 | private CrmContractMapper contractMapper; | 49 | private CrmContractMapper contractMapper; |
| 45 | 50 | ||
| 46 | @Resource | 51 | @Resource |
| 47 | private CrmPermissionService crmPermissionService; | 52 | private CrmPermissionService crmPermissionService; |
| 53 | + @Resource | ||
| 54 | + private CrmBusinessProductService businessProductService; | ||
| 55 | + | ||
| 56 | + @Resource | ||
| 57 | + private BpmProcessInstanceApi bpmProcessInstanceApi; | ||
| 48 | 58 | ||
| 49 | @Override | 59 | @Override |
| 50 | @Transactional(rollbackFor = Exception.class) | 60 | @Transactional(rollbackFor = Exception.class) |
| 51 | @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_CREATE_SUB_TYPE, bizNo = "{{#contract.id}}", | 61 | @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_CREATE_SUB_TYPE, bizNo = "{{#contract.id}}", |
| 52 | success = CRM_CONTRACT_CREATE_SUCCESS) | 62 | success = CRM_CONTRACT_CREATE_SUCCESS) |
| 53 | public Long createContract(CrmContractSaveReqVO createReqVO, Long userId) { | 63 | public Long createContract(CrmContractSaveReqVO createReqVO, Long userId) { |
| 54 | - createReqVO.setId(null); | ||
| 55 | // TODO @合同待定:插入合同商品;需要搞个 BusinessProductDO | 64 | // TODO @合同待定:插入合同商品;需要搞个 BusinessProductDO |
| 56 | // 插入合同 | 65 | // 插入合同 |
| 57 | - CrmContractDO contract = BeanUtils.toBean(createReqVO, CrmContractDO.class); | 66 | + CrmContractDO contract = BeanUtils.toBean(createReqVO, CrmContractDO.class).setId(null); |
| 58 | contractMapper.insert(contract); | 67 | contractMapper.insert(contract); |
| 59 | 68 | ||
| 60 | // 创建数据权限 | 69 | // 创建数据权限 |
| 61 | crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setUserId(userId) | 70 | crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setUserId(userId) |
| 62 | .setBizType(CrmBizTypeEnum.CRM_CONTRACT.getType()).setBizId(contract.getId()) | 71 | .setBizType(CrmBizTypeEnum.CRM_CONTRACT.getType()).setBizId(contract.getId()) |
| 63 | .setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); | 72 | .setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); |
| 64 | - | ||
| 65 | // 4. 记录操作日志上下文 | 73 | // 4. 记录操作日志上下文 |
| 66 | LogRecordContext.putVariable("contract", contract); | 74 | LogRecordContext.putVariable("contract", contract); |
| 67 | return contract.getId(); | 75 | return contract.getId(); |
| @@ -141,6 +149,16 @@ public class CrmContractServiceImpl implements CrmContractService { | @@ -141,6 +149,16 @@ public class CrmContractServiceImpl implements CrmContractService { | ||
| 141 | contractMapper.updateById(BeanUtils.toBean(contractUpdateFollowUpReqBO, CrmContractDO.class).setId(contractUpdateFollowUpReqBO.getBizId())); | 149 | contractMapper.updateById(BeanUtils.toBean(contractUpdateFollowUpReqBO, CrmContractDO.class).setId(contractUpdateFollowUpReqBO.getBizId())); |
| 142 | } | 150 | } |
| 143 | 151 | ||
| 152 | + @Override | ||
| 153 | + public void handleApprove(Long id, Long userId) { | ||
| 154 | + // 创建合同审批流程实例 | ||
| 155 | + String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() | ||
| 156 | + .setProcessDefinitionKey(CONTRACT_APPROVE).setBusinessKey(String.valueOf(id))); | ||
| 157 | + | ||
| 158 | + // 更新合同工作流编号 | ||
| 159 | + contractMapper.updateById(new CrmContractDO().setId(id).setProcessInstanceId(processInstanceId)); | ||
| 160 | + } | ||
| 161 | + | ||
| 144 | //======================= 查询相关 ======================= | 162 | //======================= 查询相关 ======================= |
| 145 | 163 | ||
| 146 | @Override | 164 | @Override |
| @@ -182,6 +200,5 @@ public class CrmContractServiceImpl implements CrmContractService { | @@ -182,6 +200,5 @@ public class CrmContractServiceImpl implements CrmContractService { | ||
| 182 | public Long selectCountByBusinessId(Long businessId) { | 200 | public Long selectCountByBusinessId(Long businessId) { |
| 183 | return contractMapper.selectCountByBusinessId(businessId); | 201 | return contractMapper.selectCountByBusinessId(businessId); |
| 184 | } | 202 | } |
| 185 | - | ||
| 186 | // TODO @合同待定:需要新增一个 ContractConfigDO 表,合同配置,重点是到期提醒; | 203 | // TODO @合同待定:需要新增一个 ContractConfigDO 表,合同配置,重点是到期提醒; |
| 187 | } | 204 | } |