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.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> 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) {
|
public List<Object> syncData(SyncFormMapping syncFormMapping) {
|
||||||
List<Object> result = new ArrayList<>();
|
List<Object> result = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
// log.info("开始同步ERP" + syncFormMapping.getForm_name());
|
log.info("开始同步ERP" + syncFormMapping.getForm_name());
|
||||||
// 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'";
|
//String filterString = "FCreateDate >= '" + today + " 00:00:00' and FCreateDate <= '" + today + " 23:59:59'";
|
||||||
// ErpQuery query = new ErpQuery();
|
ErpQuery query = new ErpQuery();
|
||||||
// query.setFilterString(filterString);
|
// query.setFilterString(filterString);
|
||||||
// //query.setFormId(syncFormMapping.getForm_type());
|
//query.setFormId(syncFormMapping.getForm_type());
|
||||||
// query.setFormId("PRD_INSTOCK");
|
query.setFormId("BD_MATERIAL");
|
||||||
// query.setFieldKeys("FID");
|
query.setFieldKeys("FMATERIALID,FNumber");
|
||||||
// query.setLimit(2000);
|
query.setLimit(10);
|
||||||
// String jsonString = JSON.toJSONString(query);
|
String jsonString = JSON.toJSONString(query);
|
||||||
// List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
|
List<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
|
||||||
// log.info("同步ERP结果" + lists.size());
|
log.info("同步ERP结果" + lists.size());
|
||||||
// Set<String> ids = new HashSet<>();
|
Set<String> ids = new HashSet<>();
|
||||||
// for (List<Object> list : lists) {
|
for (List<Object> list : lists) {
|
||||||
// for (Object r : list) {
|
for (Object r : list) {
|
||||||
// String fid = r.toString();
|
String fid = r.toString();
|
||||||
// if (StringUtils.isEmpty(fid)) {
|
if (StringUtils.isEmpty(fid)) {
|
||||||
// throw new RuntimeException("单据同步失败,没有找到FID");
|
throw new RuntimeException("单据同步失败,没有找到FID");
|
||||||
// }
|
}
|
||||||
// ids.add(fid);
|
ids.add(fid);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// OperateParam param = new OperateParam();
|
OperateParam param = new OperateParam();
|
||||||
// Map<String, String> error = new HashMap<>();
|
Map<String, String> error = new HashMap<>();
|
||||||
// for (String id : ids) {
|
for (String id : ids) {
|
||||||
// param.setId(id);
|
param.setId(id);
|
||||||
// OperatorResult view = cloudApi.view("PRD_INSTOCK", param);
|
OperatorResult view = cloudApi.view("BD_MATERIAL", param);
|
||||||
// RepoStatus status = view.getResult().getResponseStatus();
|
RepoStatus status = view.getResult().getResponseStatus();
|
||||||
// if (status.isIsSuccess()) {
|
if (status.isIsSuccess()) {
|
||||||
// result.add(view.getResult().getResult());
|
result.add(view.getResult().getResult());
|
||||||
// } else {
|
} else {
|
||||||
// ArrayList<RepoError> errors = status.getErrors();
|
ArrayList<RepoError> errors = status.getErrors();
|
||||||
// String errorMsg = errors.stream().map(RepoError::getMessage).collect(Collectors.joining(","));
|
String errorMsg = errors.stream().map(RepoError::getMessage).collect(Collectors.joining(","));
|
||||||
// error.put(id, errorMsg);
|
error.put(id, errorMsg);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// if (!CollectionUtils.isEmpty(error)){
|
if (!CollectionUtils.isEmpty(error)) {
|
||||||
// log.info("ERP单据同步同步失败:{}", 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,62 +73,67 @@ 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) {
|
||||||
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formMapping.getForm_type()));
|
try {
|
||||||
if (one == null) {
|
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formMapping.getForm_type()));
|
||||||
throw new BadRequestException("当前表单无配置信息" + 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);
|
|
||||||
}
|
}
|
||||||
}else {
|
List<PmFormData> result = new ArrayList<>();
|
||||||
JSONObject target = mappingParse(formMapping.getMapping_json(), one, sourceData);
|
Boolean dtlSplit = formMapping.getDtl_split();
|
||||||
Object items = target.remove("item");
|
//直接取
|
||||||
target.put("id",
|
JSONObject sourceData = JSONObject.parseObject(sourceString);
|
||||||
StringUtils.isEmpty(target.getString("biz_id"))
|
// if (StringUtils.isNotEmpty(convertJson)){
|
||||||
?IdUtil.getStringId():target.getString("biz_id"));
|
// sourceData = JSONObject.parseObject(sourceString).getJSONObject("Model");
|
||||||
target.put("code",
|
// }else {
|
||||||
StringUtils.isEmpty(target.getString("biz_code"))
|
// sourceData = JSONObject.parseObject(sourceString);
|
||||||
?CodeUtil.getNewCode(formMapping.getForm_type()):target.getString("biz_code"));
|
// }
|
||||||
target.put("create_time", DateUtil.now());
|
if (dtlSplit) {
|
||||||
target.put("create_name", SecurityUtils.getCurrentNickName());
|
List<JSONObject> items_arr = mappingParseList(formMapping.getMapping_json(), one, sourceData);
|
||||||
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++) {
|
for (int i = 0; i < items_arr.size(); i++) {
|
||||||
JSONObject itemTarget = items_arr.getJSONObject(i);
|
JSONObject itemTarget = items_arr.get(i);
|
||||||
itemTarget.put("id",
|
itemTarget.put("id", IdUtil.getStringId());
|
||||||
StringUtils.isEmpty(itemTarget.getString("biz_id"))
|
itemTarget.put("code", CodeUtil.getNewCode(formMapping.getForm_type()));
|
||||||
?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_time", DateUtil.now());
|
||||||
itemTarget.put("create_name", SecurityUtils.getCurrentNickName());
|
itemTarget.put("create_name", SecurityUtils.getCurrentNickName());
|
||||||
itemTarget.put("parent_id", mst.getId());
|
|
||||||
PmFormData dtl = itemTarget.toJavaObject(PmFormData.class);
|
PmFormData dtl = itemTarget.toJavaObject(PmFormData.class);
|
||||||
result.add(dtl);
|
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
|
@Override
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|
||||||
|
|
||||||
@@ -114,10 +116,13 @@ public class SyncFormMappingController {
|
|||||||
//参数判读,参数解析,调用参数入库
|
//参数判读,参数解析,调用参数入库
|
||||||
SyncFormMapping syncFormMapping = form.toJavaObject(SyncFormMapping.class);
|
SyncFormMapping syncFormMapping = form.toJavaObject(SyncFormMapping.class);
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user