| | |
| | | import com.doumee.dao.web.response.WxAuthorizeVO; |
| | | import com.doumee.service.business.MemberService; |
| | | import com.doumee.service.business.SmsEmailService; |
| | | import com.doumee.service.business.YwCustomerH5AuthService; |
| | | import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl; |
| | | import com.doumee.service.system.SystemLoginService; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.apache.commons.lang3.RandomStringUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | |
| | | * @date 2023/11/30 15:33 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class MemberServiceImpl implements MemberService { |
| | | |
| | | @Autowired |
| | |
| | | private SmsEmailService smsEmailService; |
| | | |
| | | @Autowired |
| | | private SystemLoginService systemLoginService; |
| | | private SystemLoginService systemLoginService; |
| | | |
| | | @Autowired |
| | | private YwCustomerH5AuthService ywCustomerH5AuthService; |
| | | |
| | | @Value("${debug_model}") |
| | | private Boolean isDebug; |
| | | |
| | | @Value("${h5.wechat.mock-enabled:false}") |
| | | private boolean h5WechatMockEnabled; |
| | | |
| | | @Value("${h5.wechat.mock-openid:}") |
| | | private String h5WechatMockOpenid; |
| | | |
| | | @Value("${h5.wechat.mock-code:DEV_MOCK}") |
| | | private String h5WechatMockCode; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {BusinessException.class,Exception.class}) |
| | |
| | | if (StringUtils.isNotBlank(member.getIdcardNo()) && !IdcardUtil.isValidCard(member.getIdcardNo())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"身份证号格式有误"); |
| | | } |
| | | // 内部员工/司机:仅在 type=0,2 范围内去重,不与商户人员(type=3)互斥 |
| | | if(StringUtils.isNotBlank(member.getIdcardNo())){ |
| | | if(memberMapper.selectCount(new QueryWrapper<Member>().lambda() |
| | | .in(Member::getType,new Integer[]{Constants.ZERO,Constants.TWO}) |
| | |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,人员信息不存在!"); |
| | | } |
| | | if(model.getCompanyId()!=null) { |
| | | member.setEditor(member.getLoginUserInfo().getId()); |
| | | member.setEditDate(new Date()); |
| | | if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){ |
| | | //如果是取消主管 |
| | | companyMapper.update(null,new UpdateWrapper<Company>().lambda() |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 微信授权接口 |
| | | * @param code |
| | | * @return |
| | | */ |
| | | @Override |
| | | public WxAuthorizeVO ywWxAuthorize(String code){ |
| | | return ywWxAuthorize(code, LoginUserInfo.H5_USER_OPS); |
| | | } |
| | | |
| | | @Override |
| | | public WxAuthorizeVO ywWxAuthorize(String code, Integer userType){ |
| | | if(StringUtils.isBlank(code)){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | if (h5WechatMockEnabled && StringUtils.equals(code, h5WechatMockCode)) { |
| | | return buildYwWxAuthorizeVO(StringUtils.trimToEmpty(h5WechatMockOpenid), userType); |
| | | } |
| | | String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode(); |
| | | String appSecret = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode(); |
| | | String getTokenUrl = WXConstant.GET_USER_INFO_URL.replace("CODE", code) |
| | | .replace("APPID", appId).replace("SECRET", appSecret); |
| | | log.error("=========================getTokenUrl=====================" + getTokenUrl); |
| | | JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true)); |
| | | log.error("=========================tokenJson=====================" + tokenJson); |
| | | String openId = ""; |
| | | if(Objects.nonNull(tokenJson)&&!Objects.isNull(tokenJson.get("access_token"))){ |
| | | openId = tokenJson.getString("openid"); |
| | | }else{ |
| | | if(StringUtils.isBlank(openId)){ |
| | | return new WxAuthorizeVO(); |
| | | } |
| | | } |
| | | return buildYwWxAuthorizeVO(openId, userType); |
| | | } |
| | | |
| | | private WxAuthorizeVO buildYwWxAuthorizeVO(String openId, Integer userType) { |
| | | WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO(); |
| | | wxAuthorizeVO.setOpenid(openId); |
| | | if(Constants.equalsInteger(userType, LoginUserInfo.H5_USER_CUSTOMER)){ |
| | | String token = ywCustomerH5AuthService.loginByOpenId(openId); |
| | | if(StringUtils.isNotBlank(token)){ |
| | | wxAuthorizeVO.setToken(token); |
| | | } |
| | | return wxAuthorizeVO; |
| | | } |
| | | SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() |
| | | .eq(SystemUser::getOpenid,openId) |
| | | .eq(SystemUser::getDeleted,Boolean.FALSE) |
| | | .last(" limit 1 ")); |
| | | if(!Objects.isNull(user)){ |
| | | String token = systemLoginService.loginByUserId(user.getId()); |
| | | wxAuthorizeVO.setToken(token); |
| | | } |
| | | return wxAuthorizeVO; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | public List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO){ |
| | | List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>() |
| | |
| | | ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | if(StringUtils.isNotBlank(member.getEmail())&&!Constants.validEmail(member.getEmail())){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"请填写正确的email"); |
| | | } |
| | | LoginUserInfo loginUserInfo = member.getLoginUserInfo(); |
| | | member.setCreator(loginUserInfo.getId()); |
| | | member.setCreateDate(new Date()); |
| | |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setStatus(Constants.ZERO); |
| | | this.checkYwMember(member); |
| | | applyYwMemberIdcard(member); |
| | | memberMapper.insert(member); |
| | | return member; |
| | | } |
| | |
| | | ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | Member existing = memberMapper.selectById(member.getId()); |
| | | if (existing == null || Constants.equalsInteger(existing.getIsdeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "人员信息不存在,请刷新后重试"); |
| | | } |
| | | LoginUserInfo loginUserInfo = member.getLoginUserInfo(); |
| | | member.setEditor(loginUserInfo.getId()); |
| | | member.setCustomerId(null); |
| | | member.setEditDate(new Date()); |
| | | member.setType(Constants.memberType.customer); |
| | | member.setStatus(Constants.ZERO); |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setStatus(Constants.ZERO); |
| | | this.checkYwMember(member); |
| | | if (StringUtils.isNotBlank(member.getIdcardNoNew())) { |
| | | applyYwMemberIdcardChange(member, existing); |
| | | } else { |
| | | member.setIdcardNo(existing.getIdcardNo()); |
| | | member.setIdcardDecode(existing.getIdcardDecode()); |
| | | } |
| | | member.setIdcardNoNew(null); |
| | | memberMapper.updateById(member); |
| | | return member; |
| | | } |
| | | |
| | | /** 新建:明文证件号写入 idcard_no(加密) + idcard_decode(脱敏) */ |
| | | private void applyYwMemberIdcard(Member member) { |
| | | if (StringUtils.isBlank(member.getIdcardNo())) { |
| | | return; |
| | | } |
| | | String plain = member.getIdcardNo().trim(); |
| | | if (Constants.equalsInteger(member.getIdcardType(), Constants.ZERO)) { |
| | | member.setSex(Constants.getSexByCardNo(plain)); |
| | | member.setBirthday(DateUtil.fromStringToDate("yyyyMMdd", IdcardUtil.getBirthByIdCard(plain))); |
| | | } |
| | | member.setIdcardDecode(Constants.getTuominStr(plain)); |
| | | member.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, plain)); |
| | | } |
| | | |
| | | /** 编辑:通过 idcardNoNew 变更证件号 */ |
| | | private void applyYwMemberIdcardChange(Member member, Member existing) { |
| | | String plain = member.getIdcardNoNew().trim(); |
| | | String encrypted = DESUtil.encrypt(Constants.EDS_PWD, plain); |
| | | if (StringUtils.equals(existing.getIdcardNo(), encrypted)) { |
| | | return; |
| | | } |
| | | if (Constants.equalsInteger(member.getIdcardType(), Constants.ZERO)) { |
| | | member.setSex(Constants.getSexByCardNo(plain)); |
| | | member.setBirthday(DateUtil.fromStringToDate("yyyyMMdd", IdcardUtil.getBirthByIdCard(plain))); |
| | | } |
| | | member.setIdcardDecode(Constants.getTuominStr(plain)); |
| | | member.setIdcardNo(encrypted); |
| | | } |
| | | |
| | | /** 列表展示:补全 idcard_decode */ |
| | | private void fillMemberIdcardDecode(Member member) { |
| | | if (StringUtils.isNotBlank(member.getIdcardDecode()) || StringUtils.isBlank(member.getIdcardNo())) { |
| | | return; |
| | | } |
| | | try { |
| | | String plain = DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()); |
| | | if (StringUtils.isNotBlank(plain)) { |
| | | member.setIdcardDecode(Constants.getTuominStr(plain)); |
| | | } |
| | | } catch (Exception e) { |
| | | member.setIdcardDecode(Constants.getTuominStr(member.getIdcardNo())); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<Member> ywList(Member member) { |
| | | List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>() |
| | | .lambda().eq(Member::getIsdeleted,Constants.ZERO) |
| | | .lambda() |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .eq(Member::getStatus,Constants.ZERO) |
| | | .eq(Objects.nonNull(member.getCustomerId()),Member::getCustomerId,member.getCustomerId()) |
| | | .eq(Member::getType,Constants.memberType.customer) |
| | | ); |
| | | return memberList; |
| | | } |
| | | |
| | | |
| | | public void checkYwMember(Member member){ |
| | | if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"电话号码格式有误"); |
| | | public void checkYwMember(Member member) { |
| | | if (StringUtils.isBlank(member.getPhone()) || !PhoneUtil.isPhone(member.getPhone())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "电话号码格式有误"); |
| | | } |
| | | if (StringUtils.isNotBlank(member.getIdcardNo()) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO) && !IdcardUtil.isValidCard(member.getIdcardNo())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"身份证号格式有误"); |
| | | if (memberMapper.selectCount(new QueryWrapper<Member>().lambda() |
| | | .ne(Objects.nonNull(member.getId()), Member::getId, member.getId()) |
| | | .eq(Member::getPhone, member.getPhone()) |
| | | .eq(Member::getType, Constants.memberType.customer) |
| | | .eq(Member::getIsdeleted, Constants.ZERO)) > Constants.ZERO) { |
| | | throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【" + member.getPhone() + "】已被使用,不能重复"); |
| | | } |
| | | if(StringUtils.isNotBlank(member.getIdcardNo() ) && Constants.equalsInteger(member.getIdcardType(),Constants.ZERO) ){ |
| | | if(memberMapper.selectCount(new QueryWrapper<Member>().lambda() |
| | | .ne(Objects.nonNull(member.getId()),Member::getId,member.getId()) |
| | | .eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, member.getIdcardNo())) |
| | | .eq(Member::getIsdeleted,Constants.ZERO)) >0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "身份证号【"+member.getIdcardNo()+"】已被使用,不能重复"); |
| | | String plainIdcard = resolveYwPlainIdcard(member); |
| | | if (StringUtils.isNotBlank(plainIdcard)) { |
| | | if (Constants.equalsInteger(member.getIdcardType(), Constants.ZERO) && !IdcardUtil.isValidCard(plainIdcard)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "身份证号格式有误"); |
| | | } |
| | | String encrypted = DESUtil.encrypt(Constants.EDS_PWD, plainIdcard); |
| | | if (memberMapper.selectCount(new QueryWrapper<Member>().lambda() |
| | | .ne(Objects.nonNull(member.getId()), Member::getId, member.getId()) |
| | | .eq(Member::getType, Constants.memberType.customer) |
| | | .eq(Member::getIsdeleted, Constants.ZERO) |
| | | .eq(Member::getIdcardNo, encrypted)) > Constants.ZERO) { |
| | | throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "证件号【" + plainIdcard + "】已被使用,不能重复"); |
| | | } |
| | | } |
| | | if(memberMapper.selectCount(new QueryWrapper<Member>().lambda() |
| | | .ne(Objects.nonNull(member.getId()),Member::getId,member.getId()) |
| | | .eq(Member::getPhone, member.getPhone()) |
| | | .eq(Member::getIsdeleted,Constants.ZERO) ) >0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【"+member.getPhone()+"】已被使用,不能重复"); |
| | | } |
| | | |
| | | private String resolveYwPlainIdcard(Member member) { |
| | | if (StringUtils.isNotBlank(member.getIdcardNoNew())) { |
| | | return member.getIdcardNoNew().trim(); |
| | | } |
| | | if (member.getId() == null && StringUtils.isNotBlank(member.getIdcardNo())) { |
| | | return member.getIdcardNo().trim(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | .eq(Objects.nonNull(model)&&Objects.nonNull(model.getCustomerId()),Member::getCustomerId,model.getCustomerId()) |
| | | .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(Member::getName,model.getName()).or().like( |
| | | Member::getPhone,model.getName() |
| | | )) |
| | | ).or().like(Member::getIdcardDecode, model.getName())) |
| | | .and(Objects.nonNull(model) && StringUtils.isNotBlank(model.getIdcardNo()), w -> { |
| | | String idcard = model.getIdcardNo().trim(); |
| | | w.eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, idcard)) |
| | | .or().like(Member::getIdcardDecode, idcard); |
| | | }) |
| | | .orderByDesc(Member::getCreateDate) |
| | | ); |
| | | return PageData.from(iPage); |
| | | PageData<Member> pageData = PageData.from(iPage); |
| | | if (pageData.getRecords() != null) { |
| | | for (Member item : pageData.getRecords()) { |
| | | fillMemberIdcardDecode(item); |
| | | } |
| | | } |
| | | return pageData; |
| | | } |
| | | |
| | | } |