Commit 94e07368 authored by xiaoguang.xu's avatar xiaoguang.xu

联系人隔离。

parent a4e9d558
......@@ -2,26 +2,64 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.tech.db.DSType;
import cn.quantgroup.tech.db.TargetDataSource;
import cn.quantgroup.user.enums.*;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.user.enums.EducationEnum;
import cn.quantgroup.user.enums.IncomeEnum;
import cn.quantgroup.user.enums.IncomeRangeEnum;
import cn.quantgroup.user.enums.MaritalStatus;
import cn.quantgroup.user.enums.OccupationEnum;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.controller.internal.user.resp.UserFullResp;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.UserExtInfo;
import cn.quantgroup.xyqb.entity.UserSpouse;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.AddressRet;
import cn.quantgroup.xyqb.model.ContactInfo;
import cn.quantgroup.xyqb.model.ContactRet;
import cn.quantgroup.xyqb.model.Gender;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.Tuple;
import cn.quantgroup.xyqb.model.UserAssociation;
import cn.quantgroup.xyqb.model.UserAssociationModel;
import cn.quantgroup.xyqb.model.UserDetailRet;
import cn.quantgroup.xyqb.model.UserExtInfoRet;
import cn.quantgroup.xyqb.model.UserFullInfo;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.UserSpouseRet;
import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.service.api.IUserApiService;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.sms.ISmsService;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.user.IAddressService;
import cn.quantgroup.xyqb.service.user.IContactService;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserExtInfoService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.user.IUserSpouseService;
import cn.quantgroup.xyqb.service.user.vo.UserDetailVO;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*;
import cn.quantgroup.xyqb.util.AesUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import cn.quantgroup.xyqb.validator.ChineseName;
import com.alibaba.fastjson.JSONObject;
......@@ -40,14 +78,24 @@ import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.Min;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
......@@ -430,7 +478,7 @@ public class InnerController implements IBaseController {
if (null == userId) {
return JsonResult.buildErrorStateResult(null, null);
}
List<Contact> contacts = contactService.findByUserId(userId, true);
List<Contact> contacts = contactService.findByUserIdAndBizType(userId, BizType.CASH, true);
if (null == contacts || contacts.size() == 0) {
return JsonResult.buildErrorStateResult(null, Collections.emptyList());
}
......@@ -771,7 +819,7 @@ public class InnerController implements IBaseController {
if (!Objects.isNull(address)) {
bean.putAddressList(Collections.singletonList(address));
}
List<Contact> contacts = contactService.findByUserId(user.getId(), true);
List<Contact> contacts = contactService.findByUserIdAndBizType(user.getId(), BizType.CASH, true);
if (!Objects.isNull(contacts)) {
bean.putContactList(contacts);
}
......@@ -835,7 +883,7 @@ public class InnerController implements IBaseController {
UserAssociation bean = new UserAssociation();
if (null != userDetail) {
Address address = addressService.findByUserId(userDetail.getUserId());
List<Contact> contacts = contactService.findByUserId(userDetail.getUserId(), true);
List<Contact> contacts = contactService.findByUserIdAndBizType(userDetail.getUserId(), BizType.CASH, true);
UserExtInfo extInfo = userExtInfoService.findByUserId(userDetail.getUserId());
bean.setUserId(userDetail.getUserId());
bean.setPhoneNo(userDetail.getPhoneNo());
......
package cn.quantgroup.xyqb.controller.internal.user.center;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.user.enums.EducationEnum;
import cn.quantgroup.user.enums.IncomeRangeEnum;
import cn.quantgroup.user.enums.MaritalStatus;
......@@ -203,7 +204,7 @@ public class UserCenterController {
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId);
List<Contact> contacts = contactService.findByUserId(userId, true);
List<Contact> contacts = contactService.findByUserIdAndBizType(userId, BizType.CASH, true);
Map<String, Object> result = new HashMap<>();
if (null != userExtInfo) {
result.put("contacts", null != contacts && contacts.size() > 0);
......@@ -346,7 +347,7 @@ public class UserCenterController {
log.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
List<Contact> contacts = contactService.findByUserId(userId, true);
List<Contact> contacts = contactService.findByUserIdAndBizType(userId, BizType.CASH, true);
return JsonResult.buildSuccessResult(null, contacts);
}
......
package cn.quantgroup.xyqb.controller.internal.user.resp;
import cn.quantgroup.user.enums.BizType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
......@@ -90,5 +91,6 @@ public class UserFullResp {
private String name;
private String mobile;
private Integer relation;
private BizType bizType;
}
}
package cn.quantgroup.xyqb.controller.middleoffice.contact;
import cn.quantgroup.xyqb.controller.middleoffice.contact.dto.ContractUpdateDto;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.xyqb.controller.middleoffice.contact.dto.ContactSaveDto;
import cn.quantgroup.xyqb.controller.middleoffice.contact.dto.ContactUpdateDto;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.user.IContactService;
import cn.quantgroup.xyqb.util.ValidationUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.List;
import java.util.stream.Collectors;
/**
* 联系人
*/
@RestController
@RequestMapping("/middle_office/contacts")
public class ContactController {
......@@ -19,19 +29,63 @@ public class ContactController {
@Resource
private IContactService contactService;
/**
* 获取联系人
*
* @param userId 用户 ID
* @param bizType 业务类型
* @return
*/
@GetMapping
public JsonResult get(Long userId, Integer bizType) {
return JsonResult.buildSuccessResult();
public JsonResult get(Long userId, BizType bizType) {
List<Contact> contactList = contactService.findByUserIdAndBizType(userId, bizType, true);
return JsonResult.buildSuccessResult("", contactList);
}
/**
* 更新联系人信息
*
* @param contactUpdateDtoList
* @return
*/
@PatchMapping
public JsonResult update(List<ContractUpdateDto> contractUpdateDtoList) {
public JsonResult update(@RequestBody List<ContactUpdateDto> contactUpdateDtoList) {
contactUpdateDtoList = contactUpdateDtoList.stream()
.filter(contactUpdateDto -> (
ValidationUtil.validatePhoneNo(contactUpdateDto.getPhoneNo())
&& ValidationUtil.validateChinese(contactUpdateDto.getName())))
.collect(Collectors.toList());
if (contactUpdateDtoList.isEmpty()) {
return JsonResult.buildErrorStateResult("数据格式错误", null);
}
for (ContactUpdateDto contact : contactUpdateDtoList) {
contactService.update(contact.getName(), contact.getPhoneNo(), contact.getRelation(), contact.getId());
}
return JsonResult.buildSuccessResult();
}
/**
* 新增联系人
*
* @return
*/
@PostMapping
public JsonResult save() {
public JsonResult save(@RequestBody ContactSaveDto contactSaveDto) {
Long userId = contactSaveDto.getUserId();
List<Contact> contacts = contactSaveDto.getContacts();
Timestamp now = new Timestamp(System.currentTimeMillis());
contacts.stream()
.filter(Contact::valid)
.forEach(contact -> {
contact.setUserId(userId);
contact.setBizType(contactSaveDto.getBizType());
contact.setCreatedAt(now);
contact.setUpdateAt(now);
});
if (contacts.isEmpty()) {
return JsonResult.buildErrorStateResult("数据格式错误", null);
}
contactService.save(contacts);
return JsonResult.buildSuccessResult();
}
......
package cn.quantgroup.xyqb.controller.middleoffice.contact.dto;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.xyqb.entity.Contact;
import lombok.Data;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@Validated
public class ContactSaveDto {
@NotNull(message = "用户 ID 不能为空")
private Long userId;
@NotNull(message = "业务类型不能为空")
private BizType bizType;
@NotNull(message = "联系人信息不能为空")
private List<Contact> contacts;
}
package cn.quantgroup.xyqb.controller.middleoffice.contact.dto;
import cn.quantgroup.user.enums.Relation;
import lombok.Data;
@Data
public class ContractUpdateDto {
public class ContactUpdateDto {
private Long id;
private String name;
private String phoneNo;
private Integer relation;
private Relation relation;
}
package cn.quantgroup.xyqb.controller.middleoffice.userext;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.xyqb.controller.middleoffice.userext.req.UserExtReq;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserExtInfo;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.user.IAddressService;
import cn.quantgroup.xyqb.service.user.IContactService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserExtInfoService;
import cn.quantgroup.xyqb.service.user.IUserService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
......@@ -78,7 +88,7 @@ public class UserExtController {
result.put("address", addressService.findByUserId(userId));
}
if (contacts) {
result.put("contacts", contactService.findByUserId(userId, true));
result.put("contacts", contactService.findByUserIdAndBizType(userId, BizType.CASH, true));
}
if (extInfo) {
result.put("extInfo", userExtInfoService.findByUserId(userId));
......@@ -103,7 +113,7 @@ public class UserExtController {
result.put("address", addressService.findByUserId(userId));
}
if (contacts) {
result.put("contacts", contactService.findByUserId(userId, true));
result.put("contacts", contactService.findByUserIdAndBizType(userId, BizType.CASH, true));
}
if (extInfo) {
result.put("extInfo", userExtInfoService.findByUserId(userId));
......
......@@ -4,7 +4,10 @@ import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.model.Tuple;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Entity;
......@@ -21,6 +24,9 @@ import java.sql.Timestamp;
@Data
@Entity
@Table(name = "contact")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Contact implements Serializable {
private static final long serialVersionUID = -1L;
......
package cn.quantgroup.xyqb.repository;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
......@@ -13,4 +17,9 @@ public interface IContactRepository extends JpaRepository<Contact, Long> {
List<Contact> findByUserId(Long userId);
List<Contact> findByUserIdAndBizType(Long userId, BizType bizType);
@Modifying
@Transactional(rollbackFor = Exception.class)
@Query(value = "update contact set name=?1,phone_no=?2,relation=?3 where id = ?4", nativeQuery = true)
void update(String name, String phoneNo, Integer relation, Long id);
}
package cn.quantgroup.xyqb.service.page.impl;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.UserExtInfo;
import cn.quantgroup.xyqb.model.Tuple;
import cn.quantgroup.xyqb.service.page.IPageService;
import cn.quantgroup.xyqb.service.page.bean.BasePageType;
......@@ -55,7 +60,7 @@ public class PageServiceImpl implements IPageService {
private BasePageType pageContacts = new BasePageType("contacts", false) {
@Override
public boolean canPass(User user) {
List<Contact> contacts = contactService.findByUserId(user.getId(), true);
List<Contact> contacts = contactService.findByUserIdAndBizType(user.getId(), BizType.CASH, true);
return contacts != null && contacts.size() != 0;
}
};
......
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
......@@ -14,7 +15,9 @@ public interface IContactService {
* @param trim - 是否清除非法错误记录,true-清除,false-不清除
* @return
*/
List<Contact> findByUserId(Long userId, boolean trim);
// List<Contact> findByUserId(Long userId, boolean trim);
List<Contact> findByUserIdAndBizType(Long userId, BizType bizType, boolean trim);
Contact findById(Long id);
......@@ -26,9 +29,16 @@ public interface IContactService {
* @param contacts - 联系人列表
* @return
*/
@Deprecated //因不能明确表述更新还是新增。已废弃
List<Contact> save(Long userId, List<Contact> contacts);
@Deprecated //因不能明确表述更新还是新增。已废弃
Contact save(Contact contact);
@Deprecated //因不能明确表述更新还是新增。已废弃
Contact saveContact(String name, String phoneNo, Relation relation, Contact contact);
void update(String name, String phoneNo, Relation relation, Long id);
void save(List<Contact> contactList);
}
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.repository.IContactRepository;
import cn.quantgroup.xyqb.service.user.IContactService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -27,10 +26,8 @@ public class ContactServiceImpl implements IContactService {
@Autowired
private IContactRepository contactRepository;
@Override
@Cacheable(value = "contact", key = "'contact:' + #trim + #userId", unless = "#result == null or #result.size() == 0", cacheManager = "cacheManager")
public List<Contact> findByUserId(Long userId, boolean trim) {
List<Contact> contacts = contactRepository.findByUserId(userId);
public List<Contact> findByUserIdAndBizType(Long userId, BizType bizType, boolean trim) {
List<Contact> contacts = contactRepository.findByUserIdAndBizType(userId, bizType);
if (trim) {
trim(contacts);
}
......@@ -93,6 +90,16 @@ public class ContactServiceImpl implements IContactService {
return contact;
}
@Override
public void update(String name, String phoneNo, Relation relation, Long id) {
contactRepository.update(name, phoneNo, relation.ordinal(), id);
}
@Override
public void save(List<Contact> contactList) {
contactRepository.save(contactList);
}
/**
* 合并当前用户列表到更新列表
*
......
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.lock.RedisLock;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.controller.internal.user.resp.UserFullResp;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.UserExtInfo;
import cn.quantgroup.xyqb.entity.UserHashMapping;
import cn.quantgroup.xyqb.entity.UserHashPhoneNoIdNoMapping;
import cn.quantgroup.xyqb.event.PhoneNoUpdateEvent;
import cn.quantgroup.xyqb.exception.DataException;
import cn.quantgroup.xyqb.exception.UserNotExistException;
......@@ -17,9 +24,17 @@ import cn.quantgroup.xyqb.repository.IUserHashPhoneNoIdNoMappingRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.user.IAddressService;
import cn.quantgroup.xyqb.service.user.IContactService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserExtInfoService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*;
import cn.quantgroup.xyqb.util.HashUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
......@@ -38,7 +53,11 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
......@@ -379,14 +398,17 @@ public class UserServiceImpl implements IUserService, IBaseController {
userFullResp.setAddress(address.getAddress());
}
List<UserFullResp.Contact> contacts = Lists.newArrayList();
contactService.findByUserId(userId, true).forEach(contact -> {
contacts.add(UserFullResp.Contact.builder()
.userId(userId)
.name(contact.getName())
.mobile(contact.getPhoneNo())
.relation(contact.getRelation().ordinal())
.build());
});
contactService.findByUserIdAndBizType(userId, BizType.CASH, true)
.forEach(contact -> {
contacts.add(UserFullResp.Contact.builder()
.bizType(contact.getBizType())
.userId(userId)
.name(contact.getName())
.mobile(contact.getPhoneNo())
.relation(contact.getRelation()
.ordinal())
.build());
});
userFullResp.setContacts(contacts);
return userFullResp;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment