ErpBdMaterialServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. /*
  2. * Copyright [2022] [https://www.baiduc.com]
  3. *
  4. * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
  5. *
  6. * 1.请不要删除和修改根目录下的LICENSE文件。
  7. * 2.请不要删除和修改Snowy源码头部的版权声明。
  8. * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
  9. * 4.分发源码时候,请注明软件出处 https://www.baiduc.com
  10. * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  11. * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.baiduc.com
  12. */
  13. package vip.xiaonuo.erp.service.impl;
  14. import cn.hutool.core.bean.BeanUtil;
  15. import cn.hutool.core.collection.CollStreamUtil;
  16. import cn.hutool.core.util.ObjectUtil;
  17. import cn.hutool.core.util.StrUtil;
  18. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  19. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  20. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  21. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  22. import io.swagger.models.auth.In;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.core.ParameterizedTypeReference;
  25. import org.springframework.http.HttpMethod;
  26. import org.springframework.http.ResponseEntity;
  27. import org.springframework.stereotype.Service;
  28. import org.springframework.transaction.annotation.Transactional;
  29. import org.springframework.web.client.RestTemplate;
  30. import vip.xiaonuo.common.enums.CommonSortOrderEnum;
  31. import vip.xiaonuo.common.exception.CommonException;
  32. import vip.xiaonuo.common.page.CommonPageRequest;
  33. import vip.xiaonuo.erp.entity.ErpBdMaterial;
  34. import vip.xiaonuo.erp.entity.ErpBdOrg;
  35. import vip.xiaonuo.erp.entity.voucher.ErpMaterial;
  36. import vip.xiaonuo.erp.mapper.ErpBdMaterialMapper;
  37. import vip.xiaonuo.erp.mapper.ErpBdOrgMapper;
  38. import vip.xiaonuo.erp.param.*;
  39. import vip.xiaonuo.erp.service.ErpBdMaterialService;
  40. import vip.xiaonuo.sale.entity.ErpBaseMaterial;
  41. import java.util.ArrayList;
  42. import java.util.HashMap;
  43. import java.util.List;
  44. import java.util.Map;
  45. /**
  46. * erp_bd_materialService接口实现类
  47. *
  48. * @author 1
  49. * @date 2025/03/01 14:50
  50. **/
  51. @Service
  52. public class ErpBdMaterialServiceImpl extends ServiceImpl<ErpBdMaterialMapper, ErpBdMaterial> implements ErpBdMaterialService {
  53. @Override
  54. public Page<ErpBdMaterial> page(ErpBdMaterialPageParam erpBdMaterialPageParam) {
  55. QueryWrapper<ErpBdMaterial> queryWrapper = new QueryWrapper<>();
  56. if(ObjectUtil.isAllNotEmpty(erpBdMaterialPageParam.getSortField(), erpBdMaterialPageParam.getSortOrder())) {
  57. CommonSortOrderEnum.validate(erpBdMaterialPageParam.getSortOrder());
  58. queryWrapper.orderBy(true, erpBdMaterialPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
  59. StrUtil.toUnderlineCase(erpBdMaterialPageParam.getSortField()));
  60. } else {
  61. queryWrapper.lambda().orderByAsc(ErpBdMaterial::getId);
  62. }
  63. queryWrapper.eq(StringUtils.isNotBlank(erpBdMaterialPageParam.getOrgId()),"org_id",erpBdMaterialPageParam.getOrgId());
  64. queryWrapper.eq("parent",0);
  65. return this.page(CommonPageRequest.defaultPage(), queryWrapper);
  66. }
  67. @Transactional(rollbackFor = Exception.class)
  68. @Override
  69. public void add(ErpBdMaterialAddParam erpBdMaterialAddParam) {
  70. ErpBdMaterial erpBdMaterial = BeanUtil.toBean(erpBdMaterialAddParam, ErpBdMaterial.class);
  71. this.save(erpBdMaterial);
  72. }
  73. @Transactional(rollbackFor = Exception.class)
  74. @Override
  75. public void edit(ErpBdMaterialEditParam erpBdMaterialEditParam) {
  76. ErpBdMaterial erpBdMaterial = this.queryEntity(erpBdMaterialEditParam.getId());
  77. BeanUtil.copyProperties(erpBdMaterialEditParam, erpBdMaterial);
  78. this.updateById(erpBdMaterial);
  79. }
  80. @Transactional(rollbackFor = Exception.class)
  81. @Override
  82. public void delete(List<ErpBdMaterialIdParam> erpBdMaterialIdParamList) {
  83. // 执行删除
  84. this.removeByIds(CollStreamUtil.toList(erpBdMaterialIdParamList, ErpBdMaterialIdParam::getId));
  85. }
  86. @Override
  87. public ErpBdMaterial detail(ErpBdMaterialIdParam erpBdMaterialIdParam) {
  88. return this.queryEntity(erpBdMaterialIdParam.getId());
  89. }
  90. @Override
  91. public ErpBdMaterial queryEntity(Integer id) {
  92. ErpBdMaterial erpBdMaterial = this.getById(id);
  93. if(ObjectUtil.isEmpty(erpBdMaterial)) {
  94. throw new CommonException("erp_bd_material不存在,id值为:{}", id);
  95. }
  96. return erpBdMaterial;
  97. }
  98. @Override
  99. public List<ErpBdMaterial> getByParentId(ErpBdMaterialParentParam erpBdMaterial) {
  100. String orgId = erpBdMaterial.getOrgId();
  101. Integer parent = erpBdMaterial.getId();
  102. if (ObjectUtil.isEmpty(parent)){
  103. parent = 0;
  104. }
  105. return this.list(new QueryWrapper<ErpBdMaterial>().eq("parent", parent).eq(StringUtils.isNotBlank(orgId), "org_id", orgId));
  106. }
  107. @Autowired
  108. private RestTemplate restTemplate;
  109. @Autowired
  110. private ErpBdOrgMapper erpBdOrgMapper;
  111. @Autowired
  112. private ErpBdMaterialMapper erpBdMaterialMapper;
  113. @Override
  114. public void sync() {
  115. ResponseEntity<List<ErpMaterial>> response = restTemplate.exchange(
  116. "http://127.0.0.1:9200/erp-bd-org/getMaterial",
  117. HttpMethod.GET,
  118. null,
  119. new ParameterizedTypeReference<List<ErpMaterial>>() {
  120. }
  121. );
  122. List<ErpMaterial> forObjects = response.getBody();
  123. System.out.println(forObjects);
  124. for (ErpMaterial forObject : forObjects) {
  125. ResponseEntity<List<ErpMaterial>> response2 = restTemplate.exchange(
  126. "http://127.0.0.1:9200/erp-bd-org/getMaterialDetail?fnumber=" + forObject.getFnumber(),
  127. HttpMethod.GET,
  128. null,
  129. new ParameterizedTypeReference<List<ErpMaterial>>() {
  130. }
  131. );
  132. //二
  133. List<ErpMaterial> forObjects2 = response2.getBody();
  134. System.out.println(forObjects2);
  135. boolean b = false;
  136. //判断有没有下级
  137. for (ErpMaterial erpMaterial : forObjects2) {
  138. if (erpMaterial.getFnumber().contains("0000")) {
  139. ErpBdOrg forgid = erpBdOrgMapper.selectOne(new QueryWrapper<ErpBdOrg>().eq("forgid", erpMaterial.getFacctorgid()));
  140. if (ObjectUtil.isEmpty(forgid))
  141. continue;
  142. if (erpBdMaterialMapper.exists(new QueryWrapper<ErpBdMaterial>().eq("erp_fnumber", erpMaterial.getFnumber()).eq("org_id", forgid.getOrgId()))) {
  143. continue;
  144. }
  145. ErpBdMaterial erpBaseMaterial = new ErpBdMaterial();
  146. erpBaseMaterial.setErpFnumber(erpMaterial.getFnumber());
  147. erpBaseMaterial.setOrgId(forgid.getOrgId());
  148. erpBaseMaterial.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification());
  149. erpBaseMaterial.setFspecification(erpMaterial.getFspecification());
  150. erpBaseMaterial.setParent(0);
  151. erpBdMaterialMapper.insert(erpBaseMaterial);
  152. b = true;
  153. }
  154. }
  155. //有下级
  156. if (b) {
  157. for (ErpMaterial erpMaterial : forObjects2) {
  158. if (!erpMaterial.getFnumber().contains("0000")) {
  159. ErpBdOrg forgid = erpBdOrgMapper.selectOne(new QueryWrapper<ErpBdOrg>().eq("forgid", erpMaterial.getFacctorgid()));
  160. if (ObjectUtil.isEmpty(forgid))
  161. continue;
  162. if (erpBdMaterialMapper.exists(new QueryWrapper<ErpBdMaterial>().eq("erp_fnumber", erpMaterial.getFnumber()).eq("org_id", forgid.getOrgId()))) {
  163. continue;
  164. }
  165. ErpBdMaterial erpBaseMaterial = new ErpBdMaterial();
  166. erpBaseMaterial.setErpFnumber(erpMaterial.getFnumber());
  167. erpBaseMaterial.setOrgId(forgid.getOrgId());
  168. erpBaseMaterial.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification());
  169. erpBaseMaterial.setFspecification(erpMaterial.getFspecification());
  170. ErpBdMaterial erpBdMaterial = erpBdMaterialMapper.selectOne(new QueryWrapper<ErpBdMaterial>().
  171. eq("erp_fnumber", forObject.getFnumber() + "0000").eq("org_id", forgid.getOrgId()));
  172. if (ObjectUtil.isEmpty(erpBdMaterial)) {
  173. continue;
  174. }
  175. erpBaseMaterial.setParent(erpBdMaterial.getId());
  176. erpBdMaterialMapper.insert(erpBaseMaterial);
  177. }
  178. }
  179. } else {
  180. for (ErpMaterial erpMaterial : forObjects2) {
  181. ErpBdOrg forgid = erpBdOrgMapper.selectOne(new QueryWrapper<ErpBdOrg>().eq("forgid", erpMaterial.getFacctorgid()));
  182. if (ObjectUtil.isEmpty(forgid))
  183. continue;
  184. if (erpBdMaterialMapper.exists(new QueryWrapper<ErpBdMaterial>().eq("erp_fnumber", erpMaterial.getFnumber()).eq("org_id", forgid.getOrgId()))) {
  185. continue;
  186. }
  187. ErpBdMaterial erpBaseMaterial = new ErpBdMaterial();
  188. erpBaseMaterial.setErpFnumber(erpMaterial.getFnumber());
  189. erpBaseMaterial.setOrgId(forgid.getOrgId());
  190. erpBaseMaterial.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification());
  191. erpBaseMaterial.setFspecification(erpMaterial.getFspecification());
  192. erpBaseMaterial.setParent(0);
  193. erpBdMaterialMapper.insert(erpBaseMaterial);
  194. ErpBdMaterial erpBaseMaterial1 = new ErpBdMaterial();
  195. erpBaseMaterial1.setErpFnumber(erpMaterial.getFnumber());
  196. erpBaseMaterial1.setOrgId(forgid.getOrgId());
  197. erpBaseMaterial1.setFname(erpMaterial.getFname() + " " + erpMaterial.getFspecification());
  198. erpBaseMaterial1.setFspecification(erpMaterial.getFspecification());
  199. erpBaseMaterial1.setParent(erpBaseMaterial.getId());
  200. erpBdMaterialMapper.insert(erpBaseMaterial1);
  201. }
  202. }
  203. }
  204. }
  205. @Override
  206. public List<ErpBdMaterialVo> getTreeParentId(ErpBdMaterialParentParam erpBdMaterial) {
  207. List<ErpBdMaterial> materials = this.list(new QueryWrapper<ErpBdMaterial>().eq(StringUtils.isNotBlank(erpBdMaterial.getOrgId()), "org_id", erpBdMaterial.getOrgId()));
  208. return buildTree(materials,0);
  209. }
  210. public static List<ErpBdMaterialVo> buildTree(List<ErpBdMaterial> nodes, int rootParentId) {
  211. Map<Integer, ErpBdMaterialVo> nodeMap = new HashMap<>();
  212. List<ErpBdMaterialVo> rootNodes = new ArrayList<>();
  213. List<ErpBdMaterialVo> bdMaterialVos = new ArrayList<>();
  214. // 将所有节点放入 Map 中,方便通过 ID 查找
  215. for (ErpBdMaterial node : nodes) {
  216. ErpBdMaterialVo erpBdMaterialVo = new ErpBdMaterialVo();
  217. BeanUtil.copyProperties(node, erpBdMaterialVo);
  218. bdMaterialVos.add(erpBdMaterialVo);
  219. nodeMap.put(node.getId(), erpBdMaterialVo);
  220. }
  221. // 构建树
  222. for (ErpBdMaterialVo node : bdMaterialVos) {
  223. if (node.getParent() == 0) {
  224. // 顶级节点,直接加入根节点列表
  225. rootNodes.add(node);
  226. } else {
  227. // 查找父节点,并将当前节点加入父节点的子节点列表
  228. ErpBdMaterialVo parentNode = nodeMap.get(node.getParent());
  229. if (parentNode != null) {
  230. parentNode.addChild(node);
  231. }
  232. }
  233. }
  234. return rootNodes;
  235. }
  236. public List<ErpBdMaterial> getByParentId2(Integer erpBdMaterial,String orgId) {
  237. if (ObjectUtil.isEmpty(erpBdMaterial)){
  238. erpBdMaterial = 0;
  239. }
  240. return this.list(new QueryWrapper<ErpBdMaterial>().eq("parent", erpBdMaterial).eq(StringUtils.isNotBlank(orgId), "org_id", orgId));
  241. }
  242. }