feat(REQ-3488): 实现单位联系人新增\删除 查询接口

This commit is contained in:
zhanghonghao 2025-01-10 11:35:31 +08:00
parent b45c32ca74
commit 2734288c63
11 changed files with 290 additions and 56 deletions

View File

@ -1,44 +0,0 @@
package cn.axzo.orgmanax.api.contact;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.unit.contact.req.OperateOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.PageOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.SaveBatchOrgContactReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import java.util.List;
import javax.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 组织联系人api
*/
@FeignClient(
value = "orgmanax",
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
public interface OrgContactApi {
/**
* 批量新增单位联系人
*/
@PostMapping("/api/unit/contact/save-batch")
ApiResult<List<OrgUnitContactDTO>> saveBatch(@RequestBody @Valid SaveBatchOrgContactReq req);
/**
* 编辑单位联系人 or 删除单位联系人
*/
@PostMapping("/api/unit/contact/update")
ApiResult<OrgUnitContactDTO> update(@RequestBody @Valid OperateOrgContactReq req);
/**
* 分页获取单位联系人列表
*
* @param req
* @return
*/
@PostMapping("/api/unit/contact/page")
ApiResult<PageResp<OrgUnitContactDTO>> page(@RequestBody @Valid PageOrgContactReq req);
}

View File

@ -1,14 +1,16 @@
package cn.axzo.orgmanax.api.unit.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.unit.req.CreateUnitContactReq;
import cn.axzo.orgmanax.dto.unit.resp.CreateUnitContactResp;
import cn.axzo.orgmanax.dto.unit.contact.req.OperateOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.PageOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.SaveBatchOrgContactReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.util.List;
/**
@ -26,9 +28,23 @@ public interface OrgUnitContactApi {
ApiResult<List<OrgUnitContactDTO>> list(@RequestBody List<Long> ouIds);
/**
* 批量创建单位联系人
* 批量新增单位联系人
*/
@PostMapping("/api/org/unit/contact/create")
ApiResult<List<CreateUnitContactResp>> create(@RequestBody @Validated List<CreateUnitContactReq> contactReqList);
@PostMapping("/api/unit/contact/save-batch")
ApiResult<List<OrgUnitContactDTO>> saveBatch(@RequestBody @Valid SaveBatchOrgContactReq req);
/**
* 编辑单位联系人 or 删除单位联系人
*/
@PostMapping("/api/unit/contact/update")
ApiResult<OrgUnitContactDTO> update(@RequestBody @Valid OperateOrgContactReq req);
/**
* 分页获取单位联系人列表
*
* @param req
* @return
*/
@PostMapping("/api/unit/contact/page")
ApiResult<PageResp<OrgUnitContactDTO>> page(@RequestBody @Valid PageOrgContactReq req);
}

View File

@ -1,14 +1,15 @@
package cn.axzo.orgmanax.dto.unit.contact.req;
import cn.axzo.orgmanax.dto.unit.contact.enums.ContactOperateEnum;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
* 编辑单位联系人
*/

View File

@ -0,0 +1,36 @@
package cn.axzo.orgmanax.infra.dao.unit.repository;
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalContact;
import java.util.List;
public interface UnitContactUpsertRepository {
/**
* 创建联系人
*
* @param organizationalContact organizationalContact
*/
void save(OrganizationalContact organizationalContact);
/**
* 批量创建联系人
*
* @param contactList contactList
*/
void saveBatch(List<OrganizationalContact> contactList);
/**
* 更新联系人
*
* @param organizationalContact organizationalContact
*/
void update(OrganizationalContact organizationalContact);
/**
* 删除联系人
*
* @param id id
*/
void delete(Long id);
}

View File

