|
@@ -37,24 +37,41 @@ public class ExecutorInit extends FormulaExecutor {
|
|
private Function<Long, List<Material>> materialFormFc;
|
|
private Function<Long, List<Material>> materialFormFc;
|
|
private Function<Long,List<MeterPeriodInfo>> interimMeterPeriodAllFc;
|
|
private Function<Long,List<MeterPeriodInfo>> interimMeterPeriodAllFc;
|
|
private Function<Long, List<MidPayItem>> midPayItemListFc;
|
|
private Function<Long, List<MidPayItem>> midPayItemListFc;
|
|
-
|
|
|
|
private Function<Long,List<ChangeToken>> changeTokenFc;
|
|
private Function<Long,List<ChangeToken>> changeTokenFc;
|
|
public static final String SZ="[ 一二三四五六七八九十]+";
|
|
public static final String SZ="[ 一二三四五六七八九十]+";
|
|
|
|
|
|
|
|
|
|
public void handle() {
|
|
public void handle() {
|
|
|
|
+ /*合同段信息*/
|
|
|
|
+ addBaseInfo();
|
|
|
|
+ /*计量期信息*/
|
|
|
|
+ addPeriodInfo();
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ /*预处理计量单元树*/
|
|
|
|
+ private CompletableFuture<Map<Long, TreeNode<MeterTree>>> getMeterTreeMapAsync(Long contractId) {
|
|
|
|
+ return CompletableFuture.supplyAsync(() -> {
|
|
|
|
+ List<MeterTree> list = meterTreeFc.apply(contractId);
|
|
|
|
+ Function<MeterTree,TreeNode<MeterTree>> fc = m->{
|
|
|
|
+ TreeNode<MeterTree> treeNode = new TreeNode<>();
|
|
|
|
+ treeNode.setId(m.getId());
|
|
|
|
+ treeNode.setParentId(m.getParentId());
|
|
|
|
+ treeNode.setValue(m);
|
|
|
|
+ treeNode.setName(m.getNodeName());
|
|
|
|
+ treeNode.setSort(StringUtils.handObj2Integer(m.getSort()));
|
|
|
|
+ return treeNode;
|
|
|
|
+ };
|
|
|
|
+ return FormulaUtils.list2TreeNode(TreeNode::getId,list,fc,TreeNode::getParentId);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ private void addBaseInfo(){
|
|
/*加载合同数据*/
|
|
/*加载合同数据*/
|
|
BaseInfo baseInfo = baseInfoFc.apply(tec.getContractId());
|
|
BaseInfo baseInfo = baseInfoFc.apply(tec.getContractId());
|
|
-/*
|
|
|
|
- baseInfo.setStartAmount(BaseUtils.str2BigDecimal(baseInfo.getContractAmount()).multiply(new BigDecimal(100)).divide(BaseUtils.str2BigDecimal(baseInfo.getStartRatio()),3, RoundingMode.HALF_UP).toString());
|
|
|
|
-*/
|
|
|
|
baseInfo.setTotalAmount(baseInfo.getContractAmount());
|
|
baseInfo.setTotalAmount(baseInfo.getContractAmount());
|
|
- tec.getConstantMap().put(BaseInfo.TBN,baseInfo);
|
|
|
|
tec.meterInfo.setBaseInfo(baseInfo);
|
|
tec.meterInfo.setBaseInfo(baseInfo);
|
|
- LinkedHashMap<String, FormData> baseMap =FormulaUtils.toFormDataMap(baseInfo);
|
|
|
|
- tec.getRepeatKeys().addAll(baseMap.keySet());
|
|
|
|
- tec.formDataMap.putAll(baseMap);
|
|
|
|
|
|
+ dataModel2FormData(baseInfo);
|
|
|
|
+ }
|
|
|
|
+ private void addPeriodInfo(){
|
|
if(MeterType.MATERIAL.equals(tec.getMeterType())||MeterType.START.equals(tec.getMeterType())){
|
|
if(MeterType.MATERIAL.equals(tec.getMeterType())||MeterType.START.equals(tec.getMeterType())){
|
|
/*加载计量期信息*/
|
|
/*加载计量期信息*/
|
|
tec.periodInfo=meterPeriodFc.apply(tec.getReportId());
|
|
tec.periodInfo=meterPeriodFc.apply(tec.getReportId());
|
|
@@ -62,28 +79,23 @@ public class ExecutorInit extends FormulaExecutor {
|
|
tec.meterInfo.setMaterialsAll(materialFormFc.apply(tec.getContractId()));
|
|
tec.meterInfo.setMaterialsAll(materialFormFc.apply(tec.getContractId()));
|
|
}else if(MeterType.INTERIM.equals(tec.getMeterType())||MeterType.INTERIM_JL.equals(tec.getMeterType())){
|
|
}else if(MeterType.INTERIM.equals(tec.getMeterType())||MeterType.INTERIM_JL.equals(tec.getMeterType())){
|
|
/*计量期*/
|
|
/*计量期*/
|
|
- List<MeterPeriodInfo> meterPeriodInfoList = interimMeterPeriodAllFc.apply(tec.getContractId());
|
|
|
|
|
|
+ periodInfo();;
|
|
/*支付项信息*/
|
|
/*支付项信息*/
|
|
tec.meterInfo.setMidPayItemList(midPayItemListFc.apply(tec.getContractId()));
|
|
tec.meterInfo.setMidPayItemList(midPayItemListFc.apply(tec.getContractId()));
|
|
- for(MeterPeriodInfo mpi:meterPeriodInfoList){
|
|
|
|
- tec.meterInfo.getMeterPeriodInfoLinkedHashMap().put(mpi.getId(),mpi);
|
|
|
|
- }
|
|
|
|
- /*tec.periodInfo=interimMeterPeriodFc.apply(tec.getReportId());*/
|
|
|
|
- tec.meterInfo.getMeterPeriodInfoLinkedHashMap().values().forEach(e->{
|
|
|
|
- if(tec.getReportId().equals(e.getReportId())){
|
|
|
|
- tec.periodInfo=e;
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- tec.periodInfo.setPeriodName(tec.periodInfo.getPeriodNumber());
|
|
|
|
/*计量单元树*/
|
|
/*计量单元树*/
|
|
tec.meterInfo.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
|
|
tec.meterInfo.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
|
|
- List<StartPayForm> startPayFormAll=stayPayFormFc.apply(tec.getContractId());
|
|
|
|
- if(startPayFormAll!=null&&startPayFormAll.size()>0){
|
|
|
|
- /*获取合同段所有的开工报告信息*/
|
|
|
|
- tec.meterInfo.setStartPayFormAll(startPayFormAll);
|
|
|
|
- }
|
|
|
|
|
|
+ /*开工报表*/
|
|
|
|
+ startInfo();
|
|
|
|
+ //变更令部分
|
|
|
|
+ changeToken();
|
|
}
|
|
}
|
|
tec.setPeriodId(tec.periodInfo.getId());
|
|
tec.setPeriodId(tec.periodInfo.getId());
|
|
|
|
+ /*计量期编号格式化*/
|
|
|
|
+ periodNumberFormat();
|
|
|
|
+ dataModel2FormData(tec.periodInfo);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void periodNumberFormat(){
|
|
String periodNumber = tec.periodInfo.getPeriodNumber();
|
|
String periodNumber = tec.periodInfo.getPeriodNumber();
|
|
if(!BaseUtils.isNumber(periodNumber)){
|
|
if(!BaseUtils.isNumber(periodNumber)){
|
|
periodNumber= RegexUtil.findResult(SZ,periodNumber);
|
|
periodNumber= RegexUtil.findResult(SZ,periodNumber);
|
|
@@ -94,32 +106,70 @@ public class ExecutorInit extends FormulaExecutor {
|
|
tec.periodInfo.setPeriodNumber(periodNumber);
|
|
tec.periodInfo.setPeriodNumber(periodNumber);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- LinkedHashMap<String, FormData> periodMap = FormulaUtils.toFormDataMap(tec.periodInfo);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- //变更令部分
|
|
|
|
|
|
+ private void periodInfo(){
|
|
|
|
+ List<MeterPeriodInfo> meterPeriodInfoList = interimMeterPeriodAllFc.apply(tec.getContractId());
|
|
|
|
+ for(MeterPeriodInfo mpi:meterPeriodInfoList){
|
|
|
|
+ tec.meterInfo.getMeterPeriodInfoLinkedHashMap().put(mpi.getId(),mpi);
|
|
|
|
+ }
|
|
|
|
+ tec.meterInfo.getMeterPeriodInfoLinkedHashMap().values().forEach(e->{
|
|
|
|
+ if(tec.getReportId().equals(e.getReportId())){
|
|
|
|
+ tec.periodInfo=e;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ tec.periodInfo.setPeriodName(tec.periodInfo.getPeriodNumber());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void startInfo(){
|
|
|
|
+ List<StartPayForm> startPayFormAll=stayPayFormFc.apply(tec.getContractId());
|
|
|
|
+ if(startPayFormAll!=null&&startPayFormAll.size()>0){
|
|
|
|
+ /*获取合同段所有的开工报告信息*/
|
|
|
|
+ tec.meterInfo.setStartPayFormAll(startPayFormAll);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void changeToken(){
|
|
List<ChangeToken> changeTokenList = changeTokenFc.apply(tec.getContractId());
|
|
List<ChangeToken> changeTokenList = changeTokenFc.apply(tec.getContractId());
|
|
- tec.meterInfo.setChangeTokenList(changeTokenList) ;
|
|
|
|
|
|
|
|
- /*每页内容都一样*/
|
|
|
|
- tec.getRepeatKeys().addAll(periodMap.keySet());
|
|
|
|
- tec.formDataMap.putAll(periodMap);
|
|
|
|
|
|
+ LinkedHashMap<String,List<ChangeToken>> map =new LinkedHashMap<>();
|
|
|
|
+ /* 本期变更 */
|
|
|
|
+ map.put("CUR",getFilteredChangeTokens(changeTokenList,tec.periodInfo,0));
|
|
|
|
+ /* 上期末变更 */
|
|
|
|
+ map.put("PRE",getFilteredChangeTokens(changeTokenList,tec.periodInfo,1));
|
|
|
|
+ /* 本期末变更 */
|
|
|
|
+ map.put("EDN",getFilteredChangeTokens(changeTokenList,tec.periodInfo,2));
|
|
|
|
+ tec.meterInfo.setChangeTokenListMap(map);
|
|
}
|
|
}
|
|
|
|
|
|
- /*预处理计量单元树*/
|
|
|
|
- public CompletableFuture<Map<Long, TreeNode<MeterTree>>> getMeterTreeMapAsync(Long contractId) {
|
|
|
|
- return CompletableFuture.supplyAsync(() -> {
|
|
|
|
- List<MeterTree> list = meterTreeFc.apply(contractId);
|
|
|
|
- Function<MeterTree,TreeNode<MeterTree>> fc = m->{
|
|
|
|
- TreeNode<MeterTree> treeNode = new TreeNode<>();
|
|
|
|
- treeNode.setId(m.getId());
|
|
|
|
- treeNode.setParentId(m.getParentId());
|
|
|
|
- treeNode.setValue(m);
|
|
|
|
- treeNode.setName(m.getNodeName());
|
|
|
|
- treeNode.setSort(StringUtils.handObj2Integer(m.getSort()));
|
|
|
|
- return treeNode;
|
|
|
|
- };
|
|
|
|
- return FormulaUtils.list2TreeNode(TreeNode::getId,list,fc,TreeNode::getParentId);
|
|
|
|
- });
|
|
|
|
|
|
+ /**
|
|
|
|
+ * type=0 返回本期
|
|
|
|
+ * periodInfo.startDate < changeApprovalDate <= periodInfo.endDate 的changeTokenList
|
|
|
|
+ *
|
|
|
|
+ * type=1 返回上期末
|
|
|
|
+ * changeApprovalDate < periodInfo.startDate 的changeTokenList
|
|
|
|
+ *
|
|
|
|
+ * type=2 返回本期末
|
|
|
|
+ * changeApprovalDate <= periodInfo.startDate 的changeTokenList
|
|
|
|
+ */
|
|
|
|
+ private List<ChangeToken> getFilteredChangeTokens(List<ChangeToken> changeTokenList, MeterPeriodInfo periodInfo, int type) {
|
|
|
|
+ switch (type) {
|
|
|
|
+ case 0:
|
|
|
|
+ return changeTokenList.stream()
|
|
|
|
+ .filter(token -> (periodInfo.getStartDate().isBefore(token.getChangeApprovalDate())
|
|
|
|
+ && !periodInfo.getEndDate().isBefore(token.getChangeApprovalDate())))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ case 1:
|
|
|
|
+ return changeTokenList.stream()
|
|
|
|
+ .filter(token -> token.getChangeApprovalDate().isBefore(periodInfo.getStartDate()))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ case 2:
|
|
|
|
+ return changeTokenList.stream()
|
|
|
|
+ .filter(token -> !token.getChangeApprovalDate().isAfter(periodInfo.getEndDate()))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ default:
|
|
|
|
+ throw new IllegalArgumentException("Unsupported type: " + type);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|