Browse Source

Merge remote-tracking branch 'origin/master'

liuyc 1 year ago
parent
commit
994cb3a4c9

+ 21 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/Material.java

@@ -2,6 +2,9 @@ package org.springblade.manager.vo;
 
 import lombok.Data;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @author yangyj
  * @Date 2023/12/18 10:41
@@ -28,4 +31,22 @@ public class Material {
     private String storageStatus;
     private String storageConform;
     private String remark;
+    public List<Object> getData(){
+        List<Object> data = new ArrayList<>();
+        data.add(index);
+        data.add(materialName);
+        data.add(unit);
+        data.add(price);
+        data.add(meterAmount);
+        data.add(sum);
+        data.add(ratio);
+        data.add(advancePayment);
+        data.add(source);
+        data.add(materialConform);
+        data.add(storagePlace);
+        data.add(storageStatus);
+        data.add(storageConform);
+        data.add(remark);
+        return data;
+    }
 }

+ 6 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java

@@ -12,7 +12,7 @@ import java.time.LocalDate;
 public class MeterPeriodInfo {
     /**计量期信息表名*/
     public static final String TBN="MPI";
-
+    /**计量期*/
     private String periodNumber;
     /**
      * 期名称
@@ -22,4 +22,9 @@ public class MeterPeriodInfo {
      * 报表打印日期
      */
     private LocalDate formPrintDate;
+    /**上期计量金额*/
+    private String  preTotal;
+
+
+
 }

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -732,6 +732,7 @@
         query.file_user_id_and_name,
         query.pdf_url,
         query.e_visa_pdf_url,
