jiangping
2024-05-11 415bf078cb4f9615e9090663b7880e35817fd036
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -14,7 +14,9 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.UserAddRequest;
import com.doumee.core.haikang.model.param.request.UserDelRequest;
import com.doumee.core.haikang.model.param.respose.UserAddResponse;
import com.doumee.core.haikang.model.param.respose.UserDelResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.model.LoginUserInfo;
@@ -32,11 +34,16 @@
import com.doumee.dao.admin.response.MemberInfoDTO;
import com.doumee.dao.admin.response.StagingDataVO;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.join.RetentionJoinMapper;
import com.doumee.dao.business.join.UserActionJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemDepartment;
import com.doumee.dao.system.model.SystemDepartmentUser;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.reqeust.AccountLoginDTO;
import com.doumee.dao.web.reqeust.CheckVisitedDTO;
import com.doumee.dao.web.reqeust.VisitMemberDTO;
@@ -51,6 +58,7 @@
import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
@@ -111,20 +119,166 @@
    @Autowired
    private VisitsMapper visitsMapper;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Override
    public Integer create(Member member) {
        memberMapper.insert(member);
        return member.getId();
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public Member create(Member member) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(loginUserInfo == null){
            loginUserInfo = member.getLoginUserInfo();
        }
        isMemberParamValid(member);
        //获取出生日期
        //脱敏操作
        Member insert = initAddMemberModel(member,loginUserInfo);
        //海康人员新增业务
        if(dealHkUserBiz(insert)){
            try {
                memberMapper.insert(insert);
                //创建系统登陆账号(默认无任何角色)
                createSystemUser(insert);
            }catch (Exception e){
                //如果发生异常,删除已经创建的人员信息
                deleteHkUserBiz(insert.getHkId());
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息新建失败,请稍后重试!");
            }
        }else{
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
        }
        return insert;
    }
    private void createSystemUser(Member insert) {
        SystemUser user = new SystemUser();
        // 生成密码盐
        String salt = RandomStringUtils.randomAlphabetic(6);
        // 生成密码
        user.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode(), salt));
        user.setSalt(salt);
        // 创建用户记录
        user.setType(insert.getType());
        user.setUsername(insert.getPhone());
        user.setEmpNo(insert.getCode());
        user.setRealname(insert.getName());
        user.setCompanyId(insert.getCompanyId());
        user.setMobile(insert.getPhone());
        user.setCreateTime(insert.getCreateDate());
        user.setCreateUser(insert.getCreator());
        user.setUpdateUser(insert.getEditor());
        user.setUpdateTime(insert.getEditDate());
        user.setMemberId(insert.getId());
        user.setDeleted(Boolean.FALSE);
        user.setFixed(Boolean.FALSE);
        user.setStatus(Constants.ZERO);
        systemUserMapper.insert(user);
    }
    private Member initAddMemberModel(Member member, LoginUserInfo loginUserInfo) {
        Member insert=  new Member();
        insert.setCreator(loginUserInfo.getId());
        insert.setCreateDate(new Date());
        insert.setEditor(loginUserInfo.getId());
        insert.setEditDate(new Date());
        insert.setIsdeleted(Constants.ZERO);
        insert.setCompanyId(member.getCompanyId());
        insert.setFaceImg(member.getFaceImg());
        insert.setImgurl(member.getImgurl());
        insert.setCode(member.getCode());
        insert.setType(Constants.TWO);
        insert.setHkDate(new Date());
        insert.setName(member.getName());
        insert.setHkStatus(Constants.ONE);
        insert.setSex(IdcardUtil.getGenderByIdCard(member.getIdcardNo()) ==1?Constants.TWO:Constants.ONE);//根据身份证号获取性别
        insert.setBirthday( DateUtil.parse(IdcardUtil.getBirthByIdCard(member.getIdcardNo()), "yyyyMMdd"));
        insert.setPhone(member.getPhone());
        insert.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, member.getIdcardNo()));//身份证号加密
        insert.setIdcardDecode( Constants.getTuominStr(member.getIdcardNo()));
        insert.setStatus(Constants.ZERO);
        return  insert;
    }
    /**
     * 删除海康人员信息
     * @param hkId
     */
    private void deleteHkUserBiz(String hkId) {
        UserDelRequest request = new UserDelRequest();
        request.setPersonIds(new String[]{hkId});
        BaseResponse<List<UserDelResponse>> result =  HKService.delBatchUser(request);
    }
    /**
     * 海康人员新增业务
     * @param insert
     * @return
     */
    private boolean dealHkUserBiz(Member insert) {
        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
        Company company = companyMapper.selectById(insert.getCompanyId());
        if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息已被删除,请刷新页面重试!");
        }
        if(StringUtils.isBlank(company.getHkId())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息未同步安防平台,请先前往【组织管理】菜单进行维护!");
        }
        insert.setHkOrgId(company.getHkId());
        UserAddRequest hkAddRequest = HkSyncOrgUserToHKServiceImpl.getUserAddModel(insert,path,Constants.ZERO);
        if(hkAddRequest == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,人脸照片有误,请尝试重新上传!");
        }
        //处理新增数据
        BaseResponse<UserAddResponse> result =  HKService.addUser(hkAddRequest);
        if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){
            insert.setHkId(hkAddRequest.getPersonId());
            insert.setFaceId(result.getData().getFaceId());
            if(StringUtils.isNotBlank(insert.getFaceId())){
                insert.setFaceStatus(Constants.ONE);
            }else{
                insert.setFaceStatus(Constants.ZERO);
            }
            return  true;
        }else  if(result!=null ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,同步安防平台失败【"+result.getMsg()+"】,请联系管理员!");
        }
        return false;
    }
    private void isMemberParamValid(Member member) {
        if (!PhoneUtil.isPhone(member.getPhone())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"电话号码格式有误");
        }
        if (!IdcardUtil.isValidCard(member.getIdcardNo())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"身份证号格式有误");
        }
        SystemUser systemUser = new SystemUser();
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(member.getPhone());
        queryUserDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1"));
        if (user != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【"+systemUser.getUsername()+"】已被使用,不能重复");
        }
        // 验证工号
        if (StringUtils.isNotBlank(member.getCode())) {
            queryUserDto = new SystemUser();
            queryUserDto.setDeleted(Boolean.FALSE);
            queryUserDto.setEmpNo(member.getCode());
            user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1"));
            if (user != null) {
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "工号【"+member.getCode()+"】已存在");
            }
        }
    }
    @Transactional
    @Override
    public Integer laborMemberCreate(LaborMemberDTO member) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if (PhoneUtil.isPhone(member.getPhone())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"电话号码格式有误");
        }
