server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DoorEventListResponse.java
@@ -14,7 +14,7 @@ public class DoorEventListResponse { @ApiModelProperty(value = "唯一标识" ,example = "1") private Integer eventId; private String eventId; @ApiModelProperty(value = "事件类型 0-人脸认证通过(196893) 1-刷卡认证通过(198915)" ) private String eventType; @ApiModelProperty(value = "性别 1-男 2-女" ,example = "1") server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/UserListRespone.java
@@ -22,7 +22,7 @@ @ApiModel("人员信息同步返回信息") public class UserListRespone { @ApiModelProperty(value = "唯一标识" ,example = "1") private Integer id; private String id; @ApiModelProperty(value = "姓名" ) private String name; @ApiModelProperty(value = "身份证号" ) @@ -40,12 +40,11 @@ @ApiModelProperty(value = "更新时间,如2023-11-24 09:47:36") private Date editDate; @ApiModelProperty(value = "所属组织编码") private String orgId; private Integer orgId; @ApiModelProperty(value = "人脸照片地址,图片公网访问地址") private String faceImg; @ApiModelProperty(value = "工号") private String code; @ApiModelProperty(value = "手机号" , required = true) private String phone; @ApiModelProperty(value = "卡号集合" ) server/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.doumee.dao.admin.response.MemberInfoDTO; import com.doumee.dao.business.model.CarEvent; import com.doumee.dao.business.model.Member; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -28,5 +29,5 @@ IPage<MemberInfoDTO> getPage(IPage<MemberInfoDTO> page, @Param(Constants.WRAPPER) Wrapper wrapper); void insertBatchSomeColumn(List<Member> list); } server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -19,6 +19,7 @@ * @return Integer */ Integer create(Visits visits); Integer createFk(Visits visits); /** server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -3,7 +3,11 @@ import cn.hutool.core.util.IdcardUtil; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.erp.ErpConstants; import com.doumee.core.erp.ErpTool; import com.doumee.core.erp.model.openapi.request.erp.ApproveAddRequest; import com.doumee.core.erp.model.openapi.request.erp.UserInfoRequest; import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.HKTools; @@ -32,6 +36,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -40,6 +45,7 @@ import org.springframework.util.DigestUtils; import java.util.*; import java.util.stream.Collectors; /** * 访客申请信息表Service实现 @@ -86,7 +92,7 @@ //获取申请的海康访问门禁组信息 String[] hkIds = getHkDeviceRoles(visits); //检验拜访人是否合法 isValideVisitedUser(visits.getReceptMemberId()); Member visitMember = isValideVisitedUser(visits.getReceptMemberId()); if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType()) &&!IdcardUtil.isValidCard(visits.getIdcardNo())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,身份证号码有误,请核实后重试!"); } @@ -96,9 +102,9 @@ //初始化访客信息 initVisitInfo(visits,date); //发起ERP审批申请 String erpid = startSendErpCheck(visits); if(StringUtils.isNotBlank(erpid)){ visits.setErpId(erpid); String erpId = startSendErpCheck(visits,visitMember); if(StringUtils.isNotBlank(erpId)){ visits.setErpId(erpId); }else{ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!"); } @@ -196,9 +202,43 @@ visits.setCreateDate(date); } private String startSendErpCheck(Visits visits) { //TODO ------------RK-------------- // ErpTool.submitApprove() private String startSendErpCheck(Visits visits,Member visitMember) { ApproveAddRequest param = new ApproveAddRequest(); List<Visits> withUserVisitsList = visits.getWithUserList(); List<UserInfoRequest> withUserList = new ArrayList<>(); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(withUserVisitsList)){ for (Visits v:withUserVisitsList) { UserInfoRequest userInfoRequest = new UserInfoRequest(); userInfoRequest.setName(v.getName()); userInfoRequest.setIdNo(v.getIdcardNo()); userInfoRequest.setSex(v.getSex()); userInfoRequest.setPhone(v.getPhone()); userInfoRequest.setFaceImg(v.getFaceImg()); userInfoRequest.setHealthImg(v.getImgurl()); withUserList.add(userInfoRequest); } param.setWithUserList(withUserList); } param.setId(visits.getId()); param.setBeVisitedUserId(visitMember.getErpId()); param.setVisitorWorkUint(visits.getCompanyName()); param.setPurpose(visits.getReason()); param.setStartTime(DateUtil.getDate(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss")); param.setEndTime(DateUtil.getDate(visits.getEndtime(),"yyyy-MM-dd HH:mm:ss")); if(StringUtils.isNotBlank(visits.getCarNos())){ param.setCarNo(Arrays.asList(visits.getCarNos().split(","))); } if(StringUtils.isNotBlank(visits.getDoors())){ List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda().in(DeviceRole::getId,Arrays.asList(visits.getDoors().split(",")))); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceRoleList)){ param.setRoleIds(deviceRoleList.stream().map(m->m.getId()).collect(Collectors.toList())); param.setRoleNames(deviceRoleList.stream().map(m->m.getName()).collect(Collectors.toList())); } } ApproveInfoResponse response = ErpTool.submitApprove(ErpConstants.approveUrl,param); if(!Objects.isNull(response)){ return response.getId().toString(); } return null; } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -251,18 +251,128 @@ return null; } /** * 同步ERP人员信息 * @param param * @return */ @Override public String syncUsers(UserListRequest param){ //TODO----------------RK------------------ List<UserListRespone> allList = ErpTool.getErpUserList(ErpConstants.userListUrl,param); public String syncUsers(UserListRequest param){ List<UserListRespone> list = ErpTool.getErpUserList(ErpConstants.userListUrl,param); if(list !=null && list.size()>0) { List<Member> addList = new ArrayList<>(); List<Member> updateList = new ArrayList<>(); List<Integer> delIds = new ArrayList<>(); List<Member> allList = memberMapper.selectList(new QueryWrapper<Member>().lambda() .eq(Member::getIsdeleted,Constants.ZERO) .eq(Member::getType, Constants.memberType.internal)); dealUserChangeList(list,addList,updateList,delIds,allList); if(addList.size()>0){ memberMapper.insertBatchSomeColumn(addList); } if(updateList.size()>0){ for(Member c : updateList){ memberMapper.updateById(c); } } if(delIds.size()>0){ //删除所有需要删除的组织信息(逻辑删除) memberMapper.update(null,new UpdateWrapper<Member>().lambda().set(Member::getHkStatus,Constants.ZERO) .set(Member::getIsdeleted, Constants.ONE).in(Member::getId,delIds)); } }else{ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步ERP数据为空!"); } return null; } private void dealUserChangeList(List<UserListRespone> list, List<Member> addList, List<Member> updateList, List<Integer> delIds, List<Member> allList) { Date date = new Date(); for(UserListRespone response : list){ //根据 erpId 查询用户信息,判断是新增还是更新 Member member = findUserByERPId(allList,response.getId()); if(member == null){ //如果是新增 if(Constants.formatIntegerNum(response.getIsdeleted()) == Constants.ONE){ continue; } //封装新增组织对象数据 addList.add(getAddMemberModel(response,date)); }else{ //如果是更新 if(Constants.formatIntegerNum(response.getIsdeleted()) == Constants.ONE){ //如果已删除,加入删除集合中 delIds.add(member.getId()); continue; } updateList.add(addUpdateMemberModel(response,member,date)); } } if(allList!=null && allList.size()>0){ for(Member c : allList){ if(isUserDeleted(c,list)){ delIds.add(c.getId()); } } } } private Member getAddMemberModel(UserListRespone param, Date date) { Member member = new Member(); BeanUtils.copyProperties(param,member); member.setCreateDate(new Date()); member.setHkStatus(Constants.ZERO); member.setErpStatus(Constants.ONE); member.setErpDate(new Date()); member.setErpId(param.getId()); member.setFsStatus(Constants.ZERO); member.setType(Constants.memberType.internal); String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo()); member.setIdcardNo(encryptIdNo); member.setIdcardDecode(Constants.getTuominStr(param.getIdNo())); member.setCompanyId(param.getOrgId()); member.setHkStatus(Constants.ZERO); return member; } private Member addUpdateMemberModel(UserListRespone param,Member member,Date date) { BeanUtils.copyProperties(param,member); String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo()); member.setIdcardNo(encryptIdNo); member.setIdcardDecode(Constants.getTuominStr(param.getIdNo())); member.setCompanyId(param.getOrgId()); member.setEditDate(new Date()); member.setErpDate(new Date()); member.setHkStatus(Constants.ZERO); return member; } private boolean isUserDeleted(Member c, List<UserListRespone> list) { for(UserListRespone m : list){ if(StringUtils.equals(c.getErpId(),m.getId().toString())){ return true; } } return false; } private Member findUserByERPId(List<Member> allList, String id) { if(allList!=null){ for(Member com :allList){ if(StringUtils.equals(com.getErpId(),id)){ return com; } } } return null; } /** * 提交用户同步失败记录 server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
@@ -7,11 +7,13 @@ import com.doumee.dao.web.response.MemberVO; import com.doumee.dao.web.response.WxAuthorizeVO; import com.doumee.service.business.MemberService; import com.doumee.service.business.VisitsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -34,6 +36,9 @@ @Autowired private MemberService memberService; @Autowired private VisitsService visitsService; @ApiOperation(value = "访客微信授权", notes = "访客微信授权获取openId") @GetMapping("/wxAuthorize")