|
|
|
|
@ -17,22 +17,24 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
|
|
import org.dromara.common.tenant.helper.TenantHelper;
|
|
|
|
|
import org.dromara.oa.erp.domain.ErpProjectPurchase;
|
|
|
|
|
import org.dromara.oa.erp.domain.ErpProjectPurchaseMaterial;
|
|
|
|
|
import org.dromara.oa.erp.domain.bo.ErpProjectPurchaseBo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseMaterialVo;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpProjectPurchaseMapper;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpProjectPurchaseMaterialMapper;
|
|
|
|
|
import org.dromara.oa.erp.service.IErpProjectPurchaseService;
|
|
|
|
|
import org.dromara.system.api.RemoteCodeRuleService;
|
|
|
|
|
import org.dromara.workflow.api.RemoteWorkflowService;
|
|
|
|
|
import org.dromara.workflow.api.domain.RemoteFlowInstanceBizExt;
|
|
|
|
|
import org.dromara.workflow.api.domain.RemoteStartProcess;
|
|
|
|
|
import org.dromara.workflow.api.event.ProcessEvent;
|
|
|
|
|
import org.springframework.context.event.EventListener;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 项目采购信息Service业务层处理
|
|
|
|
|
@ -47,9 +49,14 @@ public class ErpProjectPurchaseServiceImpl implements IErpProjectPurchaseService
|
|
|
|
|
|
|
|
|
|
private final ErpProjectPurchaseMapper baseMapper;
|
|
|
|
|
|
|
|
|
|
private final ErpProjectPurchaseMaterialMapper purchaseMaterialMapper;
|
|
|
|
|
|
|
|
|
|
@DubboReference(timeout = 30000)
|
|
|
|
|
private RemoteWorkflowService remoteWorkflowService;
|
|
|
|
|
|
|
|
|
|
@DubboReference()
|
|
|
|
|
private RemoteCodeRuleService remoteCodeRuleService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询项目采购信息
|
|
|
|
|
*
|
|
|
|
|
@ -117,12 +124,24 @@ public class ErpProjectPurchaseServiceImpl implements IErpProjectPurchaseService
|
|
|
|
|
* @return 是否新增成功
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean insertByBo(ErpProjectPurchaseBo bo) {
|
|
|
|
|
ErpProjectPurchase add = MapstructUtils.convert(bo, ErpProjectPurchase.class);
|
|
|
|
|
assert add != null;
|
|
|
|
|
validEntityBeforeSave(add);
|
|
|
|
|
String purchaseCode = remoteCodeRuleService.selectCodeRuleCode("1007");
|
|
|
|
|
add.setPurchaseCode(purchaseCode);
|
|
|
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
|
|
|
if (flag) {
|
|
|
|
|
bo.setProjectPurchaseId(add.getProjectPurchaseId());
|
|
|
|
|
// 保存物料列表
|
|
|
|
|
List<ErpProjectPurchaseMaterial> purchaseMaterialList = bo.getPurchaseMaterialList();
|
|
|
|
|
if (purchaseMaterialList != null && !purchaseMaterialList.isEmpty()) {
|
|
|
|
|
for (ErpProjectPurchaseMaterial material : purchaseMaterialList) {
|
|
|
|
|
material.setProjectPurchaseId(add.getProjectPurchaseId());
|
|
|
|
|
purchaseMaterialMapper.insert(material);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return flag;
|
|
|
|
|
}
|
|
|
|
|
@ -181,10 +200,39 @@ public class ErpProjectPurchaseServiceImpl implements IErpProjectPurchaseService
|
|
|
|
|
* @return 是否修改成功
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean updateByBo(ErpProjectPurchaseBo bo) {
|
|
|
|
|
ErpProjectPurchase update = MapstructUtils.convert(bo, ErpProjectPurchase.class);
|
|
|
|
|
validEntityBeforeSave(update);
|
|
|
|
|
return baseMapper.updateById(update) > 0;
|
|
|
|
|
boolean flag = baseMapper.updateById(update) > 0;
|
|
|
|
|
if (flag) {
|
|
|
|
|
List<ErpProjectPurchaseMaterial> purchaseMaterialList = bo.getPurchaseMaterialList();
|
|
|
|
|
MPJLambdaWrapper<ErpProjectPurchaseMaterial> lqwRecord = JoinWrappers.lambda(ErpProjectPurchaseMaterial.class);
|
|
|
|
|
lqwRecord.eq(ErpProjectPurchaseMaterial::getProjectPurchaseId, bo.getProjectPurchaseId());
|
|
|
|
|
List<ErpProjectPurchaseMaterial> oldMaterialList = purchaseMaterialMapper.selectList(lqwRecord);
|
|
|
|
|
if (purchaseMaterialList != null && !purchaseMaterialList.isEmpty()) {
|
|
|
|
|
for (ErpProjectPurchaseMaterial material : purchaseMaterialList) {
|
|
|
|
|
material.setProjectPurchaseId(bo.getProjectPurchaseId());
|
|
|
|
|
purchaseMaterialMapper.insertOrUpdate(material);
|
|
|
|
|
}
|
|
|
|
|
Set<Long> existingMaterialIds = purchaseMaterialList.stream()
|
|
|
|
|
.map(ErpProjectPurchaseMaterial::getPurchaseMaterialId)
|
|
|
|
|
.filter(Objects::nonNull)
|
|
|
|
|
.collect(Collectors.toSet());
|
|
|
|
|
List<ErpProjectPurchaseMaterial> toDeleteList = oldMaterialList.stream()
|
|
|
|
|
.filter(material -> !existingMaterialIds.contains(material.getPurchaseMaterialId()))
|
|
|
|
|
.toList();
|
|
|
|
|
for (ErpProjectPurchaseMaterial toDelete : toDeleteList) {
|
|
|
|
|
purchaseMaterialMapper.deleteById(toDelete.getPurchaseMaterialId());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 如果新列表为空,删除所有旧物料
|
|
|
|
|
for (ErpProjectPurchaseMaterial oldMaterial : oldMaterialList) {
|
|
|
|
|
purchaseMaterialMapper.deleteById(oldMaterial.getPurchaseMaterialId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return flag;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -209,6 +257,29 @@ public class ErpProjectPurchaseServiceImpl implements IErpProjectPurchaseService
|
|
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据项目ID和备件标识查询物料信息
|
|
|
|
|
*
|
|
|
|
|
* @param projectId 项目ID
|
|
|
|
|
* @param spareFlag 备件标识(1备件-合同物料,0非备件-预算物料)
|
|
|
|
|
* @return 物料列表
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public List<ErpProjectPurchaseMaterialVo> getProjectMaterialsByProjectId(Long projectId, String spareFlag) {
|
|
|
|
|
if (projectId == null) {
|
|
|
|
|
return Collections.emptyList();
|
|
|
|
|
}
|
|
|
|
|
List<ErpProjectPurchaseMaterialVo> list = new ArrayList<>();
|
|
|
|
|
if ("0".equals(spareFlag)) {
|
|
|
|
|
// 非备件-预算物料
|
|
|
|
|
list = purchaseMaterialMapper.selectBudgetMaterialsByProjectId(projectId, spareFlag);
|
|
|
|
|
} else if ("1".equals(spareFlag)) {
|
|
|
|
|
// 备件-合同物料
|
|
|
|
|
list = purchaseMaterialMapper.selectContractMaterialsByProjectId(projectId, spareFlag);
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 项目采购流程事件监听
|
|
|
|
|
*
|
|
|
|
|
|