jiangping
2024-05-15 f2a44dc890b4aa905380cc12a59032f999fcec64
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -29,6 +29,7 @@
import com.doumee.core.wx.WXConstant;
import com.doumee.dao.admin.request.LaborEmpowerDTO;
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.request.MemberImport;
import com.doumee.dao.admin.request.MemberQuery;
import com.doumee.dao.admin.response.StagingDataVO;
import com.doumee.dao.business.*;
@@ -58,6 +59,7 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.*;
@@ -128,18 +130,21 @@
        //脱敏操作
        Member insert = initAddMemberModel(member,loginUserInfo);
        //海康人员新增业务
        if(dealHkUserBiz(insert)){
            try {
        try {
             if(dealHkUserBiz(insert)){
                memberMapper.insert(insert);
                //创建系统登陆账号(默认无任何角色)
                createSystemUser(insert);
            }catch (Exception e){
                //如果发生异常,删除已经创建的人员信息
                deleteHkUserBiz(insert.getHkId());
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息新建失败,请稍后重试!");
                if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
                    //如果是内部组织人员,新增系统登陆账号
                    createSystemUser(insert);
                }
            }else{
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
            }
        }else{
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
        }catch (Exception e){
            //如果发生异常,删除已经创建的人员信息
            deleteHkUserBiz(insert.getHkId());
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息新建失败,请稍后重试!");
        }
        return insert;
    }
@@ -150,7 +155,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());
@@ -175,6 +179,7 @@
        insert.setCreateDate(new Date());
        insert.setEditor(loginUserInfo.getId());
        insert.setEditDate(new Date());
        insert.setHkOrgId(member.getHkOrgId());
        insert.setIsdeleted(Constants.ZERO);
        insert.setCompanyId(member.getCompanyId());
        insert.setFaceImg(member.getFaceImg());
@@ -201,6 +206,9 @@
     * @param hkId
     */
    private void deleteHkUserBiz(String hkId) {
        if(StringUtils.isBlank(hkId)){
            return;
        }
        UserDelRequest request = new UserDelRequest();
        request.setPersonIds(new String[]{hkId});
        BaseResponse<List<UserDelResponse>> result =  HKService.delBatchUser(request);
@@ -214,14 +222,6 @@
    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(),"对不起,人脸照片有误,请尝试重新上传!");
@@ -305,6 +305,9 @@
    }
    private void isMemberParamValid(Member member) {
        if(member.getCompanyId() == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if (StringUtils.isBlank(member.getPhone())||!PhoneUtil.isPhone(member.getPhone())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"电话号码格式有误");
        }
@@ -317,22 +320,32 @@
            }
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"身份证号格式有误");
        }
        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(), "手机号【"+queryUserDto.getUsername()+"】已被使用,不能重复");
        Company company = companyMapper.selectById(member.getCompanyId());
        if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息已被删除,请刷新页面重试!");
        }
        // 验证工号
        if (StringUtils.isNotBlank(member.getCode())) {
            queryUserDto = new SystemUser();
        if(StringUtils.isBlank(company.getHkId())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息未同步安防平台,请先前往【组织管理】菜单进行维护!");
        }
        member.setHkOrgId(company.getHkId());
        member.setCompanyType(company.getType());
        if(Constants.equalsInteger(company.getType(),Constants.ONE)){
            SystemUser queryUserDto = new SystemUser();
            queryUserDto.setUsername(member.getPhone());
            queryUserDto.setDeleted(Boolean.FALSE);
            queryUserDto.setEmpNo(member.getCode());
            user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1"));
            SystemUser user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1"));
            if (user != null) {
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "工号【"+member.getCode()+"】已存在");
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【"+queryUserDto.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()+"】已存在");
                }
            }
        }
    }
