jiangping
2024-05-22 a7fb50c91e4932aa175be266fbdd42b2a70eba66
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -2,6 +2,8 @@
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.system.SystemUserBiz;
import com.doumee.config.DataSyncConfig;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.erp.ErpConstants;
import com.doumee.core.erp.ErpTool;
@@ -24,9 +26,13 @@
import com.doumee.core.wx.wxPlat.WxPlatNotice;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dto.ResetPasswordDTO;
import com.doumee.dao.business.join.DeviceJoinMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.ResetSystemUserPwdDTO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.reqeust.AuditApproveDTO;
import com.doumee.dao.web.reqeust.ErpVisitDTO;
import com.doumee.dao.web.reqeust.ErpWithVisitDTO;
@@ -34,6 +40,7 @@
import com.doumee.dao.web.response.VisitDetailVO;
import com.doumee.dao.web.response.VisitRecordVO;
import com.doumee.service.business.InterfaceLogService;
import com.doumee.service.business.SmsEmailService;
import com.doumee.service.business.VisitsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -80,6 +87,8 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private SystemUserBiz systemUserBiz;
    @Autowired
    private DeviceJoinMapper deviceJoinMapper;
    @Autowired
    private ErpTool erpTool;
@@ -89,6 +98,12 @@
    @Autowired
    private InterfaceLogService interfaceLogService;
    @Autowired
    private DataSyncConfig dataSyncConfig;
    @Autowired
    private SmsEmailService smsEmailService;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Override
@@ -195,10 +210,8 @@
        Date date = new Date();
        //创建时间
        visits.setCreateDate(date);
        //普通访客
        visits.setType(Constants.ONE);
        //随行人员数量
        visits.setMemberNum(CollectionUtils.isNotEmpty(visits.getWithUserList())?visits.getWithUserList().size():0);
        visits.setMemberNum(Constants.ZERO);
        //访客信息(使用身份证号查询是否已存在改普通访客,没有则新增,存在则更新openid等信息),包括随访人员校验和处理
        Member member =dealMemberAndVisits(visits);
        visits.setMemberId(member.getId());
