k94314517
2024-07-03 ca133ed72b297141f906810f81413e15d3d66333
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,6 +2,7 @@
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -9,8 +10,6 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.DataSyncConfig;
import com.doumee.config.Jwt.JwtPayLoad;
import com.doumee.config.Jwt.JwtTokenUtil;
import com.doumee.core.annotation.excel.ExcelImporter;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -62,11 +61,14 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.Date;
import java.util.*;
import java.util.stream.Collectors;
@@ -124,8 +126,12 @@
    private SystemUserMapper systemUserMapper;
    @Autowired
    @Lazy
    private SmsEmailService smsEmailService;
    @Autowired
    private SystemLoginService systemLoginService;
    @Value("${debug_model}")
    private Boolean isDebug;
    @Override
@@ -378,6 +384,7 @@
        if(model ==null ||Constants.equalsInteger(member.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该员工信息不存在,请刷新页面重试!");
        }
        member.setSex(model.getSex());//默认是原来的性别
        if (StringUtils.isNotBlank(member.getPhone())  ){
            if ( !PhoneUtil.isPhone(member.getPhone())) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "电话号码格式有误");
@@ -455,11 +462,12 @@
            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
                            .set(SystemUser::getUpdateUser,member.getLoginUserInfo().getId())
                            .set(SystemUser::getUpdateTime,new Date())
                            .set(StringUtils.isNotBlank(model.getFaceImg()),SystemUser::getAvatar,member.getFaceImg())
                            .set(StringUtils.isNotBlank(model.getPhone()),SystemUser::getMobile,member.getPhone())
                            .set(StringUtils.isNotBlank(model.getName()),SystemUser::getRealname,member.getName())
                            .set(model.getCompanyId() !=null,SystemUser::getCompanyId,member.getCompanyId())
                            .set(StringUtils.isNotBlank(model.getCode()),SystemUser::getEmpNo,member.getCode())
                            .set(StringUtils.isNotBlank(member.getFaceImg()),SystemUser::getAvatar,member.getFaceImg())
                            .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getMobile,member.getPhone())
                            .set(StringUtils.isNotBlank(member.getPhone()),SystemUser::getUsername,member.getPhone())
                            .set(StringUtils.isNotBlank(member.getName()),SystemUser::getRealname,member.getName())
                            .set(member.getCompanyId() !=null,SystemUser::getCompanyId,member.getCompanyId())
                            .set(StringUtils.isNotBlank(member.getCode()),SystemUser::getEmpNo,member.getCode())
                    .eq(SystemUser::getMemberId,model.getId()));
        }
        if(Constants.equalsInteger(model.getCompanyType(),Constants.ZERO)
@@ -541,6 +549,7 @@
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public void deleteById(Integer id,LoginUserInfo loginUserInfo) {
        Member member=new Member();
        member.setId(id);
@@ -550,6 +559,17 @@
        member.setHkStatus(Constants.ZERO);
        member.setRemark("人员已删除,等待删除门禁权限");
        memberMapper.updateById(member);
        //刪除系统登陆账户
        SystemUser user = new SystemUser();
        user.setMemberId(id);
        systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
                .eq(SystemUser::getMemberId,id)
                .set(SystemUser::getDeleted,Boolean.TRUE)
                .set(SystemUser::getUpdateUser,member.getEditor())
                .set(SystemUser::getUpdateTime,member.getEditDate())
        );
        saveUserActionBiz(member,loginUserInfo,Constants.UserActionType.DELETE,userActionJoinMapper,JSONObject.toJSONString(member));
    }
@@ -596,7 +616,7 @@
                //如果员工信息不合法直接跳过
               continue;
            }
            if(StringUtils.isNotBlank(member.getFaceId()) || !Constants.equalsInteger(member.getFaceStatus(),Constants.ONE)){
            if(StringUtils.isBlank(member.getFaceId()) || !Constants.equalsInteger(member.getFaceStatus(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,用户【"+member.getName()+"】的人脸信息不满足授权条件,请返回完善后再进行该操作!");
            }
            member.setStartTime(memberRole.getStartTime());
@@ -724,7 +744,7 @@
                    memberRole.setRoleId(deviceRole.getId());
                    memberRoleList.add(memberRole);
                }
                memberRoleMapper.insertBatchSomeColumn(memberRoleList);
                memberRoleMapper.insert(memberRoleList);
            }
            member.setRoleId(ids);
            return  1;
@@ -788,8 +808,8 @@
        }
        for (Integer id:ids) {
            Member member = memberMapper.selectById(id);
            if(!Objects.isNull(member)&&member.getStatus()==Constants.ZERO){
                member.setStatus(Constants.TWO);
            if(!Objects.isNull(member)&&member.getStatus()!=Constants.TWO){
                member.setStatus(Constants.TWO);//恢复正常状态
                member.setEditor(loginUserInfo.getId());
                member.setEditDate(new Date());
                member.setAuthStatus(Constants.ZERO);//未授权
@@ -799,7 +819,6 @@
                member.setEditor(loginUserInfo.getId());
                //删除员工门禁权限
                cancelAllMemberEmpower(member,memberRoleMapper,empowerMapper);
                if(Constants.equalsInteger(type,Constants.ONE)){
                    saveUserActionBiz(member,loginUserInfo,Constants.UserActionType.FREEZE,userActionJoinMapper,JSONObject.toJSONString(member));
                }
@@ -823,8 +842,8 @@
        }
        for (Integer id:ids) {
            Member member = memberMapper.selectById(id);
            if(!Objects.isNull(member)&&member.getStatus()==Constants.ZERO){
                member.setStatus(Constants.ONE);//恢复正常状态
            if(!Objects.isNull(member)&&member.getStatus()==Constants.TWO){
                member.setStatus(Constants.ZERO);//恢复正常状态
                member.setEditor(loginUserInfo.getId());
                member.setEditDate(new Date());
                member.setAuthStatus(Constants.ZERO);//未授权
@@ -920,7 +939,7 @@
        userAction.setType(type.getKey());
        userAction.setContent(content);
        String info = type.getInfo();
        userAction.setRemark(info.replace("${param1}",user!=null?user.getRealname():"系统").replace("${param2}", com.doumee.core.utils.DateUtil.getPlusTime2(updateMember.getEditDate())));
        userAction.setRemark(info.replace("${param1}",user!=null?user.getRealname():"系统").replace("${param2}", com.doumee.core.utils.DateUtil.getPlusTime2(updateMember.getEditDate()!=null?updateMember.getEditDate():new Date())));
        userAction.setMemberId(updateMember.getId()+"");
        userActionMapper.insert(userAction);
    }
@@ -1086,6 +1105,9 @@
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.selectAll(Member.class)
                .selectAs(Company::getName,Member::getCompanyName) ;
        if(StringUtils.isNotBlank(member.getName())){
            queryWrapper.like(Member::getName,member.getName());
        }
        if(null != member.getType()) {
            queryWrapper.eq(Member::getType,member.getType());
@@ -1094,12 +1116,13 @@
            queryWrapper.eq(Member::getCompanyId,member.getCompanyId());
        }
        queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
        queryWrapper.eq(Member::getWorkStatus,Constants.ZERO);
        List<Member> list =  memberJoinMapper.selectJoinList(Member.class,queryWrapper);
        if(list!=null){
            for(Member m : list){
                m.setName(StringUtils.defaultString(m.getName(),"")+"-"+StringUtils.defaultString(m.getCompanyName(),""));
            }
        }
//        if(list!=null){
//            for(Member m : list){
//                m.setName(StringUtils.defaultString(m.getName(),"")+"-"+StringUtils.defaultString(m.getCompanyName(),""));
//            }
//        }
        return  list;
    }
    @Override
@@ -1109,7 +1132,7 @@
        queryWrapper.selectAll(Member.class)
                .selectAs(Company::getName,Member::getCompanyName)
                .eq(Member::getType,Constants.TWO)
                .exists("select d.id from car_driver b where b.isdeleted=0 and b.member_id=t.id");
                .exists("select b.id from car_driver b where b.isdeleted=0 and b.member_id=t.id");
        if(null != member.getType()) {
            queryWrapper.eq(Member::getType,member.getType());
@@ -1141,7 +1164,6 @@
        if(pageWrap.getModel().getType() != null){
            if(pageWrap.getModel().getType().equals(Constants.memberType.visitor)){
                queryWrapper.select(" * , (select v.COMPANY_NAME  from visits v where v.MEMBER_ID =  member.id and v.STATUS = 2   order by v.CREATE_DATE desc limit 1 ) as companyName  , " +
                        " (select v.STARTTIME  from visits v where v.MEMBER_ID =  member.id and v.STATUS = 2   order by v.CREATE_DATE desc limit 1 )  as lastVisitDate , " +
                        " (select count(1) from visits v where v.MEMBER_ID =  member.id and v.STATUS = 2 ) as visitTimes  ");
            }
        }
@@ -1452,12 +1474,11 @@
    public PageData<Member> findUnusualPage(PageWrap<MemberQuery> pageWrap) {
        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
        int actiontype =Constants.equalsInteger(pageWrap.getModel().getType(),Constants.ONE)?Constants.UserActionType.BLACKLIST.getKey():Constants.UserActionType.FREEZE.getKey();
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.selectAll(Member.class)
                .selectAs(Company::getName,Member::getCompanyName)
                .select(" (select ua.CREATE_DATE from user_action ua where ua.MEMBER_ID=t.id and ua.ISDELETED=0  order by ua.CREATE_DATE desc  limit 1) as optTime")
                .select(" (select s.REALNAME from user_action uac left join system_user s on uac.CREATOR = s.ID    where uac.MEMBER_ID=t.id and uac.ISDELETED=0 order by uac.CREATE_DATE desc  limit 1) as creatorName")
                .select(" (select STARTTIME from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 order by CREATE_DATE desc  limit 1) as visitsLastDate")
                .selectAs(Company::getCompanyNamePath,Member::getCompanyName)
                .select(" (select ua.remark from user_action ua where ua.MEMBER_ID=t.id and ua.ISDELETED=0 and ua.type="+actiontype+"  order by ua.CREATE_DATE desc  limit 1) as optRemark")
                .eq(Member::getIsdeleted,Constants.ZERO);
                queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCreaterId()),Member::getEditor,pageWrap.getModel().getCreaterId());
                queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Member::getType,pageWrap.getModel().getType());
@@ -1535,7 +1556,7 @@
                        list.add(model);
                    }
                    //导入新增的授权信息
                    empowerMapper.insertBatchSomeColumn(list);
                    empowerMapper.insert(list);
                }
            }
        }
@@ -1605,16 +1626,19 @@
     * @return
     */
    @Override
    public WxAuthorizeVO wxAuthorize(String code){
    public WxAuthorizeVO wxAuthorize(String code, Integer source){
        if(StringUtils.isBlank(code)||Objects.isNull(source)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        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);
        JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
        String openId = null;
        if(!Objects.isNull(tokenJson.get("access_token"))){
            openId = tokenJson.getString("openid");
        }
//        JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
        String openId = code;
//        if(!Objects.isNull(tokenJson.get("access_token"))){
//            openId = tokenJson.getString("openid");
//        }
//        String openId = "12345";
        WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
        wxAuthorizeVO.setOpenid(openId);
@@ -1624,6 +1648,7 @@
                .selectAs(Company::getName,Member::getCompanyName)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .eq(Member::getOpenid,openId)
                .eq(Member::getType,source)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .orderByDesc(Member::getCreateDate)
                .last(" limit 1 ")
@@ -1642,12 +1667,16 @@
            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
            member.setPrefixUrl(prefixUrl);
//            JwtPayLoad payLoad = new JwtPayLoad(Integer.toString(member.getId()));
//            String token = JwtTokenUtil.generateToken(payLoad);
//            //存储token至redis
//            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.INTERNAL_TOKEN+"_"+member.getId(),token,Constants.RedisKeys.EXPIRE_TIME);
//            wxAuthorizeVO.setToken(token);
            wxAuthorizeVO.setMember(member);
            //司机 与 内部人员 提供token
            if(Constants.equalsInteger(source,Constants.ZERO)||Constants.equalsInteger(source,Constants.TWO)){
                SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda().eq(SystemUser::getMemberId,member.getId())
                        .eq(SystemUser::getStatus,Constants.ZERO).last(" limit 1 "));
                if(Objects.nonNull(systemUser)){
                    String token = systemLoginService.loginByUserId(systemUser.getId());
                    wxAuthorizeVO.setToken(token);
                }
            }
        }
        return wxAuthorizeVO;
    }
