jiangping
2024-08-22 91d8d400b10dc2cd8699cd73d636a2b09ec0cf5a
最新版本
已添加1个文件
已修改13个文件
419 ■■■■■ 文件已修改
admin/src/views/business/internalCompany.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalMember.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/WebPublicController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalCompany.vue
@@ -20,7 +20,7 @@
               <li><el-button type="primary" v-permissions="['business:company:create']" @click="$refs.OperaInternalCompanyWindow.open('新建企业',null,null)">新建</el-button></li>
              <li><el-button @click="sort('top')" :loading="sorting" icon="el-icon-sort-up" v-permissions="['business:company:sort']">上移</el-button></li>
              <li><el-button @click="sort('bottom')" :loading="sorting" icon="el-icon-sort-down" v-permissions="['business:company:sort']">下移</el-button></li>
              <!--<li><el-button type="primary"  v-permissions="['business:company:sync']" :loading="loading" @click="synchronous()">同步</el-button></li>-->
              <li><el-button type="primary"  v-permissions="['business:company:sync']" :loading="loading" @click="synchronous()">同步</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
@@ -108,7 +108,7 @@
    },
    // åŒæ­¥ä¿¡æ¯
    async synchronous () {
      this.$dialog.actionConfirm('操作确认提醒', '您确认同步全部信息吗?')
      this.$dialog.actionConfirm('该操作将系统清空已有组织信息,您确认同步全部信息吗?', '操作确认提醒')
        .then(() => {
          this.loading = true
          companySync({})
admin/src/views/business/internalMember.vue
@@ -45,16 +45,14 @@
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:member:delete','business:member:create,business:empower:create']">
<!--
                <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">同步</el-button></li>
-->
                <li><el-button type="primary" @click="$refs.OperaMemberWindow.open('新建员工',null,department,searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">新建员工</el-button></li>
              <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">同步</el-button></li>
              <li><el-button type="primary" @click="$refs.OperaMemberWindow.open('新建员工',null,department,searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">新建员工</el-button></li>
              <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('人员导入',searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">人员导入</el-button></li>
                <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">批量删除</el-button></li>
                <li><el-button type="primary" v-permissions="['business:empower:create']"  @click="startEmpowerBatch()"  icon="el-icon-plus">下发授权</el-button></li>
             <li style="float: right">
              <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">批量删除</el-button></li>
              <li><el-button type="primary" v-permissions="['business:empower:create']"  @click="startEmpowerBatch()"  icon="el-icon-plus">下发授权</el-button></li>
              <li style="float: right">
                <el-checkbox style="font-size: 12px"  label="1" v-model="searchForm.includeChild" key="1"  @change="search" >是否包含下级组织</el-checkbox>
             </li>
              </li>
            </ul>
            <el-table
                v-loading="isWorking.search"
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java
@@ -173,7 +173,11 @@
        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
            return ApiResponse.success( erpSyncService.syncCompany(null));
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
             hkSyncOrgUserFHKService.syncOrgData();
             hkSyncOrgUserFHKService.syncOrgData(this.getLoginUser(null));
            return ApiResponse.success("同步成功");
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self){
            //如果是自建系統,同步安防平台初始化数据
            hkSyncOrgUserFHKService.syncOrgData(this.getLoginUser(null));
            return ApiResponse.success("同步成功");
        }
        return ApiResponse.failed("无效操作");
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -231,7 +231,7 @@
        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
            erpSyncService.syncUsers(null);
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
            hkSyncOrgUserFHKService.syncUserData();
            hkSyncOrgUserFHKService.syncUserData(this.getLoginUser(null));
        }
        return ApiResponse.success("同步成功");
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
@@ -15,6 +15,7 @@
import com.doumee.service.business.CompanyService;
import com.doumee.service.business.ext.ERPSyncService;
import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromHKServiceImpl;
import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromSelfServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -42,6 +43,8 @@
    private ERPSyncService erpSyncService;
    @Autowired
    private HkSyncOrgUserFromHKServiceImpl hkSyncOrgUserFHKService;
    @Autowired
    private HkSyncOrgUserFromSelfServiceImpl hkSyncOrgUserFromSelfService;
    @Autowired
    private DataSyncConfig dataSyncConfig;
@@ -171,11 +174,14 @@
    @ApiOperation("全量部门信息同步")
    @PostMapping("/syncAll")
    @CloudRequiredPermission("business:company:sync")
    public ApiResponse sync(){
    public ApiResponse sync(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
            return ApiResponse.success( erpSyncService.syncCompany(null));
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
             hkSyncOrgUserFHKService.syncOrgData();
             hkSyncOrgUserFHKService.syncOrgData(this.getLoginUser(token));
            return ApiResponse.success("同步成功");
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self){
            hkSyncOrgUserFromSelfService.syncOrgData(this.getLoginUser(token));
            return ApiResponse.success("同步成功");
        }
        return ApiResponse.failed("无效操作");
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -23,6 +23,7 @@
import com.doumee.service.business.MemberService;
import com.doumee.service.business.ext.ERPSyncService;
import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromHKServiceImpl;
import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromSelfServiceImpl;
import io.swagger.annotations.*;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,6 +47,8 @@
    private ERPSyncService erpSyncService;
    @Autowired
    private HkSyncOrgUserFromHKServiceImpl hkSyncOrgUserFHKService;
    @Autowired
    private HkSyncOrgUserFromSelfServiceImpl hkSyncOrgUserFromSelfService;
    @Autowired
    private DataSyncConfig dataSyncConfig;
@@ -321,11 +324,14 @@
    @ApiOperation("全量信息同步")
    @PostMapping("/syncAll")
    @CloudRequiredPermission("business:member:sync")
    public ApiResponse sync(){
    public ApiResponse sync(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.erp){
            erpSyncService.syncUsers(null);
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.hk){
            hkSyncOrgUserFHKService.syncUserData();
            hkSyncOrgUserFHKService.syncUserData(this.getLoginUser(token));
        }else if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self){
            hkSyncOrgUserFromSelfService.syncUserData(this.getLoginUser(token));
            return ApiResponse.success("同步成功");
        }
        return ApiResponse.success("同步成功");
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java
@@ -43,8 +43,6 @@
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/public")
@Slf4j
public class PublicCloudController extends BaseController {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
@@ -303,9 +301,6 @@
            e.printStackTrace();
        }
    }
    public void uploadFileLocal(HttpServletRequest request, String folder, HttpServletResponse response, String rootPath,String dir) throws Exception {
        response.setCharacterEncoding("UTF-8");
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/WebPublicController.java
@@ -45,10 +45,8 @@
@Slf4j
public class WebPublicController extends BaseController {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @ApiOperation(value = "上传", notes = "上传", httpMethod = "POST", position = 6)
    @ApiImplicitParams({
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -8,6 +8,7 @@
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitIccmRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.dao.business.model.Device;
import com.doumee.dao.business.model.ParkBook;
import io.swagger.models.auth.In;
@@ -59,10 +60,10 @@
    String downHKImgs(int type);
    void cancelEventSub();
    void syncOrgData();
    void syncOrgData(LoginUserInfo user);
    void getOutTimeVisitRecordIccm();
    void syncUserData();
    void syncUserData(LoginUserInfo user);
    void syncVistAppointData(Date date);
    void syncVehicleData();
    String syncPlatforms(PlatformsListRequest param);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -98,8 +98,8 @@
    @Autowired
    private EmpowerMapper empowerMapper;
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
@@ -152,7 +152,7 @@
                //创建系统登陆账号(默认无任何角色)
                if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
                    //如果是内部组织人员,新增系统登陆账号
                    systemUserMapper.insert(createSystemUser(insert));
                    systemUserMapper.insert(createSystemUser(insert,systemDictDataBiz));
                    //处理培训有效期业务
                    dealTrainTIme(member,0,loginUserInfo);
                }
@@ -166,7 +166,7 @@
        }
        return insert;
    }
    private SystemUser createSystemUser(Member insert) {
    public static SystemUser createSystemUser(Member insert,SystemDictDataBiz systemDictDataBiz) {
        SystemUser user = new SystemUser();
        // ç”Ÿæˆå¯†ç ç›
        String salt = RandomStringUtils.randomAlphabetic(6);
@@ -186,6 +186,7 @@
        user.setUpdateUser(insert.getEditor());
        user.setUpdateTime(insert.getEditDate());
        user.setMemberId(insert.getId());
        user.setSource(Constants.ZERO);
        user.setDeleted(Boolean.FALSE);
        user.setFixed(Boolean.FALSE);
        user.setStatus(Constants.ZERO);
@@ -1862,7 +1863,7 @@
                //创建系统登陆账号(默认无任何角色)
                if(Constants.equalsInteger(insert.getCompanyType(),Constants.ONE)){
                    //如果是内部组织人员,新增系统登陆账号
                    userList.add(createSystemUser(insert));
                    userList.add(createSystemUser(insert,systemDictDataBiz));
                }
            }
            if(userList.size()>0){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -14,6 +14,7 @@
import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
import com.doumee.core.haikang.model.param.respose.TaskAdditionResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.dao.business.model.Device;
import com.doumee.dao.business.model.ParkBook;
import com.doumee.service.business.ext.HkSyncService;
@@ -115,7 +116,7 @@
        return  null;
    }
    @Override
    public  void syncUserData(){
    public  void syncUserData(LoginUserInfo user){
    }
    @Override
    public  void syncUserUpdateData(Date start, Date end){
@@ -135,7 +136,7 @@
    public  void syncVehicleUpdateData(Date date){
    }
    @Override
    public  void syncOrgData( ){
    public  void syncOrgData( LoginUserInfo user){
    }
    @Override
    public  void syncOrgUpdateData( Date start, Date end){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -11,6 +11,7 @@
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;
@@ -71,7 +72,7 @@
     * åŒæ­¥æµ·åº·ç»„织信息,根据erp同步组织结果,定时检查需要下发到海康的组织信息
     */
    @Override
    public   void syncOrgData(){
    public   void syncOrgData(LoginUserInfo user){
        if(Constants.DEALING_HK_ORG || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.erp){
            return   ;
        }
@@ -261,7 +262,7 @@
     * @return
     */
    @Override
    public   void syncUserData(){
    public   void syncUserData(LoginUserInfo user){
        if(Constants.DEALING_HK_USER  || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.erp){
            return   ;
        }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
@@ -56,7 +56,7 @@
     */
    @Override
    @Transactional
    public   void syncOrgData(){
    public   void syncOrgData(LoginUserInfo user){
        if(Constants.DEALING_HK_ORG){
            return ;
        }
@@ -65,7 +65,6 @@
            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持组织同步操作~");
            }
            LoginUserInfo user =  (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
            TimeRangeListRequest param = new TimeRangeListRequest();
            //获取ERP组织信息(全量同步)
            boolean hasNext = true;
@@ -142,7 +141,7 @@
     * @return
     */
    @Override
    public   void syncUserData(){
    public   void syncUserData(LoginUserInfo user){
        if(Constants.DEALING_HK_USER){
            return   ;
        }
@@ -151,7 +150,6 @@
            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(), "对不起,请先同步企业组织信息~");
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,336 @@
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.TimeRangeListRequest;
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.dao.business.MemberMapper;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.vo.CompanyTree;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.MemberService;
import com.doumee.service.business.impl.MemberServiceImpl;
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 HkSyncOrgUserFromSelfServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private DataSyncConfig dataSyncConfig;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /**
     * åŒæ­¥æµ·åº·ç»„织信息到业务系统
     */
    @Override
    @Transactional
    public   void syncOrgData(LoginUserInfo user ){
        if(Constants.DEALING_HK_ORG){
            return ;
        }
        Constants.DEALING_HK_ORG =true;
        try {
            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.self){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持组织同步操作~");
            }
            TimeRangeListRequest param = null;
            //获取ERP组织信息(全量同步)
            boolean hasNext = true;
            int curTotal = 0;
            int curPage = 1;
            List<Company>  allHkList = new ArrayList<>();
            while (hasNext){
                //分页遍历循环查询所有门禁设备数据
                param = new TimeRangeListRequest();
                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(), "对不起,海康同步数据失败~");
                }
                if(response.getData() == null || response.getData().getTotal() ==0){
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.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.update(null,new UpdateWrapper<Company>().lambda()
                    .eq(Company::getType,Constants.ONE)
                    .eq(Company::getIsdeleted,Constants.ZERO)
                    .set(Company::getIsdeleted,Constants.ONE));//清空原有数据
            companyMapper.insert(allHkList);//插入新数据
            dealTreePathInfo(allHkList);//处理树形结果数据
        }catch (BusinessException e){
            throw  e;
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
        }finally {
            Constants.DEALING_HK_ORG =false;
        }
    }
    private void dealTreePathInfo(List<Company> allHkList) {
        List<Company> tree  = new CompanyTree(allHkList,DataSyncConfig.origin.hk).buildTree();
        if(tree!=null || tree.size()>0){
            for(Company t : tree){
                t.setCompanyPath(t.getId()+"/");
                t.setCompanyNamePath(t.getName());
                companyMapper.updateById(t);
                dealChildParentId(t,t.getChildList());
            }
        }
    }
    private void dealChildParentId(Company t, List<Company> childList) {
        if(childList ==null || childList.size()==0){
            return;
        }
        for(Company c : childList){
            c.setParentId(t.getId());
            c.setCompanyPath(t.getCompanyPath()+c.getId()+"/");
            c.setCompanyNamePath(t.getCompanyNamePath()+"/"+c.getName());
            companyMapper.updateById(c);
            if(t.getChildList()!=null || t.getChildList().size()==0){
                //递归处理子集
                dealChildParentId(c,c.getChildList());
            }
        }
    }
    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.setEditor(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(LoginUserInfo user){
        if(Constants.DEALING_HK_USER){
            return   ;
        }
        Constants.DEALING_HK_USER =true;
        try {
            if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.self){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持组织同步操作~");
            }
            List<Company> companies = companyMapper.selectList(new QueryWrapper<>());
            if(companies == null || companies.size() == 0){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,请先同步企业组织信息~");
            }
            TimeRangeListRequest param = new TimeRangeListRequest();
            //获取ERP组织信息(全量同步)
            boolean hasNext = true;
            int curTotal = 0;
            int curPage = 1;
            List<Member>  allHkList = new ArrayList<>();
            List<SystemUser>  allUserList = new ArrayList<>();
            while (hasNext){
                //分页遍历循环查询所有门禁设备数据
                param = new TimeRangeListRequest();
                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(), "对不起,海康同步数据失败~");
                }
                if(response.getData() == null || response.getData().getTotal() ==0){
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.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.update(null,new UpdateWrapper<Member>().lambda()
                    .eq(Member::getType,Constants.TWO)
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .set(Member::getIsdeleted,Constants.ONE));//清空原有数据
            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
                    .eq(SystemUser::getType,Constants.TWO)
                    .eq(SystemUser::getDeleted,Boolean.FALSE)
                    .set(SystemUser::getDeleted,Boolean.TRUE));//清空原有数据
            memberMapper.insert(allHkList);//插入新数据
            for(Member c :allHkList){
                allUserList.add(MemberServiceImpl.createSystemUser(c,systemDictDataBiz));//创建登陆账号
            }
            systemUserMapper.insert(allUserList);
        }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.setEditor(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;
    }
}