Commit 6a63f2f078759025905e160893a672119d78b1ee
1 parent
59e6f237
CRM-CONTRACT: 完善合同编辑回显
Showing
10 changed files
with
110 additions
and
29 deletions
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
| ... | ... | @@ -10,10 +10,14 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| 10 | 10 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.*; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.convert.contract.CrmContractConvert; |
| 13 | +import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessProductDO; | |
| 13 | 14 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| 14 | 15 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 16 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; | |
| 17 | +import cn.iocoder.yudao.module.crm.service.business.CrmBusinessProductService; | |
| 15 | 18 | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| 16 | 19 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 20 | +import cn.iocoder.yudao.module.crm.service.product.CrmProductService; | |
| 17 | 21 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 18 | 22 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| 19 | 23 | import io.swagger.v3.oas.annotations.Operation; |
| ... | ... | @@ -32,8 +36,8 @@ import java.util.Map; |
| 32 | 36 | import java.util.stream.Stream; |
| 33 | 37 | |
| 34 | 38 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 35 | -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertListByFlatMap; | |
| 36 | -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | |
| 39 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; | |
| 40 | +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; | |
| 37 | 41 | import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; |
| 38 | 42 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| 39 | 43 | |
| ... | ... | @@ -47,6 +51,10 @@ public class CrmContractController { |
| 47 | 51 | private CrmContractService contractService; |
| 48 | 52 | @Resource |
| 49 | 53 | private CrmCustomerService customerService; |
| 54 | + @Resource | |
| 55 | + private CrmBusinessProductService businessProductService; | |
| 56 | + @Resource | |
| 57 | + private CrmProductService productService; | |
| 50 | 58 | |
| 51 | 59 | @Resource |
| 52 | 60 | private AdminUserApi adminUserApi; |
| ... | ... | @@ -81,7 +89,18 @@ public class CrmContractController { |
| 81 | 89 | @PreAuthorize("@ss.hasPermission('crm:contract:query')") |
| 82 | 90 | public CommonResult<CrmContractRespVO> getContract(@RequestParam("id") Long id) { |
| 83 | 91 | CrmContractDO contract = contractService.getContract(id); |
| 84 | - return success(BeanUtils.toBean(contract, CrmContractRespVO.class)); | |
| 92 | + CrmContractRespVO respVO = BeanUtils.toBean(contract, CrmContractRespVO.class); | |
| 93 | + List<CrmBusinessProductDO> businessProductList = businessProductService.getBusinessProductListByContractId(id); | |
| 94 | + Map<Long, CrmBusinessProductDO> businessProductMap = convertMap(businessProductList, CrmBusinessProductDO::getProductId); | |
| 95 | + List<CrmProductDO> productList = productService.getProductListByIds(convertSet(businessProductList, CrmBusinessProductDO::getProductId)); | |
| 96 | + respVO.setProductItems(convertList(productList, product -> { | |
| 97 | + CrmContractRespVO.CrmContractProductItemRespVO productItemRespVO = BeanUtils.toBean(product, CrmContractRespVO.CrmContractProductItemRespVO.class); | |
| 98 | + findAndThen(businessProductMap, product.getId(), businessProduct -> { | |
| 99 | + productItemRespVO.setCount(businessProduct.getCount()).setDiscountPercent(businessProduct.getDiscountPercent()); | |
| 100 | + }); | |
| 101 | + return productItemRespVO; | |
| 102 | + })); | |
| 103 | + return success(respVO); | |
| 85 | 104 | } |
| 86 | 105 | |
| 87 | 106 | @GetMapping("/page") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractRespVO.java
| ... | ... | @@ -3,10 +3,13 @@ package cn.iocoder.yudao.module.crm.controller.admin.contract.vo; |
| 3 | 3 | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; |
| 4 | 4 | import com.alibaba.excel.annotation.ExcelProperty; |
| 5 | 5 | import io.swagger.v3.oas.annotations.media.Schema; |
| 6 | +import lombok.AllArgsConstructor; | |
| 6 | 7 | import lombok.Data; |
| 8 | +import lombok.NoArgsConstructor; | |
| 7 | 9 | import org.springframework.format.annotation.DateTimeFormat; |
| 8 | 10 | |
| 9 | 11 | import java.time.LocalDateTime; |
| 12 | +import java.util.List; | |
| 10 | 13 | |
| 11 | 14 | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 12 | 15 | |
| ... | ... | @@ -113,4 +116,36 @@ public class CrmContractRespVO { |
| 113 | 116 | @ExcelProperty("审批状态") |
| 114 | 117 | private Integer auditStatus; |
| 115 | 118 | |
| 119 | + @Schema(description = "产品列表") | |
| 120 | + private List<CrmContractProductItemRespVO> productItems; | |
| 121 | + | |
| 122 | + @Schema(description = "产品列表") | |
| 123 | + @Data | |
| 124 | + @NoArgsConstructor | |
| 125 | + @AllArgsConstructor | |
| 126 | + public static class CrmContractProductItemRespVO { | |
| 127 | + | |
| 128 | + @Schema(description = "产品编号", example = "20529") | |
| 129 | + private Long id; | |
| 130 | + | |
| 131 | + @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") | |
| 132 | + private String name; | |
| 133 | + | |
| 134 | + @Schema(description = "产品编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") | |
| 135 | + private String no; | |
| 136 | + | |
| 137 | + @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") | |
| 138 | + private Integer unit; | |
| 139 | + | |
| 140 | + @Schema(description = "价格,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") | |
| 141 | + private Integer price; | |
| 142 | + | |
| 143 | + @Schema(description = "产品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") | |
| 144 | + private Integer count; | |
| 145 | + | |
| 146 | + @Schema(description = "产品折扣") | |
| 147 | + private Integer discountPercent; | |
| 148 | + | |
| 149 | + } | |
| 150 | + | |
| 116 | 151 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractSaveReqVO.java
| ... | ... | @@ -93,7 +93,7 @@ public class CrmContractSaveReqVO { |
| 93 | 93 | @Schema(description = "产品列表") |
| 94 | 94 | private List<CrmContractProductItem> productItems; |
| 95 | 95 | |
| 96 | - @Schema(description = "商品属性") | |
| 96 | + @Schema(description = "产品列表") | |
| 97 | 97 | @Data |
| 98 | 98 | @NoArgsConstructor |
| 99 | 99 | @AllArgsConstructor | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/product/CrmProductMapper.java
| ... | ... | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.crm.dal.mysql.product; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 5 | 6 | import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; |
| 6 | 7 | import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductPageReqVO; |
| 7 | 8 | import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; |
| ... | ... | @@ -9,6 +10,9 @@ import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 9 | 10 | import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; |
| 10 | 11 | import org.apache.ibatis.annotations.Mapper; |
| 11 | 12 | |
| 13 | +import java.util.Collection; | |
| 14 | +import java.util.List; | |
| 15 | + | |
| 12 | 16 | /** |
| 13 | 17 | * CRM 产品 Mapper |
| 14 | 18 | * |
| ... | ... | @@ -34,4 +38,8 @@ public interface CrmProductMapper extends BaseMapperX<CrmProductDO> { |
| 34 | 38 | return selectOne(CrmProductDO::getNo, no); |
| 35 | 39 | } |
| 36 | 40 | |
| 41 | + default List<CrmProductDO> selectListByIds(Collection<Long> ids) { | |
| 42 | + return selectList(new LambdaQueryWrapperX<CrmProductDO>().in(CrmProductDO::getId, ids)); | |
| 43 | + } | |
| 44 | + | |
| 37 | 45 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessProductService.java
| ... | ... | @@ -18,35 +18,35 @@ public interface CrmBusinessProductService { |
| 18 | 18 | * |
| 19 | 19 | * @param list 商机产品集合 |
| 20 | 20 | */ |
| 21 | - void insertBatch(List<CrmBusinessProductDO> list); | |
| 21 | + void createBusinessProductBatch(List<CrmBusinessProductDO> list); | |
| 22 | 22 | |
| 23 | 23 | /** |
| 24 | 24 | * 根据商机id获取商机产品关联数据集合 |
| 25 | 25 | * |
| 26 | 26 | * @param businessId 商机id |
| 27 | 27 | */ |
| 28 | - List<CrmBusinessProductDO> selectListByBusinessId(Long businessId); | |
| 28 | + List<CrmBusinessProductDO> getBusinessProductListByBusinessId(Long businessId); | |
| 29 | 29 | |
| 30 | 30 | /** |
| 31 | 31 | * 批量更新商机产品表 |
| 32 | 32 | * |
| 33 | 33 | * @param list 商机产品数据集合 |
| 34 | 34 | */ |
| 35 | - void updateBatch(List<CrmBusinessProductDO> list); | |
| 35 | + void updateBusinessProductBatch(List<CrmBusinessProductDO> list); | |
| 36 | 36 | |
| 37 | 37 | /** |
| 38 | 38 | * 批量删除 |
| 39 | 39 | * |
| 40 | 40 | * @param list 需要删除的商机产品集合 |
| 41 | 41 | */ |
| 42 | - void deleteBatch(List<CrmBusinessProductDO> list); | |
| 42 | + void deleteBusinessProductBatch(List<CrmBusinessProductDO> list); | |
| 43 | 43 | |
| 44 | 44 | /** |
| 45 | 45 | * 根据商机id删除商机产品关联数据 |
| 46 | 46 | * |
| 47 | 47 | * @param businessId 商机id |
| 48 | 48 | */ |
| 49 | - void deleteByBusinessId(Long businessId); | |
| 49 | + void deleteBusinessProductByBusinessId(Long businessId); | |
| 50 | 50 | |
| 51 | 51 | /** |
| 52 | 52 | * 获得合同关联的商品列表 |
| ... | ... | @@ -54,6 +54,6 @@ public interface CrmBusinessProductService { |
| 54 | 54 | * @param contractId 合同编号 |
| 55 | 55 | * @return 关联的商品列表 |
| 56 | 56 | */ |
| 57 | - List<CrmBusinessProductDO> selectListByContractId(Long contractId); | |
| 57 | + List<CrmBusinessProductDO> getBusinessProductListByContractId(Long contractId); | |
| 58 | 58 | |
| 59 | 59 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessProductServiceImpl.java
| ... | ... | @@ -22,33 +22,33 @@ public class CrmBusinessProductServiceImpl implements CrmBusinessProductService |
| 22 | 22 | private CrmBusinessProductMapper businessProductMapper; |
| 23 | 23 | |
| 24 | 24 | @Override |
| 25 | - public void insertBatch(List<CrmBusinessProductDO> list) { | |
| 25 | + public void createBusinessProductBatch(List<CrmBusinessProductDO> list) { | |
| 26 | 26 | businessProductMapper.insertBatch(list); |
| 27 | 27 | } |
| 28 | 28 | |
| 29 | 29 | @Override |
| 30 | - public List<CrmBusinessProductDO> selectListByBusinessId(Long businessId) { | |
| 30 | + public List<CrmBusinessProductDO> getBusinessProductListByBusinessId(Long businessId) { | |
| 31 | 31 | return businessProductMapper.selectList(CrmBusinessProductDO::getBusinessId, businessId); |
| 32 | 32 | } |
| 33 | 33 | |
| 34 | 34 | @Override |
| 35 | - public void updateBatch(List<CrmBusinessProductDO> list) { | |
| 35 | + public void updateBusinessProductBatch(List<CrmBusinessProductDO> list) { | |
| 36 | 36 | businessProductMapper.updateBatch(list); |
| 37 | 37 | } |
| 38 | 38 | |
| 39 | 39 | // TODO @lzxhqs:这个方法,可以直接调用 deleteList 方法,然后传递 ids 就好了; |
| 40 | 40 | @Override |
| 41 | - public void deleteBatch(List<CrmBusinessProductDO> list) { | |
| 41 | + public void deleteBusinessProductBatch(List<CrmBusinessProductDO> list) { | |
| 42 | 42 | businessProductMapper.deleteBatchIds(CollectionUtils.convertList(list, CrmBusinessProductDO::getId)); |
| 43 | 43 | } |
| 44 | 44 | |
| 45 | 45 | @Override |
| 46 | - public void deleteByBusinessId(Long businessId) { | |
| 46 | + public void deleteBusinessProductByBusinessId(Long businessId) { | |
| 47 | 47 | businessProductMapper.deleteByBusinessId(businessId); |
| 48 | 48 | } |
| 49 | 49 | |
| 50 | 50 | @Override |
| 51 | - public List<CrmBusinessProductDO> selectListByContractId(Long contractId) { | |
| 51 | + public List<CrmBusinessProductDO> getBusinessProductListByContractId(Long contractId) { | |
| 52 | 52 | return businessProductMapper.selectList(CrmBusinessProductDO::getContractId, contractId); |
| 53 | 53 | } |
| 54 | 54 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
| ... | ... | @@ -120,20 +120,20 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { |
| 120 | 120 | CrmBusinessProductConvert.INSTANCE.convert(product).setBusinessId(businessId)); |
| 121 | 121 | if (Boolean.TRUE.equals(updateFlag)) { |
| 122 | 122 | // 根据商机 id从商机产品关联表中获取已存在的数据集合 |
| 123 | - List<CrmBusinessProductDO> oldProducts = businessProductService.selectListByBusinessId(businessId); | |
| 123 | + List<CrmBusinessProductDO> oldProducts = businessProductService.getBusinessProductListByBusinessId(businessId); | |
| 124 | 124 | List<List<CrmBusinessProductDO>> diffList = CollectionUtils.diffList(oldProducts, list, (oldValue, newValue) -> |
| 125 | 125 | ObjectUtil.equal(oldValue.getProductId(), newValue.getProductId())); |
| 126 | 126 | if (CollUtil.isNotEmpty(diffList.getFirst())) { |
| 127 | - businessProductService.insertBatch(diffList.getFirst()); | |
| 127 | + businessProductService.createBusinessProductBatch(diffList.getFirst()); | |
| 128 | 128 | } |
| 129 | 129 | if (CollUtil.isNotEmpty(diffList.get(1))) { |
| 130 | - businessProductService.updateBatch(diffList.get(1)); | |
| 130 | + businessProductService.updateBusinessProductBatch(diffList.get(1)); | |
| 131 | 131 | } |
| 132 | 132 | if (CollUtil.isNotEmpty(diffList.get(2))) { |
| 133 | - businessProductService.deleteBatch(diffList.get(2)); | |
| 133 | + businessProductService.deleteBusinessProductBatch(diffList.get(2)); | |
| 134 | 134 | } |
| 135 | 135 | } else { |
| 136 | - businessProductService.insertBatch(list); | |
| 136 | + businessProductService.createBusinessProductBatch(list); | |
| 137 | 137 | } |
| 138 | 138 | } |
| 139 | 139 | |
| ... | ... | @@ -154,7 +154,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { |
| 154 | 154 | if (CollUtil.isNotEmpty(updateReqVO.getProducts())) { |
| 155 | 155 | createBusinessProducts(updateReqVO.getProducts(), updateReqVO.getId(), true); |
| 156 | 156 | } else { |
| 157 | - businessProductService.deleteByBusinessId(updateReqVO.getId()); | |
| 157 | + businessProductService.deleteBusinessProductByBusinessId(updateReqVO.getId()); | |
| 158 | 158 | } |
| 159 | 159 | |
| 160 | 160 | // TODO @商机待定:如果状态发生变化,插入商机状态变更记录表 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
| ... | ... | @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjUtil; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 8 | 8 | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| 9 | 9 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 10 | +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | |
| 10 | 11 | import cn.iocoder.yudao.module.bpm.api.listener.dto.BpmResultListenerRespDTO; |
| 11 | 12 | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| 12 | 13 | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| ... | ... | @@ -91,7 +92,8 @@ public class CrmContractServiceImpl implements CrmContractService { |
| 91 | 92 | // 1.2 插入商机关联商品 |
| 92 | 93 | if (CollUtil.isNotEmpty(createReqVO.getProductItems())) { // 如果有的话 |
| 93 | 94 | List<CrmBusinessProductDO> businessProduct = convertBusinessProductList(createReqVO, contract.getId()); |
| 94 | - businessProductService.insertBatch(businessProduct); | |
| 95 | + businessProductService.createBusinessProductBatch(businessProduct); | |
| 96 | + // 更新合同商品总金额 | |
| 95 | 97 | } |
| 96 | 98 | |
| 97 | 99 | // 2. 创建数据权限 |
| ... | ... | @@ -113,8 +115,8 @@ public class CrmContractServiceImpl implements CrmContractService { |
| 113 | 115 | Assert.notNull(updateReqVO.getId(), "合同编号不能为空"); |
| 114 | 116 | CrmContractDO contract = validateContractExists(updateReqVO.getId()); |
| 115 | 117 | // 只有草稿、审批中,可以编辑; |
| 116 | - if (ObjUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus()) || | |
| 117 | - ObjUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.PROCESS.getStatus())) { | |
| 118 | + if (!ObjectUtils.equalsAny(contract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(), | |
| 119 | + CrmAuditStatusEnum.PROCESS.getStatus())) { | |
| 118 | 120 | throw exception(CONTRACT_UPDATE_FAIL_EDITING_PROHIBITED); |
| 119 | 121 | } |
| 120 | 122 | validateRelationDataExists(updateReqVO); |
| ... | ... | @@ -136,7 +138,7 @@ public class CrmContractServiceImpl implements CrmContractService { |
| 136 | 138 | return; |
| 137 | 139 | } |
| 138 | 140 | List<CrmBusinessProductDO> newProductList = convertBusinessProductList(updateReqVO, contractId); |
| 139 | - List<CrmBusinessProductDO> oldProductList = businessProductService.selectListByContractId(contractId); | |
| 141 | + List<CrmBusinessProductDO> oldProductList = businessProductService.getBusinessProductListByContractId(contractId); | |
| 140 | 142 | List<List<CrmBusinessProductDO>> diffList = diffList(oldProductList, newProductList, (oldObj, newObj) -> { |
| 141 | 143 | if (ObjUtil.notEqual(oldObj.getProductId(), newObj.getProductId())) { |
| 142 | 144 | return false; |
| ... | ... | @@ -145,13 +147,13 @@ public class CrmContractServiceImpl implements CrmContractService { |
| 145 | 147 | return true; |
| 146 | 148 | }); |
| 147 | 149 | if (CollUtil.isNotEmpty(diffList.getFirst())) { |
| 148 | - businessProductService.insertBatch(diffList.getFirst()); | |
| 150 | + businessProductService.createBusinessProductBatch(diffList.getFirst()); | |
| 149 | 151 | } |
| 150 | 152 | if (CollUtil.isNotEmpty(diffList.get(1))) { |
| 151 | - businessProductService.updateBatch(diffList.get(1)); | |
| 153 | + businessProductService.updateBusinessProductBatch(diffList.get(1)); | |
| 152 | 154 | } |
| 153 | 155 | if (CollUtil.isNotEmpty(diffList.get(2))) { |
| 154 | - businessProductService.deleteBatch(diffList.get(2)); | |
| 156 | + businessProductService.deleteBusinessProductBatch(diffList.get(2)); | |
| 155 | 157 | } |
| 156 | 158 | } |
| 157 | 159 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductService.java
| ... | ... | @@ -69,4 +69,13 @@ public interface CrmProductService { |
| 69 | 69 | * @return 产品 |
| 70 | 70 | */ |
| 71 | 71 | CrmProductDO getProductByCategoryId(Long categoryId); |
| 72 | + | |
| 73 | + /** | |
| 74 | + * 获得产品列表 | |
| 75 | + * | |
| 76 | + * @param ids 产品编号 | |
| 77 | + * @return 产品列表 | |
| 78 | + */ | |
| 79 | + List<CrmProductDO> getProductListByIds(Collection<Long> ids); | |
| 80 | + | |
| 72 | 81 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java
| ... | ... | @@ -155,4 +155,12 @@ public class CrmProductServiceImpl implements CrmProductService { |
| 155 | 155 | return productMapper.selectOne(new LambdaQueryWrapper<CrmProductDO>().eq(CrmProductDO::getCategoryId, categoryId)); |
| 156 | 156 | } |
| 157 | 157 | |
| 158 | + @Override | |
| 159 | + public List<CrmProductDO> getProductListByIds(Collection<Long> ids) { | |
| 160 | + if (CollUtil.isEmpty(ids)) { | |
| 161 | + return Collections.emptyList(); | |
| 162 | + } | |
| 163 | + return productMapper.selectListByIds(ids); | |
| 164 | + } | |
| 165 | + | |
| 158 | 166 | } | ... | ... |