lishuai
2023-12-26 70577a6d6cf2bded29e71dcad11a0c2605193d20
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
@@ -14,10 +14,12 @@
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.DESUtil;
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.github.yulichang.query.MPJQueryWrapper;
@@ -49,7 +51,7 @@
    @Autowired
    private EmpowerMapper empowerMapper;
    @Autowired
    private MemberMapper memberMapper;
    private MemberJoinMapper memberMapper;
    @Autowired
    private ERPSyncService erpSyncService;
    @Autowired
@@ -70,7 +72,7 @@
            //查询所有需要同步的企业数据
            String rootOrgId = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_CODE).getCode();
            List<Company> list = companyMapper.selectList(new QueryWrapper<Company>()
                    .select("*,(select b.hk_id from company b where company.erp_parent_id = b.id limit 1) as hkParentId")
                    .select("*,(select b.hk_id from company b where company.erp_parent_id = b.erp_id limit 1) as hkParentId")
                    .lambda()
                    .eq(Company::getHkStatus,Constants.ZERO)
                    .orderByAsc(Company::getErpDate));
@@ -78,6 +80,7 @@
                return;
            }
            Date date = new Date();
            List<OrgEditRequest> editHkList = new ArrayList<>();
            List<OrgAddRequest> addList = new ArrayList<>();
            List<Company> updateList = new ArrayList<>();
            List<Integer> delIds = new ArrayList<>();
@@ -104,20 +107,21 @@
                    c.setHkId(m.getOrgIndexCode());
                    updateList.add(c);
                }else{
                    //删除的数据,进行删除
                    delIds.add(c.getId());
                    delHKIds.add(c.getHkId());
                    //删除海康原有的数据,再新增组织
                    OrgAddRequest m = getOrgAddModel(c,rootOrgId);
                    addList.add(m);
                    c.setHkId(m.getOrgIndexCode());
                    if(Constants.equalsInteger(c.getIsdeleted(),Constants.ONE)){
                        //删除的数据,进行删除
                        delIds.add(c.getId());
                        delHKIds.add(c.getHkId());
                    }else{
                        //如果更新
                        editHkList.add(getOrgHkEditModel(c,rootOrgId));
                    }
                    updateList.add(c);
                }
            }
            //处理删除数据
            doHkDeleteOrg(delIds,delHKIds,date);
            //处理新增数据
            doHkAddOrg(updateList,addList);
            doHkAddOrg(updateList,addList,editHkList);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
@@ -131,24 +135,51 @@
     * @param updateList
     * @param addList
     */
    private void doHkAddOrg(List<Company> updateList, List<OrgAddRequest> addList) {
    private void doHkAddOrg(List<Company> updateList, List<OrgAddRequest> addList, List<OrgEditRequest> editHkList) {
        Date date = new Date();
        BaseResponse<OrgOrUserAddResponse> result =  HKService.addBatchOrg(addList);
        if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
            OrgOrUserAddResponse data = result.getData();
            if(data.getSuccesses()!=null && data.getSuccesses().size()>0){
                //处理新增成功的数据,修改海康同步状态
              for(OrgOrUserAddSuccessResponse r :data.getSuccesses()){
                  Integer index = getCompanyId(updateList,r.getOrgIndexCode());
                  if(index!=null){
                      companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                              .set(Company::getHkStatus,Constants.ONE)
                              .set(Company::getHkDate,date)
                              .set(Company::getHkId,r.getOrgIndexCode())
                              .eq(Company::getId, index) );
                  }
              }
        if(addList!=null &&addList.size()>0){
            //处理新增
            BaseResponse<OrgOrUserAddResponse> result =  HKService.addBatchOrg(addList);
            if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
                OrgOrUserAddResponse data = result.getData();
                if(data.getSuccesses()!=null && data.getSuccesses().size()>0){
                    //处理新增成功的数据,修改海康同步状态
                    for(OrgOrUserAddSuccessResponse r :data.getSuccesses()){
                        Integer index = getCompanyId(updateList,r.getOrgIndexCode());
                        if(index!=null){
                            companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                                    .set(Company::getHkStatus,Constants.ONE)
                                    .set(Company::getHkDate,date)
                                    .set(Company::getHkId,r.getOrgIndexCode())
                                    .eq(Company::getId, index) );
                        }
                    }
                }
            }
        }
        if(editHkList!=null){
            //执行更新操作
            List<String> success = new ArrayList<>();
            List<String> error = new ArrayList<>();
            for(OrgEditRequest param : editHkList){
                BaseResponse  result =  HKService.editOrg(param);
                if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
                    success.add(param.getOrgIndexCode());
                }else{
                    error.add(param.getOrgIndexCode());
                }
            }
            if(success.size()>0){
                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                        .set(Company::getHkStatus,Constants.ONE)
                        .set(Company::getHkDate,date)
                        .in(Company::getHkId, success) );
            }
            if(error.size()>0){
                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                        .set(Company::getHkStatus,Constants.TWO)
                        .set(Company::getHkDate,date)
                        .in(Company::getHkId, error) );
            }
        }
    }