@@ -206,8 +219,9 @@
        //初始化访客信息
        initVisitInfo(visits,date);
        visitsMapper.insert(visits);
        //发起ERP审批申请
        if(visits.getSourceType().equals(Constants.ZERO)){
        if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ONE)){
            String erpId = startSendErpCheck(visits,visitMember);
            if(StringUtils.isNotBlank(erpId)){
                visits.setErpId(erpId);
@@ -220,9 +234,11 @@
            wxPlatNotice.sendVisitAuditTemplateNotice(visits,
                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
                    systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
        }else{
        }else if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){
            visits.setStatus(Constants.VisitStatus.pass);
            visitsMapper.updateById(visits);
        }else{
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!");
        }
        initWithVisitInfo(visits);
        updateProblemLog(visits,problemLog,member);
@@ -231,6 +247,33 @@
        return visits.getId();
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public Integer visitReporting(Visits visits) {
        isValidBaseParam(visits);
        //检验被拜访人是否合法
        Member visitMember = isValideVisitedUser(visits.getMemberId());
        Date date = new Date();
        //创建时间
        visits.setCreateDate(date);
        //访客报备
        visits.setType(Constants.TWO);
        visits.setReceptMemberId(visitMember.getId());
        visits.setStatus(Constants.VisitStatus.waitCheck);
        visits.setVisitType(Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MDJ_VISIT_REQUIRED).getCode()));
        visits.setIdcardNo(DESUtil.decrypt(Constants.EDS_PWD, visitMember.getIdcardNo()));
        //初始化访客信息
        initVisitInfo(visits,date);
        visitsMapper.insert(visits);
        return visits.getId();
    }
    /**
@@ -258,7 +301,7 @@
            approve.setIsEndCheck(Constants.ZERO);
            approve.setType(Constants.ZERO);
            approve.setLevel(Constants.ONE);
            approve.setVisitId(visits.getId());
            approve.setObjId(visits.getId());
            approveMapper.insert(approve);
            if(!CollectionUtils.isNotEmpty(approveIds)){
                approve.setIsEndCheck(Constants.ONE);
@@ -293,7 +336,7 @@
        if(approve.getStatus().equals(Constants.approveStatus.wait)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"审批记录已处理!");
        }
        Visits visits = visitsMapper.selectById(approve.getVisitId());
        Visits visits = visitsMapper.selectById(approve.getObjId());
        if(Objects.isNull(visits)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
@@ -315,7 +358,7 @@
            if(approve.getApproveType().equals(Constants.ONE)){
                //会签 查询是否是最后一条记录 如果是最后一条记录 则生成下级审批记录 如果是最后一级,则进行审批确认
                if(approveMapper.selectCount(new QueryWrapper<Approve>().lambda()
                        .eq(Approve::getVisitId,visits.getId())
                        .eq(Approve::getObjId,visits.getId())
                        .eq(Approve::getLevel,approve.getLevel())
                        .ne(Approve::getId,approve.getId())
                )<=Constants.ZERO){
@@ -336,7 +379,7 @@
                        .set(Approve::getStatus,Constants.approveStatus.otherDeal)
                        .set(Approve::getEditDate,new Date())
                        .set(Approve::getCheorId,auditApproveDTO.getMemberId())
                        .eq(Approve::getVisitId,visits.getId())
                        .eq(Approve::getObjId,visits.getId())
                        .eq(Approve::getStatus,Constants.approveStatus.wait)
                        .ne(Approve::getId,approve.getId())
                        .eq(Approve::getLevel,approve.getLevel())
@@ -363,7 +406,7 @@
                    .set(Approve::getStatus,Constants.approveStatus.otherDeal)
                    .set(Approve::getEditDate,new Date())
                    .set(Approve::getCheorId,auditApproveDTO.getMemberId())
                    .eq(Approve::getVisitId,visits.getId())
                    .eq(Approve::getObjId,visits.getId())
                    .eq(Approve::getStatus,Constants.approveStatus.wait)
                    .ne(Approve::getId,approve.getId())
                    .eq(Approve::getLevel,approve.getLevel())
@@ -401,7 +444,7 @@
                approve.setTemplatId(approveParam.getId());
                approve.setChekorId(Integer.valueOf(id));
                approve.setType(Constants.ONE);
                approve.setVisitId(visitId);
                approve.setObjId(visitId);
                approveList.add(approve);
            }
            approveMapper.insertBatchSomeColumn(approveList);
@@ -428,7 +471,7 @@
                approve.setApproveType(approveParam.getApproveType());
                approve.setChekorId(id);
                approve.setType(Constants.ONE);
                approve.setVisitId(visitId);
                approve.setObjId(visitId);
                approveList.add(approve);
            }
            approveMapper.insertBatchSomeColumn(approveList);
@@ -562,16 +605,27 @@
                ||  StringUtils.isBlank( visits.getPhone())
                ||  StringUtils.isBlank( visits.getCompanyName())
                ||  visits.getIdcardType() == null
                ||  Objects.isNull(visits.getType())
//                ||  StringUtils.isBlank( visits.getFaceImg() )
                ||  StringUtils.isBlank( visits.getIdcardNo() )
                || visits.getReceptMemberId() == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,信息填写不正确!");
        }
        //访客报备
        if(visits.getType().equals(Constants.TWO)
         && (StringUtils.isBlank( visits.getName())
                ||  StringUtils.isBlank( visits.getPhone())
                ||  StringUtils.isBlank( visits.getCompanyName()))
                ||  StringUtils.isBlank( visits.getCarNos())
                ||  Objects.isNull( visits.getMemberNum())
        ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,信息填写不正确!");
        }
        if(visits.getEndtime().getTime() < System.currentTimeMillis()){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,预约结束时间必须大于当前时间!");//
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,入厂时间必须大于当前时间!");//
        }
        if(visits.getEndtime().getTime() <= visits.getStarttime().getTime()){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,预约结束时间必须大于开始时间!");//
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,离厂时间必须大于入厂时间!");//
        }
        if(visits.getSourceType().equals(Constants.ZERO)){
            String code = systemDictDataBiz.queryByCode(Constants.VISIT_CONFIG,Constants.VALIDATE_VISIT).getCode();
@@ -582,7 +636,6 @@
            }
            if(StringUtils.isNotBlank(code)&&!StringUtils.equals(code,"0")){
//                Integer betweenDays = Math.toIntExact(cn.hutool.core.date.DateUtil.between(visits.getEndtime(), visits.getStarttime(), DateUnit.DAY));
                int betweenDays = DateUtil.daysBetweenDates11(visits.getEndtime(), visits.getStarttime())+1;
                if( betweenDays > codenum){
                    throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,预约总天数不能超过["+code+"天]!");
@@ -769,17 +822,6 @@
                model.setMemberId(visitsMember.getId());
            }
        }
//        if(CollectionUtils.isNotEmpty(addList)){
//            memberMapper.insertBatchSomeColumn(addList);
//        }
//        if(CollectionUtils.isNotEmpty(editList)){
//            editList.forEach(i->{
//                memberMapper.updateById(i);
//            });
//
//        }
        return  m;
    }
@@ -940,7 +982,7 @@
    private ProblemLog isValidProblemLog(Visits visits) {
        String required = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROBLEM_VISIT_REQUIRED).getCode();
        if(StringUtils.equals(required,Constants.ONE+"")&&visits.getSourceType()==Constants.ZERO){
        if(StringUtils.equals(required,Constants.ONE+"")&&visits.getSourceType()==Constants.ZERO&&!visits.getType().equals(Constants.TWO)){
            //如果必须答题,查找答题记录
            if(visits.getUserAnswerId() == null){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请先按要求进行安全知识答题!");
@@ -1102,6 +1144,7 @@
                .eq(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Visits::getCompanyName,pageWrap.getModel().getCompanyName())
                .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Visits::getStatus,pageWrap.getModel().getStatus());
        queryWrapper.isNull(Visits::getParentId);
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getMemberId()),Visits::getMemberId,pageWrap.getModel().getMemberId());
        queryWrapper.orderByDesc(Visits::getCreateDate);
        IPage<Visits> result = visitsJoinMapper.selectJoinPage(page, Visits.class,queryWrapper);
@@ -1293,4 +1336,28 @@
                .eq(Retention::getMemberId,visits.getMemberId()));
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void resetPassword(ResetPasswordDTO resetPasswordDTO){
        if(Objects.isNull(resetPasswordDTO)
            || StringUtils.isBlank(resetPasswordDTO.getPassword())
            || StringUtils.isBlank(resetPasswordDTO.getValidCode())
            || StringUtils.isBlank(resetPasswordDTO.getPhone())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda().eq(SystemUser::getMobile,resetPasswordDTO.getPhone()).eq(SystemUser::getDeleted,Constants.ZERO).last(" limit 1"));
        if(Objects.isNull(systemUser)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到手机号所属账户");
        }
        smsEmailService.validateCode(resetPasswordDTO.getValidCode(),resetPasswordDTO.getPhone());
        ResetSystemUserPwdDTO dto = new ResetSystemUserPwdDTO();
        dto.setPassword(resetPasswordDTO.getPassword());
        dto.setId(systemUser.getId());
        dto.setOperaUserId(systemUser.getId());
        systemUserBiz.resetPwd(dto);
    }
}