server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java
@@ -67,11 +67,19 @@ return ApiResponse.success(null); } @ApiOperation("挂失/解挂操作") @PostMapping("/batchUpdate") @ApiOperation("挂失操作") @PostMapping("/batchLoss") //@RequiresPermissions("business:membercard:update") public ApiResponse batchUpdate(@RequestBody List<MemberCard> memberCards) { memberCardService.updateByIdInBatch(memberCards); public ApiResponse batchLoss(@RequestBody List<MemberCard> memberCards) { memberCardService.updateByIdInBatch(memberCards,0); return ApiResponse.success(null); } @ApiOperation("解挂操作") @PostMapping("/batchUnLoss") //@RequiresPermissions("business:membercard:update") public ApiResponse batchUnLoss(@RequestBody List<MemberCard> memberCards) { memberCardService.updateByIdInBatch(memberCards,1); return ApiResponse.success(null); } server/dmvisit_service/src/main/java/com/doumee/core/erp/ErpTool.java
@@ -1,5 +1,6 @@ package com.doumee.core.erp; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.doumee.core.constants.ResponseStatus; @@ -14,47 +15,81 @@ import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.HttpsUtil; import com.doumee.dao.business.model.InterfaceLog; import com.doumee.dao.business.model.Member; import com.doumee.service.business.InterfaceLogService; import com.github.pagehelper.PageInfo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class ErpTool { @Autowired private InterfaceLogService interfaceLogService; public void saveInterfaceLog(Object param, String path,String result,Integer type) { InterfaceLog interfaceLog=new InterfaceLog(); interfaceLog.setType(type); interfaceLog.setCreateDate(new Date()); interfaceLog.setIsdeleted(Constants.ZERO); if(param!=null){ interfaceLog.setRequest(JSONObject.toJSONString(param)); } interfaceLog.setPlat(Constants.ONE); interfaceLog.setRepose(result); interfaceLog.setName(path); interfaceLog.setUrl(path); interfaceLogService.create(interfaceLog); } /** * 同步组织 * @param url * @param param * @return */ public static List<ErpOrgListResponse> getErpOrgList(String url, OrgListRequest param){ public List<ErpOrgListResponse> getErpOrgList(String url, OrgListRequest param){ List<ErpOrgListResponse> list = new ArrayList<>(); int page =1; int pageSize = 100; boolean hasLast = true; while (hasLast){ hasLast = false; PageWrap<OrgListRequest> pageWrap = new PageWrap<>(); pageWrap.setModel(param); pageWrap.setPage(page); pageWrap.setCapacity(pageSize); String result = HttpsUtil.postJson(url, JSONObject.toJSONString(pageWrap)); if(StringUtils.isNotBlank(result)){ TypeReference typeReference = new TypeReference<ERPApiResponse<PageData<ErpOrgListResponse>>>(){}; ERPApiResponse<PageData<ErpOrgListResponse>> response = JSONObject.parseObject(result, typeReference.getType()); if(response!=null && response.getData()!=null&& response.getData().getRecords()!=null){ list.addAll(response.getData().getRecords()); if(page*pageSize < response.getData().getTotal() ){ hasLast =true;//还有下一页 try { int page = 1; int pageSize = 100; boolean hasLast = true; while (hasLast) { hasLast = false; PageWrap<OrgListRequest> pageWrap = new PageWrap<>(); pageWrap.setModel(param); pageWrap.setPage(page); pageWrap.setCapacity(pageSize); String result = HttpsUtil.postJson(url, JSONObject.toJSONString(pageWrap)); if (StringUtils.isNotBlank(result)) { TypeReference typeReference = new TypeReference<ERPApiResponse<PageData<ErpOrgListResponse>>>() { }; ERPApiResponse<PageData<ErpOrgListResponse>> response = JSONObject.parseObject(result, typeReference.getType()); if (response != null && response.getData() != null && response.getData().getRecords() != null) { list.addAll(response.getData().getRecords()); if (page * pageSize < response.getData().getTotal()) { hasLast = true;//还有下一页 } page++; } } } }catch (Exception e){ throw e; }finally { saveInterfaceLog(param,url,JSONArray.toJSONString(list),Constants.ZERO); } return list; } @@ -64,31 +99,37 @@ * @param param * @return */ public static List<ErpUserListResponse> getErpUserList(String url, UserListRequest param){ public List<ErpUserListResponse> getErpUserList(String url, UserListRequest param){ List<ErpUserListResponse> list = new ArrayList<>(); int page =1; int pageSize = 100; boolean hasLast = true; while (hasLast){ hasLast = false; PageWrap<UserListRequest> pageWrap = new PageWrap<>(); pageWrap.setModel(param); pageWrap.setPage(page); pageWrap.setCapacity(pageSize); String result = HttpsUtil.postJson(url, JSONObject.toJSONString(pageWrap)); if(StringUtils.isNotBlank(result)){ TypeReference typeReference = new TypeReference<ERPApiResponse<PageData<ErpUserListResponse>>>(){}; ERPApiResponse<PageData <ErpUserListResponse>> response = JSONObject.parseObject(result, typeReference.getType()); if(response!=null && response.getData()!=null && response.getData().getRecords()!=null){ list.addAll(response.getData().getRecords()); if(pageSize*page < response.getData().getTotal() ){ hasLast =false;//还有下一页 try{ int page =1; int pageSize = 100; boolean hasLast = true; while (hasLast){ hasLast = false; PageWrap<UserListRequest> pageWrap = new PageWrap<>(); pageWrap.setModel(param); pageWrap.setPage(page); pageWrap.setCapacity(pageSize); String result = HttpsUtil.postJson(url, JSONObject.toJSONString(pageWrap)); if(StringUtils.isNotBlank(result)){ TypeReference typeReference = new TypeReference<ERPApiResponse<PageData<ErpUserListResponse>>>(){}; ERPApiResponse<PageData <ErpUserListResponse>> response = JSONObject.parseObject(result, typeReference.getType()); if(response!=null && response.getData()!=null && response.getData().getRecords()!=null){ list.addAll(response.getData().getRecords()); if(pageSize*page < response.getData().getTotal() ){ hasLast =false;//还有下一页 } page++; } page++; } } }catch (Exception e){ throw e; }finally { saveInterfaceLog(param,url, JSONArray.toJSONString(list),Constants.ZERO); } return list; @@ -100,20 +141,26 @@ * @param param * @return */ public static ApproveInfoResponse submitApprove(String url, ApproveAddRequest param){ public ApproveInfoResponse submitApprove(String url, ApproveAddRequest param){ System.out.println(JSONObject.toJSONString(param)); String result = HttpsUtil.postJson(url, JSONObject.toJSONString(param)); if(StringUtils.isNotBlank(result)){ TypeReference typeReference = new TypeReference<ERPApiResponse<String>>(){}; ERPApiResponse<String> response = JSONObject.parseObject(result, typeReference.getType()); if(response!=null && response.isSuccess()){ ApproveInfoResponse approveInfoResponse = new ApproveInfoResponse(); approveInfoResponse.setId(response.getData()); return approveInfoResponse; }else if(response!=null && !response.isSuccess()){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMessage()); try{ if(StringUtils.isNotBlank(result)){ TypeReference typeReference = new TypeReference<ERPApiResponse<String>>(){}; ERPApiResponse<String> response = JSONObject.parseObject(result, typeReference.getType()); if(response!=null && response.isSuccess()){ ApproveInfoResponse approveInfoResponse = new ApproveInfoResponse(); approveInfoResponse.setId(response.getData()); return approveInfoResponse; }else if(response!=null && !response.isSuccess()){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMessage()); } } }catch (Exception e){ throw e; }finally { saveInterfaceLog(param,url,JSONObject.toJSONString(result),Constants.ZERO); } return null; } @@ -124,15 +171,21 @@ * @param param * @return */ public static ERPApiResponse noticeUserStatus(String url, UserFailRequest param){ public ERPApiResponse noticeUserStatus(String url, UserFailRequest param){ String result = HttpsUtil.postJson(url, JSONObject.toJSONString(param)); if(StringUtils.isNotBlank(result)){ TypeReference typeReference = new TypeReference<ERPApiResponse>(){}; ERPApiResponse response = JSONObject.parseObject(result, typeReference.getType()); if(response!=null){ return response; try{ if(StringUtils.isNotBlank(result)){ TypeReference typeReference = new TypeReference<ERPApiResponse>(){}; ERPApiResponse response = JSONObject.parseObject(result, typeReference.getType()); if(response!=null){ return response; } } }catch (Exception e){ throw e; }finally { saveInterfaceLog(param,url,JSONObject.toJSONString(result),Constants.ZERO); } return null; } server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
@@ -43,7 +43,8 @@ private String phone; @ApiModelProperty(value = "卡号集合" ) private List<String> cardList; @ApiModelProperty(value = "授权门禁组编码集合,【访客端】唯一标识" ) //2024年1月9日 沟通不从此业务触发 @ApiModelProperty(value = "授权门禁组编码集合,【访客端】唯一标识" ,hidden = true ) private Integer[] roleIds; @ApiModelProperty(value = "授权有效期(开始时间),为空时默认长期有效,如2023-11-24 11:39:23" ) private Date validStartTime; server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -713,7 +713,7 @@ res = HKTools.cardDeletion(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference< BaseResponse >(){}; BaseResponse result = JSONObject.parseObject(res, typeReference.getType()); BaseResponse result = JSONObject.parseObject(res, typeReference.getType()); logResult(result,"海康退卡"); return result; }catch (Exception e){ @@ -730,7 +730,7 @@ log.info("【海康批量挂失】================开始===="+JSONObject.toJSONString(param)); String res = null; try { res = HKTools.cardDeletion(JSONObject.toJSONString(param)); res = HKTools.cardLoss(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference< BaseResponse >(){}; BaseResponse result = JSONObject.parseObject(res, typeReference.getType()); server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
@@ -85,7 +85,7 @@ private String openid; @ApiModelProperty(value = "门禁角色编码") private Integer roleId; private String roleId; @ApiModelProperty(value = "门禁角色名称") private String roleName; server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberCard.java
@@ -100,8 +100,8 @@ @TableField(exist = false) private String statusName; @ApiModelProperty(value = "卡类型 1 IC卡 2 CPU卡 3远距离卡 4M卡 -- 前端新增传值写死") @ExcelColumn(name="卡类型 1 IC卡 2 CPU卡 3远距离卡 4M卡") @ApiModelProperty(value = "卡类型 1 IC卡 2 CPU卡 3远距离卡 4M卡 0虚拟卡 -- 前端新增传值写死") @ExcelColumn(name="卡类型 1 IC卡 2 CPU卡 3远距离卡 4M卡 0虚拟卡") private Integer type; @ApiModelProperty(value = "卡类型名称") @@ -120,5 +120,5 @@ @ApiModelProperty(value = "关键字") @TableField(exist = false) private String KeyWords; private String keyword; } server/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java
@@ -54,7 +54,9 @@ * * @param memberCards 实体集 */ void updateByIdInBatch(List<MemberCard> memberCards); void updateByIdInBatch(List<MemberCard> memberCards,Integer type); /** * 主键查询 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
@@ -3,14 +3,20 @@ import cn.hutool.core.lang.PatternPool; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.ReUtil; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.CardBingdingRequest; import com.doumee.core.haikang.model.param.request.CardDeletionRequest; import com.doumee.core.haikang.model.param.request.CardInfoRequest; import com.doumee.core.haikang.model.param.request.CardLossRequest; import com.doumee.core.haikang.service.HKService; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.admin.response.CarEventDTO; import com.doumee.dao.business.*; @@ -27,6 +33,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.service.business.impl.hksync.HkSyncOrgUserServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -60,9 +68,38 @@ private MemberCardJoinMapper memberCardJoinMapper; @Override @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public Integer create(MemberCard memberCard) { LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(Objects.isNull(memberCard.getMemberId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } memberCard.setCreator(userInfo.getId()); memberCard.setCreateDate(new Date()); memberCard.setStatus(Constants.ONE); memberCardMapper.insert(memberCard); dealMemberRoleEmpower(memberMapper.selectById(memberCard.getMemberId())); Member member = memberMapper.selectById(memberCard.getMemberId()); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到用户信息"); } CardBingdingRequest param = new CardBingdingRequest(); if(member.getStartTime() !=null && member.getEndTime()!=null){ param.setStartDate(DateUtil.getISO8601Timestamp(member.getStartTime())); param.setEndDate(DateUtil.getISO8601Timestamp(member.getEndTime())); } CardInfoRequest cr = new CardInfoRequest(); cr.setCardNo(memberCard.getCode()); cr.setOrgIndexCode(member.getCompanyHkId()); cr.setPersonId(member.getHkId()); cr.setCardType(memberCard.getType()); List<CardInfoRequest> cardList = new ArrayList<>(); cardList.add(cr); param.setCardList(cardList); BaseResponse response = HKService.cardBingding(param); if(response==null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) || response.getData()==null){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMsg()); } return memberCard.getId(); } @@ -90,25 +127,80 @@ memberCardMapper.updateById(memberCard); } /** * 批量挂失/解挂 * @param memberCards 实体集 * @param type 0=挂失;1=解挂 */ @Override public void updateByIdInBatch(List<MemberCard> memberCards) { @Transactional(rollbackFor = {BusinessException.class,Exception.class}) public void updateByIdInBatch(List<MemberCard> memberCards,Integer type) { LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if (CollectionUtils.isEmpty(memberCards)) { return; } CardLossRequest param = new CardLossRequest(); List<CardDeletionRequest> cardList = new ArrayList(); for (MemberCard memberCard: memberCards) { MemberCard model = memberCardMapper.selectById(memberCard.getId()); if(type.equals(Constants.ZERO)){ //挂失操作 if(!model.getStatus().equals(Constants.MemberCard.normal)){ continue; } }else{ //解挂操作 if(!model.getStatus().equals(Constants.MemberCard.loss)){ continue; } } CardDeletionRequest cardDeletionRequest = this.dealCardData(model); memberCard.setEditDate(new Date()); memberCard.setEditor(userInfo.getId()); this.updateById(memberCard); cardList.add(cardDeletionRequest); param.setCardList(cardList); } BaseResponse response = new BaseResponse(); if(type.equals(Constants.ZERO)){ response = HKService.cardLoss(param); }else{ response = HKService.cardUnLoss(param); } if(response==null ||!StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMsg()); } } public CardDeletionRequest dealCardData(MemberCard model){ if(model.getType().equals(Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"卡号:" +model.getCode() + " 为虚拟卡无法进行该操作"); } Member member = memberMapper.selectById(model.getMemberId()); if(Objects.isNull(member)||Objects.isNull(member.getHkId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"卡号:" +model.getCode() + " 对应人员海康信息异常"); } dealMemberRoleEmpower(member); CardDeletionRequest cardDeletionRequest = new CardDeletionRequest(); cardDeletionRequest.setCardNumber(model.getCode()); cardDeletionRequest.setPersonId(member.getHkId()); return cardDeletionRequest; } @Override @Transactional(rollbackFor = {Exception.class, BusinessException.class}) public void updateRefundCard(MemberCard memberCard) { MemberCard model = memberCardMapper.selectById(memberCard.getId()); CardDeletionRequest cardDeletionRequest = this.dealCardData(model); memberCardMapper.updateById(memberCard); dealMemberRoleEmpower(memberMapper.selectById(memberCard.getMemberId())); BaseResponse response = HKService.cardDeletion(new CardDeletionRequest()); if(){ BaseResponse response = HKService.cardDeletion(cardDeletionRequest); if(response==null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),response.getMsg()); } } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -38,6 +38,7 @@ import com.doumee.dao.web.response.VisitDetailVO; import com.doumee.dao.web.response.VisitRecordVO; import com.doumee.service.business.ApproveService; import com.doumee.service.business.InterfaceLogService; import com.doumee.service.business.VisitsService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -84,6 +85,8 @@ private SystemDictDataBiz systemDictDataBiz; @Autowired private DeviceJoinMapper deviceJoinMapper; @Autowired private ErpTool erpTool; @Autowired private WxPlatNotice wxPlatNotice; @@ -584,7 +587,6 @@ } param.setWithUserList(withUserList); param.setId(visits.getId()); param.setBeVisitedUserId(visitMember.getErpId()); param.setVisitorWorkUint(visits.getCompanyName()); @@ -602,13 +604,16 @@ param.setRoleNames(deviceRoleList.stream().map(m->m.getName()).collect(Collectors.toList())); } } ApproveInfoResponse response = ErpTool.submitApprove(ErpConstants.approveUrl,param); ApproveInfoResponse response = erpTool.submitApprove(ErpConstants.approveUrl,param); if(!Objects.isNull(response)){ return visits.getId().toString(); } return null; } private String visitAppiontment(Visits visits) { VisitAppointmentRequest param = new VisitAppointmentRequest(); param.setVisitStartTime(DateUtil.getISO8601Timestamp(visits.getStarttime())); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -105,6 +105,9 @@ @Autowired private InterfaceLogService interfaceLogService; @Autowired private ErpTool erpTool; @Override @PostConstruct @@ -128,7 +131,7 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持组织同步操作~"); } //获取ERP组织信息(全量同步) List<ErpOrgListResponse> list = ErpTool.getErpOrgList(ErpConstants.orgListUrl,param); List<ErpOrgListResponse> list = erpTool.getErpOrgList(ErpConstants.orgListUrl,param); if(list !=null && list.size()>0){ List<Company> addList = new ArrayList<>(); List<Company> updateList = new ArrayList<>(); @@ -278,7 +281,7 @@ if(!StringUtils.equals(Constants.ONE+"", systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ORG_USER_ORIGIN).getCode())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持人员同步操作~"); } List<ErpUserListResponse> list = ErpTool.getErpUserList(ErpConstants.userListUrl,param); List<ErpUserListResponse> list = erpTool.getErpUserList(ErpConstants.userListUrl,param); if(list !=null && list.size()>0) { List<Member> addList = new ArrayList<>(); List<Member> updateList = new ArrayList<>(); @@ -445,7 +448,7 @@ */ @Override public boolean noticeUserFail(UserFailRequest param){ ERPApiResponse r = ErpTool.noticeUserStatus(ErpConstants.userStatusUrl,param); ERPApiResponse r = erpTool.noticeUserStatus(ErpConstants.userStatusUrl,param); if(r!=null && r.isSuccess()){ return true; }