From c4426b1fbb9d8f2cbb6dfc9aef52a4d864578839 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Wed, 11 Dec 2024 22:43:47 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E5=A2=9E=E5=8A=A0erp=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/common/utils/ErpServiceUtils.java | 151 ++++++++++++++++++ .../external_system/erp/SyncErpService.java | 8 +- .../SyncFormMappingController.java | 7 + .../task/SyncErpBillsScheduleService.java | 23 ++- 4 files changed, 182 insertions(+), 7 deletions(-) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/ErpServiceUtils.java diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/ErpServiceUtils.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/ErpServiceUtils.java new file mode 100644 index 00000000..1807425f --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/ErpServiceUtils.java @@ -0,0 +1,151 @@ +package org.nl.common.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.github.javaparser.utils.Log; +import com.kingdee.bos.webapi.entity.*; +import com.kingdee.bos.webapi.sdk.K3CloudApi; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.wms.external_system.erp.dto.ErpQuery; +import org.nl.wms.external_system.erp.dto.ErpSec; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; + +/** + * @author gongbaoxiong + * Erp单据公共类 + */ +@Slf4j +@Service +public class ErpServiceUtils { + @Resource + ErpSec erpSec; + private final ReentrantLock lock = new ReentrantLock(); + + + /** + * 构建api + */ + private K3CloudApi getCloudApi() { + IdentifyInfo identifyInfo = new IdentifyInfo(); + BeanUtils.copyProperties(erpSec, identifyInfo); + return new K3CloudApi(identifyInfo); + } + + /** + * @param query 查询条件 + */ + public JSONArray queryBills(ErpQuery query) { + if (StringUtils.isBlank(query.getFormId())) { + throw new BadRequestException("参数异常"); + } + boolean islock = lock.tryLock(); + List result = new ArrayList<>(); + try { + if (islock) { + String jsonString = JSON.toJSONString(query); + K3CloudApi cloudApi = getCloudApi(); + List> lists = cloudApi.executeBillQuery(jsonString); + for (List list : lists) { + for (Object r : list) { + String fid = r.toString(); + if (StringUtils.isEmpty(fid)) { + log.error("单据同步失败,没有找到FID"); + continue; + } + try { + OperateParam param = new OperateParam(); + param.setId(fid); + OperatorResult view = cloudApi.view(query.getFormId(), param); + RepoStatus status = view.getResult().getResponseStatus(); + if (status.isIsSuccess()) { + new ArrayList<>(); + result.add(view.getResult().getResult()); + } else { + ArrayList errors = status.getErrors(); + log.error("查询ID [{}] 时出现异常: {}", fid, errors.stream().map(RepoError::getMessage).collect(Collectors.joining(","))); + } + } catch (Exception e) { + log.error("查询ID [{}] 时出现异常: {}", fid, e.getMessage()); + } + } + } + } else { + throw new BadRequestException("当前同步操作正在执行,稍后再试"); + } + } catch (Exception ex) { + throw new BadRequestException(ex.getMessage()); + } finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + return JSON.parseArray(JSON.toJSONString(result)); + } + + + /** + * 单据保存 + */ + public JSONObject save(JSONObject from) { + String result; + try { + //要回传的json数据 + String json = from.toJSONString(); + result = getCloudApi().save(from.getString("formid"), json); + from.put("result", result); + } catch (Exception ex) { + Log.error(ex.getMessage()); + from.put("result", ex.getMessage()); + } + return from; + } + + /** + * 单据审核 + */ + public JSONObject audit(JSONObject from) { + String result; + //执行回传 + try { + String json = from.toJSONString(); + result = getCloudApi().audit(from.getString("formid"), json); + from.put("result", result); + } catch (Exception ex) { + Log.error(ex.getMessage()); + from.put("result", ex.getMessage()); + } + return from; + } + + + + /** + * 单据下推 + */ + public JSONObject push(JSONObject from) { + String result; + //执行回传 + try { + //要回传的json数据 + String json = from.toJSONString(); + result = getCloudApi().push(from.getString("TargetFormId"), json); + from.put("result", result); + } catch (Exception ex) { + Log.error(ex.getMessage()); + from.put("result", ex.getMessage()); + } + return from; + } + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java index 89e7096d..7af96c54 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/erp/SyncErpService.java @@ -128,10 +128,16 @@ public class SyncErpService { * 合格证保存 */ public JSONObject process(JSONObject from) { - //执行回传 return erpServiceUtils.save(from); } + /** + * 单据审核 + */ + public JSONObject audit(JSONObject from) { + return erpServiceUtils.audit(from); + } + /** * 数据同步 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java index 692e2952..3284c1f6 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/sync_manage/controller/form_mapping/SyncFormMappingController.java @@ -133,6 +133,13 @@ public class SyncFormMappingController { return new ResponseEntity<>(result,HttpStatus.OK); } + @PostMapping("/audit") + @Log("单据审核") + public ResponseEntity audit(@RequestBody JSONObject form){ + JSONObject result = syncErpService.audit(form); + return new ResponseEntity<>(result,HttpStatus.OK); + } + @PostMapping("/push") @Log("下推测试") public ResponseEntity push(@RequestBody JSONObject form){ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java index ec801035..88e2202c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncErpBillsScheduleService.java @@ -64,7 +64,8 @@ public class SyncErpBillsScheduleService { "SAL_SaleOrder", "FStockOrgId", "PUR_ReceiveBill", "FStockOrgId", "PUR_MRAPP", "FPURCHASEORGID", - "ka7c19edf9d4b4b39b8cc4a06802163b0", "F_PMSY_PrdOrgId"); + "ka7c19edf9d4b4b39b8cc4a06802163b0", "F_PMSY_PrdOrgId", + "STK_TransferDirect", "FStockOrgId"); public void run() { try { @@ -116,13 +117,15 @@ public class SyncErpBillsScheduleService { if (StringUtils.isNotBlank(code)) { filterString = "FBillNo = '" + code + "'"; } else { - filterString = BillOrg_Mapping.get(formType) + " = '750572' AND FDocumentStatus = 'C' "; + filterString = BillOrg_Mapping.get(formType) + " = '750572' "; if ("ka7c19edf9d4b4b39b8cc4a06802163b0".equals(formType)) { - filterString += " AND F_PMSY_BillStatus = 'A' AND F_PMSY_CreateDate >= '" + timeStart + " 00:00:00' AND F_PMSY_CreateDate <= '" + timeEnd + " 23:59:59' "; + filterString += "AND FDocumentStatus = 'C' AND F_PMSY_BillStatus = 'A' AND F_PMSY_CreateDate >= '" + timeStart + " 00:00:00' AND F_PMSY_CreateDate <= '" + timeEnd + " 23:59:59' "; } else if ("SAL_SaleOrder".equals(formType)) { - filterString += " AND FCloseStatus ='A' AND FCreateDate >= '" + timeStart + " 00:00:00' and FCreateDate <= '" + timeEnd + " 23:59:59' "; + filterString += " AND FDocumentStatus = 'C' AND FCloseStatus ='A' AND FCreateDate >= '" + timeStart + " 00:00:00' and FCreateDate <= '" + timeEnd + " 23:59:59' "; + } else if ("STK_TransferDirect".equals(formType)||"STK_MisDelivery".equals(formType)||"PUR_MRB".equals(formType)||"SAL_RETURNSTOCK".equals(formType)) { + filterString += " AND FDocumentStatus ='B' AND FCreateDate >= '" + timeStart + " 00:00:00' and FCreateDate <= '" + timeEnd + " 23:59:59' "; } else { - filterString += " AND FCreateDate >= '" + timeStart + " 00:00:00' and FCreateDate <= '" + timeEnd + " 23:59:59' "; + filterString += " AND FDocumentStatus = 'C' AND FCreateDate >= '" + timeStart + " 00:00:00' and FCreateDate <= '" + timeEnd + " 23:59:59' "; } } ErpQuery query = new ErpQuery(); @@ -134,7 +137,7 @@ public class SyncErpBillsScheduleService { IdentifyInfo identifyInfo = new IdentifyInfo(); BeanUtils.copyProperties(erpSec, identifyInfo); K3CloudApi cloudApi = new K3CloudApi(identifyInfo); - List> lists = cloudApi.executeBillQuery(jsonString); + List> lists = cloudApi.executeBillQuery(jsonString); Set ids = new HashSet<>(); for (List list : lists) { for (Object r : list) { @@ -191,6 +194,14 @@ public class SyncErpBillsScheduleService { } //单据明细 if (StringUtils.isBlank(f.getCode())) { + //除了合格证相关单据,其他都过滤非立库仓库组织 + if (!"PRD_MO".equals(f.getForm_type()) && !"PUR_ReceiveBill".equals(f.getForm_type())) { + if (StringUtils.isNotBlank(f.getForm_data().getString("SrcStockId_Id"))) { + if (!"1233925".equals(f.getForm_data().getString("SrcStockId_Id")) && !"1233926".equals(f.getForm_data().getString("SrcStockId_Id"))) { + continue 外部; + } + } + } f.setParent_id(mainId + "$" + formType); } f.setId(f.getId() + "$" + f.getForm_type());