From 3f332022ca04a0fa2806f424a1126cb9392a6153 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 07 三月 2025 14:04:09 +0800
Subject: [PATCH] #新增 1. 质检上报功能 2. 新增流程配置功能

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java |  143 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 140 insertions(+), 3 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
index 212ea4e..47b143f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
@@ -1,8 +1,23 @@
 package com.vincent.rsf.server.api.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.vincent.rsf.common.domain.CommonReponse;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.config.RemotesInfoProperties;
+import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
 import com.vincent.rsf.server.api.entity.enums.OrderType;
+import com.vincent.rsf.server.api.entity.params.ErpInspectItem;
+import com.vincent.rsf.server.api.entity.params.ErpInspectParams;
+import com.vincent.rsf.server.common.config.SysStockFlowProperties;
+import com.vincent.rsf.server.manager.entity.AsnOrder;
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
 import com.vincent.rsf.server.manager.entity.PurchaseItem;
+import com.vincent.rsf.server.manager.service.AsnOrderItemService;
+import com.vincent.rsf.server.manager.service.AsnOrderService;
 import com.vincent.rsf.server.manager.service.PurchaseItemService;
 import com.vincent.rsf.server.manager.service.PurchaseService;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
@@ -10,13 +25,21 @@
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import com.vincent.rsf.server.api.service.ErpApiService;
 import com.vincent.rsf.server.manager.entity.Purchase;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author Ryan
@@ -25,14 +48,26 @@
  * @description
  * @create 2025/3/4 16:27
  */
+@Slf4j
 @Service("erpApiService")
 public class ErpApiServiceImpl implements ErpApiService {
 
     @Autowired
     private PurchaseService purchaseService;
-
     @Autowired
     private PurchaseItemService purchaseItemService;
+
+    @Autowired
+    private AsnOrderService asnOrderService;
+
+    @Autowired
+    private AsnOrderItemService asnOrderItemService;
+    @Autowired
+    private RestTemplate restTemplate;
+    @Autowired
+    private RemotesInfoProperties remotesInfoProperties;
+    @Autowired
+    private RemotesInfoProperties.ApiInfo apiInfo;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -67,4 +102,106 @@
         return true;
     }
 
+    /**
+     * @author Ryan
+     * @description 涓婃姤璐ㄦ鍒楄〃
+     * @params [items 鍒楄〃]
+     * @return boolean
+     * @time 2025/3/7 09:12
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean reportInspectNotify(List<PoItemsDto> items) {
+        if (items.isEmpty()) {
+            throw new CoolException("涓婃姤鍐呭涓虹┖锛侊紒");
+        }
+        List<ErpInspectParams> inspectParams =  new ArrayList<>();
+        Map<String, List<PoItemsDto>> listMap = items.stream().collect(Collectors.groupingBy(PoItemsDto::getPurchaseId));
+        listMap.keySet().forEach(key -> {
+            Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getId, Long.valueOf(key)));
+            if (Objects.isNull(purchase)) {
+                throw new CoolException("閲囪喘鍗曚俊鎭湁璇紒锛�");
+            }
+            ErpInspectParams params = new ErpInspectParams();
+            List<ErpInspectItem> inspectItems = new ArrayList<>();
+            //璧嬪�糴rp涓诲崟缂栫爜,缂栧彿
+            params.setPoId(purchase.getErpId())
+                    .setPoCode(purchase.getErpCode());
+            List<PoItemsDto> dtos = listMap.get(key);
+            if (dtos.isEmpty()) {
+                throw new CoolException("鍗曟嵁淇℃伅閿欒锛侊紒");
+            }
+            dtos.forEach(dto -> {
+                ErpInspectItem inspect= new ErpInspectItem();
+                BeanUtils.copyProperties(dto, inspect);
+                //璧嬪�糴rp鏄庣粏缂栫爜
+                inspect.setPoItemId(dto.getErpItemId());
+                inspectItems.add(inspect);
+            });
+            params.setChildren(inspectItems);
+            inspectParams.add(params);
+
+        });
+
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        //鑾峰彇涓婃姤璐ㄦ鎺ュ彛
+        String url = remotesInfoProperties.getBaseUrl() + apiInfo.getNotifyInspect();
+        // 璁剧疆璇锋眰鍙傛暟
+        params.add("params", JSONObject.toJSONString(inspectParams));
+        log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", url, JSONObject.toJSONString(inspectParams));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        HttpEntity httpEntity = new HttpEntity<>(params, headers);
+        // 璇锋眰
+        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+        log.info("涓嬪彂浠诲姟 杩斿洖缁撴灉锛歿}", exchange);
+        if (Objects.isNull(exchange.getBody()) || exchange.getBody() == null) {
+            throw new CoolException("涓嬪彂浠诲姟澶辫触锛侊紒");
+        } else {
+            CommonReponse reponse = (CommonReponse) JSON.parse(exchange.getBody());
+            if (reponse.getCode() == 0) {
+                //淇敼asn涓婃姤鐘舵��
+                Set<String> itemSets = items.stream().map(PoItemsDto::getId).collect(Collectors.toSet());
+                Set<Long> longSet = new HashSet<>();
+                itemSets.forEach(set -> {
+                    longSet.add(Long.parseLong(set));
+                });
+
+                List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getPoDetlId, longSet));
+                if (asnOrderItems.isEmpty()) {
+                    throw new CoolException("ASN鍗曟嵁涓嶅瓨鍦紒锛�");
+                }
+                List<Long> list = asnOrderItems.stream().map(AsnOrderItem::getId).collect(Collectors.toList());
+
+                /**************************     淇敼ASN鏄庣粏鍗曠姸鎬�         ******************************/
+
+
+                if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>().in(AsnOrderItem::getId, list).set(AsnOrderItem::getStatus, 1))) {
+                    throw new CoolException("ASN鏄庣粏鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
+
+                /**************************     淇敼ASN涓诲崟鏁版嵁         ******************************/
+                //鑾峰彇ASN鏄庣粏璁㈠崟鏍囪瘑
+                List<Long> ids = asnOrderItems.stream().map(AsnOrderItem::getAsnId).collect(Collectors.toList());
+                //ASN鏄庣粏鍗曟嵁鍒嗙粍
+                Map<Long, List<AsnOrderItem>> asnIds = asnOrderItems.stream().collect(Collectors.groupingBy(AsnOrderItem::getAsnId));
+                ids.forEach(id -> {
+                    int count = asnOrderService.count(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, id));
+                    if (count == asnIds.get(id).size()) {
+                        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>().eq(AsnOrder::getId, id).set(AsnOrder::getStatus, 1))) {
+                            throw new CoolException("ASN涓诲崟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                    } else {
+                        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>().eq(AsnOrder::getId, id).set(AsnOrder::getStatus, 2))) {
+                            throw new CoolException("ASN涓诲崟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                    }
+                });
+                return true;
+            } else {
+                throw new CoolException(reponse.getMsg());
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.1