@@ -487,7 +500,7 @@
    @Override
    public void roleAuthById(Integer id) {
    public void roleAuthById(Integer id,LoginUserInfo user) {
        Member member = memberMapper.selectById(id);
        if(member==null || member.getIsdeleted().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"员工信息已删除");
@@ -495,6 +508,157 @@
//        List<MemberCard> cards = HkSyncOrgUserToHKServiceImpl.getNormalCardList(member,memberCardMapper);
        HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,member,deviceRoleMapper,empowerMapper,deviceMapper);
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void batchRoleAuth(Member memberRole) {
        if(memberRole.getIds() ==null
                || memberRole.getIds().size() ==0 ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(memberRole.getRoleIds() ==null || memberRole.getRoleIds().length ==0){
            //如果是清空权限
        }else{
            if( ! (Constants.equalsObject(memberRole.getTimeType(),Constants.ZERO)
                    || (Constants.equalsObject(memberRole.getTimeType(),Constants.ONE)
                    && memberRole.getStartTime() !=null && memberRole.getEndTime() != null ))){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST);
            }
            if(Constants.equalsObject(memberRole.getTimeType(),Constants.ONE) && memberRole.getEndTime().getTime() < System.currentTimeMillis()){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"有效期截止日期不能小于当前时间!");
            }
            if(Constants.equalsObject(memberRole.getTimeType(),Constants.ONE) && memberRole.getEndTime().getTime() <= memberRole.getStartTime().getTime()){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"有效期截止日期不能小于开始时间!");
            }
        }
        if(Constants.equalsObject(memberRole.getTimeType(),Constants.ZERO) ){
           memberRole.setStartTime(null);
           memberRole.setEndTime(null);
        }
        for (Integer id : memberRole.getIds()){
            Member member = memberMapper.selectById(id);
            if(member==null || member.getIsdeleted().equals(Constants.ONE)){
                //如果员工信息不合法直接跳过
               continue;
            }
            member.setStartTime(memberRole.getStartTime());
            member.setEndTime(memberRole.getEndTime());
            Integer ischange = getRoleIdByParam(memberRole.getRoleIds(),member,memberRoleMapper,deviceRoleMapper);
            if(ischange == 0){
                return;//未发现权限变化,直接返回
            }
            if(memberRole.getRoleIds()!=null && memberRole.getRoleIds().length>0 && StringUtils.isBlank(member.getRoleId())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,未查询到有效门禁组数据");
            }
            memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                    .eq(Member::getId,member.getId())
                    .set(Member::getRoleId,member.getRoleId())
                    .set(Member::getAuthStatus,Constants.ONE)
                    .set(Member::getStartTime,memberRole.getStartTime())
                    .set(Member::getEndTime,memberRole.getEndTime())
                    .set(Member::getEditor,memberRole.getLoginUserInfo().getId())
                    .set(Member::getEditDate,new Date()) );
            saveUserActionBiz(member,memberRole.getLoginUserInfo(), Constants.UserActionType.AUTH_ROLE,userActionJoinMapper);
            //重新授权
            HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,member,deviceRoleMapper,empowerMapper,deviceMapper);
         }
    }
    public static   Integer   getRoleIdByParam(Integer[] param, Member member,MemberRoleMapper memberRoleMapper,DeviceRoleMapper deviceRoleMapper) {
        //添加人员角色关联数据
        member.setRoleId(null);
        List<MemberRole> roleList = memberRoleMapper.selectList( new QueryWrapper<MemberRole>().lambda()
                .eq(MemberRole::getIsdeleted,Constants.ZERO)
                .eq(MemberRole::getMemberId,member.getId()));
        member.setRoleId("");
        if((param == null || param.length==0 ) &&( roleList==null || roleList.size()==0)){
            //检查用户情况权限原本就是空的, 则无需处理
            return  0;
        }
         if((param == null || param.length==0 ) &&( roleList!=null && roleList.size()>0) ){
            //如果清空原来有权限,接口进行权限删除原有权限即可
            memberRoleMapper.delete(new QueryWrapper<MemberRole>().lambda().eq(MemberRole::getMemberId,member.getId()));
            return 1;
        }
        if(!Objects.isNull(param)&&param.length>Constants.ZERO){
          /*     if(roleList!=null && roleList.size()>0) {
                //和原有权限进行对比,看是否权限发生变化
                boolean ischange1=false;
                for (MemberRole role : roleList) {
                    ischange1=false;
                    for (int j = 0; j < param.length; j++) {
                        if(Constants.equalsInteger(role.getRoleId(),param[j])){
                            ischange1=true;
                            break;
                        }
                    }
                    if(!ischange1){
                        break;
                    }
                }
                boolean ischange2 =false;
                for (int j = 0; j < param.length; j++) {
                    ischange2=false;
                    for (MemberRole role : roleList) {
                        if(Constants.equalsInteger(role.getRoleId(),param[j])){
                            ischange2=true;
                            break;
                        }
                    }
                    if(!ischange2){
                        break;
                    }
                }
                if(ischange2 && ischange1){
                    return 0;//权限未发生改变
                }
            }*/
            //如果原来有权限,接口进行权限删除
            memberRoleMapper.delete(new QueryWrapper<MemberRole>().lambda().eq(MemberRole::getMemberId,member.getId()));
            //查询数据库存在的权限
            List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                    .eq(DeviceRole::getType,Constants.TWO)
                    .in(DeviceRole::getId,param));
            String ids = "";
            if(CollectionUtils.isNotEmpty(deviceRoleList)){
                List<MemberRole> memberRoleList = new ArrayList<>();
                List<Integer> r = new ArrayList<>();
                for (int i = 0; i < deviceRoleList.size(); i++) {
                    DeviceRole deviceRole =deviceRoleList.get(i);
                    if(i>0){
                        ids += ",";
                    }
                    Integer id =deviceRole.getId();
                    ids += "["+id+"]";
                    String doorids =deviceRole.getDoorIds();
                    if(StringUtils.isNotBlank(doorids)){
                        String[] ss = doorids.split(",");
                        try {
                            for(String s :ss){
                                r.add(Integer.parseInt(s));
                            }
                        }catch (Exception e){
                            //脏数据不处理
                        }
                    }
                    MemberRole memberRole = new MemberRole();
                    memberRole.setCreateDate(new Date());
                    memberRole.setMemberId(member.getId());
                    memberRole.setIsdeleted(Constants.ZERO);
                    memberRole.setRoleId(deviceRole.getId());
                    memberRoleList.add(memberRole);
                }
                memberRoleMapper.insertBatchSomeColumn(memberRoleList);
            }
            member.setRoleId(ids);
            return  1;
        }
        return  0;
    }
    @Override
    public     void empowerByList(Member member) {
        if(member.getIdList()!=null && member.getIdList().size() >0){
@@ -655,6 +819,7 @@
        userAction.setIsdeleted(Constants.ZERO);
        userAction.setCreateDate(updateMember.getEditDate());
        userAction.setCreator(updateMember.getEditor());
        userAction.setBeforeStatus(updateMember.getStatus());
        userAction.setType(type.getKey());
        String info = type.getInfo();
        userAction.setRemark(info.replace("${param1}",user!=null?user.getRealname():"").replace("${param2}", com.doumee.core.utils.DateUtil.getPlusTime2(updateMember.getEditDate())));
@@ -714,12 +879,15 @@
               companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                       .eq(Company::getId,model.getCompanyId())
                       .set(Company::getHeadId,member.getId()));
               //记录操作日志
               saveUserActionBiz(member,member.getLoginUserInfo(), Constants.UserActionType.BE_HEAD,userActionJoinMapper);
           }else{
               //如果是设为主管
               companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                       .eq(Company::getId,model.getCompanyId())
                       .set(Company::getHeadId,null)
               );
               saveUserActionBiz(member,member.getLoginUserInfo(),Constants.UserActionType.NOT_HEAD,userActionJoinMapper);
           }
       }
    }
