jiangping
2024-02-28 453881ba96a7913dfbb4d5c3d3542996d1e0f236
整理
已修改10个文件
266 ■■■■■ 文件已修改
admin/src/views/business/retention.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/DateUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/retention.vue
@@ -76,6 +76,15 @@
                    </el-image>
                  </template>
                </el-table-column>
              <el-table-column
                  label="操作"
                  min-width="120"
                  fixed="right"
              >
                <template slot-scope="{row}">
                  <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:retention:delete']">标记离场</el-button>
                </template>
              </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java
@@ -71,14 +71,14 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
    //@RequiresPermissions("business:visitevent:query")
    @RequiresPermissions("business:visitevent:query")
    public ApiResponse<PageData<VisitEvent>> findPage (@RequestBody PageWrap<VisitEvent> pageWrap) {
        return ApiResponse.success(visitEventService.findVisitPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    //@RequiresPermissions("business:visitevent:exportExcel")
    @RequiresPermissions("business:visitevent:exportExcel")
    public void exportExcel (@RequestBody PageWrap<VisitEvent> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(VisitEvent.class).export(visitEventService.findPageExcel(pageWrap), "访客出入事件_" + System.currentTimeMillis(), response);
    }
server/dmvisit_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -50,7 +50,7 @@
        try {
            TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
            //TimeZone tz = TimeZone.getTimeZone("GMT-01");
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'+'z");
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'+'08:00");
            df.setTimeZone(tz);
            String nowAsISO = df.format(date);
            return nowAsISO;
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -141,8 +141,8 @@
    @ExcelColumn(name="海康标识")
    private String hkId;
    @ApiModelProperty(value = "海康同步状态 0未同步 1已同步 2同步失败 3不符合下发条件  ", example = "1")
    @ExcelColumn(name="海康同步状态 0未同步 1已同步 2同步失败 3不符合下发条件")
    @ApiModelProperty(value = "海康同步状态 0未同步 1已同步 2同步失败 3不符合下发条件 4等待删除权限  ", example = "1")
    @ExcelColumn(name="海康同步状态 0未同步 1已同步 2同步失败 3不符合下发条件 4等待删除权限")
    private Integer hkStatus;
    @ApiModelProperty(value = "海康最近同步时间")
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
@@ -277,10 +277,10 @@
                        VisitEvent::getEventType,
                        pageWrap.getModel().getEventType())
                .ge(StringUtils.isNotBlank(pageWrap.getModel().getStartTime()),
                        VisitEvent::getHappenTime,
                        VisitEvent::getCreateDate,
                        pageWrap.getModel().getStartTime())
                .le(StringUtils.isNotBlank(pageWrap.getModel().getEndTime()),
                        VisitEvent::getHappenTime,
                        VisitEvent::getCreateDate,
                        pageWrap.getModel().getEndTime())
                .eq(VisitEvent::getIsdeleted,Constants.ZERO);
        queryWrapper.orderByDesc(VisitEvent::getHappenTime);
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -67,6 +67,8 @@
public class VisitsServiceImpl implements VisitsService {
    @Autowired
    private RetentionMapper retentionMapper;
    @Autowired
    private VisitsMapper visitsMapper;
    @Autowired
    private ApproveMapper approveMapper;
@@ -1159,6 +1161,10 @@
        BaseResponse response =  HKService.outVisitAppiontment(request);
        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.VisitStatus.signout)
                .eq(Visits::getId,visitId));
        //产出在场人员信息
        retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                .eq(Retention::getType,Constants.memberType.visitor)
                .eq(Retention::getMemberId,visits.getMemberId()));
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -41,6 +41,7 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -84,6 +85,8 @@
    @Autowired
    private DeviceEventJoinMapper deviceEventJoinMapper;
    @Value("${debug_model}")
    private Boolean isDebug;
    @Autowired
    private CarEventJoinMapper carEventJoinMapper;
