From 0aa2dd71fa4b989838f89aff2cac82950a70097f Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 22 八月 2024 18:10:48 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java |  337 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 337 insertions(+), 0 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java
new file mode 100644
index 0000000..d310af4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromSelfServiceImpl.java
@@ -0,0 +1,337 @@
+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;
+
+/**
+ * 娴峰悍缁勭粐浜哄憳閫氳繃姝ervice瀹炵幇(鑷缁存姢鎯呭喌锛�
+ * @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.setWorkStatus(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;
+    }
+
+}

--
Gitblit v1.9.3