@@ -173,6 +204,13 @@
        return  model;
    }
    private OrgEditRequest getOrgHkEditModel(Company c,String rootOrgId) {
        OrgEditRequest model = new OrgEditRequest();
        model.setOrgIndexCode(c.getHkId());
        model.setOrgName(c.getName());
        return  model;
    }
    /**
     * 对海康删除组织信息
@@ -190,7 +228,7 @@
            List<String> fIds = new ArrayList<>();
            if(result.getData()!=null){
                for(OrgUpdateFailureResponse r : result.getData()){
                    if(!r.getCode().equals("0x00072001")){
                    if(!r.getCode().equals("0x00052102")){
                        //不存在的也算删除成功
                        fIds.add(r.getOrgIndexCode());//删除失败的数据集合
                    }
@@ -200,8 +238,14 @@
            companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                    .set(Company::getHkStatus,Constants.ONE)
                    .set(Company::getHkDate,date)
                    .set(Company::getHkId,null )
                    .in(Company::getId, delIds)
                    .notIn(fIds.size()>0,Company::getHkId, fIds));
            companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                    .set(Company::getHkStatus,Constants.TWO)
                    .set(Company::getHkDate,date)
                    .in(Company::getId, delIds)
                    .in(fIds.size()>0,Company::getHkId, fIds));
        }
    }
@@ -217,8 +261,10 @@
        Constants.DEALING_HK_USER =true;
        try {
            //查询所有需要同步的企业数据
            List<Member> list = memberMapper.selectList(new QueryWrapper<Member>()
                    .lambda()
            List<Member> list = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                    .selectAll(Member.class )
                    .selectAs(Company::getHkId,Member::getCompanyHkId)
                    .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                    .eq(Member::getHkStatus,Constants.ZERO)
                    .orderByAsc(Member::getErpDate));
            if(list ==null || list.size()==0){
@@ -271,22 +317,22 @@
            UserAddRequest  addHkModel = getUserAddModel(c,path,1);//修改
            //处理新增数据
            BaseResponse result =  HKService.editUser(addHkModel);
            if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){
            if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) ){
                if(StringUtils.isNotBlank(c.getFaceImg())){
                    //如果有人脸照片,处理人脸照片同步
                    String faceid = dealMemberFace(c,path);
                    if(StringUtils.isBlank(faceid)){
                        noticeErpFail(c,Constants.ZERO,"人脸信息更新失败,请检查人脸照片是否合法!");
                        c.setHkStatus(Constants.TWO);
                        c.setRemark("人脸信息更新失败,请检查人脸照片是否合法!!");
                        c.setRemark("人脸信息更新失败,请检查人脸照片是否合法!!"+result.getMsg());
                    }else{
                        c.setFaceId(faceid);
                    }
                }
            }else{
                noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!"+result.getCode()+result.getMsg());
                noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!");
                c.setHkStatus(Constants.TWO);
                c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!");
                c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!"+(result!=null?result.getCode()+result.getMsg():""));
            }
        }
@@ -306,6 +352,8 @@
            //删除的组织,不做处理,海康状态更新为不处理,下次不再处理这个记录
            c.setHkStatus(Constants.TWO);
            c.setRemark("未同步数据,直接删除");
            c.setEditDate(date);
            c.setErpId(c.getErpOrgId()+"_"+UUID.randomUUID().toString());
            memberMapper.updateById(c);
            return  false;
        }
@@ -320,7 +368,7 @@
        }
        //处理新增数据
        BaseResponse<UserAddResponse> result =  HKService.addUser(addHkModel);
        if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){
        if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){
            c.setFaceId(result.getData().getFaceId());
            c.setHkStatus(Constants.ONE);
            c.setHkId(addHkModel.getPersonId());
@@ -329,7 +377,7 @@
        }else{
            noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!"+result.getCode()+result.getMsg());
            c.setHkStatus(Constants.TWO);
            c.setRemark("人员信息同步安防平台失败,请修正后重试!");
            c.setRemark("人员信息同步安防平台失败,请修正后重试!"+(result!=null?result.getMsg():""));
            memberMapper.updateById(c);
            return  false;
        }
@@ -423,7 +471,10 @@
    private UserAddRequest getUserAddModel(Member c,String path,int type) {
        UserAddRequest model = new UserAddRequest();
        model.setOrgIndexCode(c.getCompanyHkId());
        model.setPersonId(type == 0 ?HKConstants.RES_USER_INDEX+UUID.randomUUID().toString().replace("-", ""):c.getHkId());
        model.setJobNo(c.getCode());
        model.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
        model.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+"");
        model.setPersonId(type == 0 ?UUID.randomUUID().toString().replace("-", ""):c.getHkId());
        model.setGender(Constants.formatIntegerNum(c.getSex())+"");
        model.setPersonName(c.getName());
        if(type== 0 && StringUtils.isNotBlank(c.getFaceImg())){