@@ -296,7 +450,7 @@
        memberMapper.updateById(member);
    }
    @Override
    public void updateFace(Member member) {
    public boolean updateFace(Member member) {
        QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
        wrapper.lambda().ne(Member::getRemark,"人脸已同步最新");
        List<Member> list =memberMapper.selectList(wrapper);
@@ -312,9 +466,11 @@
                 update.setRemark("人脸已同步最新");
                 update.setFaceStatus(Constants.ONE);
                 memberMapper.updateById(update);
                 return true;
             }
           }
       }
       return false;
    }
    @Override
    public void delHkForce(Member member) {
@@ -460,7 +616,6 @@
            queryWrapper.eq(Member::getCompanyId,member.getCompanyId());
        }
        queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
        List<Member> list =  memberJoinMapper.selectJoinList(Member.class,queryWrapper);
        if(list!=null){
            for(Member m : list){
@@ -654,7 +809,7 @@
                    .having(pageWrap.getModel().getTrainTimeEndTime()!=null,"trainTimeEndTime < "+ DateUtil.format(end,"yyyy-MM-dd HH:mm:ss"));
        IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
        if (!CollectionUtils.isEmpty(memberIPage.getRecords())){
            memberIPage.getRecords().forEach(s->s.setSex(IdcardUtil.getGenderByIdCard(s.getIdcardDecode())));
            memberIPage.getRecords().forEach(s->s.setSex(IdcardUtil.getGenderByIdCard(s.getIdcardDecode()) ==1?Constants.TWO:Constants.ONE));
        }
        return PageData.from(memberIPage);
    }
@@ -690,6 +845,8 @@
        queryWrapper.selectAll(Member.class);
        queryWrapper.selectAs(Company::getName,Member::getCompanyName);
        queryWrapper.selectAs(Company::getCompanyNamePath,Member::getCompanyNamePath);
        queryWrapper.selectAs(Company::getCompanyPath,Member::getCompanyPath);
        queryWrapper.select(" ( select count(1) from member_card mc where mc.isdeleted = 0 and  mc.member_id = t.id ) as  memberCardCount ");
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.in(Objects.nonNull(pageWrap.getModel().getCompanyIds())&&pageWrap.getModel().getCompanyIds().size()>0,
@@ -731,10 +888,10 @@
                memberInfoDTO.setRoleNames(this.dealRoleDatas(memberInfoDTO.getRoleId(),deviceRoleList));
                //拼接前缀
                if(StringUtils.isNotBlank(memberInfoDTO.getFaceImg())){
                    memberInfoDTO.setFaceImg(prefixUrl + memberInfoDTO.getFaceImg());
                    memberInfoDTO.setFaceImgFull(prefixUrl + memberInfoDTO.getFaceImg());
                }
                if(StringUtils.isNotBlank(memberInfoDTO.getImgurl())){
                    memberInfoDTO.setImgurl(prefixUrl + memberInfoDTO.getImgurl());
                    memberInfoDTO.setImgurlFull(prefixUrl + memberInfoDTO.getImgurl());
                }
            }
        }