add:增加ERP单据定时同步功能。
This commit is contained in:
@@ -2,10 +2,18 @@ package org.nl.wms.external_system.erp;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
//import com.kingdee.bos.webapi.entity.*;
|
||||
//import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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 org.apache.commons.lang3.ObjectUtils;
|
||||
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.ErpSec;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
|
||||
@@ -40,57 +48,122 @@ public class SyncErpService {
|
||||
@Autowired
|
||||
ErpSec erpSec;
|
||||
|
||||
@Autowired
|
||||
MdMeMaterialbaseServiceImpl mdMeMaterialbaseServiceImpl;
|
||||
@Autowired
|
||||
private IBmSupplierService supplierService;
|
||||
@Autowired
|
||||
private BmCustomerServiceImpl bmCustomerServiceImpl;
|
||||
@Autowired
|
||||
private StIvtBsrealstorattrServiceImpl stIvtBsrealstorattrServiceImpl;
|
||||
|
||||
|
||||
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<>();
|
||||
try {
|
||||
String sd = String.format("FNumber ='%s'", 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(sd);
|
||||
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());
|
||||
List<String> ids = new ArrayList<>();
|
||||
List<Object> firstList = lists.get(0);
|
||||
for (Object r : firstList) {
|
||||
String fid = r.toString();
|
||||
if (StringUtils.isEmpty(fid)) {
|
||||
throw new RuntimeException("单据同步失败,没有找到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)) {
|
||||
if (StringUtils.isNotBlank(ids.get(0)) && StringUtils.isNotBlank(ids.get(1))) {
|
||||
String id = ids.get(0);
|
||||
String code = ids.get(1);
|
||||
if (code.contains(".")) {
|
||||
LambdaUpdateWrapper<MdMeMaterialbase> data = new LambdaUpdateWrapper<>();
|
||||
data.eq(MdMeMaterialbase::getMaterial_code, code);
|
||||
data.set(MdMeMaterialbase::getMaterial_id, id);
|
||||
mdMeMaterialbaseServiceImpl.update(data);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
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("PRD_INSTOCK");
|
||||
// query.setFieldKeys("FID");
|
||||
// query.setLimit(2000);
|
||||
// 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("PRD_INSTOCK", 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){
|
||||
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) {
|
||||
ex.printStackTrace();
|
||||
throw new RuntimeException("同步失败:"+ex.getMessage());
|
||||
throw new RuntimeException("同步失败:" + ex.getMessage());
|
||||
}
|
||||
log.info(result.toString());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
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.PageHelper;
|
||||
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.wms.config_manage.form_struc.service.IBmFormStrucService;
|
||||
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.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.PmFormDataDto;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.ISyncFormMappingService;
|
||||
@@ -73,62 +73,67 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
}
|
||||
@Override
|
||||
public List<PmFormData> syncAnalyse(SyncFormMapping formMapping, String sourceString) {
|
||||
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formMapping.getForm_type()));
|
||||
if (one == null) {
|
||||
throw new BadRequestException("当前表单无配置信息" + formMapping.getForm_type());
|
||||
}
|
||||
List<PmFormData> result = new ArrayList<>();
|
||||
Boolean dtlSplit = formMapping.getDtl_split();
|
||||
//直接取
|
||||
JSONObject sourceData = JSONObject.parseObject(sourceString);;
|
||||
// if (StringUtils.isNotEmpty(convertJson)){
|
||||
// sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model");
|
||||
// }else {
|
||||
// sourceData = JSONObject.parseObject(sourceString);
|
||||
// }
|
||||
if (dtlSplit){
|
||||
List<JSONObject> items_arr = mappingParseList(formMapping.getMapping_json(), one, sourceData);
|
||||
for (int i = 0; i < items_arr.size(); i++) {
|
||||
JSONObject itemTarget = items_arr.get(i);
|
||||
itemTarget.put("id", IdUtil.getStringId());
|
||||
itemTarget.put("code", CodeUtil.getNewCode(formMapping.getForm_type()));
|
||||
itemTarget.put("create_time", DateUtil.now());
|
||||
itemTarget.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
PmFormData dtl = itemTarget.toJavaObject(PmFormData.class);
|
||||
result.add(dtl);
|
||||
try {
|
||||
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formMapping.getForm_type()));
|
||||
if (one == null) {
|
||||
throw new BadRequestException("当前表单无配置信息" + formMapping.getForm_type());
|
||||
}
|
||||
}else {
|
||||
JSONObject target = mappingParse(formMapping.getMapping_json(), one, sourceData);
|
||||
Object items = target.remove("item");
|
||||
target.put("id",
|
||||
StringUtils.isEmpty(target.getString("biz_id"))
|
||||
?IdUtil.getStringId():target.getString("biz_id"));
|
||||
target.put("code",
|
||||
StringUtils.isEmpty(target.getString("biz_code"))
|
||||
?CodeUtil.getNewCode(formMapping.getForm_type()):target.getString("biz_code"));
|
||||
target.put("create_time", DateUtil.now());
|
||||
target.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
PmFormData mst = target.toJavaObject(PmFormData.class);
|
||||
result.add(mst);
|
||||
if (items != null) {
|
||||
JSONArray items_arr = (JSONArray) items;
|
||||
List<PmFormData> result = new ArrayList<>();
|
||||
Boolean dtlSplit = formMapping.getDtl_split();
|
||||
//直接取
|
||||
JSONObject sourceData = JSONObject.parseObject(sourceString);
|
||||
// if (StringUtils.isNotEmpty(convertJson)){
|
||||
// sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model");
|
||||
// }else {
|
||||
// sourceData = JSONObject.parseObject(sourceString);
|
||||
// }
|
||||
if (dtlSplit) {
|
||||
List<JSONObject> items_arr = mappingParseList(formMapping.getMapping_json(), one, sourceData);
|
||||
for (int i = 0; i < items_arr.size(); i++) {
|
||||
JSONObject itemTarget = items_arr.getJSONObject(i);
|
||||
itemTarget.put("id",
|
||||
StringUtils.isEmpty(itemTarget.getString("biz_id"))
|
||||
?IdUtil.getStringId():itemTarget.getString("biz_id"));
|
||||
if (StringUtils.isNotEmpty(itemTarget.getString("biz_code"))) {
|
||||
itemTarget.getString("biz_code");
|
||||
}
|
||||
JSONObject itemTarget = items_arr.get(i);
|
||||
itemTarget.put("id", IdUtil.getStringId());
|
||||
itemTarget.put("code", CodeUtil.getNewCode(formMapping.getForm_type()));
|
||||
itemTarget.put("create_time", DateUtil.now());
|
||||
itemTarget.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
itemTarget.put("parent_id", mst.getId());
|
||||
PmFormData dtl = itemTarget.toJavaObject(PmFormData.class);
|
||||
result.add(dtl);
|
||||
}
|
||||
} else {
|
||||
JSONObject target = mappingParse(formMapping.getMapping_json(), one, sourceData);
|
||||
Object items = target.remove("item");
|
||||
target.put("id",
|
||||
StringUtils.isEmpty(target.getString("biz_id"))
|
||||
? IdUtil.getStringId() : target.getString("biz_id"));
|
||||
target.put("code",
|
||||
StringUtils.isEmpty(target.getString("biz_code"))
|
||||
? CodeUtil.getNewCode(formMapping.getForm_type()) : target.getString("biz_code"));
|
||||
target.put("create_time", DateUtil.now());
|
||||
target.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
PmFormData mst = target.toJavaObject(PmFormData.class);
|
||||
result.add(mst);
|
||||
if (items != null) {
|
||||
JSONArray items_arr = (JSONArray) items;
|
||||
for (int i = 0; i < items_arr.size(); i++) {
|
||||
JSONObject itemTarget = items_arr.getJSONObject(i);
|
||||
itemTarget.put("id",
|
||||
StringUtils.isEmpty(itemTarget.getString("biz_id"))
|
||||
? IdUtil.getStringId() : itemTarget.getString("biz_id"));
|
||||
if (StringUtils.isNotEmpty(itemTarget.getString("biz_code"))) {
|
||||
itemTarget.getString("biz_code");
|
||||
}
|
||||
itemTarget.put("create_time", DateUtil.now());
|
||||
itemTarget.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
itemTarget.put("parent_id", mst.getId());
|
||||
PmFormData dtl = itemTarget.toJavaObject(PmFormData.class);
|
||||
result.add(dtl);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
} catch (Exception ex) {
|
||||
log.error("ERP单据解析异常:" + ex.getMessage());
|
||||
return null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.sync_manage.controller.form_mapping;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -46,6 +47,7 @@ import java.util.List;
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("api/syncFormMapping")
|
||||
@SaIgnore
|
||||
public class SyncFormMappingController {
|
||||
|
||||
|
||||
@@ -114,10 +116,13 @@ public class SyncFormMappingController {
|
||||
//参数判读,参数解析,调用参数入库
|
||||
SyncFormMapping syncFormMapping = form.toJavaObject(SyncFormMapping.class);
|
||||
List<Object> objects = syncErpService.syncData(syncFormMapping);
|
||||
List<PmFormData> pmFormDatas = formDataService.syncAnalyse(syncFormMapping, JSON.toJSONString(objects));
|
||||
formDataService.saveBatch(pmFormDatas);
|
||||
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
|
||||
List<PmFormData> pmFormDatas = formDataService.syncAnalyse(syncFormMapping, JSON.toJSONString(objects));
|
||||
formDataService.saveBatch(pmFormDatas);
|
||||
return new ResponseEntity<>(TableDataInfo.build(objects),HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user