/* * Copyright [2022] [https://www.baiduc.com] * * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: * * 1.请不要删除和修改根目录下的LICENSE文件。 * 2.请不要删除和修改Snowy源码头部的版权声明。 * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 * 4.分发源码时候,请注明软件出处 https://www.baiduc.com * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.baiduc.com */ package vip.xiaonuo.erp.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollStreamUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.swagger.models.auth.In; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import vip.xiaonuo.common.enums.CommonSortOrderEnum; import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.page.CommonPageRequest; import vip.xiaonuo.erp.entity.ErpBdMaterial; import vip.xiaonuo.erp.entity.ErpBdOrg; import vip.xiaonuo.erp.entity.voucher.ErpMaterial; import vip.xiaonuo.erp.mapper.ErpBdMaterialMapper; import vip.xiaonuo.erp.mapper.ErpBdOrgMapper; import vip.xiaonuo.erp.param.*; import vip.xiaonuo.erp.service.ErpBdMaterialService; import vip.xiaonuo.sale.entity.ErpBaseMaterial; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * erp_bd_materialService接口实现类 * * @author 1 * @date 2025/03/01 14:50 **/ @Service public class ErpBdMaterialServiceImpl extends ServiceImpl implements ErpBdMaterialService { @Override public Page page(ErpBdMaterialPageParam erpBdMaterialPageParam) { QueryWrapper queryWrapper = new QueryWrapper<>(); if(ObjectUtil.isAllNotEmpty(erpBdMaterialPageParam.getSortField(), erpBdMaterialPageParam.getSortOrder())) { CommonSortOrderEnum.validate(erpBdMaterialPageParam.getSortOrder()); queryWrapper.orderBy(true, erpBdMaterialPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(erpBdMaterialPageParam.getSortField())); } else { queryWrapper.lambda().orderByAsc(ErpBdMaterial::getId); } queryWrapper.eq(StringUtils.isNotBlank(erpBdMaterialPageParam.getOrgId()),"org_id",erpBdMaterialPageParam.getOrgId()); queryWrapper.eq("parent",0); return this.page(CommonPageRequest.defaultPage(), queryWrapper); } @Transactional(rollbackFor = Exception.class) @Override public void add(ErpBdMaterialAddParam erpBdMaterialAddParam) { ErpBdMaterial erpBdMaterial = BeanUtil.toBean(erpBdMaterialAddParam, ErpBdMaterial.class); this.save(erpBdMaterial); } @Transactional(rollbackFor = Exception.class) @Override public void edit(ErpBdMaterialEditParam erpBdMaterialEditParam) { ErpBdMaterial erpBdMaterial = this.queryEntity(erpBdMaterialEditParam.getId()); BeanUtil.copyProperties(erpBdMaterialEditParam, erpBdMaterial); this.updateById(erpBdMaterial); } @Transactional(rollbackFor = Exception.class) @Override public void delete(List erpBdMaterialIdParamList) { // 执行删除 this.removeByIds(CollStreamUtil.toList(erpBdMaterialIdParamList, ErpBdMaterialIdParam::getId)); } @Override public ErpBdMaterial detail(ErpBdMaterialIdParam erpBdMaterialIdParam) { return this.queryEntity(erpBdMaterialIdParam.getId()); } @Override public ErpBdMaterial queryEntity(Integer id) { ErpBdMaterial erpBdMaterial = this.getById(id); if(ObjectUtil.isEmpty(erpBdMaterial)) { throw new CommonException("erp_bd_material不存在,id值为:{}", id); } return erpBdMaterial; } @Override public List getByParentId(ErpBdMaterialParentParam erpBdMaterial) { String orgId = erpBdMaterial.getOrgId(); Integer parent = erpBdMaterial.getId(); if (ObjectUtil.isEmpty(parent)){ parent = 0; } return this.list(new QueryWrapper().eq("parent", parent).eq(StringUtils.isNotBlank(orgId), "org_id", orgId)); } @Autowired private RestTemplate restTemplate; @Autowired private ErpBdOrgMapper erpBdOrgMapper; @Autowired private ErpBdMaterialMapper erpBdMaterialMapper; @Override public void sync() { ResponseEntity> response = restTemplate.exchange( "http://127.0.0.1:9200/erp-bd-org/getMaterial", HttpMethod.GET, null, new ParameterizedTypeReference>() { } ); List forObjects = response.getBody(); System.out.println(forObjects); for (ErpMaterial forObject : forObjects) { ResponseEntity> response2 = restTemplate.exchange( "http://127.0.0.1:9200/erp-bd-org/getMaterialDetail?fnumber=" + forObject.getFnumber(), HttpMethod.GET, null, new ParameterizedTypeReference>() { } ); //二 List forObjects2 = response2.getBody(); System.out.println(forObjects2); boolean b = false; //判断有没有下级 for (ErpMaterial erpMaterial : forObjects2) { if (erpMaterial.getFnumber().contains("0000")) { ErpBdOrg forgid = erpBdOrgMapper.selectOne(new QueryWrapper().eq("forgid", erpMaterial.getFacctorgid())); if (ObjectUtil.isEmpty(forgid)) continue; if (erpBdMaterialMapper.exists(new QueryWrapper().eq("erp_fnumber", erpMaterial.getFnumber()).eq("org_id", forgid.getOrgId()))) { continue; } ErpBdMaterial erpBaseMaterial = new ErpBdMaterial(); erpBaseMaterial.setErpFnumber(erpMaterial.getFnumber()); erpBaseMaterial.setOrgId(forgid.getOrgId()); erpBaseMaterial.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification()); erpBaseMaterial.setFspecification(erpMaterial.getFspecification()); erpBaseMaterial.setParent(0); erpBdMaterialMapper.insert(erpBaseMaterial); b = true; } } //有下级 if (b) { for (ErpMaterial erpMaterial : forObjects2) { if (!erpMaterial.getFnumber().contains("0000")) { ErpBdOrg forgid = erpBdOrgMapper.selectOne(new QueryWrapper().eq("forgid", erpMaterial.getFacctorgid())); if (ObjectUtil.isEmpty(forgid)) continue; if (erpBdMaterialMapper.exists(new QueryWrapper().eq("erp_fnumber", erpMaterial.getFnumber()).eq("org_id", forgid.getOrgId()))) { continue; } ErpBdMaterial erpBaseMaterial = new ErpBdMaterial(); erpBaseMaterial.setErpFnumber(erpMaterial.getFnumber()); erpBaseMaterial.setOrgId(forgid.getOrgId()); erpBaseMaterial.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification()); erpBaseMaterial.setFspecification(erpMaterial.getFspecification()); ErpBdMaterial erpBdMaterial = erpBdMaterialMapper.selectOne(new QueryWrapper(). eq("erp_fnumber", forObject.getFnumber() + "0000").eq("org_id", forgid.getOrgId())); if (ObjectUtil.isEmpty(erpBdMaterial)) { continue; } erpBaseMaterial.setParent(erpBdMaterial.getId()); erpBdMaterialMapper.insert(erpBaseMaterial); } } } else { for (ErpMaterial erpMaterial : forObjects2) { ErpBdOrg forgid = erpBdOrgMapper.selectOne(new QueryWrapper().eq("forgid", erpMaterial.getFacctorgid())); if (ObjectUtil.isEmpty(forgid)) continue; if (erpBdMaterialMapper.exists(new QueryWrapper().eq("erp_fnumber", erpMaterial.getFnumber()).eq("org_id", forgid.getOrgId()))) { continue; } ErpBdMaterial erpBaseMaterial = new ErpBdMaterial(); erpBaseMaterial.setErpFnumber(erpMaterial.getFnumber()); erpBaseMaterial.setOrgId(forgid.getOrgId()); erpBaseMaterial.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification()); erpBaseMaterial.setFspecification(erpMaterial.getFspecification()); erpBaseMaterial.setParent(0); erpBdMaterialMapper.insert(erpBaseMaterial); ErpBdMaterial erpBaseMaterial1 = new ErpBdMaterial(); erpBaseMaterial1.setErpFnumber(erpMaterial.getFnumber()); erpBaseMaterial1.setOrgId(forgid.getOrgId()); erpBaseMaterial1.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification()); erpBaseMaterial1.setFspecification(erpMaterial.getFspecification()); erpBaseMaterial1.setParent(erpBaseMaterial.getId()); erpBdMaterialMapper.insert(erpBaseMaterial1); } } } } @Override public List getTreeParentId(ErpBdMaterialParentParam erpBdMaterial) { List materials = this.list(new QueryWrapper().eq(StringUtils.isNotBlank(erpBdMaterial.getOrgId()), "org_id", erpBdMaterial.getOrgId())); return buildTree(materials,0); } public static List buildTree(List nodes, int rootParentId) { Map nodeMap = new HashMap<>(); List rootNodes = new ArrayList<>(); List bdMaterialVos = new ArrayList<>(); // 将所有节点放入 Map 中,方便通过 ID 查找 for (ErpBdMaterial node : nodes) { ErpBdMaterialVo erpBdMaterialVo = new ErpBdMaterialVo(); BeanUtil.copyProperties(node, erpBdMaterialVo); bdMaterialVos.add(erpBdMaterialVo); nodeMap.put(node.getId(), erpBdMaterialVo); } // 构建树 for (ErpBdMaterialVo node : bdMaterialVos) { if (node.getParent() == 0) { // 顶级节点,直接加入根节点列表 rootNodes.add(node); } else { // 查找父节点,并将当前节点加入父节点的子节点列表 ErpBdMaterialVo parentNode = nodeMap.get(node.getParent()); if (parentNode != null) { parentNode.addChild(node); } } } return rootNodes; } public List getByParentId2(Integer erpBdMaterial,String orgId) { if (ObjectUtil.isEmpty(erpBdMaterial)){ erpBdMaterial = 0; } return this.list(new QueryWrapper().eq("parent", erpBdMaterial).eq(StringUtils.isNotBlank(orgId), "org_id", orgId)); } }