lishuai
2023-12-15 3a86c9c6879971051ab1e01a5b9b88eed27e55db
Merge remote-tracking branch 'origin/master'
已添加2个文件
已修改7个文件
261 ■■■■■ 文件已修改
server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgUpdateFailureResponse.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -2,6 +2,7 @@
import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl;
import com.doumee.service.business.impl.hksync.HkSyncOrgUserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
@@ -20,6 +21,8 @@
    @Autowired
    private HkSyncImgServiceImpl hkSyncImgService;
    @Autowired
    private HkSyncOrgUserServiceImpl hkSyncOrgUserService;
    /**
     * æ˜¯å¦å¼€å‘者
     */
@@ -35,5 +38,21 @@
    public void downloadHkImg() throws Exception {
        hkSyncImgService.downHKImgs(0);
    }
    /**
     * å®šæ—¶åŒæ­¥ç»„织信息到海康系统
     * @throws Exception
     */
    @Scheduled(fixedDelay= 60*1000)
    public void syncOrgData() {
        hkSyncOrgUserService.syncOrgData();
    }
    /**
     * å®šæ—¶åŒæ­¥ç”¨æˆ·ä¿¡æ¯åˆ°æµ·åº·ç³»ç»Ÿ
     * @throws Exception
     */
    @Scheduled(fixedDelay= 60*1000)
    public void syncUserData()  {
        hkSyncImgService.syncUserData();
    }
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgUpdateFailureResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
@Data
public class OrgUpdateFailureResponse {
  private String msg;//    string    False    é”™è¯¯ä¿¡æ¯
  private String  orgIndexCode;//    string    False    ç»„织标志
  private String  code;//返回码0:成功  å…¶ä»–:失败
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -78,7 +78,7 @@
     *批量删除组织数据
     * @return
     */
    public  static  BaseResponse   delBatchOrg(OrgDelRequest param){
    public  static  BaseResponse<List<OrgUpdateFailureResponse>>   delBatchOrg(OrgDelRequest param){
        log.info("【海康删除组织】================开始===="+JSONObject.toJSONString(param));
        try {
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -23,7 +23,6 @@
    public static final int ZERO = 0 ;
    public static final int ONE = 1 ;
    public static final int TWO = 2 ;
    public static final int THREE = 2 ;
    public static final String HK_PARAM ="HK_PARAM" ;
    public static final String HK_HOST ="HK_HOST" ;
    public static final String HK_APPKEY ="HK_APPKEY" ;
@@ -62,8 +61,11 @@
    public static final String ERP_APPROVE_URL ="ERP_APPROVE_URL" ;
    public static final String ERP_USERSTATUS_RL ="ERP_USERSTATUS_RL" ;
    public static final String ERP ="ERP" ;
    public static final Integer THREE =3 ;
    public static  boolean DEALING_HK_IMG = false;
    public static  boolean DEALING_HK_ORG = false;
    public static  boolean DEALING_HK_USER = false;
    // ERP接口配置
    public static final String ERP_CONFIG = "ERP_CONFIG";
    // ERP ACCESS_KEY
@@ -71,7 +73,7 @@
    // ERP ACCESS_SECRET
    public static final String ERP_ACCESS_SECRET = "ERP_ACCESS_SECRET";
    // FTP文件服务器资源访问地址
    public static  Date  getBirthdyByCardNo(String idCard){
    if(idCard ==null || idCard.length()<14){
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java
@@ -167,6 +167,9 @@
    @ApiModelProperty(value = "上级组织名称")
    @TableField(exist = false)
    private String parentName;
    @ApiModelProperty(value = "海康上级组织")
    @TableField(exist = false)
    private String hkParentId;
}
server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java
@@ -53,4 +53,8 @@
    String dealParkEvent(EventParkRequest param, HttpServletResponse response);
    String downHKImgs(int type);
    void cancelEventSub();
    void syncOrgData();
    void syncUserData();
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -143,7 +143,10 @@
            }
            if(delIds.size()>0){
                //删除所有需要删除的组织信息(逻辑删除)
                companyMapper.update(null,new UpdateWrapper<Company>().lambda().set(Company::getIsdeleted, Constants.ONE).in(Company::getId,delIds));
                companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                        .set(Company::getIsdeleted, Constants.ONE)
                        .set(Company::getHkStatus, Constants.ZERO)
                        .in(Company::getId,delIds));
            }
            return "同步数据:新增【"+addList.size()+"】条,更新【"+updateList.size()+"】条,删除【"+delIds.size()+"】条";
        }else{
@@ -224,8 +227,7 @@
        company.setCode(respone.getCode());
        company.setErpParentId(respone.getParentOrgId());
        company.setErpDate(date);
        //海康数据
        company.setHkId(HKConstants.RES_INDEX+UUID.randomUUID().toString());
        company.setHkStatus(Constants.ZERO);
        return  company;
    }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncBaseServiceImpl.java
@@ -73,4 +73,11 @@
    public  String downHKImgs(int type){
        return  null;
    }
    @Override
    public  void syncUserData(){
    }
    @Override
    public  void syncOrgData( ){
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,201 @@
package com.doumee.service.business.impl.hksync;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.OrgAddRequest;
import com.doumee.core.haikang.model.param.request.OrgDelRequest;
import com.doumee.core.haikang.model.param.request.ParkListRequest;
import com.doumee.core.haikang.model.param.respose.OrgOrUserAddResponse;
import com.doumee.core.haikang.model.param.respose.OrgOrUserAddSuccessResponse;
import com.doumee.core.haikang.model.param.respose.OrgUpdateFailureResponse;
import com.doumee.core.haikang.model.param.respose.ParkListResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.CompanyMapper;
import com.doumee.dao.business.ParksMapper;
import com.doumee.dao.business.join.CompanyJoinMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.Parks;
import com.github.yulichang.query.MPJQueryWrapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
 * æµ·åº·åœè½¦åº“同步Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Service
public class HkSyncOrgUserServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    /**
     * åŒæ­¥æµ·åº·ç»„织信息
     * @return
     */
    @Override
    public   void syncOrgData(){
        if(Constants.DEALING_HK_ORG){
            return   ;
        }
        Constants.DEALING_HK_ORG =true;
        try {
            //查询所有需要同步的企业数据
            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")
                    .lambda()
                    .eq(Company::getHkStatus,Constants.ZERO)
                    .orderByDesc(Company::getErpDate));
            if(list ==null || list.size()==0){
                return;
            }
            Date date = new Date();
            List<OrgAddRequest> addList = new ArrayList<>();
            List<Company> updateList = new ArrayList<>();
            List<Integer> delIds = new ArrayList<>();
            List<String> delHKIds = new ArrayList<>();
            for(Company c : list){
                if(StringUtils.isBlank(c.getErpParentId())){
                    //如果是erp顶层组织,默认再海康根组织下创建组织
                    c.setHkParentId(rootOrgId);
                }
                if(StringUtils.isBlank(c.getHkParentId())){
                    //如果上级海康部门还没同步,则此次不处理
                    continue;
                }
                if(StringUtils.isBlank(c.getHkId())){
                    //如果新增同步數據
                    if(Constants.equalsInteger(Constants.ONE,c.getIsdeleted())){
                        //删除的组织,不做处理,海康状态更新为不处理,下次不再处理这个记录
                        c.setHkStatus(Constants.TWO);
                        companyMapper.updateById(c);
                        continue ;
                    }
                    OrgAddRequest m = getOrgAddModel(c,rootOrgId);
                    addList.add(m);
                    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());
                    updateList.add(c);
                }
            }
            //处理删除数据
            doHkDeleteOrg(delIds,delHKIds,date);
            //处理新增数据
            doHkAddOrg(updateList,addList);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_ORG =false;
        }
    }
    /**
     * å¤„理批量新增的海康数据,更新同步数据状态
     * @param updateList
     * @param addList
     */
    private void doHkAddOrg(List<Company> updateList, List<OrgAddRequest> addList) {
        Date date = new Date();
        BaseResponse<OrgOrUserAddResponse> result =  HKService.addBatchOrg(addList);
        if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
            OrgOrUserAddResponse data = result.getData();
            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) );
                  }
              }
            }
        }
    }
    private Integer getCompanyId(List<Company> updateList, String orgIndexCode) {
        if(updateList!=null && StringUtils.isNotBlank(orgIndexCode)){
            for(Company c : updateList){
                if(StringUtils.equals(c.getHkId(),orgIndexCode)){
                    return c.getId();
                }
            }
        }
        return  null;
    }
    private OrgAddRequest getOrgAddModel(Company c,String rootOrgId) {
        OrgAddRequest model = new OrgAddRequest();
        model.setOrgIndexCode(HKConstants.RES_INDEX+UUID.randomUUID().toString());
        model.setOrgName(c.getName());
        model.setOrgCode(c.getCode());
        model.setOrgIndexCode(c.getHkParentId());
        return  model;
    }
    /**
     * å¯¹æµ·åº·åˆ é™¤ç»„织信息
     * @param delIds
     * @param date
     */
    private void doHkDeleteOrg(List<Integer> delIds,List<String> delHkIds,  Date date) {
        OrgDelRequest request = new OrgDelRequest();
        request.setIndexCodes((String[]) delHkIds.toArray());
        BaseResponse<List<OrgUpdateFailureResponse>> result =  HKService.delBatchOrg(request);
        if(StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
            List<String> fIds = new ArrayList<>();
            if(result.getData()!=null){
                for(OrgUpdateFailureResponse r : result.getData()){
                    fIds.add(r.getOrgIndexCode());//删除失败的数据集合
                }
            }
            //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕)
            companyMapper.update(null,new UpdateWrapper<Company>().lambda()
                    .set(Company::getHkStatus,Constants.ONE)
                    .set(Company::getHkDate,date)
                    .in(Company::getId, delIds)
                    .notIn(fIds.size()>0,Company::getHkId, fIds));
        }
    }
    /**
     * åŒæ­¥æµ·åº·äººå‘˜ä¿¡æ¯
     * @return
     */
    @Override
    public   void syncUserData(){
    }
}