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 7539bf73..5ffad53e 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 @@ -12,11 +12,11 @@ import com.kingdee.bos.webapi.sdk.K3CloudApi; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.nl.wms.base_manage.bsrealstorattr.service.dao.StIvtBsrealstorattr; import org.nl.wms.base_manage.bsrealstorattr.service.impl.StIvtBsrealstorattrServiceImpl; import org.nl.wms.base_manage.customer.service.impl.BmCustomerServiceImpl; import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; import org.nl.wms.base_manage.material.service.impl.MdMeMaterialbaseServiceImpl; -import org.nl.wms.base_manage.measure.service.dao.BmMeasureUnit; import org.nl.wms.base_manage.measure.service.impl.BmMeasureUnitServiceImpl; import org.nl.wms.base_manage.supplier.service.IBmSupplierService; import org.nl.wms.external_system.erp.dto.ErpQuery; @@ -64,10 +64,10 @@ public class SyncErpService { @Autowired private BmMeasureUnitServiceImpl bmMeasureUnitServiceImpl; - public List syncUnitData(SyncFormMapping syncFormMapping) { - List list = bmMeasureUnitServiceImpl.list(); + public List syncData(SyncFormMapping syncFormMapping) { + List list = stIvtBsrealstorattrServiceImpl.list(); list.forEach(r -> { - syncUnit(r.getUnit_code()); + syncUnit(r.getStor_code()); }); return null; } @@ -75,16 +75,16 @@ public class SyncErpService { public List syncUnit(String fNumber) { List result = new ArrayList<>(); try { - String filterString = "FNumber = '" + fNumber + "'"; - // String filterString = "FCreateOrgId ='750572' AND FNumber = '" + fNumber + "'"; + // String filterString = "FNumber = '" + fNumber + "'"; + String filterString = "FCreateOrgId ='750572' AND FNumber = '" + fNumber + "'"; IdentifyInfo identifyInfo = new IdentifyInfo(); BeanUtils.copyProperties(erpSec, identifyInfo); K3CloudApi cloudApi = new K3CloudApi(identifyInfo); String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); ErpQuery query = new ErpQuery(); query.setFilterString(filterString); - query.setFormId("BD_UNIT"); - query.setFieldKeys("FUNITID,FNumber"); + query.setFormId("BD_STOCK"); + query.setFieldKeys("FStockId,FNumber"); //query.setLimit(10); String jsonString = JSON.toJSONString(query); List> lists = cloudApi.executeBillQuery(jsonString); @@ -99,15 +99,15 @@ public class SyncErpService { ids.add(fid); } if (ids.size() > 1) { - List sds = bmMeasureUnitServiceImpl.list(new LambdaQueryWrapper().eq(BmMeasureUnit::getUnit_code, ids.get(1))); + List sds = stIvtBsrealstorattrServiceImpl.list(new LambdaQueryWrapper().eq(StIvtBsrealstorattr::getStor_code, ids.get(1))); if (ObjectUtils.isNotEmpty(sds)) { if (StringUtils.isNotBlank(ids.get(0)) && StringUtils.isNotBlank(ids.get(1))) { String id = ids.get(0); String code = ids.get(1); - LambdaUpdateWrapper data = new LambdaUpdateWrapper<>(); - data.eq(BmMeasureUnit::getUnit_code, code); - data.set(BmMeasureUnit::getUnit_id, id); - bmMeasureUnitServiceImpl.update(data); + LambdaUpdateWrapper data = new LambdaUpdateWrapper<>(); + data.eq(StIvtBsrealstorattr::getStor_code, code); + data.set(StIvtBsrealstorattr::getId, id); + stIvtBsrealstorattrServiceImpl.update(data); } } } @@ -178,30 +178,38 @@ public class SyncErpService { } - /** * 回传测试 */ - public JSONObject process2(JSONObject from) { - JSONObject result = new JSONObject(); - try { - //todo 需要封装 - IdentifyInfo identifyInfo = new IdentifyInfo(); - BeanUtils.copyProperties(erpSec, identifyInfo); - K3CloudApi cloudApi = new K3CloudApi(identifyInfo); - String results = cloudApi.push("PRD_INSTOCK", from.toJSONString()); - result.put("results", results); - } catch (Exception ex) { - Log.error(ex.getMessage()); - result.put("error", ex.getMessage()); - } - return result; - } - /** * 回传测试 */ public JSONObject process(JSONObject from) { + String result = ""; + //执行回传 + String formType = from.getString("formid"); + try { + //要回传的json数据 + JSONObject formData = from.getJSONObject("data"); + //todo 需要封装 + IdentifyInfo identifyInfo = new IdentifyInfo(); + BeanUtils.copyProperties(erpSec, identifyInfo); + K3CloudApi cloudApi = new K3CloudApi(identifyInfo); + String json =formData.toJSONString(); + result = cloudApi.save(formType, formData.toJSONString()); + Integer sd = 0; + } catch (Exception ex) { + Log.error(ex.getMessage()); + String sd = result; + } + return from; + } + + + /** + * 回传测试 + */ + public JSONObject process1(JSONObject from) { JSONObject result = new JSONObject(); //执行回传 String formType = from.getString("formid"); @@ -282,7 +290,7 @@ public class SyncErpService { /** * */ - public List syncData(SyncFormMapping syncFormMapping) { + public List syncData1(SyncFormMapping syncFormMapping) { List result = new ArrayList<>(); try { log.info("开始同步ERP" + syncFormMapping.getForm_name()); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java index ad2a3c9b..0f19b7d9 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/service/classprocessimpl/SyncReceiptProcessHandler.java @@ -4,14 +4,17 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.github.javaparser.utils.Log; import com.kingdee.bos.webapi.entity.IdentifyInfo; import com.kingdee.bos.webapi.sdk.K3CloudApi; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.exception.BadRequestException; import org.nl.wms.external_system.erp.dto.ErpSec; import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess; import org.nl.wms.pm_manage.form_data.service.IPmFormDataService; +import org.nl.wms.pm_manage.form_data.service.dao.PmFormData; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,6 +23,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /* * @author ZZQ @@ -41,13 +45,14 @@ public class SyncReceiptProcessHandler implements ClassProcess { public JSONObject process(JSONObject from, JSONObject param) { //执行回传单 String formType = from.getString("form_type"); + String id = from.getString("id"); + PmFormData pmFormData = iPmFormDataService.getById(id); try { - String code = from.getString("code"); if (!formType.contains("RECEIPT")) { throw new BadRequestException("回传失败:单据类型不是回传类型单据"); } //要回传的json数据 - JSONObject formData = from.getJSONObject("form_data"); + JSONObject formData = pmFormData.getForm_data(); String formid = formData.getString("formid"); if (StringUtils.isEmpty(formid)) { throw new BadRequestException("回传失败:回传数据form_data中数据格式不是formid,data类型"); @@ -56,10 +61,34 @@ public class SyncReceiptProcessHandler implements ClassProcess { IdentifyInfo identifyInfo = new IdentifyInfo(); BeanUtils.copyProperties(erpSec, identifyInfo); K3CloudApi cloudApi = new K3CloudApi(identifyInfo); - String jsonData = formData.toJSONString(); + String json = formData.toJSONString(); String result = cloudApi.save(formid, formData.toJSONString()); - String ex = result; + JSONObject res = JSONObject.parseObject(result); + JSONObject responseStatus = res.getJSONObject("Result").getJSONObject("ResponseStatus"); + boolean isSuccess = responseStatus.getBooleanValue("IsSuccess"); + JSONArray errors = responseStatus.getJSONArray("Errors"); + String errorMessages = ""; + if (ObjectUtils.isNotEmpty(errors)) { + errorMessages = errors.stream() + .map(error -> ((JSONObject) error).getString("Message")) + .collect(Collectors.joining("; ")); + } + if (isSuccess) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PmFormData::getId, pmFormData.getId()); + updateWrapper.set(PmFormData::getRemark, "回执单创建成功"); + iPmFormDataService.update(updateWrapper); + } else { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PmFormData::getId, pmFormData.getId()); + updateWrapper.set(PmFormData::getRemark, errorMessages); + iPmFormDataService.update(updateWrapper); + } } catch (Exception ex) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PmFormData::getId, pmFormData.getId()); + updateWrapper.set(PmFormData::getRemark, ex.getMessage()); + iPmFormDataService.update(updateWrapper); Log.error(ex.getMessage()); } return from; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java index d1ff5872..813dfe22 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java @@ -182,10 +182,12 @@ public class PdaIOService { if (ObjectUtils.isNotEmpty(dFormJson) && ObjectUtils.isNotEmpty(pFormJson)) { result.setBillNo(receiveBillData.getPCode()); result.setBusinessType(StringUtils.isBlank(pFormJson.getString("businessType")) ? "CG" : dFormJson.getString("businessType")); - result.setSupplierId(pFormJson.getString("SupplierId_Id")); + result.setPrdOrgId(pFormJson.getString("DemandOrgId")); + result.setStockOrgId(pFormJson.getString("StockOrgId")); + result.setSupplierId(pFormJson.getString("SupplierId")); result.setMaterial_id(receiveBillData.getMaterial_id()); result.setPcsn(receiveBillData.getPCode()); - result.setPurchaserId(dFormJson.getString("PurchaserId")); + result.setPurchaserId(pFormJson.getString("PurchaserId")); result.setUnit_id(receiveBillData.getUnit_id()); result.setQty(new BigDecimal(dFormJson.getString("ActReceiveQty"))); result.setTaxPrice(dFormJson.getString("taxPrice")); @@ -274,8 +276,7 @@ public class PdaIOService { result.setOwnerTypeId(StringUtils.isBlank(dataList.get(13).toString()) ? "BD_OwnerOrg" : dataList.get(13).toString()); result.setOwnerId_Id(dFormJson.getString("InStockOwnerId")); result.setStockStatusId("10000"); - // result.setStockId(dFormJson.getString("stockId")); - result.setStockId("04.01"); + result.setStockId(dFormJson.getString("stockId")); result.setKeeperId((dFormJson.getString("StockOrgId"))); result.setKeeperTypeId("BD_KeeperOrg"); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java index 11e80cd9..6f920f51 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaInIOService.java @@ -42,7 +42,7 @@ public class PdaInIOService { String materialId = mst.getMaterial_id(); String vehicleCode = mst.getVehicle_code(); String unitId = mst.getUnit_id(); - Assert.noNullElements(new Object[]{mst.getStor_code(),mst.getQty(),mst.getMaterial_code(),mst.getBar_code(), materialId,mst.getQty(),mst.getSingle_weight(),mst.getOwnerId_Id(),mst.getStockId(),mst.getStockOrgId()},"入库失败:请求参数不全"); + Assert.noNullElements(new Object[]{mst.getStor_code(),mst.getQty(),mst.getMaterial_code(),mst.getBar_code(), materialId,mst.getQty(),mst.getSingle_weight(),mst.getStockOrgId()},"入库失败:请求参数不全"); MaterGroupDto groupDto = new MaterGroupDto(); groupDto.setStor_code(mst.getStor_code()); String form_type; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/PmFormData.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/PmFormData.java index c085c3dc..d3dacc56 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/PmFormData.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pm_manage/form_data/service/dao/PmFormData.java @@ -146,14 +146,14 @@ public class PmFormData implements Serializable { /** - * 生产组织 + * 对应表头:生产入库单-生产组织prdOrgId/采购入库单-采购组织FPurchaseOrgId */ @TableField(exist = false) private String prdOrgId; /** - * 入库组织 + * 对应表头:生产入库单-入库组织FStockOrgId/采购入库单-收料组织FStockOrgId */ @TableField(exist = false) private String stockOrgId; 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 8206d04f..0e85262a 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 @@ -58,7 +58,7 @@ public class SyncErpBillsScheduleService { MDC.put("requestIp", "127.0.0.1"); MDC.put("requestTime", DateUtil.now()); LuceneAppender.traceIdTL.set(BaseCode.intToChars(IdUtil.getLongId())); - List list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper().in(SyncFormMapping::getForm_type, "PRD_MO")); + List list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper().in(SyncFormMapping::getForm_type, "PRD_MO","PUR_ReceiveBill","PRD_PPBOM","SP_PickMtrl")); for (SyncFormMapping m : list) { JSONArray mappingJson = m.getMapping_json(); String mappingString = JSON.toJSONString(mappingJson); @@ -73,7 +73,7 @@ public class SyncErpBillsScheduleService { /** * */ - public void syncData(String mappingJson, String formType, Boolean dtlSplit) { + public void syncData1(String mappingJson, String formType, Boolean dtlSplit) { boolean islock = lock.tryLock(); try { if (islock) { @@ -82,8 +82,8 @@ public class SyncErpBillsScheduleService { BeanUtils.copyProperties(erpSec, identifyInfo); K3CloudApi cloudApi = new K3CloudApi(identifyInfo); String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); - //String filterString = "FCreateDate >= '" + "2024-11-01" + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59'"; - String filterString = "FCreateDate >= '2024-11-20 00:00:00' and FCreateDate <= '2024-11-23 23:59:59'"; + String filterString = "FDocumentStatus='C' AND FCreateDate >= '" + today + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59'"; + //String filterString = " FDocumentStatus='C' AND FCreateDate >= '2024-11-30 00:00:00' and FCreateDate <= '2024-11-30 23:59:59'"; ErpQuery query = new ErpQuery(); query.setFilterString(filterString); query.setFormId(formType); @@ -98,7 +98,7 @@ public class SyncErpBillsScheduleService { String fid = r.toString(); if (StringUtils.isEmpty(fid)) { log.error("单据同步失败,没有找到FID"); - throw new RuntimeException("单据同步失败,没有找到FID"); + continue; } ids.add(fid); } @@ -120,12 +120,12 @@ public class SyncErpBillsScheduleService { if (!CollectionUtils.isEmpty(error)) { log.error("ERP单据同步同步失败:{}", error); } - //外部同步过来的需要插入数据库的数据 List pmFormDataAll = new ArrayList<>(); for (Object r : result) { - log.info(JSON.toJSONString(r)); + //log.info(JSON.toJSONString(r)); JSONArray mappingJsonArray = JSONArray.parseArray(mappingJson); List formDataList = formDataService.syncAnalyse(mappingJsonArray, formType, dtlSplit, JSON.toJSONString(r)); + formDataService.saveBatch(formDataList); if (ObjectUtils.isNotEmpty(formDataList)) { pmFormDataAll.addAll(formDataList); } @@ -140,8 +140,86 @@ public class SyncErpBillsScheduleService { } } } catch (Exception ex) { - log.error("定时任务执行异常:" + ex.getMessage()); - ex.printStackTrace(); + log.error("同步数据时出现异常: {}", ex.getMessage()); + } finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + } + + public void syncData(String mappingJson, String formType, Boolean dtlSplit) { + boolean islock = lock.tryLock(); + try { + if (islock) { + List result = new ArrayList<>(); + IdentifyInfo identifyInfo = new IdentifyInfo(); + BeanUtils.copyProperties(erpSec, identifyInfo); + K3CloudApi cloudApi = new K3CloudApi(identifyInfo); + String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + //String filterString = " FDocumentStatus='C' AND FCreateDate >= '2024-11-22 00:00:00' and FCreateDate <= '2024-11-30 23:59:59'"; + String filterString = "FDocumentStatus='C' AND FCreateDate >= '" + today + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59'"; + ErpQuery query = new ErpQuery(); + query.setFilterString(filterString); + query.setFormId(formType); + query.setFieldKeys("FID"); + query.setLimit(0); + String jsonString = JSON.toJSONString(query); + List> lists = cloudApi.executeBillQuery(jsonString); + Set ids = new HashSet<>(); + for (List list : lists) { + for (Object r : list) { + String fid = r.toString(); + if (StringUtils.isEmpty(fid)) { + log.error("单据同步失败,没有找到FID"); + continue; + } + ids.add(fid); + } + } + OperateParam param = new OperateParam(); + Map error = new HashMap<>(); + for (String id : ids) { + try { + param.setId(id); + OperatorResult view = cloudApi.view(formType, param); + RepoStatus status = view.getResult().getResponseStatus(); + if (status.isIsSuccess()) { + result.add(view.getResult().getResult()); + } else { + ArrayList errors = status.getErrors(); + String errorMsg = errors.stream().map(RepoError::getMessage).collect(Collectors.joining(",")); + error.put(id, errorMsg); + } + } catch (Exception e) { + log.error("处理ID [{}] 时出现异常: {}", id, e.getMessage()); + } + } + if (!CollectionUtils.isEmpty(error)) { + log.error("ERP单据同步失败:{}", error); + } + Set exitFormDataList = pmFormDataMapper.existFormDataList(); + for (Object r : result) { + try { + JSONArray mappingJsonArray = JSONArray.parseArray(mappingJson); + List formDataList = formDataService.syncAnalyse(mappingJsonArray, formType, dtlSplit, JSON.toJSONString(r)); + for (PmFormData formData : formDataList) { + try { + //log.error(JSON.toJSONString(r)); + if (!exitFormDataList.contains(formData.getId())) { + formDataService.save(formData); + } + } catch (Exception e) { + log.error("保存数据 [{}] 时出现异常: {}", JSON.toJSONString(formData), e.getMessage()); + } + } + } catch (Exception e) { + log.error("解析数据 [{}] 时出现异常: {}", JSON.toJSONString(r), e.getMessage()); + } + } + } + } catch (Exception ex) { + log.error("同步数据时出现异常: {}", ex.getMessage()); } finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); @@ -150,5 +228,4 @@ public class SyncErpBillsScheduleService { } - }