|
|
@@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springblade.common.utils.BaseUtils;
|
|
|
import org.springblade.manager.dto.FormEndPayDTO;
|
|
|
import org.springblade.manager.entity.ChapterEndPay;
|
|
|
+import org.springblade.manager.utils.InventoryUCUtil;
|
|
|
import org.springblade.manager.utils.PeriodContractUtil;
|
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
import org.springblade.core.oss.model.BladeFile;
|
|
|
@@ -28,8 +29,7 @@ import org.springblade.manager.formula.NodeTable;
|
|
|
import org.springblade.manager.service.impl.FormEndPayServiceImpl;
|
|
|
import org.springblade.manager.utils.FormEndPayUtil;
|
|
|
import org.springblade.manager.vo.*;
|
|
|
-import org.springblade.meter.entity.ContractMeterPeriod;
|
|
|
-import org.springblade.meter.entity.InterimPayCertificateItem;
|
|
|
+import org.springblade.meter.entity.*;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -254,6 +254,8 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
this.specialList.add(new MaterialInterimSp());
|
|
|
/*材料*/
|
|
|
this.specialList.add(new MaterialsArrivalSp());
|
|
|
+ /*清单工程量变更一览*/
|
|
|
+ this.specialList.add(new InventoryUC());
|
|
|
/*中期支付证书*/
|
|
|
this.specialList.add(new InterimPayCert());
|
|
|
this.specialList.add(new InterimSum());
|
|
|
@@ -959,6 +961,109 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
putOut(MaterialsArrival.class);
|
|
|
}
|
|
|
}
|
|
|
+ @Data
|
|
|
+ @EqualsAndHashCode(callSuper = true)
|
|
|
+ public class InventoryUC extends BaseSpecial<InventoryUnitChange> implements Special{
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean ready() {
|
|
|
+ return MeterType.INTERIM.equals(tec.getMeterType());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void parse() {
|
|
|
+ builderFormDatas(InventoryUnitChange.class);
|
|
|
+ List<ChangeTokenForm> changeTokenForms = InventoryUCUtil.getChangeTokenForm(tec.getContractId(), tec.getPeriodInfo().getStartDate(), tec.getPeriodInfo().getEndDate());
|
|
|
+ if(!changeTokenForms.isEmpty()){
|
|
|
+ List<ChangeTokenInventory> inventoryList=new ArrayList<>();
|
|
|
+ for (ChangeTokenForm tokenForm : changeTokenForms) {
|
|
|
+ List<ChangeTokenInventory> list = InventoryUCUtil.getChangeTokenInventory(tec.getContractId(), tokenForm.getId());
|
|
|
+ inventoryList.addAll(list);
|
|
|
+ }
|
|
|
+ //根据清单编号分组
|
|
|
+ Map<String, List<ChangeTokenInventory>> map = inventoryList.stream().filter(e -> StringUtils.isNotEmpty(e.getFormNumber())).collect(Collectors.groupingBy(ChangeTokenInventory::getFormNumber));
|
|
|
+ for (Map.Entry<String, List<ChangeTokenInventory>> entry : map.entrySet()) {
|
|
|
+ //同一组清单编号
|
|
|
+ List<ChangeTokenInventory> ChangeTokenInventoryList = entry.getValue();
|
|
|
+ InventoryUnitChange change = new InventoryUnitChange();
|
|
|
+ ContractInventoryForm inventoryNum = InventoryUCUtil.getInventoryNum(ChangeTokenInventoryList.get(0).getContractFormId());
|
|
|
+ /*清单编号*/
|
|
|
+ change.setInventoryNum(inventoryNum.getChapterNumber()+"章");
|
|
|
+ /*项目编号*/
|
|
|
+ change.setFormNumber(entry.getKey());
|
|
|
+ /*项目内容*/
|
|
|
+ change.setItemName(inventoryNum.getFormName());
|
|
|
+ /*计量单位*/
|
|
|
+ change.setUnit(inventoryNum.getUnit());
|
|
|
+ /*合同清单数量(单价)*/
|
|
|
+ change.setContractInventoryPrice(inventoryNum.getBidPrice()+"");
|
|
|
+ /*合同清单数量(工程量)*/
|
|
|
+ change.setContractInventoryUnit(inventoryNum.getContractTotal()+"");
|
|
|
+ /*合同清单数量(金额)*/
|
|
|
+ change.setContractInventoryAmount(inventoryNum.getContractMoney()+"");
|
|
|
+ /*到本期末变更后(单价)*/
|
|
|
+ change.setAfterChangePeriodPrice(inventoryNum.getChangePrice()+"");
|
|
|
+ /*到本期末变更后(工程量)*/
|
|
|
+ change.setAfterChangePeriodUnit(inventoryNum.getChangeTotal()+"");
|
|
|
+ /*到本期末变更后(金额)*/
|
|
|
+ change.setAfterChangePeriodAmount(inventoryNum.getChangeMoney()+"");
|
|
|
+ //统计本期变更(数量) 将所有的变更数量加起来
|
|
|
+ BigDecimal totalChangeUnit = ChangeTokenInventoryList.stream()
|
|
|
+ .map(ChangeTokenInventory::getChangeTotal)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //统计本期变更(金额) 将所有的变更金额加起来 变更数量*当前单价
|
|
|
+ BigDecimal totalChangeAmount = ChangeTokenInventoryList.stream()
|
|
|
+ .map(item -> {
|
|
|
+ BigDecimal changeTotal = item.getChangeTotal();
|
|
|
+ BigDecimal currentPrice = item.getCurrentPrice();
|
|
|
+ if (changeTotal != null && currentPrice != null) {
|
|
|
+ return changeTotal.multiply(currentPrice);
|
|
|
+ }
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ })
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ /*本期变更(数量)*/
|
|
|
+ change.setChangePeriodUnit(totalChangeUnit+"");
|
|
|
+ /*本期变更(金额)*/
|
|
|
+ change.setChangePeriodAmount(totalChangeAmount+"");
|
|
|
+ //变更令IDs
|
|
|
+ List<Long> changeTokenIds = ChangeTokenInventoryList.stream()
|
|
|
+ .map(ChangeTokenInventory::getChangeTokenId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //变更批复文号
|
|
|
+ String changeApprovalNumber = changeTokenForms.stream().filter(e -> changeTokenIds.contains(e.getId())).map(ChangeTokenForm::getChangeApprovalNumber).filter(StringUtils::isNotEmpty).collect(Collectors.joining(","));
|
|
|
+ /*批准文号*/
|
|
|
+ change.setChangeApprovalNumber(changeApprovalNumber);
|
|
|
+ //查询上一期的变更情况
|
|
|
+ //上期期数ID
|
|
|
+ Long prePeriodId = null;
|
|
|
+ List<ContractMeterPeriod> contractMeterPeriodList =FormEndPayUtil.selectList(tec.getContractId());
|
|
|
+ if(contractMeterPeriodList.size()>0){
|
|
|
+ OptionalInt index=IntStream.range(0, contractMeterPeriodList.size())
|
|
|
+ .filter(i -> contractMeterPeriodList.get(i).getId().equals(tec.getPeriodId()))
|
|
|
+ .findFirst();
|
|
|
+ //i大于0 说明需要有上期
|
|
|
+ if(index.isPresent()){
|
|
|
+ int j = index.getAsInt();
|
|
|
+ if(j>0){
|
|
|
+ prePeriodId=contractMeterPeriodList.get(j-1).getId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(prePeriodId!=null){
|
|
|
+
|
|
|
+ }
|
|
|
+ //获取上一期的到本期末变更数量
|
|
|
+
|
|
|
+ //获取上一期的到本期末变更金额
|
|
|
+ }
|
|
|
+ putOut();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@Data
|
|
|
@EqualsAndHashCode(callSuper = true)
|