add:增加ERP单据定时同步功能。

This commit is contained in:
2024-11-20 20:17:15 +08:00
parent 6d4e264b3b
commit e05e469a85
3 changed files with 182 additions and 99 deletions

View File

@@ -2,10 +2,18 @@ package org.nl.wms.external_system.erp;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
//import com.kingdee.bos.webapi.entity.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.kingdee.bos.webapi.entity.*;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
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.supplier.service.IBmSupplierService;
import org.nl.wms.external_system.erp.dto.ErpQuery; import org.nl.wms.external_system.erp.dto.ErpQuery;
import org.nl.wms.external_system.erp.dto.ErpSec; import org.nl.wms.external_system.erp.dto.ErpSec;
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping; import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
@@ -40,57 +48,122 @@ public class SyncErpService {
@Autowired @Autowired
ErpSec erpSec; ErpSec erpSec;
@Autowired
MdMeMaterialbaseServiceImpl mdMeMaterialbaseServiceImpl;
@Autowired
private IBmSupplierService supplierService;
@Autowired
private BmCustomerServiceImpl bmCustomerServiceImpl;
@Autowired
private StIvtBsrealstorattrServiceImpl stIvtBsrealstorattrServiceImpl;
public List<Object> syncData(SyncFormMapping syncFormMapping) {
public List<Object> syncDataTest(SyncFormMapping syncFormMapping) {
List<MdMeMaterialbase> list = mdMeMaterialbaseServiceImpl.list(new LambdaQueryWrapper<MdMeMaterialbase>().lt(MdMeMaterialbase::getMaterial_id, "80000"));
list.forEach(r -> {
syncDataTest(r.getMaterial_code());
});
return null;
}
public List<Object> syncDataTest(String fNumber) {
List<Object> result = new ArrayList<>(); List<Object> result = new ArrayList<>();
try { try {
// log.info("开始同步ERP" + syncFormMapping.getForm_name()); String sd = String.format("FNumber ='%s'", fNumber);
// IdentifyInfo identifyInfo = new IdentifyInfo(); IdentifyInfo identifyInfo = new IdentifyInfo();
// BeanUtils.copyProperties(erpSec, identifyInfo); BeanUtils.copyProperties(erpSec, identifyInfo);
// K3CloudApi cloudApi = new K3CloudApi(identifyInfo); K3CloudApi cloudApi = new K3CloudApi(identifyInfo);
// String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
// String filterString = "FCreateDate >= '" + today + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59'"; ErpQuery query = new ErpQuery();
// ErpQuery query = new ErpQuery(); query.setFilterString(sd);
// query.setFilterString(filterString); query.setFormId("BD_MATERIAL");
// //query.setFormId(syncFormMapping.getForm_type()); query.setFieldKeys("FMATERIALID,FNumber");
// query.setFormId("PRD_INSTOCK"); //query.setLimit(10);
// query.setFieldKeys("FID"); String jsonString = JSON.toJSONString(query);
// query.setLimit(2000); List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
// String jsonString = JSON.toJSONString(query); log.info("同步ERP结果" + lists.size());
// List<List<Object>> lists = cloudApi.executeBillQuery(jsonString); List<String> ids = new ArrayList<>();
// log.info("同步ERP结果" + lists.size()); List<Object> firstList = lists.get(0);
// Set<String> ids = new HashSet<>(); for (Object r : firstList) {
// for (List<Object> list : lists) { String fid = r.toString();
// for (Object r : list) { if (StringUtils.isEmpty(fid)) {
// String fid = r.toString(); throw new RuntimeException("单据同步失败,没有找到FID");
// if (StringUtils.isEmpty(fid)) { }
// throw new RuntimeException("单据同步失败,没有找到FID"); ids.add(fid);
// } }
// ids.add(fid); if (ids.size() > 1) {
// } List<MdMeMaterialbase> sds = mdMeMaterialbaseServiceImpl.list(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_code, ids.get(1)));
// } if (ObjectUtils.isNotEmpty(sds)) {
// OperateParam param = new OperateParam(); if (StringUtils.isNotBlank(ids.get(0)) && StringUtils.isNotBlank(ids.get(1))) {
// Map<String, String> error = new HashMap<>(); String id = ids.get(0);
// for (String id : ids) { String code = ids.get(1);
// param.setId(id); if (code.contains(".")) {
// OperatorResult view = cloudApi.view("PRD_INSTOCK", param); LambdaUpdateWrapper<MdMeMaterialbase> data = new LambdaUpdateWrapper<>();
// RepoStatus status = view.getResult().getResponseStatus(); data.eq(MdMeMaterialbase::getMaterial_code, code);
// if (status.isIsSuccess()) { data.set(MdMeMaterialbase::getMaterial_id, id);
// result.add(view.getResult().getResult()); mdMeMaterialbaseServiceImpl.update(data);
// } else { }
// ArrayList<RepoError> errors = status.getErrors();
// String errorMsg = errors.stream().map(RepoError::getMessage).collect(Collectors.joining(",")); }
// error.put(id, errorMsg); }
// } }
// } } catch (Exception ex) {
// if (!CollectionUtils.isEmpty(error)){ ex.printStackTrace();
// log.info("ERP单据同步同步失败:{}", error); throw new RuntimeException("同步失败:" + ex.getMessage());
// } }
return result;
}
public List<Object> syncData(SyncFormMapping syncFormMapping) {
List<Object> result = new ArrayList<>();
try {
log.info("开始同步ERP" + syncFormMapping.getForm_name());
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 = "FCreateDate >= '" + today + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59'";
ErpQuery query = new ErpQuery();
// query.setFilterString(filterString);
//query.setFormId(syncFormMapping.getForm_type());
query.setFormId("BD_MATERIAL");
query.setFieldKeys("FMATERIALID,FNumber");
query.setLimit(10);
String jsonString = JSON.toJSONString(query);
List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
log.info("同步ERP结果" + lists.size());
Set<String> ids = new HashSet<>();
for (List<Object> list : lists) {
for (Object r : list) {
String fid = r.toString();
if (StringUtils.isEmpty(fid)) {
throw new RuntimeException("单据同步失败,没有找到FID");
}
ids.add(fid);
}
}
OperateParam param = new OperateParam();
Map<String, String> error = new HashMap<>();
for (String id : ids) {
param.setId(id);
OperatorResult view = cloudApi.view("BD_MATERIAL", param);
RepoStatus status = view.getResult().getResponseStatus();
if (status.isIsSuccess()) {
result.add(view.getResult().getResult());
} else {
ArrayList<RepoError> errors = status.getErrors();
String errorMsg = errors.stream().map(RepoError::getMessage).collect(Collectors.joining(","));
error.put(id, errorMsg);
}
}
if (!CollectionUtils.isEmpty(error)) {
log.info("ERP单据同步同步失败:{}", error);
}
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
throw new RuntimeException("同步失败:" + ex.getMessage()); throw new RuntimeException("同步失败:" + ex.getMessage());
} }
log.info(result.toString());
return result; return result;
} }

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -14,10 +15,9 @@ import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.utils.*; import org.nl.common.utils.*;
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService; import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc; import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData; import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.nl.wms.pm_manage.form_data.service.dao.mapper.PmFormDataMapper; import org.nl.wms.pm_manage.form_data.service.dao.mapper.PmFormDataMapper;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery; import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery;
import org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto; import org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto;
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService; import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
@@ -73,6 +73,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
} }
@Override @Override
public List<PmFormData> syncAnalyse(SyncFormMapping formMapping, String sourceString) { public List<PmFormData> syncAnalyse(SyncFormMapping formMapping, String sourceString) {
try {
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formMapping.getForm_type())); BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formMapping.getForm_type()));
if (one == null) { if (one == null) {
throw new BadRequestException("当前表单无配置信息" + formMapping.getForm_type()); throw new BadRequestException("当前表单无配置信息" + formMapping.getForm_type());
@@ -80,7 +81,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
List<PmFormData> result = new ArrayList<>(); List<PmFormData> result = new ArrayList<>();
Boolean dtlSplit = formMapping.getDtl_split(); Boolean dtlSplit = formMapping.getDtl_split();
//直接取 //直接取
JSONObject sourceData = JSONObject.parseObject(sourceString);; JSONObject sourceData = JSONObject.parseObject(sourceString);
// if (StringUtils.isNotEmpty(convertJson)){ // if (StringUtils.isNotEmpty(convertJson)){
// sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model"); // sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model");
// }else { // }else {
@@ -129,6 +130,10 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
} }
} }
return result; return result;
} catch (Exception ex) {
log.error("ERP单据解析异常" + ex.getMessage());
return null;
}
} }
@Override @Override

View File

@@ -1,6 +1,7 @@
package org.nl.wms.sync_manage.controller.form_mapping; package org.nl.wms.sync_manage.controller.form_mapping;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@@ -46,6 +47,7 @@ import java.util.List;
*/ */
@RestController @RestController
@RequestMapping("api/syncFormMapping") @RequestMapping("api/syncFormMapping")
@SaIgnore
public class SyncFormMappingController { public class SyncFormMappingController {
@@ -116,8 +118,11 @@ public class SyncFormMappingController {
List<Object> objects = syncErpService.syncData(syncFormMapping); List<Object> objects = syncErpService.syncData(syncFormMapping);
List<PmFormData> pmFormDatas = formDataService.syncAnalyse(syncFormMapping, JSON.toJSONString(objects)); List<PmFormData> pmFormDatas = formDataService.syncAnalyse(syncFormMapping, JSON.toJSONString(objects));
formDataService.saveBatch(pmFormDatas); formDataService.saveBatch(pmFormDatas);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(objects),HttpStatus.OK);
} }
} }