@ -0,0 +1,44 @@
package cn.axzo.orgmanax.infra.dao.unit.repository.impl;
import cn.axzo.orgmanax.infra.dao.unit.dao.UnitContactDao;
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalContact;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitContactUpsertRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/10
*/
@Service
@RequiredArgsConstructor
public class UnitContactUpsertRepositoryImpl implements UnitContactUpsertRepository {
private final UnitContactDao unitContactDao;
@Override
public void save(OrganizationalContact organizationalContact) {
unitContactDao.save(organizationalContact);
}
@Override
public void saveBatch(List<OrganizationalContact> contactList) {
}
@Override
public void update(OrganizationalContact organizationalContact) {
unitContactDao.updateById(organizationalContact);
}
@Override
public void delete(Long id) {
unitContactDao.lambdaUpdate()
.setSql(" is_delete = id ")
.eq(OrganizationalContact::getId, id)
.update();
}
}

View File

@ -1,9 +1,11 @@
package cn.axzo.orgmanax.server.unit.controller;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.unit.feign.OrgUnitContactApi;
import cn.axzo.orgmanax.dto.unit.req.CreateUnitContactReq;
import cn.axzo.orgmanax.dto.unit.resp.CreateUnitContactResp;
import cn.axzo.orgmanax.dto.unit.contact.req.OperateOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.PageOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.SaveBatchOrgContactReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import cn.axzo.orgmanax.server.unit.service.UnitContactService;
import lombok.RequiredArgsConstructor;
@ -32,8 +34,18 @@ public class UnitContactController implements OrgUnitContactApi {
}
@Override
public ApiResult<List<CreateUnitContactResp>> create(List<CreateUnitContactReq> contactReqList) {
return null;
public ApiResult<List<OrgUnitContactDTO>> saveBatch(SaveBatchOrgContactReq req) {
return ApiResult.success(unitContactService.saveBatch(req));
}
@Override
public ApiResult<OrgUnitContactDTO> update(OperateOrgContactReq req) {
return ApiResult.success(unitContactService.update(req));
}
@Override
public ApiResult<PageResp<OrgUnitContactDTO>> page(PageOrgContactReq req) {
return ApiResult.success(unitContactService.page(req));
}
}

View File

@ -0,0 +1,24 @@
package cn.axzo.orgmanax.server.unit.foundation;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import cn.axzo.orgmanax.server.unit.foundation.dto.UnitContactCreator;
import java.util.List;
public interface UnitContactFoundationService {
/**
* 创建联系人
*/
OrgUnitContactDTO create(UnitContactCreator creator);
List<OrgUnitContactDTO> saveBatch(List<UnitContactCreator> contacts);
/**
* 更新联系人
*/
OrgUnitContactDTO update(UnitContactCreator unitCreator);
void delete(Long id);
}

View File

@ -0,0 +1,46 @@
package cn.axzo.orgmanax.server.unit.foundation.dto;
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalContact;
import cn.hutool.core.bean.BeanUtil;
import lombok.Data;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/10
*/
@Data
public class UnitContactCreator {
/**
* 单位id
*/
private Long organizationalUnitId;
/**
* 联系人姓名
*/
private String name;
/**
* 联系人手机号
*/
private String phone;
/**
* 联系人职位
*/
private String position;
/**
* 备注
*/
private String memo;
/**
* 转换实体
*/
public OrganizationalContact toEntity() {
return BeanUtil.copyProperties(this, OrganizationalContact.class);
}
}

View File

@ -0,0 +1,52 @@
package cn.axzo.orgmanax.server.unit.foundation.impl;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalContact;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitContactUpsertRepository;
import cn.axzo.orgmanax.server.unit.foundation.UnitContactFoundationService;
import cn.axzo.orgmanax.server.unit.foundation.dto.UnitContactCreator;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author : zhanghonghao@axzo.cn
* @since : 2025/1/10
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class UnitContactFoundationServiceImpl implements UnitContactFoundationService {
private final UnitContactUpsertRepository unitContactUpsertRepository;
@Override
public OrgUnitContactDTO create(UnitContactCreator creator) {
OrganizationalContact contact = creator.toEntity();
unitContactUpsertRepository.save(contact);
return BeanUtil.copyProperties(contact, OrgUnitContactDTO.class);
}
@Override
public List<OrgUnitContactDTO> saveBatch(List<UnitContactCreator> contacts) {
List<OrganizationalContact> contactList = contacts.stream().map(UnitContactCreator::toEntity).collect(Collectors.toList());
unitContactUpsertRepository.saveBatch(contactList);
return BeanUtil.copyToList(contactList, OrgUnitContactDTO.class);
}
@Override
public OrgUnitContactDTO update(UnitContactCreator creator) {
OrganizationalContact contact = creator.toEntity();
unitContactUpsertRepository.update(contact);
return BeanUtil.copyProperties(contact, OrgUnitContactDTO.class);
}
@Override
public void delete(Long id) {
unitContactUpsertRepository.delete(id);
}
}

