Merge remote-tracking branch 'origin/master'

This commit is contained in:
zhangzq
2024-12-02 10:39:27 +08:00
6 changed files with 167 additions and 52 deletions

View File

@@ -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<Object> syncUnitData(SyncFormMapping syncFormMapping) {
List<BmMeasureUnit> list = bmMeasureUnitServiceImpl.list();
public List<Object> syncData(SyncFormMapping syncFormMapping) {
List<StIvtBsrealstorattr> 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<Object> syncUnit(String fNumber) {
List<Object> 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<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
@@ -99,15 +99,15 @@ public class SyncErpService {
ids.add(fid);
}
if (ids.size() > 1) {
List<BmMeasureUnit> sds = bmMeasureUnitServiceImpl.list(new LambdaQueryWrapper<BmMeasureUnit>().eq(BmMeasureUnit::getUnit_code, ids.get(1)));
List<StIvtBsrealstorattr> sds = stIvtBsrealstorattrServiceImpl.list(new LambdaQueryWrapper<StIvtBsrealstorattr>().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<BmMeasureUnit> data = new LambdaUpdateWrapper<>();
data.eq(BmMeasureUnit::getUnit_code, code);
data.set(BmMeasureUnit::getUnit_id, id);
bmMeasureUnitServiceImpl.update(data);
LambdaUpdateWrapper<StIvtBsrealstorattr> 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<Object> syncData(SyncFormMapping syncFormMapping) {
public List<Object> syncData1(SyncFormMapping syncFormMapping) {
List<Object> result = new ArrayList<>();
try {
log.info("开始同步ERP" + syncFormMapping.getForm_name());

View File

@@ -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<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
updateWrapper.set(PmFormData::getRemark, "回执单创建成功");
iPmFormDataService.update(updateWrapper);
} else {
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
updateWrapper.set(PmFormData::getRemark, errorMessages);
iPmFormDataService.update(updateWrapper);
}
} catch (Exception ex) {
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
updateWrapper.set(PmFormData::getRemark, ex.getMessage());
iPmFormDataService.update(updateWrapper);
Log.error(ex.getMessage());
}
return from;

View File

@@ -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");
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<SyncFormMapping> list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper<SyncFormMapping>().in(SyncFormMapping::getForm_type, "PRD_MO"));
List<SyncFormMapping> list = syncFormMappingServiceImpl.list(new LambdaQueryWrapper<SyncFormMapping>().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<PmFormData> pmFormDataAll = new ArrayList<>();
for (Object r : result) {
log.info(JSON.toJSONString(r));
//log.info(JSON.toJSONString(r));
JSONArray mappingJsonArray = JSONArray.parseArray(mappingJson);
List<PmFormData> 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<Object> 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<List<Object>> lists = cloudApi.executeBillQuery(jsonString);
Set<String> ids = new HashSet<>();
for (List<Object> 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<String, String> 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<RepoError> 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<String> exitFormDataList = pmFormDataMapper.existFormDataList();
for (Object r : result) {
try {
JSONArray mappingJsonArray = JSONArray.parseArray(mappingJson);
List<PmFormData> 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 {
}
}