jiangping
2024-02-20 909ee569d4d8bfc523cb71790a5e6f59405d78b7
大屏
已添加7个文件
已删除4个文件
已重命名2个文件
1392 ■■■■ 文件已修改
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseListPageResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentListRequest.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitingInfoRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentInfoResponse.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentResInfoResponse.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgListPageResponse.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgTimeRangetListPageResponse.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserTimeRangeListPageResponse.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitingInfoResponse.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFHKServiceImpl.java 699 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseListPageResponse.java
ÎļþÃû´Ó server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserListPageResponse.java ÐÞ¸Ä
@@ -5,10 +5,10 @@
import java.util.List;
@Data
public class OrgListPageResponse {
public class BaseListPageResponse<T> {
  private int total;//    number    False    æŸ¥è¯¢æ•°æ®è®°å½•总数
  private int pageSize;//    number    False    æ¯é¡µè®°å½•总数
  private int pageNo    ;// number    False    å½“前页码
  private List<OrgListResponse> list    ;// object[]    False    æƒé™ç»„对象列表
  private List<T> list    ;// object[]    False    æƒé™ç»„对象列表
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentListRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.core.haikang.model.param.request;
import lombok.Data;
@Data
public class OrgUserListRequest {
    private String startTime    ;//string    True    é’ˆå¯¹æ›´æ–°æ—¶é—´çš„æŸ¥è¯¢å¼€å§‹æ—¥æœŸï¼ŒIOS8601格式,参考附录B ISO8601时间格式说明
    private String  endTime;//    string    False    é’ˆå¯¹æ›´æ–°æ—¶é—´çš„æŸ¥è¯¢æˆªæ­¢æ—¥æœŸï¼ŒIOS8601格式,参考附录B ISO8601时间格式说明
    private Integer  pageNo    ;//integer    True    é¡µç ,pageNo≥1
    private Integer  pageSize;//    integer    True    åˆ†é¡µå¤§å°
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitingInfoRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class VisitingInfoResponse {
    private String   receptionistId;//    string    False    è¢«è®¿äººID,从 èŽ·å–äººå‘˜åˆ—è¡¨v2 æŽ¥å£èŽ·å–è¿”å›žå‚æ•°personId
    private String    receptionistName    ;//string    False    è¢«è®¿äººå§“名,支持中英文字符,不能包含 â€™ / \ : * ? " < >
    private String    visitorName    ;//string    False    è®¿å®¢å§“名,长度不超过32,支持中英文字符,不能包含 â€™ / \ : * ? " < >
    private String     phoneNo;//    string    False    è®¿å®¢è”系电话建议填写手机号码
    private Integer     visitorStatus;//    number    False    5:超期自动签离6:已签离7:超期未签离8:已到达
    private String     visitStartTimeBegin;//    string    False    æ¥è®¿æ—¶é—´æŸ¥è¯¢æ—¶é—´æ®µæ¡ä»¶çš„开始时间,时间参数需满足ISO8601格式:
    private String    visitStartTimeEnd;//    string    False    æ¥è®¿æ—¶é—´æŸ¥è¯¢æ—¶é—´æ®µæ¡ä»¶çš„结束时间,时间参数需满足ISO8601格式:yyyy-MM-ddTHH:mm:ss+当前时区,
    private String    visitEndTimeBegin;//    string    False    ç¦»å¼€æ—¶é—´æŸ¥è¯¢æ—¶é—´æ®µæ¡ä»¶çš„开始时间,时间参数需满足ISO8601格式:
    private String     visitEndTimeEnd    ;//string    False    ç¦»å¼€æ—¶é—´æŸ¥è¯¢æ—¶é—´æ®µæ¡ä»¶çš„结束时间,时间参数需满足ISO8601格式:yyyy-MM-ddTHH:mm:ss+当前时区,
    private Integer     pageNo    ;//number    True    pageNo要求大于0不超过2147483647
    private Integer    pageSize;//    number    True    pageSize要求大于0且不超过1000
    private String    cardNo    ;//string    False    å¡å·ï¼Œ8-20位数字、大写字母
    private String   orderId    ;//string    False    è®¿å®¢è®°å½•ID
    private String     QRCode    ;//string    False    è®¿å®¢äºŒç»´ç å†…容,支持动态二维码或历史版本接口返回的静态二维码
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class UserInfoResponse {
private String personId    ;//string    False    äººå‘˜ID
private String personName    ;//string    False    å§“名
private Integer gender    ;//number    False
private String orgIndexCode;//    string    False    æ‰€å±žç»„织唯一标识码
private String phoneNo;//    string    False    è”系电话
private String jobNo;//    string    False    å·¥å·
private Integer certificateType;//    number    False    è¯ä»¶ç±»åž‹111:身份证414:护照113:户口簿335:驾驶证131:工作证133:学生证990:其他 ;
private String certificateNo    ;//string    False    è¯ä»¶å·ç    ä¸€ä¸²æ•°å­—字符串
private String createTime    ;//string    False    åˆ›å»ºæ—¶é—´ è¦æ±‚遵守ISO8601标准,如2018-07-26T21:30:08.000+08:00 è¡¨ç¤ºåŒ—京时间2017å¹´7月26日21时30分08秒
private String updateTime;//    string    False    æ›´æ–°æ—¶é—´  è¦æ±‚遵守ISO8601标准,如2018-07-26T21:30:08.000+08:00  è¡¨ç¤ºåŒ—京时间2017å¹´7月26日21时30分08秒
private String orgPath;//    string    False    æ‰€å±žç»„织目录,@进行分割,例如 @root000000@
private String orgPathName;//    string    False    æ‰€å±žç»„织名称,@进行分割,如@默认部门@
private List<UserPhotoResponse> personPhoto;//    object    False    äººå‘˜å›¾ç‰‡ä¿¡æ¯
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentResInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class AppointmentInfoResponse {
   private String appointRecordId        ;//string    False    é¢„约记录ID,可作为修改预约的依据
private String receptionistId        ;//string    False    è¢«è®¿äººå”¯ä¸€æ ‡è¯†
private String receptionistName        ;//string    False    è¢«è®¿äººå§“名,支持中英文字符,不能包含 â€™ / \ : * ? " < >
           private String receptionistCode        ;//string    False    è¢«è®¿äººæ‰€å±žç»„织编码
private String visitStartTime        ;//string    False    æ—¶é—´å‚数需满足ISO8601格式: yyyy-MM-ddTHH:mm:ss+当前时区,
           private String visitEndTime        ;//string    False    æ—¶é—´å‚数需满足ISO8601格式:  yyyy-MM-ddTHH:mm:ss+当前时区, é¢„计离开时间必须晚于当前时间和预计来访时间
private String visitPurpose        ;//string    False    æ¥è®¿äº‹ç”±
private String visitorName        ;//string    False    è®¿å®¢å§“名
private String visitorWorkUnit        ;//string    False    æ¥è®¿å•位
private String visitorAddress        ;//string    False    è®¿å®¢ä½å€
private String visitorId        ;//string    False    è®¿å®¢Id
private String verificationCode        ;//string    False    è®¿å®¢éªŒè¯ç ï¼Œç”¨äºŽè®¿å®¢åœ¨è®¿å®¢æœºç™»è®°çš„凭证
private String QRCode        ;//string    False    åŠ¨æ€äºŒç»´ç ï¼Œå¦‚éœ€è¦ä½¿ç”¨ï¼Œå¯å°†è®¿å®¢äºŒç»´ç å†…å®¹è½¬æˆäºŒç»´ç å›¾ç‰‡å³å¯
private Integer gender;//    integer    False    1-男,  2-女
private String phoneNo        ;//string    False    è”系电话建议填写手机号码,仅支持纯数字。
           private String plateNo        ;//string    False    è®¿å®¢è½¦ç‰Œå·
private Integer certificateType    ;//    integer    False    è¯ä»¶ç±»åž‹ï¼Œè¯¦è§é™„录A.11 è¯ä»¶ç±»åž‹
private String certificateNo        ;//string    False    è¯ä»¶å·ï¼Œæ ¼å¼ä¸ºï¼š1~20个数字、字母组成
private String picUri        ;//string    False    è¿”回图片的相对Uri;需要调用获取访客记录中的图片接口,来获取图片的数据
private String svrIndexCode        ;//string    False    ä¸ŽpicUri配对输出的字段信息,用于“获取访客记录的图片”接口的输入参数
    /**
     * è®¿å®¢å•状态,
     *             0:待审核、
     *             1:正常、
     *             2:迟到、
     *             3:失效、
     *             4:审核退回、
     *             9:审核失效、
     *             10:邀约中、
     *             11:邀约失效
     */
    private Integer visitorStatus        ;//integer    False
private String certAddr        ;//string    False    è¯ä»¶åœ°å€
private String certIssuer        ;//string    False    å‘证机关
private Integer nation    ;//integer    False
private String birthplace        ;//string    False    ç±è´¯
private String orderId        ;//string    False    è®¿å®¢è®°å½•唯一标识,用于已预约登记、访客签离等操作
private List<Map<String,Object>> designatedResources;//    object    False    æƒé™ä¸‹å‘指定的资源点集合
private String[] privilegeGroupNames;//    string[]    False    æƒé™ç»„名称集合
private String identityUri        ;//string    False    è¯ä»¶ç…§,图片的相对URL
private String identitySvrCode        ;//string    False    è¯ä»¶ç…§å¯¹åº”图片服务器serviceNodes
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgListPageResponse.java
ÎļþÒÑɾ³ý
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgTimeRangetListPageResponse.java
ÎļþÒÑɾ³ý
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserTimeRangeListPageResponse.java
ÎļþÒÑɾ³ý
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VisitingInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class AppointmentInfoResponse {
    private String appointRecordId        ;//string    False    é¢„约记录ID,可作为修改预约的依据
    private String receptionistId        ;//string    False    è¢«è®¿äººå”¯ä¸€æ ‡è¯†
    private String receptionistName        ;//string    False    è¢«è®¿äººå§“名,支持中英文字符,不能包含 â€™ / \ : * ? " < >
    private String receptionistCode        ;//string    False    è¢«è®¿äººæ‰€å±žç»„织编码
    private String visitStartTime        ;//string    False    æ—¶é—´å‚数需满足ISO8601格式: yyyy-MM-ddTHH:mm:ss+当前时区,
    private String visitEndTime        ;//string    False    æ—¶é—´å‚数需满足ISO8601格式:  yyyy-MM-ddTHH:mm:ss+当前时区, é¢„计离开时间必须晚于当前时间和预计来访时间
    private String visitPurpose        ;//string    False    æ¥è®¿äº‹ç”±
    private String visitorName        ;//string    False    è®¿å®¢å§“名
    private String visitorWorkUnit        ;//string    False    æ¥è®¿å•位
    private String visitorAddress        ;//string    False    è®¿å®¢ä½å€
    private String visitorId        ;//string    False    è®¿å®¢Id
    private String verificationCode        ;//string    False    è®¿å®¢éªŒè¯ç ï¼Œç”¨äºŽè®¿å®¢åœ¨è®¿å®¢æœºç™»è®°çš„凭证
    private String QRCode        ;//string    False    åŠ¨æ€äºŒç»´ç ï¼Œå¦‚éœ€è¦ä½¿ç”¨ï¼Œå¯å°†è®¿å®¢äºŒç»´ç å†…å®¹è½¬æˆäºŒç»´ç å›¾ç‰‡å³å¯
    private Integer gender;//    integer    False    1-男,  2-女
    private String phoneNo        ;//string    False    è”系电话建议填写手机号码,仅支持纯数字。
    private String plateNo        ;//string    False    è®¿å®¢è½¦ç‰Œå·
    private Integer certificateType    ;//    integer    False    è¯ä»¶ç±»åž‹ï¼Œè¯¦è§é™„录A.11 è¯ä»¶ç±»åž‹
    private String certificateNo        ;//string    False    è¯ä»¶å·ï¼Œæ ¼å¼ä¸ºï¼š1~20个数字、字母组成
    private String picUri        ;//string    False    è¿”回图片的相对Uri;需要调用获取访客记录中的图片接口,来获取图片的数据
    private String svrIndexCode        ;//string    False    ä¸ŽpicUri配对输出的字段信息,用于“获取访客记录的图片”接口的输入参数
    /**
     * è®¿å®¢å•状态,
     *             0:待审核、
     *             1:正常、
     *             2:迟到、
     *             3:失效、
     *             4:审核退回、
     *             9:审核失效、
     *             10:邀约中、
     *             11:邀约失效
     */
    private Integer visitorStatus        ;//integer    False
    private String certAddr        ;//string    False    è¯ä»¶åœ°å€
    private String certIssuer        ;//string    False    å‘证机关
    private Integer nation    ;//integer    False
    private String birthplace        ;//string    False    ç±è´¯
    private String orderId        ;//string    False    è®¿å®¢è®°å½•唯一标识,用于已预约登记、访客签离等操作
    private List<AppointmentResInfoResponse> designatedResources;//    object    False    æƒé™ä¸‹å‘指定的资源点集合
    private String[] privilegeGroupNames;//    string[]    False    æƒé™ç»„名称集合
    private String identityUri        ;//string    False    è¯ä»¶ç…§,图片的相对URL
    private String identitySvrCode        ;//string    False    è¯ä»¶ç…§å¯¹åº”图片服务器serviceNodes
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
ÎļþÃû´Ó server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserFERPServiceImpl.java ÐÞ¸Ä
@@ -3,12 +3,11 @@
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.config.DataSyncConfig;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.erp.model.openapi.request.UserUpdateRequest;
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.*;
import com.doumee.core.haikang.model.param.respose.*;
@@ -18,12 +17,10 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.ImageBase64Util;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.CompanyJoinMapper;
import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.ERPSyncService;
import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl;
import com.github.yulichang.query.MPJQueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@@ -41,7 +38,7 @@
 */
@Service
@Slf4j
public class HkSyncOrgUserServiceImpl extends HkSyncBaseServiceImpl {
public class HkSyncOrgUserFERPServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    private CompanyMapper companyMapper;
@@ -61,13 +58,15 @@
    private ERPSyncService erpSyncService;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private DataSyncConfig dataSyncConfig;
    /**
     * åŒæ­¥æµ·åº·ç»„织信息,根据erp同步组织结果,定时检查需要下发到海康的组织信息
     */
    @Override
    public   void syncOrgData(){
        if(Constants.DEALING_HK_ORG){
        if(Constants.DEALING_HK_ORG || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.erp){
            return   ;
        }
        Constants.DEALING_HK_ORG =true;
@@ -258,7 +257,7 @@
     */
    @Override
    public   void syncUserData(){
        if(Constants.DEALING_HK_USER){
        if(Constants.DEALING_HK_USER  || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.erp){
            return   ;
        }
        Constants.DEALING_HK_USER =true;
@@ -266,7 +265,7 @@
            //查询所有需要同步的企业数据
            List<Member> list = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                    .selectAll(Member.class )
                    .selectAs(Company::getHkId,Member::getCompanyHkId)
                    .selectAs(Company::getHkId,Member::getHkOrgId)
                    .isNotNull(Member::getFaceImg)
                    .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                    .eq(Member::getHkStatus,Constants.ZERO)
@@ -426,7 +425,7 @@
            }
            CardInfoRequest cr = new CardInfoRequest();
            cr.setCardNo(m.getCode());
            cr.setOrgIndexCode(member.getCompanyHkId());
            cr.setOrgIndexCode(member.getHkOrgId());
            cr.setPersonId(member.getHkId());
            cr.setCardType(m.getType());
            param.getCardList().add(cr);
@@ -648,7 +647,7 @@
    private UserAddRequest getUserAddModel(Member c,String path,int type) {
        UserAddRequest model = new UserAddRequest();
        model.setOrgIndexCode(c.getCompanyHkId());
        model.setOrgIndexCode(c.getHkOrgId());
        model.setJobNo(c.getCode());
        model.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
        model.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+"");
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFHKServiceImpl.java
ÎļþÒÑɾ³ý
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,273 @@
package com.doumee.service.business.impl.hksync.fhk;
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.config.DataSyncConfig;
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.BaseListPageResponse;
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.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
 * æµ·åº·ç»„织人员通过步Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Service
@Slf4j
public class HkSyncOrgUserForHKServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private DataSyncConfig dataSyncConfig;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /**
     * åŒæ­¥æµ·åº·ç»„织信息到业务系统
     */
    @Override
    @Transactional
    public   void syncOrgData(){
        if(Constants.DEALING_HK_ORG){
            return ;
        }
        Constants.DEALING_HK_ORG =true;
        try {
            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持组织同步操作~");
            }
            LoginUserInfo user =  (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
            OrgUserListRequest param = new OrgUserListRequest();
            //获取ERP组织信息(全量同步)
            boolean hasNext = true;
            int curTotal = 0;
            int curPage = 1;
            List<Company>  allHkList = new ArrayList<>();
            while (hasNext){
                //分页遍历循环查询所有门禁设备数据
                param = new OrgUserListRequest();
                param.setPageNo(curPage);
                param.setPageSize(100);
                BaseResponse<BaseListPageResponse<OrgInfoResponse>> response = HKService.orgAllList(param);
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
                }
                BaseListPageResponse<OrgInfoResponse> r = response.getData();
                curTotal += 100;
                if(curTotal >= r.getTotal()){
                    hasNext = false;
                }
                if(r.getList() == null || r.getList().size()==0){
                    hasNext =false;
                }else{
                    allHkList.addAll(getNewOrgModelBYList(r.getList(),user.getId()));
                }
                curPage++;
            }
            if(allHkList .size() == 0){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何组织信息!");
            }
            companyMapper.delete(new UpdateWrapper<>());//清空原有数据
            companyMapper.insertBatchSomeColumn(allHkList);//插入新数据
        }catch (BusinessException e){
            throw  e;
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
        }finally {
            Constants.DEALING_HK_ORG =false;
        }
    }
    private List<Company> getNewOrgModelBYList(List<OrgInfoResponse> list, Integer userid) {
        List<Company> newList = new ArrayList<>();
        if(list == null || list.size()==0){
            return  newList;
        }
        for(OrgInfoResponse model :list){
            Company c = new Company();
            c.setHkId(model.getOrgIndexCode());
            c.setCode(model.getOrgNo());
            c.setName(model.getOrgName());
            c.setHkStatus(Constants.ONE);
            c.setHkDate(new Date());
            c.setIsdeleted(Constants.ZERO);
            c.setCreateDate(c.getHkDate());
            c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime()));
            c.setCreator(userid);
            c.setStatus(Constants.ZERO);
            c.setType(Constants.ONE);
            if(!StringUtils.equals(model.getOrgIndexCode(),systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_CODE).getCode())){
                c.setHkParentId(model.getParentOrgIndexCode());
            }
            newList.add(c);
        }
        return newList;
    }
    /**
     * åŒæ­¥æµ·åº·äººå‘˜ä¿¡æ¯
     * @return
     */
    @Override
    public   void syncUserData(){
        if(Constants.DEALING_HK_USER){
            return   ;
        }
        Constants.DEALING_HK_USER =true;
        try {
            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持组织同步操作~");
            }
            LoginUserInfo user =  (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
            List<Company> companies = companyMapper.selectList(new QueryWrapper<>());
            if(companies == null || companies.size() == 0){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,请先同步企业组织信息~");
            }
            OrgUserListRequest param = new OrgUserListRequest();
            //获取ERP组织信息(全量同步)
            boolean hasNext = true;
            int curTotal = 0;
            int curPage = 1;
            List<Member>  allHkList = new ArrayList<>();
            while (hasNext){
                //分页遍历循环查询所有门禁设备数据
                param = new OrgUserListRequest();
                param.setPageNo(curPage);
                param.setPageSize(100);
                BaseResponse<BaseListPageResponse<UserInfoResponse>> response = HKService.userAllList(param);
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
                }
                BaseListPageResponse<UserInfoResponse> r = response.getData();
                curTotal += 100;
                if(curTotal >= r.getTotal()){
                    hasNext = false;
                }
                if(r.getList() == null || r.getList().size()==0){
                    hasNext =false;
                }else{
                    allHkList.addAll(getNewUserModelBYList(r.getList(),companies,user.getId()));
                }
                curPage++;
            }
            if(allHkList .size() == 0){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何组织信息!");
            }
            memberMapper.delete(new UpdateWrapper<>());//清空原有数据
            memberMapper.insertBatchSomeColumn(allHkList);//插入新数据
        }catch (BusinessException e){
            throw  e;
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
        }finally {
            Constants.DEALING_HK_USER =false;
        }
    }
    private List<Member> getNewUserModelBYList(List<UserInfoResponse> list, List<Company> companies,Integer userid) {
        List<Member> newList = new ArrayList<>();
        if(list == null || list.size()==0){
            return  newList;
        }
        for(UserInfoResponse model :list){
            Member c = new Member();
            String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,model.getCertificateNo());
            c.setIdcardNo(encryptIdNo);
            c.setIdcardDecode(Constants.getTuominStr(model.getCertificateNo()));
            c.setIdcardType(getIdcardTypeByHk(model.getCertificateType()));
            c.setCode(model.getJobNo());
            c.setPhone(model.getPhoneNo());
            c.setHkId(model.getPersonId());
            c.setName(model.getPersonName());
            c.setHkStatus(Constants.ONE);
            c.setHkDate(new Date());
            c.setCanVisit(Constants.ZERO);
            c.setHighCheckor(Constants.ZERO);
            c.setSex(model.getGender());
            c.setIsdeleted(Constants.ZERO);
            c.setCreateDate(c.getHkDate());
            c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime()));
            c.setCreator(userid);
            c.setStatus(Constants.ZERO);
            c.setType(Constants.TWO);
            c.setCompanyId(getCompanyId(companies,model.getOrgIndexCode()));
            if(model.getPersonPhoto()!=null && model.getPersonPhoto().size()>0){
                c.setFaceId(model.getPersonPhoto().get(0).getPersonPhotoIndexCode());
                c.setFaceImg(HKConstants.IMG_INDEX+model.getPersonPhoto().get(0).getPicUri());
                c.setFaceServerIndexCode(model.getPersonPhoto().get(0).getServerIndexCode());
            }
            newList.add(c);
        }
        return newList;
    }
    private Integer getCompanyId(List<Company> companies, String orgIndexCode) {
        if(companies == null){
            return  null;
        }
        for(Company c : companies){
            if(StringUtils.equals(c.getHkId(),orgIndexCode)){
                return c.getId();
            }
        }
        return null;
    }
    /**
     *   //证件类型111:身份证414:护照113:户口簿335:驾驶证131:工作证133:学生证990:其他 ;
     *  // è¯ä»¶ç±»åž‹ 0身份证 1港澳证件 2护照
     * @param certificateType
     * @return
     */
    private Integer getIdcardTypeByHk(Integer certificateType) {
        if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.SHENFENZHENG.getKey())){
            return 0;
        }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.HUZHAO.getKey())){
            return 2;
        }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.JIASHIZHENG.getKey())){
            return 3;
        }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.XUESHENGZHENG.getKey())){
            return 4;
        }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.GONGXUOZHENG.getKey())){
            return 5;
        }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.GONGXUOZHENG.getKey())){
            return 6;
        }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.HUKOUBEN.getKey())){
            return 7;
        }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.QITA.getKey())){
            return 8;
        }
        return  null;
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
package com.doumee.service.business.impl.hksync.fhk;
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.config.DataSyncConfig;
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.BaseListPageResponse;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.AppointmentListRequest;
import com.doumee.core.haikang.model.param.request.OrgUserListRequest;
import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
import com.doumee.core.haikang.model.param.respose.OrgInfoResponse;
import com.doumee.core.haikang.model.param.respose.UserInfoResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CompanyMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.VisitsMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Visits;
import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * æ‹‰å–海康访客信息通过步Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Service
@Slf4j
public class HkSyncVistFromHKServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private VisitsMapper visitsMapper;
    @Autowired
    private DataSyncConfig dataSyncConfig;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    /**
     * åŒæ­¥æµ·åº·ç»„织信息到业务系统
     */
    @Override
    @Transactional
    public   void syncVistAppointData(){
        if(Constants.DEALING_FROM_HK_VISIT){
            return ;
        }
        Constants.DEALING_FROM_HK_VISIT =true;
        try {
            if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持海康数据同步操作~");
            }
            AppointmentListRequest param =  new AppointmentListRequest();
            //获取ERP组织信息(全量同步)
            boolean hasNext = true;
            int curTotal = 0;
            int curPage = 1;
            //查询今天的
            param.setVisitStartTimeBegin(DateUtil.getISO8601Timestamp( Utils.Date.getStart(new Date())));
            List<Visits>  allHkList = new ArrayList<>();
            while (hasNext){
                //分页遍历循环查询所有门禁设备数据
                param.setPageNo(curPage);
                param.setPageSize(100);
                BaseResponse<BaseListPageResponse<AppointmentInfoResponse>> response = HKService.appointmentRecords(param);
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
                }
                BaseListPageResponse<AppointmentInfoResponse> r = response.getData();
                curTotal += 100;
                if(curTotal >= r.getTotal()){
                    hasNext = false;
                }
                if(r.getList() == null || r.getList().size()==0){
                    hasNext =false;
                }else{
                    allHkList.addAll(getNewVisitModelBYList(r.getList()));
                }
                curPage++;
            }
            if(allHkList .size() == 0){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何组织信息!");
            }
            //清空原有数据
            visitsMapper.delete(new UpdateWrapper<Visits>().lambda().apply("to_days(create_date)=to_days(now())" ));
            visitsMapper.insertBatchSomeColumn(allHkList);//插入新数据
        }catch (BusinessException e){
            throw  e;
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
        }finally {
            Constants.DEALING_FROM_HK_VISIT =false;
        }
    }
    private List<Visits> getNewVisitModelBYList(List<AppointmentInfoResponse> list ) {
        List<Visits> newList = new ArrayList<>();
        if(list == null || list.size()==0){
            return  newList;
        }
        for(AppointmentInfoResponse model :list){
            Visits c = new Visits();
            c.setHkId(model.getAppointRecordId());
            c.setCode(model.getQRCode());
            c.setName(model.getVisitorName());
            c.setHkStatus(Constants.ONE);
            c.setHkDate(new Date());
            c.setIsdeleted(Constants.ZERO);
            c.setCreateDate(c.getHkDate());
            c.setStarttime(DateUtil.getISO8601DateByStr(model.getVisitStartTime()));
            c.setEndtime(DateUtil.getISO8601DateByStr(model.getVisitEndTime()));
            c.setReason(model.getVisitPurpose());
            c.setStatus(model.getVisitorStatus());
            c.setType(Constants.ONE);
            if(StringUtils.isNotBlank(model.getReceptionistId())){
                //被访问人
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getReceptionistId()).last("limit 1"));
                c.setReceptMemberId(member!=null?member.getId():null);
            }
            c.setCompanyName(model.getVisitorWorkUnit());
            c.setPhone(model.getPhoneNo());
            c.setCarNos(model.getPlateNo());
            if(StringUtils.isNotBlank(model.getCertificateNo())){
                //被访问人
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                        .eq(Member::getType,Constants.ONE)
                        .eq(Member::getIdcardNo,DESUtil.encrypt(Constants.EDS_PWD, model.getCertificateNo()))
                        .last("limit 1"));
                if(member == null){
                    member = new Member();
                    member.setName(model.getVisitorName());
                    member.setPhone(model.getPhoneNo());
                    member.setSex(model.getGender());
                    member.setIsdeleted(Constants.ZERO);
                    member.setType(Constants.ONE);
                    member.setVisitCompanyName(model.getVisitorWorkUnit());
                    member.setCreateDate(new Date());
                    if(StringUtils.isNotBlank(model.getPicUri())){
                        member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri());
                        member.setFaceServerIndexCode(model.getSvrIndexCode());
                    }
                    memberMapper.insert(member);
                }else{
                    member.setIsdeleted(Constants.ZERO);
                    member.setEditDate(new Date());
                    member.setName(model.getVisitorName());
                    member.setPhone(model.getPhoneNo());
                    member.setSex(model.getGender());
                    member.setVisitCompanyName(model.getVisitorWorkUnit());
                    if(StringUtils.isNotBlank(model.getPicUri())){
                        member.setFaceServerIndexCode(model.getSvrIndexCode());
                        member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri());
                    }
                    memberMapper.updateById(member);
                }
                c.setMemberId(member.getId());
            }
            newList.add(c);
        }
        return newList;
    }
}