xiejun
2024-01-26 8acf1b32b94ad05ce47130fd02647e87662aff2a
erp集成项目代号属性更新
已修改2个文件
已添加1个文件
220 ■■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/NonWebRequestAttributes.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/SearchDataSyncForERPScheduling.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 165 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/NonWebRequestAttributes.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.vci.ubcs.code.Scheduling;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
/**
 * @author Vigi
 */
@Slf4j
public class NonWebRequestAttributes implements RequestAttributes {
    @Override
    public Object getAttribute(String name, int scope) {
        return null;
    }
    @Override
    public void setAttribute(String name, Object value, int scope) {
        // to do nothing
    }
    @Override
    public void removeAttribute(String name, int scope) {
        // to do nothing
    }
    @Override
    public String[] getAttributeNames(int scope) {
        return new String[0];
    }
    @Override
    public void registerDestructionCallback(String name, Runnable callback, int scope) {
        // to do nothing
    }
    @Override
    public Object resolveReference(String key) {
        return null;
    }
    @Override
    public String getSessionId() {
        return null;
    }
    @Override
    public Object getSessionMutex() {
        return null;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/SearchDataSyncForERPScheduling.java
@@ -3,13 +3,16 @@
import com.vci.ubcs.code.service.ICodeDuckingSyncService;
import com.vci.ubcs.code.service.UniversalInterfaceI;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import io.swagger.annotations.Scope;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.Scheduling.NonWebRequestAttributes;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.constant.MdmDuckingConstant;
import com.vci.ubcs.code.dto.CodeOrderDTO;
@@ -54,6 +55,7 @@
import com.vci.ubcs.starter.web.util.WebUtil;
import com.vci.ubcs.system.user.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.BladeUser;
@@ -62,12 +64,16 @@
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionStatus;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.jws.WebMethod;
@@ -102,6 +108,11 @@
    @Value("${erp.item.systemId:ERP}")
    public String systemId;
    @Value("${erp.item.secName:固定码段}")
    public String secName;
    @Value("${erp.item.secValue:A}")
    public String secValue;
    /**
     * ä¸šåŠ¡ç±»åž‹çš„æœåŠ¡
@@ -122,8 +133,7 @@
    private MdmIOService mdmIOService;
    @Resource
    private IPasswordFreeLoginService passwordFreeLoginService;
    @Resource
    private WebServiceContext webServiceContext;
    @Resource
    private IDockingLogeService dockingLogeService;
    @Resource
@@ -152,7 +162,6 @@
    private MdmSearchItemCodeProvider mdmSearchItemCodeProvider;
    @Autowired
    HttpServletRequest request;
    @Override
    public void DockingDataSyncScheduing() {
@@ -214,7 +223,40 @@
        });
        return  R.success("手动推送完成,请核对是否推送成功");
    }
    private SearchItemDataVO initData(String status,String itemCode,String mmCode){
        SearchItemDataVO searchItemDataVO=new SearchItemDataVO();
        searchItemDataVO.setLastchangedon(new Date());
        searchItemDataVO.setLastchangedby("19831133");
        searchItemDataVO.setCreatby("19831133");
        searchItemDataVO.setCreatedon(new Date());
        searchItemDataVO.setIsenabled(status);
        searchItemDataVO.setMaterialcode("XMDH0001");
        searchItemDataVO.setStatus("1");
        searchItemDataVO.setProjectcode("3333");
        searchItemDataVO.setProjectitem(itemCode);
        searchItemDataVO.setMmodelcode(mmCode);
        return searchItemDataVO;
    }
    public HttpServletRequest  getRequest(){
        HttpServletRequest request =null;
        RequestAttributes requestAttributes = null;
        try{
            requestAttributes = RequestContextHolder.currentRequestAttributes();
        }catch (IllegalStateException e){
            //requestAttributes = new NonWebRequestAttributes();
            //RequestContextHolder.setRequestAttributes(requestAttributes, true);
            request = new MockHttpServletRequest();
            RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request),true);
        }finally {
            if (requestAttributes instanceof  ServletRequestAttributes) {
                ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
                request = servletRequestAttributes.getRequest();
            }
        }
        return request;
    }
    /***
     * åŒæ­¥åž‹å·ä»£å·
     */
@@ -232,12 +274,26 @@
        searchItemParam.setLastchangedon(lastchangedon);
        searchItemParam.setStatus("1");//
        Map<String,String>searchDataMap=  VciBaseUtil.objectToMapString(searchItemParam);
        SearchItemVO searchItemVO= mdmSearchItemCodeProvider.getppModelByElem(searchDataMap);
        //SearchItemVO searchItemVO= mdmSearchItemCodeProvider.getppModelByElem(searchDataMap);
        SearchItemVO searchItemVO=new SearchItemVO();
        List<SearchItemDataVO> data=new ArrayList<>();
        SearchItemDataVO searchItemDataVO1=initData("1","","pro-00001");
        SearchItemDataVO searchItemDataVO2=initData("0","item-00001","");
        data.add(searchItemDataVO1);
        data.add(searchItemDataVO2);
        searchItemVO.setData(data);
        searchItemVO.setCode("200");
        searchItemVO.setMsg("");
        String paramString="";
        String backString="成功";
        String msg="成功";
        boolean success=true;
        if(searchItemVO!=null) {
            paramString = JSONObject.toJSON(searchItemVO).toString();
            try {
                //免密登录申请token,request中添加用户信息
                try {
                    passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(Locale.ROOT), request);
                    passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(Locale.ROOT),getRequest());
                }catch (Throwable e){
                    throw new Throwable("用户鉴权失败.");
                }
@@ -257,6 +313,8 @@
                List<SearchItemDataVO> dataList = searchItemVO.getData();
                Map<String, SearchItemDataVO> dataVOMap = new HashMap<>();
                List<String> itemCodeList = new ArrayList<>();
                ApplyDatasVO allDatasVO = new ApplyDatasVO();
                List<ApplyDataVO> allObjectList=new ArrayList<>();
                if (!CollectionUtils.isEmpty(dataList)) {
                    dataList.stream().forEach(searchItemDataVO -> {
                        String itemCode = StringUtils.isNotBlank(searchItemDataVO.getProjectitem()) ? searchItemDataVO.getProjectitem() : searchItemDataVO.getMmodelcode();//项目代号
@@ -264,7 +322,7 @@
                        itemCodeList.add(itemCode);
                    });
                    String tableName = "";
                    R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(btmName);
                    R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(codeClassify.getBtmTypeId());
                    if (!r.isSuccess()) {
                        throw new Throwable(r.getMsg());
                    }
@@ -273,7 +331,7 @@
                        throw new Throwable("根据业务类型未查询到业务类型对象!");
                    }
                    tableName = btmTypeVO.getTableName();
                    if (com.alibaba.nacos.common.utils.StringUtils.isBlank(tableName)) {
                    if (StringUtils.isBlank(tableName)) {
                        throw new Throwable("根据业务类型未查询到业务类型相关联的表");
                    }
                    StringBuffer sb = new StringBuffer();
@@ -282,19 +340,21 @@
                    sb.append(" where 1=1");
                    sb.append(" and lastr=1 and lastv=1");
                    sb.append(" and codeclsfid = '" + codeClassify.getOid() + "' ");
                    sb.append( VciBaseUtil.toInSql(attrKey,VciBaseUtil.array2String(itemCodeList.toArray(new String[]{}))));
                    sb.append(" and "+ VciBaseUtil.toInSql(attrKey,itemCodeList.toArray(new String[]{})));
                    List<Map<String, String>> newDataList = commonsMapper.queryByOnlySqlForMap(sb.toString());
                    //List<BaseModel> baseModelList=new ArrayList<>();
                    Map<String,BaseModel> baseModelMap=new HashMap<>();
                    newDataList.stream().forEach(dataMap->{
                        BaseModel baseModel=new BaseModel();
                        DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,baseModel,false,user);
                        Map<String,String> newDateMap=new CaseInsensitiveMap<>(dataMap);
                        DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(newDateMap,baseModel,true,user);
                        DefaultAttrAssimtUtil.updateDefaultAttrAssimt(baseModel,user);
                        //baseModelList.add(baseModel);
                        String attrKeyValue=dataMap.getOrDefault(attrKey,"");
                        String attrKeyValue=newDateMap.getOrDefault(attrKey,"");
                        baseModelMap.put(attrKeyValue,baseModel);
                    });
                    ApplyDatasVO editDatasVO = new ApplyDatasVO();
                    List<ApplyDataVO> addObjectList=new ArrayList<>();
                    List<ApplyDataVO> editObjectList=new ArrayList<>();
                    dataVOMap.forEach((key,value)->{
@@ -305,6 +365,10 @@
                            changeObjectToMap(value,"",user,"create",addObjectList);
                        }
                    });
                    allObjectList.addAll(addObjectList);
                    allObjectList.addAll(editObjectList);
                    allDatasVO.setObject(allObjectList);
                    LinkedList<XMLResultDataObjectDetailDO> allResultDataObjectDetailDOS=new LinkedList<>();
                    if(!CollectionUtils.isEmpty(addObjectList)){
                        //规则的主键需要去获取
                        CodeClassifyFullInfoBO classifyFullInfo = codeClassifyService.getClassifyFullInfo(codeClassify.getOid());
@@ -323,32 +387,89 @@
                        this.getConfigDatas(systemId, btmName, applyDatasVO, attrVOS, dataObjectVO);
                        CodeOrderDTO orderDTO = new CodeOrderDTO();
                        orderDTO.setCodeClassifyOid(codeClassify.getOid());//分类主键
                        //码段设置
                        List<SectionVO> section=new ArrayList<>();
                        SectionVO sectionVO=new SectionVO();
                        sectionVO.setValue(secValue);
                        sectionVO.setName(secName);
                        section.add(sectionVO);
                        log.info("end:规则获取完毕");
                        List<CodeOrderSecDTO> codeOrderSecDTOList = getRuleCodeOrderSecDTOs(null, ruleVO,classifyFullInfo);
                        List<CodeOrderSecDTO> codeOrderSecDTOList = getRuleCodeOrderSecDTOs(section, ruleVO,classifyFullInfo);
                        log.info("end:码段获取完毕");
                        orderDTO.setSecDTOList(codeOrderSecDTOList);//分类码段
                        mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs,false);
                        allResultDataObjectDetailDOS.addAll(resultDataObjectDetailDOs);
                    }
                    //更新数据(更新状态)
                    if(!CollectionUtils.isEmpty(editObjectList)){
                        DataObjectVO dataObjectVO = new DataObjectVO();
                        ApplyDatasVO applyDatasVO = new ApplyDatasVO();
                        applyDatasVO.setObject(editObjectList);
                        LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
                        CodeClassifyVO codeClassifyVO=new CodeClassifyVO();
                        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassify, codeClassifyVO);
                        this.getConfigDatas(systemId, btmName, applyDatasVO, attrVOS, dataObjectVO);
                        mdmIOService.batchSyncEditDatas(codeClassifyVO,dataObjectVO, resultDataObjectDetailDOs,false);
                        allResultDataObjectDetailDOS.addAll(resultDataObjectDetailDOs);
                    }
                    Object paramObject = JSONObject.toJSON(allDatasVO);
                    paramString=Func.isEmpty(paramObject)?"":paramObject.toString();
                    Object backObject = JSONObject.toJSON(allResultDataObjectDetailDOS);
                    backString=Func.isEmpty(backObject)?"":backObject.toString();
                }
            }
            catch (Throwable e){
                e.printStackTrace();;
                log.error("查询失败--->"+e);
                success=false;
                backString="查询失败--->"+e;
                msg="查询失败--->"+e;
            }finally {
                try {
                    //记录日志
                    this.saveLogs(systemId, systemId, paramString, backString, success, msg, "queryData");
                }catch (Throwable e){
                    e.printStackTrace();
                    log.error(e.getMessage());
                }
            }
        }
    }
    /***
     * è®°å½•日志信息
     * @param systemId
     * @param parmaData
     * @param result
     * @return
     */
    private  void saveLogs(String systemId,String systemName,String parmaData, String result,boolean isSucess,String msg,String operation){
        //记录日志信息
        DockingLog dockingLoge=new DockingLog();
        //String oid=redisService.getUUIDEveryDay();
        dockingLoge.setSystemCode(StringUtils.isBlank(systemId)?"-":systemId);//设置系统标识
        dockingLoge.setSystemName(StringUtils.isBlank(systemName)?"-":systemName);
        dockingLoge.setMsg(msg);//日志消息
        dockingLoge.setClassifyId("-");//分类编号
        dockingLoge.setClassifyName("-");//分类名称
        dockingLoge.setClassifyOid("-");//分类主键
        dockingLoge.setUniqueCode("-");//唯一标识
        dockingLoge.setSystemOid("-");//系统标识
//        dockingLogeDO.setName(operation);
        //dockingLogeDO.setOid(oid);//日志主键
        dockingLoge.setParamString(parmaData);//参数信息
        dockingLoge.setReturnString(result);//返回信息
        dockingLoge.setType(operation);//日志操作类型
        dockingLoge.setCreateTime(new Date());
        if(isSucess) {
            dockingLoge.setInterfaceStatus("true");//接口集成状态
        }else{
            dockingLoge.setInterfaceStatus("false");//接口集成状态
        }
        dockingLogeService.save(dockingLoge);
        log.info("集成推送数据成功,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData);
    }
    /***
     * æ ¹æ®ä¼ å…¥çš„参数信息校验码段规则
     */
@@ -540,13 +661,15 @@
     //String status= searchItemDataVO.getStatus();//数据状态 å­—符型,枚举值;制单:0;审批中:1;通过:2;驳回:3;
     String mmodelCode=searchItemDataVO.getMmodelcode();//制造型号代号
     initProperty("mmodelCode","","mmodelCode",propList);
     initProperty("mmodelcode","",mmodelCode,propList);
     String projectCode= searchItemDataVO.getProjectcode();//项目编码
     initProperty("projectcode","","projectCode",propList);
     initProperty("projectcode","",projectCode,propList);
     String projectItem=searchItemDataVO.getProjectitem();//项目代号
     initProperty("projectitem","","projectItem",propList);
     initProperty("projectitem","",projectItem,propList);
     String materialCode=searchItemDataVO.getMaterialcode();//产品编码
     initProperty("materialcode","","materialCode",propList);
     initProperty("materialcode","",materialCode,propList);
     //组合属性的处理
     initProperty(attrKey,"",StringUtils.isNotBlank(projectItem)?projectItem:mmodelCode,propList);
     String creatBy=searchItemDataVO.getCreatby();//创建者
     Date cretaeDon= searchItemDataVO.getCreatedon();//创建日期 æ—¥æœŸåž‹ï¼Œå¦‚:2023-09-08 19:24:11
     String lastchangeBy=searchItemDataVO.getLastchangedby();//更改者
@@ -554,7 +677,7 @@
     String isenabled=  searchItemDataVO.getIsenabled();//字符型,枚举值;停用:0;启用:1;
     applyDataVO.setOperate(operation);
     applyDataVO.setCode(code);
     if(isenabled.equals(0)){
     if(isenabled.equals("0")){
         applyDataVO.setStatus(CodeDefaultLC.DISABLE.getValue());
     }else{
         applyDataVO.setStatus(CodeDefaultLC.RELEASED.getValue());