add:增加单据手动同步功能

This commit is contained in:
2024-12-18 11:16:44 +08:00
parent ef76e96459
commit 86f2fe4a2e
5 changed files with 109 additions and 8 deletions

View File

@@ -77,7 +77,7 @@ public class SyncReceiptProcessHandler implements ClassProcess {
String result = erpServiceUtils.audit(formData).getString("result");
res = JSONObject.parseObject(result);
} else {
String result = cloudApi.save(formid, formData.toJSONString());
String result = erpServiceUtils.save(formData).getString("result");
res = JSONObject.parseObject(result);
}
JSONObject responseStatus = res.getJSONObject("Result").getJSONObject("ResponseStatus");
@@ -94,7 +94,7 @@ public class SyncReceiptProcessHandler implements ClassProcess {
updateWrapper.set(PmFormData::getUpdate_time, DateUtil.now());
if (isSuccess) {
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成"));
updateWrapper.set(PmFormData::getRemark, "回执单创建成功,回传Erp数据为:" + json);
updateWrapper.set(PmFormData::getRemark, "回执单创建成功,回传Erp数据为:" + responseStatus.getJSONArray("SuccessEntitys").toJSONString());
} else {
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("暂停"));
updateWrapper.set(PmFormData::getRemark,"回执单创建失败,原因为:"+errorMessages + ",回传Erp数据为:" + json);
@@ -110,7 +110,11 @@ public class SyncReceiptProcessHandler implements ClassProcess {
return from;
}
private void handleBillEntity(String formType, JSONObject formData) {
public void handleBillEntity(String formType, JSONObject formData) {
JSONObject model = formData.getJSONObject("Model");
if (model == null) {
return;
}
JSONArray fEntityArray = formData.getJSONObject("Model").getJSONArray("FEntity");
//判断生产入库的手工录入与MRP生成方式需回传不同的源单信息
if ("RECEIPT_PRD".equals(formType)) {

View File

@@ -83,5 +83,17 @@ public class PmFormDataController {
iPmFormDataService.syncFormData("type", formDtl);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping ("/syncFeedBack")
@Log("手动同步单据")
public ResponseEntity<Object> syncFeedBack(@RequestBody JSONObject fromData) {
return new ResponseEntity<>(iPmFormDataService.syncFeedBack(fromData),HttpStatus.OK);
}
}

View File

@@ -25,7 +25,7 @@ public interface IPmFormDataService extends IService<PmFormData> {
Integer syncFormData(String type,String dataString);
String syncFeedBack(JSONObject fromData);
JSONObject mappingParse(JSONArray mappingJson, BmFormStruc one, JSONObject sourceData);

View File

@@ -6,10 +6,13 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.javaparser.utils.Log;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.constant.DictConstantPool;
@@ -19,6 +22,7 @@ import org.nl.common.enums.StatusEnum;
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.flow_manage.flow.service.classprocessimpl.SyncReceiptProcessHandler;
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;
@@ -36,6 +40,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -64,18 +69,30 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
@Autowired
private IBmFormStrucService formStrucService;
@Resource
private ErpServiceUtils erpServiceUtils;
@Lazy
@Autowired
private ISyncFormMappingService iSyncFormMappingService;
@Lazy
@Autowired
private SyncReceiptProcessHandler SyncReceiptProcessHandler;
@Lazy
@Autowired
IPmFormDataService iPmFormDataService;
@Autowired
private IStIvtStructattrService iStIvtStructattrService;
@Lazy
@Autowired
private SyncErpBillsScheduleService syncErpBillsScheduleService;
@Override
public Integer syncFormData(String form_type, String dataString) {
if (StringUtils.isEmpty(form_type) || StringUtils.isEmpty(dataString)) {
@@ -85,20 +102,82 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
if (syncFormMapping == null) {
throw new BadRequestException("当前表单无同步配置信息");
}
List<PmFormData> pmFormDatas = this.syncAnalyse(syncFormMapping.getMapping_json(),syncFormMapping.getForm_type(), syncFormMapping.getDtl_split(),dataString);
List<PmFormData> pmFormDatas = this.syncAnalyse(syncFormMapping.getMapping_json(), syncFormMapping.getForm_type(), syncFormMapping.getDtl_split(), dataString);
this.saveBatch(pmFormDatas);
return pmFormDatas.size();
}
/**
* 手动同步单据
*/
@Override
public String syncFeedBack(JSONObject jsonData) {
//执行回传单
PmFormData pmFormData = jsonData.toJavaObject(PmFormData.class);
if (Integer.parseInt(pmFormData.getStatus()) > 30) {
throw new BadRequestException("该单据状态为已完成,无需再次回传!");
}
JSONObject formData = pmFormData.getForm_data();
//要回传的json数据
String formid = formData.getString("formid");
if (StringUtils.isEmpty(formid)) {
throw new BadRequestException("回传失败:回传数据form_data中数据格式不是formid,data类型");
}
SyncReceiptProcessHandler.handleBillEntity(pmFormData.getForm_type(), formData);
String json = formData.toJSONString();
String message = "";
try {
JSONObject res;
if (Integer.parseInt(StatusEnum.ERP_TYPE.code(formid)) > 22) {
String result = erpServiceUtils.audit(formData).getString("result");
res = JSONObject.parseObject(result);
} else {
String result = erpServiceUtils.save(formData).getString("result");
;
res = JSONObject.parseObject(result);
}
JSONObject responseStatus = res.getJSONObject("Result").getJSONObject("ResponseStatus");
boolean isSuccess = responseStatus.getBooleanValue("IsSuccess");
JSONArray errors = responseStatus.getJSONArray("Errors");
if (ObjectUtils.isNotEmpty(errors)) {
message = errors.stream()
.map(error -> ((JSONObject) error).getString("Message"))
.collect(Collectors.joining("; "));
}
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
updateWrapper.set(PmFormData::getUpdate_time, DateUtil.now());
if (isSuccess) {
message = responseStatus.getJSONArray("SuccessEntitys").toJSONString();
message = "回执单创建成功,回传Erp数据为:" + message;
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成"));
updateWrapper.set(PmFormData::getRemark, message);
} else {
message = "回执单创建失败,原因为:" + message + ",回传Erp数据为:" + json;
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("暂停"));
updateWrapper.set(PmFormData::getRemark, message);
}
iPmFormDataService.update(updateWrapper);
} catch (Exception ex) {
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
updateWrapper.set(PmFormData::getRemark, "回执单创建失败,原因为:" + ex.getMessage() + ",回传Erp数据为:" + json);
iPmFormDataService.update(updateWrapper);
Log.error(ex.getMessage());
}
return message;
}
/**
*
*/
@Override
public List<PmFormData> syncAnalyse(JSONArray mappingJson, String formType,Boolean dtlSplit,String sourceString) {
public List<PmFormData> syncAnalyse(JSONArray mappingJson, String formType, Boolean dtlSplit, String sourceString) {
List<PmFormData> result = new ArrayList<>();
try {
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type",formType));
BmFormStruc one = formStrucService.getOne(new QueryWrapper<BmFormStruc>().eq("form_type", formType));
if (one == null) {
throw new BadRequestException("当前表单无配置信息" + formType);
}
@@ -197,6 +276,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
} else {
//根据单据编号同步ERP单据
List<SyncFormMapping> list = iSyncFormMappingService.list(new LambdaQueryWrapper<SyncFormMapping>().eq(SyncFormMapping::getForm_type, query.getForm_type()));
if (ObjectUtils.isNotEmpty(list)) {
JSONArray mappingJson = list.get(0).getMapping_json();
String mappingString = JSON.toJSONString(mappingJson);
syncErpBillsScheduleService.syncData(mappingString, list.get(0).getForm_type(), list.get(0).getDtl_split(), query.getCode());
@@ -209,6 +289,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
dtoPage.setTotal(pmFormData.size());
return dtoPage;
}
}
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PmFormDataDto> dtoPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPages(), page.getPageSize(), page.getTotal());
dtoPage.setRecords(pmFormDataDtos);
return dtoPage;

View File

@@ -457,4 +457,8 @@ public class SyncErpBillsScheduleService {
}
}
}
}