@@ -1050,6 +1218,7 @@
                .eq(Objects.nonNull(pageWrap.getModel().getHkStatus()),Member::getHkStatus,pageWrap.getModel().getHkStatus())
                .eq(Objects.isNull(pageWrap.getModel().getIsdeleted()),Member::getIsdeleted,Constants.ZERO)
                .eq(Objects.nonNull(pageWrap.getModel().getIsdeleted()),Member::getIsdeleted,pageWrap.getModel().getIsdeleted())
                .eq(Objects.nonNull(pageWrap.getModel().getCompanyType()),Company::getType,pageWrap.getModel().getCompanyType())
                .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName())
//                .eq(Member::getStatus,Constants.Status.ENABLE.getValue())
//                .eq(Member::getType,Constants.memberType.internal)
@@ -1519,6 +1688,34 @@
        return stagingHeadVO;
    }
    @Override
    public String importBatch(MultipartFile file, LoginUserInfo loginUserInfo){
        List<Member> list =  memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                .selectAll(Member.class)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .eq(Member::getIsdeleted,Constants.ZERO)
        );
        ExcelImporter ie = null;
        List<MemberImport> dataList =null;
        try {
            ie = new ExcelImporter(file,0,0);
            dataList = ie.getDataList(MemberImport.class,null);
        }  catch (Exception e) {
            e.printStackTrace();
        }
        if(dataList == null || dataList.size() ==0){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!");
        }
        List<String> idCardList = dataList.stream().map(m->m.getIdcardNo()).collect(Collectors.toList());
        Set<String> set = new HashSet<>(idCardList);
        if(idCardList.size() != set.size()){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据存在身份证号相同数据!");
        }
        return "导入成功";
    }
}