View File

@ -1,5 +1,9 @@
package cn.axzo.orgmanax.server.unit.service;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.unit.contact.req.OperateOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.PageOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.SaveBatchOrgContactReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import java.util.List;
@ -11,4 +15,10 @@ public interface UnitContactService {
* 查询单位联系人信息
*/
List<OrgUnitContactDTO> list(Set<Long> ouIds);
List<OrgUnitContactDTO> saveBatch(SaveBatchOrgContactReq req);
OrgUnitContactDTO update(OperateOrgContactReq req);
PageResp<OrgUnitContactDTO> page(PageOrgContactReq req);
}

View File

@ -1,7 +1,14 @@
package cn.axzo.orgmanax.server.unit.service.impl;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.unit.contact.enums.ContactOperateEnum;
import cn.axzo.orgmanax.dto.unit.contact.req.OperateOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.PageOrgContactReq;
import cn.axzo.orgmanax.dto.unit.contact.req.SaveBatchOrgContactReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitContactDTO;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitContactQueryRepository;
import cn.axzo.orgmanax.server.unit.foundation.UnitContactFoundationService;
import cn.axzo.orgmanax.server.unit.foundation.dto.UnitContactCreator;
import cn.axzo.orgmanax.server.unit.service.UnitContactService;
import cn.axzo.trade.datasecurity.core.util.DataSecurityHelper;
import cn.hutool.core.bean.BeanUtil;
@ -25,6 +32,8 @@ public class UnitContactServiceImpl implements UnitContactService {
private final UnitContactQueryRepository unitContactQueryRepository;
private final UnitContactFoundationService unitContactFoundationService;
@Override
public List<OrgUnitContactDTO> list(Set<Long> ouIds) {
if (CollUtil.isEmpty(ouIds)) {
@ -40,4 +49,32 @@ public class UnitContactServiceImpl implements UnitContactService {
resultList.forEach(e -> e.setPhoneEncode(DataSecurityHelper.encrypt(e.getPhone())));
return resultList;
}
@Override
public List<OrgUnitContactDTO> saveBatch(SaveBatchOrgContactReq req) {
List<UnitContactCreator> contacts = BeanUtil.copyToList(req.getContacts(), UnitContactCreator.class);
return unitContactFoundationService.saveBatch(contacts);
}
@Override
public OrgUnitContactDTO update(OperateOrgContactReq req) {
if (req.getOperateEnum() == ContactOperateEnum.UPDATE) {
return unitContactFoundationService.update(BeanUtil.copyProperties(req, UnitContactCreator.class));
} else {
unitContactFoundationService.delete(req.getId());
return BeanUtil.copyProperties(req, OrgUnitContactDTO.class);
}
}
@Override
public PageResp<OrgUnitContactDTO> page(PageOrgContactReq req) {
UnitContactQueryRepository.ListReq listReq = BeanUtil.copyProperties(req, UnitContactQueryRepository.ListReq.class);
PageResp<UnitContactQueryRepository.UnitContactResp> page = unitContactQueryRepository.page(listReq);
return PageResp.<OrgUnitContactDTO>builder()
.current(page.getCurrent())
.total(page.getTotal())
.size(page.getSize())
.data(BeanUtil.copyToList(page.getData(), OrgUnitContactDTO.class))
.build();
}
}