@@ -337,9 +340,11 @@
        Date date = new Date();
        int num =0;
        for(ErpUserListResponse response : list){
            response.setPhone("1534569100"+num);
            response.setFaceImg("20223402/DM1005.png");
            response.setIdNo("34112219880427200"+num);
            if(isDebug){
                response.setPhone("1534569100"+num);
                response.setFaceImg("20223402/DM1005.png");
                response.setIdNo("34112219880427200"+num);
            }
            num++;
            Company company =  new Company();
            if(StringUtils.isNotBlank(response.getOrgId())){
@@ -819,66 +824,80 @@
    @Override
    public void userUpdate(UserUpdateRequest param){
        try{
            if(Objects.isNull(param)
                    ||Objects.isNull(param.getId())//编码
                    ||StringUtils.isBlank(param.getName())//名称
                    ||StringUtils.isBlank(param.getIdNo())//证件号
                    ||Objects.isNull(param.getIdType())//证件类型
                    ||Objects.isNull(param.getSex())//性别
                    ||Objects.isNull(param.getOrgId())//所属组织编码
            if(param.getIsdeleted() == 1){
                if(  Objects.isNull(param.getId()) ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST);
                }
               memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .eq(Member::getErpId,param.getId())
                       .eq(Member::getIsdeleted,Constants.ZERO)
                       .set(Member::getIsdeleted,Constants.ONE)
                       .set(Member::getHkStatus,Constants.ZERO)
                       .set(Member::getEditDate,new Date())
                       .set(Member::getRemark,"待同步安防平台")
               );
            }else {
                if( Objects.isNull(param)
                        ||Objects.isNull(param.getId())//编码
                        ||StringUtils.isBlank(param.getName())//名称
                        ||StringUtils.isBlank(param.getIdNo())//证件号
                        ||Objects.isNull(param.getIdType())//证件类型
                        ||Objects.isNull(param.getSex())//性别
                        ||Objects.isNull(param.getOrgId())//所属组织编码
//                    ||StringUtils.isBlank(param.getFaceImg())//人脸照片
                    ||StringUtils.isBlank(param.getCode())//工号
                    ||StringUtils.isBlank(param.getPhone())//手机号
             ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
                        ||StringUtils.isBlank(param.getCode())//工号
                        ||StringUtils.isBlank(param.getPhone())//手机号
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST);
                }
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getErpId,param.getId()).last("limit 1"));
                Company company = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,param.getOrgId()).last("limit 1"));
                if(Objects.isNull(company)){
                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到组织信息");
                }
                List<Integer> doorIds = null;
                if(Objects.isNull(member)){
                    member = new Member();
                    BeanUtils.copyProperties(param,member);
                    member.setId(null);
                    member.setCreateDate(new Date());
                    member.setRemark("待同步安防平台");
                    member.setHkStatus(Constants.ZERO);
                    member.setErpStatus(Constants.ONE);
                    member.setErpDate(new Date());
                    member.setErpId(param.getId());
                    member.setFsStatus(Constants.ZERO);
                    member.setCompanyId(company.getId());
                    member.setType(Constants.memberType.internal);
                    String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                    member.setIdcardNo(encryptIdNo);
                    member.setStartTime(param.getValidStartTime());
                    member.setRoleId(param.getRoleIds()!=null?JSONObject.toJSONString(param.getRoleIds()):null);
                    member.setEndTime(param.getValidEndTime());
                    member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                    member.setErpOrgId(param.getOrgId());
                    memberMapper.insert(member);
                }else{
                    Integer id = member.getId();
                    BeanUtils.copyProperties(param,member);
                    member.setId(id);
                    member.setCompanyId(company.getId());
                    String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                    member.setIdcardNo(encryptIdNo);
                    member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                    member.setErpOrgId(param.getOrgId());
                    member.setEditDate(new Date());
                    member.setErpDate(new Date());
                    member.setHkStatus(Constants.ZERO);
                    member.setRemark("待同步安防平台");
                    member.setStartTime(param.getValidStartTime());
                    member.setEndTime(param.getValidEndTime());
                    memberMapper.updateById(member);
                }
                //添加人员卡片数据
                getRoleIdByParam(param.getRoleIds(),member);
                dealMemberCard(member,param);
            }
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getErpId,param.getId()).last("limit 1"));
            Company company = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,param.getOrgId()).last("limit 1"));
            if(Objects.isNull(company)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到组织信息");
            }
            List<Integer> doorIds = null;
              if(Objects.isNull(member)){
                member = new Member();
                BeanUtils.copyProperties(param,member);
                member.setId(null);
                member.setCreateDate(new Date());
                  member.setRemark("待同步安防平台");
                member.setHkStatus(Constants.ZERO);
                member.setErpStatus(Constants.ONE);
                member.setErpDate(new Date());
                member.setErpId(param.getId());
                member.setFsStatus(Constants.ZERO);
                member.setCompanyId(company.getId());
                member.setType(Constants.memberType.internal);
                String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                member.setIdcardNo(encryptIdNo);
                member.setStartTime(param.getValidStartTime());
                member.setRoleId(param.getRoleIds()!=null?JSONObject.toJSONString(param.getRoleIds()):null);
                member.setEndTime(param.getValidEndTime());
                member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                member.setErpOrgId(param.getOrgId());
                memberMapper.insert(member);
            }else{
                Integer id = member.getId();
                BeanUtils.copyProperties(param,member);
                member.setId(id);
                member.setCompanyId(company.getId());
                String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                member.setIdcardNo(encryptIdNo);
                member.setIdcardDecode(Constants.getTuominStr(param.getIdNo()));
                member.setErpOrgId(param.getOrgId());
                member.setEditDate(new Date());
                member.setErpDate(new Date());
                member.setHkStatus(Constants.ZERO);
                member.setRemark("待同步安防平台");
                member.setStartTime(param.getValidStartTime());
                member.setEndTime(param.getValidEndTime());
                memberMapper.updateById(member);
            }
            //添加人员卡片数据
            getRoleIdByParam(param.getRoleIds(),member);
            dealMemberCard(member,param);
        }catch (BusinessException e){
            throw e;
        }finally {
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -12,12 +12,11 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.DeviceMapper;
import com.doumee.dao.business.MemberCardMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.join.EmpowerJoinMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
import com.doumee.dao.business.model.Device;
import com.doumee.dao.business.model.Empower;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Visits;
import com.doumee.dao.business.model.*;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -39,7 +38,11 @@
    @Autowired
    private EmpowerJoinMapper empowerMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private MemberCardMapper memberCardMapper;
    /**
     * 定时查询权限下发任务进度执行结果
@@ -104,6 +107,7 @@
               }
           }
           checkDelMemberTask();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
@@ -111,6 +115,62 @@
        }
    }
    /**
     * 对海康删除组织信息
     * @param id
     * @param date
     */
    private boolean doHkDeleteUser(Integer  id,String delHkIds,  Date date ) {
        if(StringUtils.isBlank(delHkIds)){
            return true;
        }
        UserDelRequest request = new UserDelRequest();
        request.setPersonIds(new String[]{delHkIds});
        BaseResponse<List<UserDelResponse>> result =  HKService.delBatchUser(request);
        if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
            List<String> fIds = new ArrayList<>();
            //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
            if(result.getData()!=null && result.getData().size()>0){
                log.info("海康删除用户失败:==============="+result.getData().get(0).getPersonId());
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .set(Member::getHkStatus,Constants.TWO)//同步失败
                        .set(Member::getHkDate,date)
                        .in(Member::getId, id));
            }else{
                //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
                memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                        .set(Member::getHkStatus,Constants.ONE)//同步成功
                        .set(Member::getHkDate,date)
                        .in(Member::getId, id));
                //删除所有绑定的卡片信息
                memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,id));
            }
            return true;
        }
        return false;
    }
    /**
     * 检查删除人员的权限是否都删除完成,如果权限删除完成, 进行海康人员的删除操作
     */
    private void checkDelMemberTask() {
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                .eq(Member::getIsdeleted,Constants.ONE)
                .eq(Member::getHkStatus,Constants.FOUR));
        if(memberList!=null &&memberList.size()>0 ){
            Date date = new Date();
            for(Member member : memberList){
                if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda()
                        .eq(Empower::getMemberId,member.getId())
                        .eq(Empower::getIsdeleted,Constants.ONE)
                        .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0){
                    //如果权限都已经删除成功,则删除海康人员和卡片数据
                     doHkDeleteUser(member.getId(),member.getHkId(),date);
                }
            }
        }
    }
    public  void syncEmpowerDetailDataOld(){
        if(Constants.DEALING_HK_EMPOWER_DETAIL){
            return   ;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -94,7 +94,7 @@
                 *      * 10:邀约中(员工发起邀约,访客还未应邀)、
                 *      * 11:邀约失效(员工发起邀约,一直到当前时间超过预计离开时间,访客还未应邀)
                 */
                if (model.getVisitorStatus()!=null && "3,4,11".contains( model.getVisitorStatus()+"" )){
                if (model.getVisitorStatus()!=null && ",3,4,11,".contains( ","  +model.getVisitorStatus()+"," )){
                    //对相应状态下的数据进行【已失效】处理
                    Visits update = new Visits();
                    //已失效
@@ -106,7 +106,7 @@
                    update.setRemark("超时未登记");
                    visitsMapper.updateById(update);
                }
                if (model.getVisitorStatus()!=null && "5,6".contains( model.getVisitorStatus()+"" )){
                if (model.getVisitorStatus()!=null && ",5,6,".contains( ","  +model.getVisitorStatus()+"," )){
                    // 对相应状态下的数据进行【已签离】处理
                    if(!Constants.equalsInteger(c.getStatus(),Constants.VisitStatus.signout)){
                        Visits update = new Visits();
@@ -125,7 +125,7 @@
                                .eq(Retention::getMemberId,c.getMemberId()));
                    }
                }
                if (model.getVisitorStatus()!=null&& "7,8".contains( model.getVisitorStatus()+"")){
                if (model.getVisitorStatus()!=null&& ",7,8,".contains( ","  +model.getVisitorStatus()+"," )){
                    //如果已登记
                    if(!Constants.equalsInteger(c.getStatus(),Constants.VisitStatus.signin)){
                        Visits update = new Visits();
@@ -453,7 +453,7 @@
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Visits.class)
                .selectAs(Member::getType,Visits::getMemberType)
                .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
                .leftJoin(Member.class,Member::getId,Visits::getMemberId);
        queryWrapper.in(Visits::getStatus, Arrays.asList(new Integer[]{Constants.VisitStatus.xfSuccess,Constants.VisitStatus.signin}) );
        List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper);
        return list;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -264,7 +264,7 @@
            List<Member> list = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                    .selectAll(Member.class )
                    .selectAs(Company::getHkId,Member::getHkOrgId)
                    .isNotNull(Member::getFaceImg)
                    .isNotNull(Member::getFaceId)
                    .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                    .eq(Member::getHkStatus,Constants.ZERO)
                    .eq(Member::getType,Constants.memberType.internal)
@@ -329,6 +329,14 @@
        }
        return  false;
    }
    private void dealDelMemberRoleEmpower(Member member ) {
        //待移除权限的设备数据授权记录(针对删除和更新丢失的权限,需要同步下发删除权限)
        empowerMapper.update(null,new UpdateWrapper<Empower>().lambda()
                .eq(Empower::getMemberId,member.getId())
                .set(Empower::getIsdeleted,Constants.ONE)
                .eq(Empower::getIsdeleted,Constants.ZERO)
                .set(Empower::getSendStatus,Constants.ZERO));
    }
    private void dealMemberRoleEmpower(Member member ) {
        //处理新增的人员卡片数据(与海康同步)
        List<MemberCard> cards = dealMemberHkCard(member);
@@ -374,7 +382,6 @@
                deviceIds.add(deviceRole.getId());
                list.add(model);
            }
        }
        //待移除权限的设备数据授权记录(针对删除和更新丢失的权限,需要同步下发删除权限)
        empowerMapper.update(null,new UpdateWrapper<Empower>().lambda()
@@ -479,13 +486,16 @@
    private void dealUserHkEditBiz(Member c, Date date, String path) {
        c.setHkStatus(Constants.ONE);
        if(Constants.equalsInteger(Constants.ONE,c.getIsdeleted())){
            //处理删除数据(删除之前下发的海康人员信息)
            boolean r = doHkDeleteUser(c.getId(),c.getHkId(),date);
            //处理删除数据(删除之前下发的海康人员权限信息)
            dealDelMemberRoleEmpower(c);
            c.setHkStatus(Constants.FOUR );
            c.setRemark( "等待删除授权!");
            /*boolean r = doHkDeleteUser(c.getId(),c.getHkId(),date);
            c.setHkStatus(r?Constants.ONE:Constants.TWO);
            c.setRemark(r?null:"删除海康人员信息失败!");
            c.setIsdeleted(r? Constants.ONE: Constants.ZERO);//删除失败,恢复数据
            //删除所有绑定的卡片信息
            memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,c.getId()));
            memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,c.getId()));*/
        }else{
            //处理修改数据,并且更新人脸
            UserAddRequest  addHkModel = getUserAddModel(c,path,1);//修改