+        query.task_id,
         query.sj_record_ids
         from
         (
@@ -750,6 +751,7 @@
         iq.pdf_url,
         iq.e_visa_pdf_url,
         iq.wbs_id,
+        t.id as task_id,
         iq.sj_record_ids
         from u_information_query iq left join (select * from u_task k where k.status!=3 and k.contract_id =
         #{query.contractId} group by

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -6,7 +6,6 @@ import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.manager.formula.FormulaExecutor;
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.MeterPeriodInfo;
-import org.springblade.meter.entity.MeterPeriod;
 
 import java.util.Map;
 import java.util.function.Function;
@@ -34,4 +33,6 @@ public class ExecutorInit extends FormulaExecutor {
         Map<String,Object> meterPeriod=meterPeriodFc.apply(tec.getPeriodId());
         tec.getConstantMap().put(MeterPeriodInfo.TBN, BeanUtil.toBean(meterPeriod,MeterPeriodInfo.class));
     }
+
+
 }

+ 67 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSpecial.java

@@ -1,17 +1,23 @@
 package org.springblade.manager.formula.impl;
 
+import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.dto.Coords;
+import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.formula.FormulaExecutor;
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.Material;
-import org.springblade.manager.vo.MeterPeriodInfo;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * @author yangyj
@@ -25,15 +31,16 @@ public class ExecutorSpecial extends FormulaExecutor {
     public ExecutorSpecial(TableElementConverter tec) {
         super(tec);
     }
+    private List<Special> specialList = new ArrayList<>();
 
     @Override
     public void handle() {
-           for(FormData fd:tec.getFormDataList()){
-
-           }
+        MaterialCalc materialCalc = new MaterialCalc(tec.getFormDataList());
+        this.specialList.add(materialCalc);
+        this.specialList.forEach(Special::parse);
     }
     @Data
-    public  class MaterialCalc {
+    public  class MaterialCalc implements Special{
         private FormData index;
         private FormData materialName;
         private FormData unit;
@@ -52,53 +59,107 @@ public class ExecutorSpecial extends FormulaExecutor {
         private String total;
         /**预付款合计*/
         private String totalAdvance;
+        private List<FormData> fds=new ArrayList<>();
         public MaterialCalc(List<FormData> list) {
             for(FormData fd:list){
                 if(fd.getEName().contains("序号")){
                     this.index=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("材料名称")){
                     this.materialName=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("单位")){
                     this.unit=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("数量")){
                     this.meterAmount=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("单价")){
                     this.price=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("材料合计价")){
                     this.sum=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("预付比例")){
                     this.ratio=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("材料预付款")){
                     this.advancePayment=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("材料来源")){
                     this.source=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("是否符合要求")){
                     this.materialConform=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("备料对方地点")){
                     this.storagePlace=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("存储情况")){
                     this.storageStatus=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("存储方法是否符合要求")){
                     this.storageConform=fd;
+                    fds.add(fd);
                 }else if(fd.getEName().contains("备注")){
                     this.remark=fd;
+                    fds.add(fd);
+                }
+                if(fds.size()>=14){
+                    break;
                 }
             }
         }
-        public void handle(){
+        public void parse(){
             /*加载合同材料、材料清单*/
             /* b.material_name name,b.unit,b.price,a.meter_amount amount,a.material_source source
             ,material_conform  materialConform,a.storage_place storagePlace,a.storage_status storageStatus,a.storage_conform storageConform,a.remark*/
             List<Material> materials = materialListFc.apply(tec.getPeriodId());
             if(Func.isNotEmpty(materials)){
                 BaseInfo baseInfo= (BaseInfo) tec.getConstantMap().get(BaseInfo.TBN);
+                int n=1;
                 for(Material m:materials){
+                    m.setIndex(n++);
                     m.setRatio(baseInfo.getDeductRatio()*100+"%");
                     m.setAdvancePayment(StringUtils.number2StringZero(Double.parseDouble(m.getSum())*baseInfo.getDeductRatio(),1));
                 }
                 this.total=StringUtils.number2StringZero(materials.stream().mapToDouble(m->Double.parseDouble(m.getSum())).sum(),1);
                 this.totalAdvance=StringUtils.number2StringZero(materials.stream().mapToDouble(m->Double.parseDouble(m.getAdvancePayment())).sum(),1);
+                List<Object> dataList= materials.stream().flatMap(m->m.getData().stream()).collect(Collectors.toList());
+                if(dataList.size()>0){
+                   Map<Integer,List<Object>> groupData= IntStream.range(0, dataList.size())
+                            .boxed()
+                            .collect(Collectors.groupingBy(index -> index % 14,
+                                    Collectors.mapping(dataList::get, Collectors.toList())));
+                   for(int i=0;i<this.fds.size();i++){
+                       List<Object> dl= groupData.get(i);
+                       FormData fd= fds.get(i);
+                       FormulaUtils.write(fd,dl);
+                   }
+                   /*追加合计*/
+                   append(this.sum,this.total);
+                   append(this.advancePayment,this.advancePayment);
+                }
             }
         }
+        public void append(FormData fd,Object value){
+             if(fd!=null&&value!=null&&fd.getCoordsList().size()>0){
+                 if(fd.empty()){
+                  fd.getValues().get(0).setValue(value);
+                 }else{
+                     for(int n=0;n<fd.getValues().size();n++){
+                         ElementData ed = fd.getValues().get(n);
+                         if(ed.isEmpty()){
+                             ed.setValue(value);
+                         }
+                     }
+                 }
+             }
+        }
+
+    }
+
+    public interface  Special{
+        void parse();
     }
 }

+ 39 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -58,6 +58,7 @@ import java.util.function.BiPredicate;
 import java.util.function.BinaryOperator;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 @Service
 @AllArgsConstructor
@@ -219,10 +220,47 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     @Override
     public IPage<TreeNodeVOByTabType> tabTypeLazyTreeAll(IPage<TreeNodeVOByTabType> page, Long parentId, String titleName) {
+        boolean base=false;
         if ((parentId + "").equals("12345678910")) {
             page.setSize(100);
+            base=true;
         }
-        return page.setRecords(baseMapper.tabTypeLazyTreeAll(page, parentId, titleName));
+        List<TreeNodeVOByTabType>data ;
+        if("2222236".equals(parentId+"")){
+             data =this.baseList();
+        }else{
+             data= baseMapper.tabTypeLazyTreeAll(page, parentId, titleName);
+        }
+        addBase(data,base);
+        return page.setRecords(data);
+    }
+
+
+    public void addBase(List<TreeNodeVOByTabType> data,Boolean base){
+        if(base){
+            TreeNodeVOByTabType baseInfo = new TreeNodeVOByTabType();
+            baseInfo.setTitle("基础信息");
+            baseInfo.setPrimaryKeyId("BASIN");
+            baseInfo.setParentId(12345678910L);
+            baseInfo.setId(2222236L);
+            baseInfo.setHasChildren(true);
+            data.add(baseInfo);
+        }
+    }
+    public  List<TreeNodeVOByTabType> baseList(){
+        Map<String,String> titleMap = new HashMap<>();
+        titleMap.put("合同信息",BaseInfo.TBN);
+        titleMap.put("开工材料计量期",MeterPeriodInfo.TBN);
+        return titleMap.entrySet().stream().map(kv->{
+            TreeNodeVOByTabType tn = new TreeNodeVOByTabType();
+            tn.setTitle(kv.getKey());
+            tn.setTabType("基础信息");
+            tn.setParentId(2222236L);
+            tn.setParentId(2222236L);
+            tn.setHasChildren(false);
+            tn.setInitTableName(kv.getValue());
+            return tn;
+        }).collect(Collectors.toList());
     }
 
     @Override