Selaa lähdekoodia

Merge remote-tracking branch 'origin/test-merge' into test-merge

LHB 2 päivää sitten
vanhempi
commit
00e03450b3

+ 59 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InventoryUnitChange.java

@@ -0,0 +1,59 @@
+package org.springblade.manager.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class InventoryUnitChange implements DataModel{
+    public static final String ID="20380000000";
+    public static final String TBN="IUC";
+    public static final String TBN_CH="清单工程量变更一览表";
+    @JSONField(name = "key_0",label="清单编号",ordinal = 1)
+    private String inventoryNum;
+    @JSONField(name = "key_1",label="项目编号")
+    private String formNumber;
+    @JSONField(name = "key_2",label="项目内容",ordinal = 2)
+    private String itemName;
+    @JSONField(name = "key_3",label="计量单位",ordinal = 3)
+    private String unit;
+    @JSONField(name = "key_4",label="合同清单数量(单价)",ordinal = 4)
+    private String contractInventoryPrice;
+    @JSONField(name = "key_5",label="合同清单数量(工程量)",ordinal = 5)
+    private String contractInventoryUnit;
+    @JSONField(name = "key_6",label="合同清单数量(金额)",ordinal = 6)
+    private String contractInventoryAmount;
+    @JSONField(name = "key_7",label="到本期末变更后(单价)",ordinal = 7)
+    private String afterChangePeriodPrice;
+    @JSONField(name = "key_8",label="到本期末变更后(工程量)",ordinal = 8)
+    private String afterChangePeriodUnit;
+    @JSONField(name = "key_9",label="到本期末变更后(金额)",ordinal = 9)
+    private String afterChangePeriodAmount;
+    @JSONField(name = "key_10",label="到本期末变更累计(数量)",ordinal = 10)
+    private String ChangeEndPeriodUnit;
+    @JSONField(name = "key_11",label="到本期末变更累计(金额)",ordinal = 11)
+    private String ChangeEndPeriodAmount;
+    @JSONField(name = "key_12",label="本期变更(数量)",ordinal = 12)
+    private String ChangePeriodUnit;
+    @JSONField(name = "key_13",label="本期变更(金额)",ordinal = 13)
+    private String ChangePeriodAmount;
+    @JSONField(name = "key_14",label="批准文号",ordinal = 14)
+    private String changeApprovalNumber;
+    @JSONField(name = "key_69",label="共N页" ,ordinal = 101)
+    private String pageTotal;
+    @JSONField(name = "key_68",label="第N页" ,ordinal = 101)
+    private String pageIndex;
+    /**是否是汇总小结数据,输出的时候显示,计算的时候不参与*/
+    private Boolean isSummary=false;
+    /**计算的时候控制正负属性*/
+    private BigDecimal invertState=BigDecimal.ONE;
+    public InventoryUnitChange(String itemName) {
+        this.itemName = itemName;
+    }
+
+    public InventoryUnitChange() {
+    }
+
+
+}

+ 107 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -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)

+ 45 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/InventoryUCUtil.java

@@ -0,0 +1,45 @@
+package org.springblade.manager.utils;
+
+import org.springblade.meter.entity.ChangeTokenForm;
+import org.springblade.meter.entity.ChangeTokenInventory;
+import org.springblade.meter.entity.ContractInventoryForm;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Component
+public class InventoryUCUtil {
+    private static JdbcTemplate jdbcTemplate;
+
+    public static ContractInventoryForm getInventoryNum(Long contractFormId) {
+        String sql="select * from s_contract_inventory_form where id ="+contractFormId;
+        return jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(ContractInventoryForm.class));
+    }
+
+    @Autowired
+    public  void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
+        InventoryUCUtil.jdbcTemplate = jdbcTemplate;
+    }
+
+    // 获取当前期变更令
+    public static List<ChangeTokenForm> getChangeTokenForm(Long contractId, LocalDate startDate, LocalDate endDate) {
+        String sql = "SELECT * FROM s_change_token_form where contract_id=" + contractId +
+                " and command_status=1 and is_deleted=0 and business_date>='"+startDate+"' and business_date<='"+endDate+"'";
+        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(ChangeTokenForm.class));
+    }
+    //获取当前变更令所用到的清单
+    public static List<ChangeTokenInventory> getChangeTokenInventory(Long contractId, Long changeTokenId){
+       String sql="select * from s_change_token_inventory where contract_id ="+contractId+" and change_token_id="+changeTokenId+" and is_deleted = 0 and is_collect_form = 0";
+       return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(ChangeTokenInventory.class));
+    }
+
+
+
+
+
+
+}