@@ -1718,51 +1747,6 @@
    @Override
    public WxAuthorizeVO accountLogin(AccountLoginDTO accountLoginDTO){
        System.out.println(DESUtil.decrypt(Constants.EDS_PWD,"eIaPD5AR5DBuTBE9MW14QRG07IDKXCdh"));
        if(accountLoginDTO.getAccount().length()!=18
            //&&!IdcardUtil.isValidCard(accountLoginDTO.getAccount())
        ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,身份证号码有误,请核实后重试!");
        }
        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                .eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, accountLoginDTO.getAccount()))
                .ne(Member::getType,Constants.memberType.visitor)
        );
        if(Objects.isNull(member)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到用户,请联系管理员");
        }
        if(member.getIsdeleted() == Constants.ONE){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
        }
        if(member.getStatus() != Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员");
        }
        String md5Password = DESUtil.encrypt(Constants.EDS_PWD, accountLoginDTO.getPassword());
        if(!md5Password.equals(member.getPassward())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"账户密码错误!");
        }
        if(StringUtils.isNotBlank(accountLoginDTO.getOpenId())){
            //先清空原有访客的openid绑定关系
            memberMapper.update(null, new UpdateWrapper<Member>().lambda()
                    .ne(Member::getType,Constants.memberType.visitor)
                    .eq(Member::getOpenid,accountLoginDTO.getOpenId())
                    .set(Member::getOpenid,null)
            );
            //更新当前登录用户 openId
            member.setOpenid(accountLoginDTO.getOpenId());
            memberMapper.updateById(member);
        }
        WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
        JwtPayLoad payLoad = new JwtPayLoad(Integer.toString(member.getId()));
        String token = JwtTokenUtil.generateToken(payLoad);
        //存储token至redis
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.INTERNAL_TOKEN+"_"+member.getId(),token,Constants.RedisKeys.EXPIRE_TIME);
        wxAuthorizeVO.setToken(token);
        return wxAuthorizeVO;
    }
    @Override
@@ -1771,7 +1755,7 @@
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO));
        if(CollectionUtils.isNotEmpty(memberList)){
            stagingHeadVO.setWorkerCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.internal)).count());
            stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.lw_visitor)).count());
            stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.driver)).count());
            stagingHeadVO.setVisitorCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.visitor)).count());
        }
        //在场车辆
@@ -1795,7 +1779,7 @@
                new MPJLambdaWrapper<Member>()
                        .select("count(1) as memberCount, t1.name as companyName")
                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                        .eq(Member::getType,Constants.memberType.lw_visitor)
                        .eq(Member::getType,Constants.memberType.driver)
                        .groupBy(Company::getId,Company::getName)
        );
        List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>()
@@ -1870,7 +1854,7 @@
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息【"+insert.getName()+"】同步安防平台失败,请稍后重试!");
                }
            }
            memberMapper.insertBatchSomeColumn(newList);
            memberMapper.insert(newList);
            List<SystemUser> userList = new ArrayList<>();
            for(Member insert: newList){
                //创建系统登陆账号(默认无任何角色)
@@ -1880,7 +1864,7 @@
                }
            }
            if(userList.size()>0){
                systemUserMapper.insertBatchSomeColumn(userList);
                systemUserMapper.insert(userList);
            }
        }catch (Exception e){
            //如果发生异常,删除已经创建的人员信息
@@ -2001,7 +1985,7 @@
        Member member = new Member();
        member.setCreateDate(new Date());
        member.setIsdeleted(Constants.ZERO);
        member.setType(Constants.TWO);
        member.setType(Constants.THREE);
        member.setName(registerDriverDTO.getName());
        member.setPhone(registerDriverDTO.getPhone());
        member.setStatus(Constants.ZERO);