ProductAttributeInfoManagerImpl.java
package com.mycim.server.spec.manager.impl;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.spec.dao.ProductAttributeInfoDao;
import com.mycim.server.spec.manager.ProcessSpecInfoManager;
import com.mycim.server.spec.manager.ProductAttributeInfoManager;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.VersionStatus;
import com.mycim.valueobject.prp.ProcessSpecInfo;
import com.mycim.valueobject.prp.ProductAttributeInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Product Attribute
*
* @author Qiansheng.Wang
* @since 2021-05-15
*/
@Service
@Transactional
public class ProductAttributeInfoManagerImpl implements ProductAttributeInfoManager {
@Autowired
ProductAttributeInfoDao productAttributeInfoDao;
@Autowired
ProcessSpecInfoManager processSpecInfoManager;
@Override
public void insertProductAttributeInfos(TransactionLog transactionLog,
List<ProductAttributeInfo> productAttributeInfos) {
for (ProductAttributeInfo productAttributeInfo : productAttributeInfos) {
productAttributeInfo.setActiveFlag(false);
productAttributeInfo.setActiveUser(null);
productAttributeInfo.setActiveTime(null);
productAttributeInfo.setCurrentStatus(VersionStatus.UNFROZEN_KEY);
productAttributeInfo.setCreateUserId(transactionLog.getTransPerformedBy());
productAttributeInfo.setCreateTime(transactionLog.getTransStartTimestamp());
productAttributeInfo.setLastUpdatedUser(transactionLog.getTransPerformedBy());
productAttributeInfo.setLastUpdatedTime(transactionLog.getTransStartTimestamp());
}
productAttributeInfoDao.insertProductAttributeInfos(productAttributeInfos);
}
@Override
public void deleteProductAttributeInfos(List<ProductAttributeInfo> productAttributeInfos) {
if (CollectionUtils.isEmpty(productAttributeInfos)) {
return;
}
productAttributeInfoDao.deleteProductAttributeInfos(productAttributeInfos);
}
@Override
public void updateStatusOfProductAttributeInfos(TransactionLog transactionLog,
List<ProductAttributeInfo> productAttributeInfos,
String targetStatus) {
for (ProductAttributeInfo attributeInfo : productAttributeInfos) {
if (StringUtils.equalsIgnoreCase(targetStatus, VersionStatus.ACTIVE_KEY)) {
attributeInfo.setActiveFlag(true);
attributeInfo.setActiveTime(transactionLog.getTransStartTimestamp());
attributeInfo.setActiveUser(transactionLog.getTransPerformedBy());
}
attributeInfo.setCurrentStatus(targetStatus);
attributeInfo.setLastUpdatedTime(transactionLog.getTransStartTimestamp());
attributeInfo.setLastUpdatedUser(transactionLog.getTransPerformedBy());
}
productAttributeInfoDao.updateStatusOfProductAttributeInfos(productAttributeInfos);
}
@Override
public void saveProductAttributeInfos(TransactionLog transactionLog, ProcessSpecInfo processSpecInfo,
List<ProductAttributeInfo> willSaveProductAttributeInfo) {
List<ProductAttributeInfo> attributeInfoInDb = getProductAttributeInfosByProcess(
processSpecInfo.getProcessRrn(), processSpecInfo.getProcessVersion());
List<ProductAttributeInfo> insertList = new ArrayList<>();
List<ProductAttributeInfo> updateList = new ArrayList<>();
for (ProductAttributeInfo attribute : willSaveProductAttributeInfo) {
if (attributeInfoInDb.contains(attribute)) {
BeanUtils.copyProperties(attributeInfoInDb.get(attributeInfoInDb.indexOf(attribute)), attribute);
attribute.setCurrentStatus(VersionStatus.UNFROZEN_KEY);
attribute.setLastUpdatedUser(transactionLog.getTransPerformedBy());
attribute.setLastUpdatedTime(transactionLog.getTransStartTimestamp());
updateList.add(attribute);
} else {
attribute.setActiveFlag(false);
attribute.setCurrentStatus(VersionStatus.UNFROZEN_KEY);
attribute.setLastUpdatedUser(transactionLog.getTransPerformedBy());
attribute.setLastUpdatedTime(transactionLog.getTransStartTimestamp());
attribute.setCreateUserId(transactionLog.getTransPerformedBy());
attribute.setCreateTime(transactionLog.getTransStartTimestamp());
insertList.add(attribute);
}
}
productAttributeInfoDao.insertProductAttributeInfos(insertList);
productAttributeInfoDao.updateStatusOfProductAttributeInfos(updateList);
}
@Override
public ProductAttributeInfo getProductAttributeInfos(Long processRrn, Integer processVersion, Long productRrn,
Integer productVersion) {
return productAttributeInfoDao
.getProductAttributeInfoByPrimaryKey(productRrn, productVersion, processRrn, processVersion);
}
@Override
public List<ProductAttributeInfo> getProductAttributeInfos(Long productRrn, Long processRrn) {
ProductAttributeInfo queryTemp = new ProductAttributeInfo();
queryTemp.setProductRrn(productRrn);
queryTemp.setProcessRrn(processRrn);
return getProductAttributeInfos(queryTemp);
}
@Override
public List<ProductAttributeInfo> getProductAttributeInfosByProduct(Long productRrn) {
ProductAttributeInfo queryTemp = new ProductAttributeInfo();
queryTemp.setProductRrn(productRrn);
return getProductAttributeInfos(queryTemp);
}
@Override
public List<ProductAttributeInfo> getProductAttributeInfosByProcess(Long processRrn, Integer processVersion) {
ProductAttributeInfo queryTemp = new ProductAttributeInfo();
queryTemp.setProcessRrn(processRrn);
queryTemp.setProcessVersion(processVersion);
return getProductAttributeInfos(queryTemp);
}
@Override
public List<ProductAttributeInfo> getProductAttributeInfosByProcess(Long processRrn, Integer processVersion,
Long productRrn) {
ProductAttributeInfo queryTemp = new ProductAttributeInfo();
queryTemp.setProcessRrn(processRrn);
queryTemp.setProcessVersion(processVersion);
queryTemp.setProductRrn(productRrn);
return getProductAttributeInfos(queryTemp);
}
private List<ProductAttributeInfo> getProductAttributeInfos(ProductAttributeInfo attributeInfoQueryTemp) {
List<ProductAttributeInfo> infos = productAttributeInfoDao
.getProductAttributeInfoWithPrimaryKey(attributeInfoQueryTemp);
if (CollectionUtils.isEmpty(infos)) {
infos = new ArrayList<>();
}
return infos;
}
}