xiejun
2024-01-23 8238e7215367e39de004c29244d2597bb1e5519b
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -3,11 +3,11 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.applyjtcodeservice.feign.MdmApplyGroupCodeProvider;
import com.vci.ubcs.code.constant.MdmDuckingConstant;
import com.vci.ubcs.code.dto.datapush.classify.JsonRootDataDTO;
import com.vci.ubcs.code.dto.datapush.classify.NodeClassifyDTO;
@@ -22,19 +22,23 @@
import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.SysIntegrationDataFlowTypeEnum;
import com.vci.ubcs.code.feign.MdmSearchItemCodeProvider;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.util.HttpUtils;
import com.vci.ubcs.code.vo.pagemodel.*;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.util.HttpUtils;
import com.vci.ubcs.code.util.WsErpClientUtil;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.WebUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.StringUtil;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -44,6 +48,7 @@
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.MdmDuckingConstant.*;
@@ -60,8 +65,22 @@
public class CodeDuckingSyncServiceImpl implements ICodeDuckingSyncService {
   @Value("${dataSyncPush.dataParamName:xmlData}")
   public String DATA_PARAM_NAME;
   @Value("${dataSyncPush.dataId:itemid}")
   private String itemId;
   @Value("${erp.item.attrKey:xhdh}")
   public String attrKey;
   /**
    * 业务类型的服务
    */
   @Autowired
   private IBtmTypeClient btmTypeClient;
   /**
    * 通用查询
    */
   @Resource
   private CommonsMapper commonsMapper;
   @Resource
   private  MdmEngineService  mdmEngineServiceI;
@@ -84,7 +103,8 @@
   private IDockingSysIntParamService dockingSysIntParamService;
   @Resource
   private IDockingSysIntHeaderService dockingSysIntHeaderService;
   @Autowired(required = false)
   private MdmSearchItemCodeProvider mdmSearchItemCodeProvider;
   @Override
@@ -149,6 +169,74 @@
      return  R.success("手动推送完成,请核对是否推送成功");
   }
   /***
    * 同步型号代号
    */
   @Override
   public void saveItemDataSyncScheduing(String btmName) {
      SearchItemParam searchItemParam=new SearchItemParam();
      searchItemParam.setSystag("CODE"); //调用系统标识
      searchItemParam.setLastchangedon(new Date());
      searchItemParam.setStatus("1");//
      SearchItemVO searchItemVO= mdmSearchItemCodeProvider.getppModelByElem(searchItemParam);
      if(searchItemVO!=null) {
         searchItemVO.getCode();
         searchItemVO.getMsg();
         List<CodeClassify> codeClassifyList = codeClassifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().in(CodeClassify::getId, btmName));
         try {
            if (CollectionUtils.isEmpty(codeClassifyList)) {
               throw new Throwable("分类未查询到");
            }
            CodeClassify codeClassify= codeClassifyList.get(0);
            List<SearchItemDataVO> dataList = searchItemVO.getData();
            Map<String, SearchItemDataVO> dataVOMap = new HashMap<>();
            List<String> itemCodeList = new ArrayList<>();
            if (!CollectionUtils.isEmpty(dataList)) {
               dataList.stream().forEach(searchItemDataVO -> {
                  String itemCode = StringUtils.isNotBlank(searchItemDataVO.getProjectitem()) ? searchItemDataVO.getProjectitem() : searchItemDataVO.getMmodelcode();//项目代号
                  dataVOMap.put(itemCode, searchItemDataVO);
                  itemCodeList.add(itemCode);
               });
               String tableName = "";
               R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(btmName);
               if (!r.isSuccess()) {
                  throw new Throwable(r.getMsg());
               }
               BtmTypeVO btmTypeVO = r.getData();
               if (btmTypeVO == null) {
                  throw new Throwable("根据业务类型未查询到业务类型对象!");
               }
               tableName = btmTypeVO.getTableName();
               if (com.alibaba.nacos.common.utils.StringUtils.isBlank(tableName)) {
                  throw new Throwable("根据业务类型未查询到业务类型相关联的表");
               }
               StringBuffer sb = new StringBuffer();
               sb.append(" select * from  ");
               sb.append(tableName);
               sb.append(" where 1=1");
               sb.append(" and lastr=1 and lastv=1");
               sb.append(" and codeclsfid = '" + codeClassify.getOid() + "'");
               List<Map<String, String>> newDataList = commonsMapper.queryByOnlySqlForMap(sb.toString());
               newDataList.stream().forEach(dataMap->{
                  String value= dataMap.getOrDefault(attrKey,"");
                  if(dataVOMap.containsKey(attrKey)){
                     SearchItemDataVO searchItemDataVO=dataVOMap.get(attrKey);
                  }else{
                  }
               });
            }
         }
         catch (Throwable e){
            log.error("查询失败--->"+e);
         }
      }
   }
   /***
    * 查询redis中数据,对比后插入dockingtask
@@ -156,7 +244,6 @@
    */
   private void initPushDataTaks(int type){
      initSysadmin();
      List<DockingSystemConfig> dockingSystemConfigList = dockingSystemConfigService.list(
         Wrappers.<DockingSystemConfig>query().lambda().eq(DockingSystemConfig::getUsedFlag,"true")
            .eq(DockingSystemConfig::getPushType,type==2?"2":"1").eq(DockingSystemConfig::getDataFlowType, SysIntegrationDataFlowTypeEnum.PUSH.getValue()));//2是代表分类推送,1是代表数据推送
@@ -322,7 +409,6 @@
    * 发送编码主数据
    */
   private void sendpushDataForService (List<DockingTask> dockingTaskS){
      //每个task依次执行推送
      for (DockingTask dockingTask:dockingTaskS){
         //每个task一个事务,开启
@@ -339,6 +425,7 @@
            //表示是主数据
            CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
            R<List<Map<String, String>>> r = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
            List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
            Map<String/**英文名称**/, String/**中文名称**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
            Map<String, String> data = new HashMap<>();
@@ -350,7 +437,12 @@
            }
            List<NodeProDTO> nodeProDTOS = new ArrayList<>();
            Map<String, String> finalData = data;
            AtomicReference<String> newItemId= new AtomicReference<>("");
            attrIdNameMap.keySet().forEach(field -> {
               if(field.toLowerCase(Locale.ROOT).equals(itemId.toLowerCase(Locale.ROOT))){
                  String Value = finalData.get(field);
                  newItemId.set(Value);
               }
               String outName = attrIdNameMap.get(field);
               if (finalData.containsKey(field)) {
                  String Value = finalData.get(field);
@@ -369,6 +461,13 @@
            }
            if(isGroupCodeFlage){
               code=data.getOrDefault("groupcode","");
               if(StringUtils.isBlank(code)) {//如果是集团码,没有领取到集团码则任务不结束等待集团码申请后再通过定时器调用集团码段
                  dockingTask.setDescription("等待集团申请集团码");
                  dockingTask.setSendFlag(MdmDuckingConstant.SEND_FLAG_FALSE);
                  dockingTask.setLastModifyTime(new Date());
                  dockingTaskService.updateById(dockingTask);
                  continue;
               }
            }
            String[] classCodeLeves = dockingTask.getClassifyId().split(",");
            NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
@@ -377,6 +476,7 @@
            nodeObjectDTO.setCode(code);//设置编码
            nodeObjectDTO.setClassCode(classCodeLeves[0]);
            nodeObjectDTO.setStatus(data.get("lcstatus"));
            nodeObjectDTO.setItemid(newItemId.get());
            nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]);
            nodeObjectDTO.setPro(nodeProDTOS);
            List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
@@ -502,7 +602,6 @@
         }
         ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
         resultNodeObjectDTOS=resultNodeDataDTO.getObject();
      }catch (Throwable e){
         msg="调用接口失败:"+e.getMessage();
         e.printStackTrace();
@@ -512,7 +611,7 @@
         resultNodeObjectDTO.setErroid("1");
         resultNodeObjectDTO.setMsg(msg);
         resultNodeObjectDTO.setCode(dockingSystemConfig.getPushType().equalsIgnoreCase("2")?dockingTask.getClassifyId():dockingTask.getId());
         resultNodeObjectDTO.setOid(dockingTask.getBtmOid());
         resultNodeObjectDTO.setItemid(dockingTask.getBtmOid());
         resultNodeObjectDTOS.add(resultNodeObjectDTO);
      }finally {
         boolean isSend = false;