opt:1.优化单据回传查询;2.优化用料单实时查询,实时更新;
3.优化失败单据回传字段序列化顺序混乱; 4.手动同步数量限制,模糊搜索;
This commit is contained in:
@@ -70,6 +70,10 @@ public class SyncReceiptProcessHandler implements ClassProcess {
|
||||
}
|
||||
handleBillEntity(pmFormData.getForm_type(), formData);
|
||||
String json = formData.toJSONString();
|
||||
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(PmFormData::getId, pmFormData.getId());
|
||||
updateWrapper.set(PmFormData::getUpdate_time, DateUtil.now());
|
||||
updateWrapper.set(PmFormData::getErp_data, json);
|
||||
try {
|
||||
IdentifyInfo identifyInfo = new IdentifyInfo();
|
||||
BeanUtils.copyProperties(erpSec, identifyInfo);
|
||||
@@ -90,21 +94,15 @@ public class SyncReceiptProcessHandler implements ClassProcess {
|
||||
.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) {
|
||||
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成"));
|
||||
updateWrapper.set(PmFormData::getRemark, "回执单创建成功,回传Erp数据为:" + responseStatus.getJSONArray("SuccessEntitys").toJSONString());
|
||||
Log.error("回传Erp数据为:" + json + ",传输数据为:");
|
||||
} else {
|
||||
updateWrapper.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("暂停"));
|
||||
updateWrapper.set(PmFormData::getRemark, "回执单创建失败,原因为:" + errorMessages + ",回传Erp数据为:" + json);
|
||||
Log.error("回传Erp数据为:" + json + ",传输数据为:");
|
||||
}
|
||||
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);
|
||||
|
||||
@@ -3,15 +3,18 @@ package org.nl.wms.pm_manage.form_data.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.parser.Feature;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
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.dto.FormDataQuery;
|
||||
@@ -22,6 +25,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -69,10 +74,30 @@ public class PmFormDataController {
|
||||
}
|
||||
|
||||
@GetMapping("/getSonFormData/{id}")
|
||||
public ResponseEntity<Object> getSonDtlFormData(@PathVariable String id){
|
||||
public ResponseEntity<Object> getSonDtlFormData(@PathVariable String id) {
|
||||
//参数判读,参数解析,调用参数入库
|
||||
//Page<BmFormStruc> page = iBmFormStrucService.page(pageQuery.build(), query.build());
|
||||
return new ResponseEntity<>(iPmFormDataService.getSonDtlFormData(id),HttpStatus.OK);
|
||||
return new ResponseEntity<>(iPmFormDataService.getSonDtlFormData(id), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/confirmStatus")
|
||||
@SaIgnore
|
||||
@Log("单据完成")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseEntity<Object> confirmStatus(@RequestBody JSONObject form) {
|
||||
JSONArray data = form.getJSONArray("data");
|
||||
if (!ObjectUtils.isEmpty(data)) {
|
||||
Set<String> ids = data.stream()
|
||||
.map(item -> (String) item)
|
||||
.collect(Collectors.toSet());
|
||||
iPmFormDataService.update(
|
||||
new LambdaUpdateWrapper<PmFormData>()
|
||||
.set(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成"))
|
||||
.in(PmFormData::getId, ids)
|
||||
);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@ package org.nl.wms.pm_manage.form_data.service.dao;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import org.nl.common.domain.mybatis.handler.FastjsonSortTypeHandler;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nl.common.domain.mybatis.handler.FastjsonSortTypeHandler;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -351,4 +351,11 @@ public class PmFormData implements Serializable {
|
||||
private String taxPrice;
|
||||
|
||||
|
||||
/**
|
||||
* 自定义表单字段
|
||||
*/
|
||||
@TableField(typeHandler = FastjsonSortTypeHandler.class)
|
||||
private JSONObject erp_data = new JSONObject();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -112,16 +112,19 @@
|
||||
md_me_materialbase.single_weight
|
||||
FROM
|
||||
pm_form_data
|
||||
left join md_me_materialbase on pm_form_data.material_id = md_me_materialbase.material_id
|
||||
left join md_me_materialbase on pm_form_data.material_id = md_me_materialbase.material_id
|
||||
<where>
|
||||
<if test="query.search != null and query.search != ''">
|
||||
and form_data LIKE '%${query.search}%'
|
||||
and form_data LIKE '%${query.search}%'
|
||||
</if>
|
||||
<if test="query.form_type != null and query.form_type != ''">
|
||||
and form_type = #{query.form_type}
|
||||
</if>
|
||||
<if test="query.pcsn != null and query.pcsn != ''">
|
||||
and pcsn = #{query.pcsn}
|
||||
</if>
|
||||
<if test="query.code != null and query.code != ''">
|
||||
and code = #{query.code}
|
||||
and code LIKE '%${query.code}'
|
||||
</if>
|
||||
<if test="query.mater != null and query.mater != ''">
|
||||
and md_me_materialbase.material_code like '%${query.mater}%'
|
||||
@@ -142,7 +145,7 @@
|
||||
and parent_id = #{query.parent_id}
|
||||
</if>
|
||||
<if test="query.form_query != null and query.form_query.size() > 0">
|
||||
<foreach collection="query.form_query" item="value" index="key" >
|
||||
<foreach collection="query.form_query" item="value" index="key">
|
||||
<if test="value != null and value != ''">
|
||||
and JSON_CONTAINS(form_data, '{"${key}":"${value}"}')
|
||||
</if>
|
||||
|
||||
@@ -19,6 +19,7 @@ public class FormDataQuery extends BaseQuery<PmFormData> {
|
||||
private String bill_code;
|
||||
private String site_code;
|
||||
private String search;
|
||||
private String pcsn;
|
||||
private String parent_id;
|
||||
private String mater;
|
||||
private String[] status;
|
||||
|
||||
@@ -113,13 +113,15 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
* 手动推送回执单据
|
||||
*/
|
||||
@Override
|
||||
public String syncFeedBack(JSONObject jsonData) {
|
||||
public String syncFeedBack(JSONObject form) {
|
||||
//执行回传单
|
||||
PmFormData pmFormData = jsonData.toJavaObject(PmFormData.class);
|
||||
JSONArray jsonData = form.getJSONArray("data");
|
||||
PmFormData pmFormData = jsonData.getObject(0, PmFormData.class);
|
||||
if (Integer.parseInt(pmFormData.getStatus()) > 30) {
|
||||
throw new BadRequestException("该单据状态为已完成,无需再次回传!");
|
||||
}
|
||||
JSONObject formData = pmFormData.getForm_data();
|
||||
PmFormData data = iPmFormDataService.getById(pmFormData.getId());
|
||||
JSONObject formData = data.getErp_data();
|
||||
//要回传的json数据
|
||||
String formid = formData.getString("formid");
|
||||
if (StringUtils.isEmpty(formid)) {
|
||||
@@ -275,7 +277,9 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
List<SyncFormMapping> list = iSyncFormMappingService.list(new LambdaQueryWrapper<SyncFormMapping>().eq(SyncFormMapping::getForm_type, query.getForm_type()));
|
||||
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());
|
||||
syncErpBillsScheduleService.syncData(mappingString, list.get(0).getForm_type(), list.get(0).getDtl_split(), query.getCode(),true);
|
||||
//一张单据会多次更新或新增明细,明细物料出库一次不能直接标记为完成,取消完成状态筛选
|
||||
query.setStatus(null);
|
||||
List<PmFormDataDto> pmFormData = this.baseMapper.queryTree2(query);
|
||||
if (ObjectUtil.isNotEmpty(pmFormData)) {
|
||||
handleFormDatas(pmFormData);
|
||||
@@ -321,23 +325,25 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
private void handleFormDatas(List<PmFormDataDto> pmFormDataDtos) {
|
||||
List<String> parents = pmFormDataDtos.stream().map(PmFormDataDto::getId).collect(Collectors.toList());
|
||||
List<PmFormDataDto> childs = this.baseMapper.selectChilds(parents);
|
||||
//过滤非料箱与托盘库
|
||||
String stockId = "";
|
||||
if (pmFormDataDtos.get(0).getCode().contains("PPBOM")) {
|
||||
stockId = "stock_Id";
|
||||
} else if (pmFormDataDtos.get(0).getCode().contains("JDSCLLSQ")) {
|
||||
stockId = "stockId";
|
||||
} else if (pmFormDataDtos.get(0).getCode().contains("ZJDB")) {
|
||||
stockId = "SrcStockId_Id";
|
||||
}
|
||||
if (StringUtils.isNotBlank(stockId)) {
|
||||
String finalStockId = stockId;
|
||||
childs.removeIf(r ->
|
||||
!new HashSet<>(Arrays.asList("1233925", "1233926"))
|
||||
.contains(r.getForm_data().getString(finalStockId))
|
||||
);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(childs)) {
|
||||
if (StringUtils.isNotBlank(pmFormDataDtos.get(0).getCode())) {
|
||||
//过滤非料箱与托盘库
|
||||
String stockId = "";
|
||||
if (pmFormDataDtos.get(0).getCode().contains("PPBOM")) {
|
||||
stockId = "stock_Id";
|
||||
} else if (pmFormDataDtos.get(0).getCode().contains("JDSCLLSQ")) {
|
||||
stockId = "stockId";
|
||||
} else if (pmFormDataDtos.get(0).getCode().contains("ZJDB")) {
|
||||
stockId = "SrcStockId_Id";
|
||||
}
|
||||
if (StringUtils.isNotBlank(stockId)) {
|
||||
String finalStockId = stockId;
|
||||
childs.removeIf(r ->
|
||||
!new HashSet<>(Arrays.asList("1233925", "1233926"))
|
||||
.contains(r.getForm_data().getString(finalStockId))
|
||||
);
|
||||
}
|
||||
}
|
||||
Map<String, List<PmFormDataDto>> childMap = childs.stream().collect(Collectors.groupingBy(PmFormDataDto::getParent_id));
|
||||
for (PmFormDataDto dataDto : pmFormDataDtos) {
|
||||
String productArea = dataDto.getForm_data().getString("product_area");
|
||||
@@ -358,7 +364,7 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
public PmFormDataDto queryErpCode(String code, String stor_code) {
|
||||
FormDataQuery query = new FormDataQuery();
|
||||
query.setCode(code);
|
||||
query.setStatus(new String[]{StatusEnum.FORM_STATUS.code("生成"), StatusEnum.FORM_STATUS.code("执行中")});
|
||||
// query.setStatus(new String[]{StatusEnum.FORM_STATUS.code("生成"), StatusEnum.FORM_STATUS.code("执行中")});
|
||||
List<PmFormDataDto> pmFormDataDtos = this.baseMapper.queryTree2(query);
|
||||
if (CollectionUtils.isEmpty(pmFormDataDtos)) {
|
||||
throw new BadRequestException(code + "单据编码不存在或已经完成入库");
|
||||
|
||||
@@ -112,17 +112,15 @@ public class SyncErpBillsScheduleService {
|
||||
for (SyncFormMapping m : list) {
|
||||
JSONArray mappingJson = m.getMapping_json();
|
||||
String mappingString = JSON.toJSONString(mappingJson);
|
||||
syncData(mappingString, m.getForm_type(), m.getDtl_split(), "");
|
||||
syncData(mappingString, m.getForm_type(), m.getDtl_split(), "", false);
|
||||
}
|
||||
} finally {
|
||||
LuceneAppender.traceIdTL.remove();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动同步
|
||||
*/
|
||||
public void syncData(String mappingJson, String formType, Boolean dtlSplit, String billCode) {
|
||||
|
||||
public void syncData(String mappingJson, String formType, Boolean dtlSplit, String billCode, Boolean isManual) {
|
||||
boolean islock = lock.tryLock();
|
||||
try {
|
||||
if (islock) {
|
||||
@@ -136,18 +134,22 @@ public class SyncErpBillsScheduleService {
|
||||
String sevenDaysAgo = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
|
||||
String filterString;
|
||||
if (StringUtils.isNotBlank(billCode)) {
|
||||
filterString = "FBillNo = '" + billCode + "'";
|
||||
filterString = "FBillNo like '%" + billCode + "'";
|
||||
} else {
|
||||
filterString = getFilterString(formType, "", sevenDaysAgo, today);
|
||||
}
|
||||
query.setFilterString(filterString);
|
||||
query.setFormId(formType);
|
||||
query.setFieldKeys("FID");
|
||||
query.setLimit(0);
|
||||
if (isManual) {
|
||||
query.setLimit(1);
|
||||
} else {
|
||||
query.setLimit(0);
|
||||
}
|
||||
result = erpServiceUtils.queryBills(query);
|
||||
if (ObjectUtils.isNotEmpty(result)) {
|
||||
K3CloudApi k3CloudApi = erpServiceUtils.getCloudApi();
|
||||
handleBills(mappingJson, formType, dtlSplit, errorMsg, result, k3CloudApi);
|
||||
handleBills(mappingJson, formType, dtlSplit, errorMsg, result, k3CloudApi, isManual);
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
@@ -198,11 +200,11 @@ public class SyncErpBillsScheduleService {
|
||||
query.setFilterString(filterString);
|
||||
query.setFormId(formType);
|
||||
query.setFieldKeys("FID");
|
||||
query.setLimit(0);
|
||||
query.setLimit(10);
|
||||
result = erpServiceUtils.queryBills(query);
|
||||
if (ObjectUtils.isNotEmpty(result)) {
|
||||
K3CloudApi k3CloudApi = erpServiceUtils.getCloudApi();
|
||||
handleBills(mappingJson, formType, dtlSplit, errorMsg, result, k3CloudApi);
|
||||
handleBills(mappingJson, formType, dtlSplit, errorMsg, result, k3CloudApi, true);
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(errorMsg)) {
|
||||
throw new BadRequestException("同步成功" + (result.size() - errorMsg.size()) + "条,失败信息:" + errorMsg.toString());
|
||||
@@ -224,7 +226,7 @@ public class SyncErpBillsScheduleService {
|
||||
private static String getFilterString(String formType, String code, String timeStart, String timeEnd) {
|
||||
String filterString;
|
||||
if (StringUtils.isNotBlank(code)) {
|
||||
filterString = "FBillNo = '" + code + "'";
|
||||
filterString = "FBillNo like '%" + code + "'";
|
||||
} else {
|
||||
filterString = BILL_ORG_MAPPING.get(formType) + " = '750572' ";
|
||||
if ("ka7c19edf9d4b4b39b8cc4a06802163b0".equals(formType)) {
|
||||
@@ -241,7 +243,7 @@ public class SyncErpBillsScheduleService {
|
||||
return filterString;
|
||||
}
|
||||
|
||||
private void handleBills(String mappingJson, String formType, Boolean dtlSplit, Map errorMsg, JSONArray result, K3CloudApi cloudApi) {
|
||||
private void handleBills(String mappingJson, String formType, Boolean dtlSplit, Map errorMsg, JSONArray result, K3CloudApi cloudApi, Boolean isManual) {
|
||||
//物料同步
|
||||
SyncFormMapping syncFormMapping = syncFormMappingServiceImpl.getOne(new LambdaQueryWrapper<SyncFormMapping>().in(SyncFormMapping::getForm_type, "BD_MATERIAL"));
|
||||
String materialMappingString = JSON.toJSONString(syncFormMapping.getMapping_json());
|
||||
@@ -296,11 +298,11 @@ public class SyncErpBillsScheduleService {
|
||||
for (PmFormData f : mainBill) {
|
||||
//存在ID,主单据不新增不修改,修改未出库单据的明细
|
||||
String id = f.getId() + "$" + f.getForm_type();
|
||||
if (exitFormDataList.contains(id)) {
|
||||
//实时扫描则同步修改未出库的用料清单单据
|
||||
if (exitFormDataList.contains(id) && isManual) {
|
||||
//单据明细
|
||||
if (StringUtils.isBlank(f.getCode())) {
|
||||
PmFormData existDtlData = formDataService.getOne(new QueryWrapper<PmFormData>().eq("id", id).select("qty"));
|
||||
//同步修改未出库单据
|
||||
//existDtlData.getQty().compareTo(BigDecimal.ZERO) > 0||f.getPlan_qty().compareTo(f.getAssign_qty()) > 0
|
||||
if (existDtlData.getQty() != null) {
|
||||
if (existDtlData.getQty().compareTo(BigDecimal.ZERO) > 0) {
|
||||
|
||||
Reference in New Issue
Block a user