server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -3,6 +3,7 @@ import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl; import com.doumee.service.business.impl.hksync.HkSyncOrgUserServiceImpl; import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.EnableScheduling; @@ -23,6 +24,8 @@ private HkSyncImgServiceImpl hkSyncImgService; @Autowired private HkSyncOrgUserServiceImpl hkSyncOrgUserService; @Autowired private HkSyncVisitServiceImpl hkSyncVisitService; /** * æ¯å¦å¼åè */ @@ -47,6 +50,14 @@ hkSyncOrgUserService.syncOrgData(); } /** * 宿¶åæ¥ç»ç»ä¿¡æ¯å°æµ·åº·ç³»ç» * @throws Exception */ @Scheduled(fixedDelay= 60*1000) public void syncVisitData() { hkSyncVisitService.syncVisitData(); } /** * 宿¶åæ¥ç¨æ·ä¿¡æ¯å°æµ·åº·ç³»ç» * @throws Exception */ server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
@@ -43,5 +43,8 @@ private List<String> cardList; @ApiModelProperty(value = "ææé¨ç¦ç»ç¼ç éå,ã访客端ãå¯ä¸æ è¯" ) private Integer[] roleIds; @ApiModelProperty(value = "æææææï¼å¼å§æ¶é´ï¼ï¼ä¸ºç©ºæ¶é»è®¤é¿æææï¼å¦2023-11-24 11:39:23" ) private Date validStartTime; @ApiModelProperty(value = "æææææï¼æªæ¢æ¶é´ï¼ï¼ä¸ºç©ºæ¶é»è®¤é¿æææï¼å¦2023-11-24 11:39:23" ) private Date validEndTime; } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -9,7 +9,8 @@ public class HKConstants { public static final String IMG_INDEX ="HKIMG=" ; public static final String IMG_INDEX_ERROR ="HKIMG_ERROR=" ; public static final String RES_INDEX = "DM_"; public static final String RES_ORG_INDEX = "DMO"; public static final String RES_USER_INDEX = "DMU"; private Logger logger = LoggerFactory.getLogger(HKConstants.class); //æµ·åº·å¹³å°æ ¹æ®ç°åºç¯å¢é ç½®httpè¿æ¯https public static final String RESPONSE_SUCCEE = "0"; @@ -102,6 +103,39 @@ } } public enum ReturnCode { PARK_LINE_IN("0x00072001", "èµæºä¿¡æ¯ä¸åå¨" ) ; // æååé private String name; private String key; // æé æ¹æ³ ReturnCode(String key, String name ) { this.name = name; this.key = key; } // get set æ¹æ³ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } } /** * é¡è²æä¸¾ */ server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserDelRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.doumee.core.haikang.model.param.request; import lombok.Data; import java.util.List; /** * ç¨æ·æ°å¢è¯·æ±åæ° */ @Data public class UserDelRequest { private String[] personIds;// string[] True 人åIdï¼å次æä½ä¸é为1000æ¡ã è·å人åå表v2 æ¥å£è·åè¿ååæ°personId } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddSuccessResponse.java
@@ -7,4 +7,5 @@ private String clientId;// number False è°ç¨æ¹æå®Id private String orgIndexCode;// string False æå¡ç«¯çæçå¯ä¸æ è¯ private String personId;// string False æå¡ç«¯çæçå¯ä¸æ è¯ } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentMDJResponse.java
ÎļþÃû´Ó server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitAppointmentVistorResponse.java ÐÞ¸Ä @@ -3,7 +3,7 @@ import lombok.Data; @Data public class VisitAppointmentVistorResponse { public class VisitAppointmentMDJResponse { private String visitorName ;//string False 访客å§åï¼æ¯æä¸è±æå符ï¼ä¸è½å å« â / \ : * ? " < > private String appointRecordId ;// string False é¢çº¦è®°å½ID server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -151,13 +151,13 @@ *æ¹éå é¤äººåä¿¡æ¯ * @return */ public static BaseResponse<OrgOrUserAddFailureResponse> delBatchUser(List<UserAddRequest> param){ public static BaseResponse<List<UserDelResponse>> delBatchUser(UserDelRequest param){ log.info("ãæµ·åº·æ¹éæ°å¢äººåã================å¼å§===="+JSONObject.toJSONString(param)); try { String res = HKTools.delBatchUser(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference< BaseResponse<OrgOrUserAddFailureResponse>>(){}; BaseResponse<OrgOrUserAddFailureResponse> result = JSONObject.parseObject(res, typeReference.getType()); BaseResponse<List<UserDelResponse >> result = JSONObject.parseObject(res, typeReference.getType()); logResult(result,"海康æ¹éæ°å¢äººå"); return result; }catch (Exception e){ @@ -446,13 +446,13 @@ *访客å ç»è®°é¢çº¦ * @return */ public static BaseResponse<VisitAppointmentVistorResponse> visitAppiontmentMDJ(VisitAppointmentMDJRequest param){ public static BaseResponse<VisitAppointmentMDJResponse> visitAppiontmentMDJ(VisitAppointmentMDJRequest param){ log.info("ãæµ·åº·è®¿å®¢å ç»è®°é¢çº¦ã================å¼å§===="+JSONObject.toJSONString(param)); try { String res = HKTools.visitAppiontmentMDJ(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference< BaseResponse<VisitAppointmentVistorResponse> >(){}; BaseResponse<VisitAppointmentVistorResponse> result = JSONObject.parseObject(res, typeReference.getType()); new TypeReference< BaseResponse<VisitAppointmentMDJResponse> >(){}; BaseResponse<VisitAppointmentMDJResponse> result = JSONObject.parseObject(res, typeReference.getType()); logResult(result,"海康访客å ç»è®°é¢çº¦"); return result; }catch (Exception e){ server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -66,6 +66,8 @@ public static boolean DEALING_HK_IMG = false; public static boolean DEALING_HK_ORG = false; public static boolean DEALING_HK_USER = false; public static boolean DEALING_HK_VISIT = false; public static boolean DEALING_HK_EMPOWER = false; // ERPæ¥å£é ç½® public static final String ERP_CONFIG = "ERP_CONFIG"; // ERP ACCESS_KEY server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,131 @@ package com.doumee.core.utils; import org.apache.commons.codec.binary.Base64; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class ImageBase64Util { /** * å°å¾çè½¬æ¢æBase64ç¼ç * @param imgFile å¾ å¤çå¾ç * @return */ public static String getImgStr(String imgFile) { // å°å¾çæä»¶è½¬å为åèæ°ç»å符串ï¼å¹¶å¯¹å ¶è¿è¡Base64ç¼ç å¤ç InputStream in = null; byte[] data = null; // 读åå¾çåèæ°ç» try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } return Base64.encodeBase64String(data); } /** * 对åèæ°ç»å符串è¿è¡Base64è§£ç å¹¶çæå¾ç * @param imgStr å¾çæ°æ® * @param imgFilePath ä¿åå¾çå ¨è·¯å¾å°å * @return */ public static boolean generateImage(String imgStr, String imgFilePath) { // if (imgStr == null) // å¾åæ°æ®ä¸ºç©º return false; BASE64Decoder decoder = new BASE64Decoder(); try { // Base64è§£ç byte[] b = decoder.decodeBuffer(imgStr); for (int i = 0; i < b.length; ++i) { if (b[i] < 0) {// è°æ´å¼å¸¸æ°æ® b[i] += 256; } } // çæjpgå¾ç OutputStream out = new FileOutputStream(imgFilePath); out.write(b); out.flush(); out.close(); return true; } catch (Exception e) { return false; } } /** * è¿ç¨è¯»åimage转æ¢ä¸ºBase64å符串 * @param imgUrl * @return */ public static String Image2Base64(String imgUrl) { URL url = null; InputStream is = null; ByteArrayOutputStream outStream = null; HttpURLConnection httpUrl = null; try{ url = new URL(imgUrl); httpUrl = (HttpURLConnection) url.openConnection(); httpUrl.connect(); httpUrl.getInputStream(); is = httpUrl.getInputStream(); outStream = new ByteArrayOutputStream(); //å建ä¸ä¸ªBufferå符串 byte[] buffer = new byte[1024]; //æ¯æ¬¡è¯»åçå符串é¿åº¦ï¼å¦æä¸º-1ï¼ä»£è¡¨å ¨é¨è¯»å宿¯ int len = 0; //使ç¨ä¸ä¸ªè¾å ¥æµä»bufferéææ°æ®è¯»ååºæ¥ while( (len=is.read(buffer)) != -1 ){ //ç¨è¾åºæµå¾bufferéåå ¥æ°æ®ï¼ä¸é´åæ°ä»£è¡¨ä»åªä¸ªä½ç½®å¼å§è¯»ï¼len代表读åçé¿åº¦ outStream.write(buffer, 0, len); } // 对åèæ°ç»Base64ç¼ç return new BASE64Encoder().encode(outStream.toByteArray()); }catch (Exception e) { e.printStackTrace(); } finally{ if(is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if(outStream != null) { try { outStream.close(); } catch (IOException e) { e.printStackTrace(); } } if(httpUrl != null) { httpUrl.disconnect(); } } return null; } public static void main(String[] args) { String url= "http://doumeetest.oss-cn-beijing.aliyuncs.com/member/20210515/de923f81-b417-47fc-a702-472d60d7870a.png";// å¾ å¤ççå¾ç String imgbese = Image2Base64(url); System.out.println(imgbese); // String url= "D:\\1.jpg";// æ°çæçå¾ç // generateImage(imgbese, url); } } server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -106,9 +106,9 @@ @ExcelColumn(name="å·¥å·") private String code; @ApiModelProperty(value = "çæ¬¡") @ExcelColumn(name="çæ¬¡") private String classes; @ApiModelProperty(value = "çæ¬¡ 0ç½ç 1å¤ç") @ExcelColumn(name="çæ¬¡ 0ç½ç 1å¤ç") private Integer classes; @ApiModelProperty(value = "ç¶æ 0æ£å¸¸ 1ç¦ç¨ 2æé»/å»ç»", example = "1") @ExcelColumn(name="ç¶æ 0æ£å¸¸ 1ç¦ç¨ 2æé»/å»ç»") @@ -203,5 +203,7 @@ @ApiModelProperty(value = "ç»ç»åç§°") @TableField(exist = false) private String companyName; @ApiModelProperty(value = "ç»ç»æµ·åº·ç¼ç ") @TableField(exist = false) private String companyHkId; } server/dmvisit_service/src/main/java/com/doumee/dao/business/model/MemberRole.java
@@ -59,4 +59,16 @@ @ExcelColumn(name="è§è²ç¼ç ï¼å ³èdoor_role)") private String roleId; @ApiModelProperty(value = "海康æ è¯") @ExcelColumn(name="海康æ è¯") private String hkId; @ApiModelProperty(value = "æµ·åº·åæ¥ç¶æ 0æªåæ¥ 1已忥") @ExcelColumn(name="æµ·åº·åæ¥ç¶æ 0æªåæ¥ 1已忥") private Integer hkStatus; @ApiModelProperty(value = "海康æè¿åæ¥æ¶é´") @ExcelColumn(name="海康æè¿åæ¥æ¶é´") private Date hkDate; } server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
@@ -95,7 +95,7 @@ @ApiModelProperty(value = "çæ¬¡") @ExcelColumn(name="çæ¬¡") private String classes; private Integer classes; @ApiModelProperty(value = "海康é¨ç¦åç§°") @ExcelColumn(name="海康é¨ç¦åç§°") private String deviceName; server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -218,8 +218,8 @@ @ApiModelProperty(value = "æ®é访客ç³è¯·é访人å") @TableField(exist = false) private List<Visits> withUserList; @ApiModelProperty(value = "çæ¬¡") private String memberClasses; // @ApiModelProperty(value = "çæ¬¡") // private String memberClasses; @ApiModelProperty(value = "ç±»å 0å³å¡è®¿å®¢ 1æ®é访客 2å é¨äººå", example = "1") @TableField(exist = false) @@ -232,6 +232,10 @@ @ExcelColumn(name="被访人åå§å") @TableField(exist = false) private String receptMemberName; @ApiModelProperty(value = "è¢«è®¿äººåæµ·åº·ç¼ç ", example = "1") @ExcelColumn(name="被访人åå§å") @TableField(exist = false) private String receptMemberHkId; @ApiModelProperty(value = "被访人åé¨é¨", example = "1") @ExcelColumn(name="被访人åé¨é¨") server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java
@@ -57,4 +57,7 @@ void syncOrgData(); void syncUserData(); void syncVisitData(); void syncEmpowerData(); } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -682,21 +682,29 @@ Company company = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,param.getId()).last("limit 1")); if(Objects.isNull(company)){ company = new Company(); BeanUtils.copyProperties(param,company); // BeanUtils.copyProperties(param,company); company.setId(null); company.setCreateDate(new Date()); company.setHkStatus(Constants.ZERO); company.setErpStatus(Constants.ONE); company.setErpDate(new Date()); company.setErpId(param.getId()); company.setErpParentId(param.getParentId()); company.setFsStatus(Constants.ZERO); company.setType(Constants.ONE); company.setLinkName(param.getLinkName()); company.setLinkPhone(param.getLinkPhone()); companyMapper.insert(company); //TODO æµ·åº·æ°æ®å建 }else{ BeanUtils.copyProperties(param,company); // BeanUtils.copyProperties(param,company); company.setEditDate(new Date()); company.setErpId(param.getId()); company.setHkStatus(Constants.ZERO); company.setErpDate(new Date()); company.setErpParentId(param.getParentId()); company.setLinkName(param.getLinkName()); company.setLinkPhone(param.getLinkPhone()); companyMapper.updateById(company); //TODO æµ·åº·æ°æ®æ´æ° } @@ -742,7 +750,6 @@ member.setIdcardDecode(Constants.getTuominStr(param.getIdNo())); member.setCompanyId(param.getOrgId()); memberMapper.insert(member); //TODO æµ·åº·æ°æ®å建 }else{ BeanUtils.copyProperties(param,member); @@ -821,6 +828,7 @@ visitsList.forEach(i->{ i.setStatus(param.getStatus().equals(Constants.ZERO)?Constants.VisitStatus.pass:Constants.VisitStatus.noPass); i.setEndCheckDate(DateUtil.StringToDate(param.getApproveDate(),"yyyy-MM-dd HH:mm:ss")); i.setHkStatus(Constants.ZERO); visitsMapper.updateById(i); }); } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -79,5 +79,11 @@ @Override public void syncOrgData( ){ } @Override public void syncVisitData() { } @Override public void syncEmpowerData() { } } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,82 @@ package com.doumee.service.business.impl.hksync; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.VisitAppointmentRequest; import com.doumee.core.haikang.model.param.respose.VisitAppointmentResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.join.EmpowerJoinMapper; import com.doumee.dao.business.join.VisitsJoinMapper; import com.doumee.dao.business.model.Empower; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Visits; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; /** * 海康é¨ç¦ææä¸å¡Serviceå®ç° * @author æ±è¹è¹ * @date 2023/11/30 15:33 */ @Service @Slf4j public class HkSyncEmpowerServiceImpl extends HkSyncBaseServiceImpl { @Autowired private EmpowerJoinMapper empowerJoinMapper; /** * åæ¥æµ·åº·ç»ç»ä¿¡æ¯,æ ¹æ®erp忥ç»ç»ç»æï¼å®æ¶æ£æ¥éè¦ä¸åå°æµ·åº·çç»ç»ä¿¡æ¯ */ @Override public void syncEmpowerData(){ if(Constants.DEALING_HK_EMPOWER){ return ; } Constants.DEALING_HK_EMPOWER =true; try { //æ¥è¯¢ææéè¦åæ¥çä¼ä¸æ°æ® MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Empower.class); queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName) .select("t1.hk_id as receptMemberHkId") .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId); queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.pass)//审æ¹éè¿ .eq(Visits::getHkStatus,Constants.ZERO)//æªåæ¥å°æµ·åº· .orderByAsc(Visits::getCreateDate); List<Empower> list = empowerJoinMapper.selectJoinList(Empower.class,queryWrapper); if(list ==null || list.size()==0){ return; } Date date = new Date(); for(Empower c : list) { //å é¤çæ°æ®ï¼è¿è¡å é¤ VisitAppointmentRequest request = new VisitAppointmentRequest(); BaseResponse<VisitAppointmentResponse> response = HKService.visitAppiontment(request); if (response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) &&response.getData()!=null &&StringUtils.isNotBlank(response.getData().getAppointRecordId())) { //海康ä¸åæå c.setHkId( response.getData().getAppointRecordId());//é¢çº¦æ è¯ } else { //海康ä¸åæå } empowerJoinMapper.updateById(c); } }catch (Exception e){ e.printStackTrace(); }finally { Constants.DEALING_HK_EMPOWER =false; } } } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
@@ -4,26 +4,28 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.erp.model.openapi.request.erp.UserFailRequest; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.HKTools; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.OrgAddRequest; import com.doumee.core.haikang.model.param.request.OrgDelRequest; import com.doumee.core.haikang.model.param.request.ParkListRequest; import com.doumee.core.haikang.model.param.respose.OrgOrUserAddResponse; import com.doumee.core.haikang.model.param.respose.OrgOrUserAddSuccessResponse; import com.doumee.core.haikang.model.param.respose.OrgUpdateFailureResponse; import com.doumee.core.haikang.model.param.respose.ParkListResponse; import com.doumee.core.haikang.model.param.request.*; import com.doumee.core.haikang.model.param.respose.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.ImageBase64Util; import com.doumee.dao.business.CompanyMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.ParksMapper; import com.doumee.dao.business.join.CompanyJoinMapper; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Parks; import com.doumee.service.business.ERPSyncService; import com.github.yulichang.query.MPJQueryWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; @@ -35,21 +37,24 @@ import java.util.UUID; /** * 海康å车åºåæ¥Serviceå®ç° * 海康ç»ç»äººåéè¿æ¥Serviceå®ç° * @author æ±è¹è¹ * @date 2023/11/30 15:33 */ @Service @Slf4j public class HkSyncOrgUserServiceImpl extends HkSyncBaseServiceImpl { @Autowired private CompanyMapper companyMapper; @Autowired private MemberMapper memberMapper; @Autowired private ERPSyncService erpSyncService; @Autowired private SystemDictDataBiz systemDictDataBiz; /** * åæ¥æµ·åº·ç»ç»ä¿¡æ¯ * @return * åæ¥æµ·åº·ç»ç»ä¿¡æ¯,æ ¹æ®erp忥ç»ç»ç»æï¼å®æ¶æ£æ¥éè¦ä¸åå°æµ·åº·çç»ç»ä¿¡æ¯ */ @Override public void syncOrgData(){ @@ -64,7 +69,7 @@ .select("*,(select b.hk_id from company b where company.erp_parent_id = b.id limit 1) as hkParentId") .lambda() .eq(Company::getHkStatus,Constants.ZERO) .orderByDesc(Company::getErpDate)); .orderByAsc(Company::getErpDate)); if(list ==null || list.size()==0){ return; } @@ -124,6 +129,7 @@ */ private void doHkAddOrg(List<Company> updateList, List<OrgAddRequest> addList) { Date date = new Date(); BaseResponse<OrgOrUserAddResponse> result = HKService.addBatchOrg(addList); if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){ OrgOrUserAddResponse data = result.getData(); @@ -156,10 +162,10 @@ private OrgAddRequest getOrgAddModel(Company c,String rootOrgId) { OrgAddRequest model = new OrgAddRequest(); model.setOrgIndexCode(HKConstants.RES_INDEX+UUID.randomUUID().toString()); model.setOrgIndexCode(HKConstants.RES_ORG_INDEX+UUID.randomUUID().toString().replace("-","")); model.setOrgName(c.getName()); model.setOrgCode(c.getCode()); model.setOrgIndexCode(c.getHkParentId()); // model.setOrgCode(c.getCode()); model.setParentIndexCode(c.getHkParentId()); return model; } @@ -170,14 +176,20 @@ * @param date */ private void doHkDeleteOrg(List<Integer> delIds,List<String> delHkIds, Date date) { if(delHkIds.size() == 0){ return; } OrgDelRequest request = new OrgDelRequest(); request.setIndexCodes((String[]) delHkIds.toArray()); request.setIndexCodes( delHkIds.toArray(new String[]{})); BaseResponse<List<OrgUpdateFailureResponse>> result = HKService.delBatchOrg(request); if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){ List<String> fIds = new ArrayList<>(); if(result.getData()!=null){ for(OrgUpdateFailureResponse r : result.getData()){ fIds.add(r.getOrgIndexCode());//å é¤å¤±è´¥çæ°æ®éå if(!r.getCode().equals("0x00072001")){ //ä¸åå¨çä¹ç®å 餿å fIds.add(r.getOrgIndexCode());//å é¤å¤±è´¥çæ°æ®éå } } } //æ è®°å 餿åçæ°æ®ï¼æµ·åº·å¯¹æ¥ç¶æä¸ºå·²åæ¥ï¼ï¼åæ¥å¤±è´¥çä»ä¸ºå¾ 忥ï¼çä¸ä¸æ¬¡ç»§ç»å¤çï¼ç¥éå ¨é¨å é¤å®æ¯ï¼ @@ -195,7 +207,133 @@ */ @Override public void syncUserData(){ if(Constants.DEALING_HK_USER){ return ; } Constants.DEALING_HK_USER =true; try { //æ¥è¯¢ææéè¦åæ¥çä¼ä¸æ°æ® List<Member> list = memberMapper.selectList(new QueryWrapper<Member>() .lambda() .eq(Member::getHkStatus,Constants.ZERO) .orderByAsc(Member::getErpDate)); if(list ==null || list.size()==0){ return; } Date date = new Date(); String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode(); for(Member c : list){ if( c.getCompanyId() == null){ //å¦ææ²¡æç»ç»ä¸åå¤ç continue; } UserAddRequest addHkModel = new UserAddRequest(); if(StringUtils.isBlank(c.getHkId())){ //妿æ°å¢åæ¥æ¸æ if(Constants.equalsInteger(Constants.ONE,c.getIsdeleted())){ //å é¤çç»ç»ï¼ä¸åå¤ç,æµ·åº·ç¶ææ´æ°ä¸ºä¸å¤çï¼ä¸æ¬¡ä¸åå¤çè¿ä¸ªè®°å½ c.setHkStatus(Constants.TWO); memberMapper.updateById(c); continue ; } addHkModel = getUserAddModel(c,path); c.setHkId(addHkModel.getPersonId()); }else{ //å 餿µ·åº·åæçæ°æ®ï¼åæ°å¢ç»ç» addHkModel = getUserAddModel(c,path); c.setHkId(addHkModel.getPersonId()); } if(addHkModel == null){ //å¦æäººè¸æ°æ®ä¸æ£ç¡®ï¼ä¸è½½å¤±è´¥çåå noticeErpFail(c,Constants.ZERO,"人è¸ç §çä¸åå¨ï¼è·å失败ï¼"); continue; } //å¤çå 餿°æ®ï¼å é¤ä¹åä¸åçæµ·åº·äººåä¿¡æ¯ï¼ç¶åæ°å¢ï¼ doHkDeleteUser(c.getId(),c.getHkId(),date); //å¤çæ°å¢æ°æ® BaseResponse<UserAddResponse> result = HKService.addUser(addHkModel); if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){ c.setFaceId(result.getData().getFaceId()); memberMapper.updateById(c); }else{ noticeErpFail(c,Constants.ZERO,"人åä¿¡æ¯åæ¥å®é²å¹³å°å¤±è´¥ï¼è¯·ä¿®æ£åéè¯ï¼"+result.getCode()+result.getMsg()); } } }catch (Exception e){ e.printStackTrace(); }finally { Constants.DEALING_HK_USER =false; } } /** * éç¥erpç³»ç»ï¼äººåä¸ååæ¥ä¿¡æ¯ç¶æå¤±è´¥ * @param c * @param type * @param s */ private void noticeErpFail(Member c, int type, String s) { UserFailRequest r = new UserFailRequest(); r.setUserId(c.getErpId()); r.setInfo(s); r.setType(type); //éç¥ERPäººè¸æ°æ®ä¸æ£ç¡® erpSyncService.noticeUserFail(r); } /** * 对海康å é¤ç»ç»ä¿¡æ¯ * @param id * @param date */ private void doHkDeleteUser(Integer id,String delHkIds, Date date) { if(StringUtils.isBlank(delHkIds)){ return; } UserDelRequest request = new UserDelRequest(); request.setPersonIds(new String[]{delHkIds}); BaseResponse<List<UserDelResponse>> result = HKService.delBatchUser(request); if(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()); /* for(UserDelResponse r : result.getData()){ if(!r.getCode().equals("0x00072001")){ //ä¸åå¨çä¹ç®å 餿å fIds.add(r.getPersonId());//å é¤å¤±è´¥çæ°æ®éå } }}*/ }else{ //æ è®°å 餿åçæ°æ®ï¼æµ·åº·å¯¹æ¥ç¶æä¸ºå·²åæ¥ï¼ï¼åæ¥å¤±è´¥çä»ä¸ºå¾ 忥ï¼çä¸ä¸æ¬¡ç»§ç»å¤çï¼ç¥éå ¨é¨å é¤å®æ¯ï¼ companyMapper.update(null,new UpdateWrapper<Company>().lambda() .set(Company::getHkStatus,Constants.ONE) .set(Company::getHkDate,date) .in(Company::getId, id)); } } } private UserAddRequest getUserAddModel(Member c,String path) { UserAddRequest model = new UserAddRequest(); model.setOrgIndexCode(c.getCompanyHkId()); model.setPersonId(HKConstants.RES_USER_INDEX+UUID.randomUUID().toString().replace("-", "")); model.setGender(Constants.formatIntegerNum(c.getSex())+""); model.setPersonName(c.getName()); if(StringUtils.isNotBlank(c.getFaceImg())){ model.setFaces(new ArrayList<>()); UserAddFaceRequest face = new UserAddFaceRequest(); String imageBase = ImageBase64Util.Image2Base64(path+c.getFaceImg()); if(face.getFaceData() == null){ //äººè¸æ°æ®ä¸æ£ç¡®ï¼ return null; } model.getFaces().add(face); } return model; } } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -368,7 +368,7 @@ Retention retention = new Retention(); retention.setIsdeleted(Constants.ZERO); retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); retention.setClasses(visits.getMemberClasses()); retention.setClasses(visits.getClasses()); retention.setCode(visits.getCode()); retention.setIdcardNo(visits.getIdcardNo()); retention.setIdcardDecode(visits.getIdcardDecode()); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,220 @@ package com.doumee.service.business.impl.hksync; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.erp.model.openapi.request.erp.UserFailRequest; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.*; import com.doumee.core.haikang.model.param.respose.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.ImageBase64Util; import com.doumee.dao.business.CompanyMapper; import com.doumee.dao.business.DeviceRoleMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.VisitsMapper; import com.doumee.dao.business.join.VisitsJoinMapper; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.DeviceRole; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Visits; import com.doumee.service.business.ERPSyncService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; 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; import java.util.UUID; /** * 海康访客ä¸å¡Serviceå®ç° * @author æ±è¹è¹ * @date 2023/11/30 15:33 */ @Service @Slf4j public class HkSyncVisitServiceImpl extends HkSyncBaseServiceImpl { @Autowired private VisitsJoinMapper visitsMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private DeviceRoleMapper deviceRoleMapper; /** * åæ¥æµ·åº·ç»ç»ä¿¡æ¯,æ ¹æ®erp忥ç»ç»ç»æï¼å®æ¶æ£æ¥éè¦ä¸åå°æµ·åº·çç»ç»ä¿¡æ¯ */ @Override public void syncVisitData(){ if(Constants.DEALING_HK_VISIT){ return ; } Constants.DEALING_HK_VISIT =true; List<DeviceRole> roleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda() .eq(DeviceRole::getType, Constants.ONE)); //æ è®°æ¯å¦èµ°å ç»è®°é¢çº¦ String applyType =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.MDJ_VISIT_REQUIRED).getCode(); String applyLwType =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.MDJ_LW_REQUIRED).getCode(); try { //æ¥è¯¢ææéè¦åæ¥çæ°æ® List<Visits> alllist = getVisitList(); //æç §ç¶çº§ç³è¯·åæ¹å¤çæ¯æ¬¡ç³è¯·æ°æ® List<Visits> list = getParentList(alllist); if(list ==null || list.size()==0){ return; } Date date = new Date(); for(Visits c : list) { //å起海康é¢çº¦æ¥å£ï¼éè¦ç»è®°ï¼ï¼æ ¹æ®é¢çº¦è¿åæ¥å£å°è£ ç³è¯·è®°å½æ´æ°å段 String type = Constants.equalsInteger(c.getType(),Constants.ONE)?applyType:applyLwType; getUpdateModelByResponse(c,date,type,roleList); visitsMapper.updateById(c); } }catch (Exception e){ e.printStackTrace(); }finally { Constants.DEALING_HK_VISIT =false; } } private List<Visits> getParentList(List<Visits> alllist) { if(alllist ==null || alllist.size()==0){ return null; } List<Visits> list = new ArrayList<>(); for (Visits v : alllist){ if(v.getParentId() == null){ v.setVisitsList(getChildListByParentId(v.getId(),alllist)); list.add(v); } } return list; } private List<Visits> getChildListByParentId(Integer id, List<Visits> alllist) { List<Visits> list = new ArrayList<>(); for (Visits v : alllist){ if(Constants.equalsInteger(v.getParentId(),id)){ list.add(v); } } return list; } /** * æ ¹æ®é¢çº¦è¿åæ¥å£å°è£ ç³è¯·è®°å½æ´æ°å段 * @param c * @param date * @param type 0éè¦ç»è®° 1å ç»è®° */ private void getUpdateModelByResponse( Visits c,Date date,String type,List<DeviceRole> roleList ) { String code = null; String id = null; //å起海康é¢çº¦æ¥å£ if(StringUtils.equals(type,"0")){ //ï¼éè¦ç»è®°ï¼ BaseResponse<VisitAppointmentResponse> response = HKService.visitAppiontment(getHkRequestPara(c,roleList)); }else{ //å ç»è®° BaseResponse<VisitAppointmentMDJResponse> response = HKService.visitAppiontmentMDJ(getHkMDJRequestPara(c) ); } if (code!= null && id!=null) { //海康ä¸åæå c.setHkId( id);//é¢çº¦æ è¯ c.setStatus(Constants.VisitStatus.xfSuccess);//ä¸å海康æå } else { //海康ä¸åæå c.setStatus(Constants.VisitStatus.xfFail);//ä¸å海康失败 } c.setHkStatus(Constants.ONE); c.setHkDate(date); } private VisitAppointmentMDJRequest getHkMDJRequestPara(Visits c) { return null; } private VisitAppointmentRequest getHkRequestPara(Visits c,List<DeviceRole> roleList ) { VisitAppointmentRequest request = new VisitAppointmentRequest(); request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime())); request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime())); request.setReceptionistId(c.getReceptMemberHkId());//被访人海康ç¼ç request.setVisitPurpose(c.getReason()); request.setVisitorPermissionSet(new VisitAppointmentPermissonRequest()); //è·åæéç»éå String[] roles = getHkRoles(c.getDoors(),roleList); if(roles==null || roles.length ==0){ //使ç¨é»è®¤è®¿å®¢æéç» request.getVisitorPermissionSet().setDefaultPrivilegeGroupFlag(Constants.ONE+""); }else{ //æå®æææµ·åº·è®¿å®¢æéç»æ°æ® request.getVisitorPermissionSet().setDefaultPrivilegeGroupFlag(Constants.ZERO+""); request.getVisitorPermissionSet().setPrivilegeGroupIds(roles); } List<VisitAppointmentVistorRequest> infolist = new ArrayList<>(); //ç³è¯·äºº infolist.add(getRequestInfoByVisit(c)); if(c.getVisitsList() != null){ //é访人 for(Visits v : c.getVisitsList()){ infolist.add(getRequestInfoByVisit(v)); } } request.setVisitorInfoList(infolist); return request; } private VisitAppointmentVistorRequest getRequestInfoByVisit(Visits c) { VisitAppointmentVistorRequest info = new VisitAppointmentVistorRequest(); info.setVisitorName(c.getName()); info.setVisitorWorkUnit(c.getCompanyName()); info.setPhoneNo(c.getPhone()); return info; } private String[] getHkRoles(String doors, List<DeviceRole> roleList) { if(StringUtils.isBlank(doors) || roleList.size()==0|| roleList.size()==0){ return null; } String[] ids = doors.split(","); List<String> roles = new ArrayList<>(); for (String s : ids){ for(DeviceRole r : roleList){ if(StringUtils.isNotBlank(r.getHkId()) && StringUtils.equals(s,r.getId().toString())){ roles.add(r.getHkId()); } } } return roles.toArray(new String[]{}); } /** * æ¥è¯¢ææéè¦åæ¥çæ°æ® * @return */ private List<Visits> getVisitList() { MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Visits.class); queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName) .select("t1.hk_id as receptMemberHkId") .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId); queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.pass)//审æ¹éè¿ .eq(Visits::getHkStatus,Constants.ZERO)//æªåæ¥å°æµ·åº· .orderByAsc(Visits::getCreateDate); List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper); return list; } }