Commit 1842549634911731bfa84d4d02b2dc6055a947cc
1 parent
9a5f6f13
crm:code review 客户的公海领取和分配
Showing
4 changed files
with
40 additions
and
44 deletions
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java
| 1 | 1 | package cn.iocoder.yudao.module.crm.controller.admin.customer; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | -import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; | |
| 5 | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 6 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 7 | 6 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| 8 | 7 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 9 | -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | |
| 10 | 8 | import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.*; |
| 11 | 9 | import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerConvert; |
| 12 | 10 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| ... | ... | @@ -24,7 +22,6 @@ import io.swagger.v3.oas.annotations.Parameter; |
| 24 | 22 | import io.swagger.v3.oas.annotations.Parameters; |
| 25 | 23 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 26 | 24 | import org.springframework.security.access.prepost.PreAuthorize; |
| 27 | -import org.springframework.util.CollectionUtils; | |
| 28 | 25 | import org.springframework.validation.annotation.Validated; |
| 29 | 26 | import org.springframework.web.bind.annotation.*; |
| 30 | 27 | |
| ... | ... | @@ -37,7 +34,6 @@ import java.util.List; |
| 37 | 34 | import java.util.Map; |
| 38 | 35 | import java.util.Set; |
| 39 | 36 | |
| 40 | -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error; | |
| 41 | 37 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 42 | 38 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| 43 | 39 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| ... | ... | @@ -185,24 +181,23 @@ public class CrmCustomerController { |
| 185 | 181 | |
| 186 | 182 | @PutMapping("/receive") |
| 187 | 183 | @Operation(summary = "领取公海客户") |
| 188 | - @Parameter(name = "ids", description = "批量领取公海的客户id集合", required = true,example = "1,2,3") | |
| 184 | + @Parameter(name = "ids", description = "编号数组", required = true,example = "1,2,3") | |
| 189 | 185 | @PreAuthorize("@ss.hasPermission('crm:customer:receive')") |
| 190 | 186 | public CommonResult<Boolean> receiveCustomer(@RequestParam(value = "ids") List<Long> ids){ |
| 191 | - // 领取公海任务 | |
| 192 | - customerService.receiveCustomer(ids, SecurityFrameworkUtils.getLoginUserId()); | |
| 187 | + customerService.receiveCustomer(ids, getLoginUserId()); | |
| 193 | 188 | return success(true); |
| 194 | 189 | } |
| 195 | 190 | |
| 196 | - @PutMapping("/distributeByIds") | |
| 191 | + @PutMapping("/distribute") | |
| 197 | 192 | @Operation(summary = "分配公海给对应负责人") |
| 198 | 193 | @Parameters({ |
| 199 | - @Parameter(name = "ownerUserId", description = "分配的负责人id", required = true,example = "12345"), | |
| 200 | - @Parameter(name = "ids", description = "批量分配的公海的客户id集合", required = true,example = "1,2,3") | |
| 194 | + @Parameter(name = "ownerUserId", description = "分配的负责人编号", required = true, example = "12345"), | |
| 195 | + @Parameter(name = "ids", description = "客户编号数组", required = true, example = "1,2,3") | |
| 201 | 196 | }) |
| 202 | 197 | @PreAuthorize("@ss.hasPermission('crm:customer:distribute')") |
| 203 | 198 | public CommonResult<Boolean> distributeCustomer(@RequestParam(value = "ownerUserId") Long ownerUserId, |
| 204 | - @RequestParam(value = "ids") List<Long>ids){ | |
| 205 | - customerService.distributeCustomer(ids,ownerUserId); | |
| 199 | + @RequestParam(value = "ids") List<Long> ids){ | |
| 200 | + customerService.distributeCustomer(ids, ownerUserId); | |
| 206 | 201 | return success(true); |
| 207 | 202 | } |
| 208 | 203 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java
| ... | ... | @@ -28,10 +28,10 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { |
| 28 | 28 | .eqIfPresent(CrmCustomerDO::getSource, pageReqVO.getSource())); |
| 29 | 29 | } |
| 30 | 30 | |
| 31 | - default void updateCustomerOwnerUser(Long id,CrmCustomerDO customerDO){ | |
| 32 | - update(customerDO,new LambdaUpdateWrapper <CrmCustomerDO>() | |
| 33 | - .eq(CrmCustomerDO::getId,id) | |
| 34 | - .isNull(CrmCustomerDO::getOwnerUserId) | |
| 35 | - ); | |
| 31 | + default void updateCustomerByOwnerUserIdIsNull(Long id, CrmCustomerDO updateObj) { | |
| 32 | + update(updateObj, new LambdaUpdateWrapper<CrmCustomerDO>() | |
| 33 | + .eq(CrmCustomerDO::getId, id) | |
| 34 | + .isNull(CrmCustomerDO::getOwnerUserId)); | |
| 36 | 35 | } |
| 36 | + | |
| 37 | 37 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java
| ... | ... | @@ -88,17 +88,17 @@ public interface CrmCustomerService { |
| 88 | 88 | /** |
| 89 | 89 | * 领取公海客户 |
| 90 | 90 | * |
| 91 | - * @param ids 要领取的客户 id | |
| 91 | + * @param ids 要领取的客户编号数组 | |
| 92 | 92 | */ |
| 93 | 93 | void receiveCustomer(List<Long>ids, Long ownerUserId); |
| 94 | 94 | |
| 95 | 95 | /** |
| 96 | 96 | * 分配公海客户 |
| 97 | 97 | * |
| 98 | - * @param ids 要分配的客户 id | |
| 99 | - * @param ownerUserId 分配的负责人id | |
| 98 | + * @param ids 要分配的客户编号数组 | |
| 99 | + * @param ownerUserId 分配的负责人编号 | |
| 100 | 100 | * @author xiaqing |
| 101 | 101 | */ |
| 102 | - void distributeCustomer(List<Long>ids,Long ownerUserId); | |
| 102 | + void distributeCustomer(List<Long>ids, Long ownerUserId); | |
| 103 | 103 | |
| 104 | 104 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
| ... | ... | @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.ObjUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | 6 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 7 | -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; | |
| 8 | 7 | import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.*; |
| 9 | 8 | import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerConvert; |
| 10 | 9 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| ... | ... | @@ -83,11 +82,6 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 83 | 82 | throw exception(CUSTOMER_NOT_EXISTS); |
| 84 | 83 | } |
| 85 | 84 | } |
| 86 | - private void validateCustomerExists(CrmCustomerDO customerDO){ | |
| 87 | - if (customerDO == null) { | |
| 88 | - throw exception(CUSTOMER_NOT_EXISTS); | |
| 89 | - } | |
| 90 | - } | |
| 91 | 85 | |
| 92 | 86 | @Override |
| 93 | 87 | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.READ) |
| ... | ... | @@ -168,51 +162,58 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 168 | 162 | @Override |
| 169 | 163 | @Transactional(rollbackFor = Exception.class) |
| 170 | 164 | public void receiveCustomer(List <Long> ids,Long ownerUserId) { |
| 171 | - transferCustomerOwner(ids,ownerUserId); | |
| 165 | + transferCustomerOwner(ids, ownerUserId); | |
| 172 | 166 | } |
| 173 | 167 | |
| 174 | 168 | @Override |
| 169 | + @Transactional(rollbackFor = Exception.class) | |
| 175 | 170 | public void distributeCustomer(List <Long> ids, Long ownerUserId) { |
| 176 | - transferCustomerOwner(ids,ownerUserId); | |
| 171 | + transferCustomerOwner(ids, ownerUserId); | |
| 177 | 172 | } |
| 178 | 173 | |
| 174 | + /** | |
| 175 | + * 转移客户负责人 | |
| 176 | + * | |
| 177 | + * @param ids 客户编号数组 | |
| 178 | + * @param ownerUserId 负责人编号 | |
| 179 | + */ | |
| 179 | 180 | private void transferCustomerOwner(List <Long> ids, Long ownerUserId) { |
| 180 | 181 | // 先一次性加载所有数据,校验客户是否可用 |
| 181 | - List <CrmCustomerDO> customerDOList = customerMapper.selectBatchIds(ids); | |
| 182 | - for (CrmCustomerDO customerDO : customerDOList) { | |
| 183 | - // 校验客户是否存在 | |
| 184 | - validateCustomerExists(customerDO); | |
| 182 | + List <CrmCustomerDO> customers = customerMapper.selectBatchIds(ids); | |
| 183 | + for (CrmCustomerDO customer : customers) { | |
| 185 | 184 | // 校验是否已有负责人 |
| 186 | - validCustomerOwnerExist(customerDO); | |
| 185 | + validateCustomerOwnerExists(customer); | |
| 187 | 186 | // 校验是否锁定 |
| 188 | - validCustomerIsLocked(customerDO); | |
| 187 | + validateCustomerIsLocked(customer); | |
| 189 | 188 | // 校验成交状态 |
| 190 | - validCustomerDeal(customerDO); | |
| 189 | + validateCustomerDeal(customer); | |
| 191 | 190 | } |
| 192 | 191 | |
| 192 | + // TODO @QingX:这里是不是改成一次性更新;不然,如果有 20 个客户,就要执行 20 次 SQL 了; | |
| 193 | 193 | // 统一修改状态 |
| 194 | 194 | CrmCustomerDO updateDo = new CrmCustomerDO(); |
| 195 | 195 | updateDo.setOwnerUserId(ownerUserId); |
| 196 | + // TODO @QingX:如果更新的数量不对,则应该抛出异常,回滚,并错误提示; | |
| 196 | 197 | for (Long id : ids) { |
| 197 | - customerMapper.updateCustomerOwnerUser(id,updateDo); | |
| 198 | + customerMapper.updateCustomerByOwnerUserIdIsNull(id,updateDo); | |
| 198 | 199 | } |
| 199 | - | |
| 200 | 200 | } |
| 201 | 201 | |
| 202 | - private void validCustomerOwnerExist(CrmCustomerDO customerDO) { | |
| 203 | - if (customerDO.getOwnerUserId()!=null) { | |
| 202 | + // TODO @QingX:错误提示里面,可以把客户的名字带上哈;不然不知道是谁; | |
| 203 | + private void validateCustomerOwnerExists(CrmCustomerDO customer) { | |
| 204 | + if (customer.getOwnerUserId() != null) { | |
| 204 | 205 | throw exception(CUSTOMER_OWNER_EXISTS); |
| 205 | 206 | } |
| 206 | 207 | } |
| 207 | 208 | |
| 208 | - private void validCustomerIsLocked(CrmCustomerDO customerDO) { | |
| 209 | - if (customerDO.getLockStatus() ==true) { | |
| 209 | + private void validateCustomerIsLocked(CrmCustomerDO customer) { | |
| 210 | + if (customer.getLockStatus()) { | |
| 210 | 211 | throw exception(CUSTOMER_LOCKED); |
| 211 | 212 | } |
| 212 | 213 | } |
| 213 | 214 | |
| 214 | - private void validCustomerDeal(CrmCustomerDO customerDO) { | |
| 215 | - if (customerDO.getDealStatus() ==true) { | |
| 215 | + private void validateCustomerDeal(CrmCustomerDO customer) { | |
| 216 | + if (customer.getDealStatus()) { | |
| 216 | 217 | throw exception(CUSTOMER_ALREADY_DEAL); |
| 217 | 218 | } |
| 218 | 219 | } | ... | ... |