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