pbom增加字段来源状态
This commit is contained in:
parent
6d77ac079f
commit
eb4e33a749
|
|
@ -0,0 +1,20 @@
|
|||
package com.nflg.product.bomnew.constant;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author luohj
|
||||
* @date 2024/8/9 09:25:44
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum PbomSourceStatusEnum implements ValueEnum<Integer> {
|
||||
|
||||
EBOM(1, "EBOM导入"),
|
||||
PBOM(2, "PBOM创建"),
|
||||
E_P(3, "E->P修改");
|
||||
|
||||
private final Integer value;
|
||||
private final String description;
|
||||
}
|
||||
|
|
@ -239,6 +239,10 @@ public class BomNewPbomChildEntity implements Serializable {
|
|||
@ApiModelProperty(value = "来源 1-ebom转换 2-dqbom转换 3-从SAP导入")
|
||||
private Integer source;
|
||||
|
||||
@TableField(value = "source_status")
|
||||
@ApiModelProperty(value = "来源状态:1-EBOM导入、2-PBOM创建、3-E->P修改")
|
||||
private Integer sourceStatus;
|
||||
|
||||
private static final long serialVersionUID = -76633783850936076L;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -370,6 +370,10 @@ public class BomNewPbomParentEntity implements Serializable {
|
|||
@ApiModelProperty(value = "来源 1-ebom转换 2-dqbom转换 3-从SAP导入 4-复制")
|
||||
private Integer source;
|
||||
|
||||
@TableField(value = "source_status")
|
||||
@ApiModelProperty(value = "来源状态:1-EBOM导入、2-PBOM创建、3-E->P修改")
|
||||
private Integer sourceStatus;
|
||||
|
||||
private static final long serialVersionUID = -31999878274445137L;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -293,6 +293,12 @@ public class BomNewPbomParentVO extends BaseMaterialVO implements Serializable {
|
|||
@ApiModelProperty("所有父级的rowId")
|
||||
private Set<Long> allParentRowIds = new HashSet<>();
|
||||
|
||||
@ApiModelProperty(value = "来源状态:1-EBOM导入、2-PBOM创建、3-E->P修改")
|
||||
private Integer sourceStatus;
|
||||
|
||||
@ApiModelProperty(value = "来源状态:1-EBOM导入、2-PBOM创建、3-E->P修改")
|
||||
private String sourceStatusName;
|
||||
|
||||
|
||||
private String materialNoAndProjectType;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,18 +5,17 @@ import cn.hutool.core.collection.CollUtil;
|
|||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.*;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.mzt.logapi.context.LogRecordContext;
|
||||
import com.nflg.product.base.core.conmon.util.SessionUtil;
|
||||
|
|
@ -356,6 +355,8 @@ public class BomNewPbomParentService extends ServiceImpl<BomNewPbomParentMapper,
|
|||
child.setSapOrderNum(BomUtil.generateSapOrderNum(child.getProjectType(), child.getMaterialCategoryCode()
|
||||
, child.getFacCode(), child.getMaterialNo(), child.getBomExist()));
|
||||
child.setSapState(null);
|
||||
|
||||
child.setSourceStatusName(EnumUtils.getEnumDescription(PbomSourceStatusEnum.class,child.getSourceStatus()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -377,7 +378,28 @@ public class BomNewPbomParentService extends ServiceImpl<BomNewPbomParentMapper,
|
|||
|
||||
if (CollUtil.isNotEmpty(paramDTO.getChildList())) {
|
||||
List<BomNewPbomChildEntity> childList = Convert.toList(BomNewPbomChildEntity.class, paramDTO.getChildList());
|
||||
childList.forEach(u -> u.setParentRowId(paramDTO.getBomRowId()));
|
||||
List<Long> childIds = paramDTO.getChildList().stream().map(BomNewPbomParentVO::getRowId).collect(Collectors.toList());
|
||||
List<BomNewPbomChildEntity> pChildList = Lists.newArrayList();
|
||||
if(!childIds.isEmpty()){
|
||||
pChildList = pbomChildService.list(Wrappers.<BomNewPbomChildEntity>lambdaQuery().in(BomNewPbomChildEntity::getRowId,childIds));
|
||||
}
|
||||
Map<Long,BomNewPbomChildEntity> childMap = pChildList.stream().collect(Collectors.toMap(BomNewPbomChildEntity::getRowId,Function.identity()));
|
||||
|
||||
List<String> fieldList = Lists.newArrayList("projectType","materialNo","drawingNo","num","unitWeight","remark");
|
||||
childList.forEach(u -> {
|
||||
u.setParentRowId(paramDTO.getBomRowId());
|
||||
if(u.getRowId() == null){
|
||||
u.setSourceStatus(PbomSourceStatusEnum.PBOM.getValue());
|
||||
}else{
|
||||
BomNewPbomChildEntity oChild = childMap.get(u.getRowId());
|
||||
//判断是否有变更记录
|
||||
String re = new CompareUtils<BomNewPbomChildEntity>().compare(oChild,u,fieldList,false);
|
||||
//修改记录如果原先是 EBOM导入 状态,变更为E->P修改
|
||||
if(Objects.equals(PbomSourceStatusEnum.EBOM.getValue(),oChild.getSourceStatus()) && StrUtil.isNotBlank(re)){
|
||||
u.setSourceStatus(PbomSourceStatusEnum.E_P.getValue());
|
||||
}
|
||||
}
|
||||
});
|
||||
pbomChildService.saveOrUpdateBatch(childList);
|
||||
parent.setBomExist(1);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -132,6 +132,7 @@ public class EBomToPBomFor31 extends EBomToPbomBase {
|
|||
childEnt.setFacCode(facCode);
|
||||
childEnt.setIdentityNo(StrUtil.join("-", parentEnt.getMaterialNo(), eb.getMaterialNo()));
|
||||
childEnt.setSource(PbomSourceEnum.FROM_EBOM.getValue());
|
||||
childEnt.setSourceStatus(PbomSourceStatusEnum.EBOM.getValue());
|
||||
this.pBomChildResult.add(childEnt);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,6 +221,7 @@ public abstract class EBomToPbomBase {
|
|||
pBomParent.setDeptRowId(SessionUtil.getDepartRowId());
|
||||
pBomParent.setCreatedBy(SessionUtil.getUserCode());
|
||||
pBomParent.setSource(PbomSourceEnum.FROM_EBOM.getValue());
|
||||
pBomParent.setSourceStatus(PbomSourceStatusEnum.EBOM.getValue());
|
||||
if (Objects.nonNull(oldParent)) {
|
||||
oldParent.setExpireEndTime(LocalDateTime.now());
|
||||
oldParent.setLastVersionIs(0);
|
||||
|
|
|
|||
|
|
@ -6,10 +6,7 @@ import cn.hutool.core.convert.Convert;
|
|||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import com.nflg.product.base.core.conmon.util.SessionUtil;
|
||||
import com.nflg.product.bomnew.constant.PBomEditStatusEnum;
|
||||
import com.nflg.product.bomnew.constant.PBomStatusEnum;
|
||||
import com.nflg.product.bomnew.constant.PbomSourceEnum;
|
||||
import com.nflg.product.bomnew.constant.UserJobEnum;
|
||||
import com.nflg.product.bomnew.constant.*;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewPbomChildEntity;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewPbomParentEntity;
|
||||
import com.nflg.product.bomnew.pojo.vo.BomNewPbomParentVO;
|
||||
|
|
@ -101,6 +98,7 @@ public class PBomUpgrade {
|
|||
pbomParent.setTechnologyUserCode(SessionUtil.getUserCode());
|
||||
pbomParent.setRemark("");
|
||||
pbomParent.setSource(PbomSourceEnum.FROM_CHANGE.getValue());
|
||||
pbomParent.setSourceStatus(PbomSourceStatusEnum.PBOM.getValue());
|
||||
pbomParent.setReleaseTime(null);
|
||||
pbomParent.setReleaseUserName(null);
|
||||
pbomParent.setSapState(1);
|
||||
|
|
@ -137,6 +135,7 @@ public class PBomUpgrade {
|
|||
child.setCreatedBy(SessionUtil.getUserCode());
|
||||
child.setModifyTime(null);
|
||||
child.setSource(PbomSourceEnum.FROM_CHANGE.getValue());
|
||||
child.setSourceStatus(PbomSourceStatusEnum.PBOM.getValue());
|
||||
child.setRemark("");
|
||||
this.childResult.add(child);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
package com.nflg.product.bomnew.util;
|
||||
|
||||
/**
|
||||
* packageName com.nflg.product.bomnew.util
|
||||
*
|
||||
* @author luohj
|
||||
* @className CompareNode
|
||||
* @date 2024/8/9 0009
|
||||
* @description TODO
|
||||
*/
|
||||
public class CompareNode {
|
||||
/**
|
||||
* 字段
|
||||
*/
|
||||
private String fieldKey;
|
||||
|
||||
/**
|
||||
* 字段值
|
||||
*/
|
||||
private Object fieldValue;
|
||||
|
||||
/**
|
||||
* 字段名称
|
||||
*/
|
||||
private String fieldName;
|
||||
|
||||
/**
|
||||
* 字段类型
|
||||
*/
|
||||
private String type;
|
||||
|
||||
public String getFieldKey() {
|
||||
return fieldKey;
|
||||
}
|
||||
|
||||
public void setFieldKey(String fieldKey) {
|
||||
this.fieldKey = fieldKey;
|
||||
}
|
||||
|
||||
public Object getFieldValue() {
|
||||
return fieldValue;
|
||||
}
|
||||
|
||||
public void setFieldValue(Object fieldValue) {
|
||||
this.fieldValue = fieldValue;
|
||||
}
|
||||
|
||||
public String getFieldName() {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
public void setFieldName(String fieldName) {
|
||||
this.fieldName = fieldName;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
package com.nflg.product.bomnew.util;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.baomidou.mybatisplus.core.conditions.interfaces.Compare;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.nflg.product.bomnew.pojo.entity.BomNewPbomChildEntity;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* packageName com.nflg.product.bomnew.util
|
||||
*
|
||||
* @author luohj
|
||||
* @className CompareUtils
|
||||
* @date 2024/8/9 0009
|
||||
* @description TODO
|
||||
*/
|
||||
public class CompareUtils <T> {
|
||||
|
||||
private static final String COMMA = ",";
|
||||
|
||||
/**
|
||||
* 属性比较
|
||||
*
|
||||
* @param source 源数据对象
|
||||
* @param target 目标数据对象
|
||||
* @return 对应属性值的比较变化
|
||||
*/
|
||||
public String compare(T source, T target) {
|
||||
return compare(source, target, null,true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 属性比较
|
||||
*
|
||||
* @param source 源数据对象
|
||||
* @param target 目标数据对象
|
||||
* @param ignoreCompareFields 忽略比较的字段
|
||||
* @param isIgnore true是要忽略的字段 false仅对比的字段值
|
||||
* @return 对应属性值的比较变化
|
||||
*/
|
||||
public String compare(T source, T target, List<String> ignoreCompareFields,boolean isIgnore) {
|
||||
if (Objects.isNull(source) && Objects.isNull(target)) {
|
||||
return "";
|
||||
}
|
||||
Map<String, CompareNode> sourceMap = this.getFiledValueMap(source);
|
||||
Map<String, CompareNode> targetMap = this.getFiledValueMap(target);
|
||||
if (sourceMap.isEmpty() && targetMap.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
// 如果源数据为空,则只显示目标数据,不显示属性变化情况
|
||||
if (sourceMap.isEmpty()) {
|
||||
return doEmpty(targetMap, ignoreCompareFields,isIgnore);
|
||||
}
|
||||
// 如果源数据为空,则显示属性变化情况
|
||||
String s = doCompare(sourceMap, targetMap, ignoreCompareFields,isIgnore);
|
||||
if (!s.endsWith(COMMA)) {
|
||||
return s;
|
||||
}
|
||||
return s.substring(0, s.length() - 1);
|
||||
}
|
||||
|
||||
private String doEmpty(Map<String, CompareNode> targetMap, List<String> ignoreCompareFields,boolean isIgnore) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Collection<CompareNode> values = targetMap.values();
|
||||
int size = values.size();
|
||||
int current = 0;
|
||||
for (CompareNode node : values) {
|
||||
current++;
|
||||
Object o = Optional.ofNullable(node.getFieldValue()).orElse("");
|
||||
if (Objects.nonNull(ignoreCompareFields)) {
|
||||
if(isIgnore){
|
||||
if(ignoreCompareFields.contains(node.getFieldKey())){
|
||||
continue;
|
||||
}
|
||||
}else{
|
||||
if(!ignoreCompareFields.contains(node.getFieldKey())){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (o.toString().length() > 0) {
|
||||
sb.append("[" + node.getFieldName() + ":" + o + "]");
|
||||
if (current < size) {
|
||||
sb.append(COMMA);
|
||||
}
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String doCompare(Map<String, CompareNode> sourceMap, Map<String, CompareNode> targetMap, List<String> ignoreCompareFields,boolean isIgnore) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Set<String> keys = sourceMap.keySet();
|
||||
int size = keys.size();
|
||||
int current = 0;
|
||||
BigDecimal zero = new BigDecimal(0);
|
||||
for (String key : keys) {
|
||||
current++;
|
||||
CompareNode sn = sourceMap.get(key);
|
||||
CompareNode tn = targetMap.get(key);
|
||||
if (Objects.nonNull(ignoreCompareFields)) {
|
||||
if(isIgnore){
|
||||
if(ignoreCompareFields.contains(sn.getFieldKey())){
|
||||
continue;
|
||||
}
|
||||
}else{
|
||||
if(!ignoreCompareFields.contains(sn.getFieldKey())){
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
String sv = Optional.ofNullable(sn.getFieldValue()).orElse("").toString();
|
||||
String tv = Optional.ofNullable(tn.getFieldValue()).orElse("").toString();
|
||||
|
||||
if(Objects.equals("java.math.BigDecimal",sn.getType())){
|
||||
if(Convert.toBigDecimal(sv,zero).compareTo(Convert.toBigDecimal(tv,zero)) != 0){
|
||||
sb.append(String.format("[%s:%s -> %s]", sn.getFieldName(), sv, tv));
|
||||
if (current < size) {
|
||||
sb.append(COMMA);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
// 只有两者属性值不一致时, 才显示变化情况
|
||||
if (!sv.equals(tv)) {
|
||||
sb.append(String.format("[%s:%s -> %s]", sn.getFieldName(), sv, tv));
|
||||
if (current < size) {
|
||||
sb.append(COMMA);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private Map<String, CompareNode> getFiledValueMap(T t) {
|
||||
if (Objects.isNull(t)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
Field[] fields = t.getClass().getDeclaredFields();
|
||||
if (Objects.isNull(fields) || fields.length == 0) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
Map<String, CompareNode> map = new LinkedHashMap();
|
||||
for (Field field : fields) {
|
||||
field.setAccessible(true);
|
||||
try {
|
||||
String fieldKey = field.getName();
|
||||
CompareNode node = new CompareNode();
|
||||
node.setFieldKey(fieldKey);
|
||||
node.setFieldValue(field.get(t));
|
||||
node.setFieldName(fieldKey);
|
||||
node.setType(field.getType().getName());
|
||||
map.put(field.getName(), node);
|
||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
BomNewPbomChildEntity p1 = new BomNewPbomChildEntity();
|
||||
p1.setRowId(1l);
|
||||
p1.setSourceStatus(2);
|
||||
|
||||
BomNewPbomChildEntity p2 = new BomNewPbomChildEntity();
|
||||
p2.setRowId(1l);
|
||||
p2.setSourceStatus(2);
|
||||
String re = new CompareUtils<BomNewPbomChildEntity>().compare(p1,p2,Lists.newArrayList("rowId","sourceStatus","identityNo"),false);
|
||||
|
||||
System.out.println("re:"+re);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue