yangyj 1 жил өмнө
parent
commit
1714039a1e

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

@@ -65,7 +65,7 @@ public class BaseInfo  {
     private String  bankAccount = "未设置";
     /**合同总金额*/
     @JSONField(name = "key_11",label="合同总金额",ordinal = 11)
-    private String  TotalAmount;
+    private BigDecimal  TotalAmount;
     /**预付款比例*/
     @JSONField(name = "key_12",label="预付款比例",ordinal = 12)
     private Double  deductRatio=0.7;

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

@@ -65,4 +65,14 @@ public class Material {
         data.add(remark);
         return data;
     }
+
+    private String[] NO_YES=new String[]{"否","是"};
+
+    public void setMaterialConform(String materialConform) {
+        this.materialConform = "1".equals(materialConform)?NO_YES[1]:NO_YES[0];
+    }
+
+    public void setStorageConform(String storageConform) {
+        this.storageConform = "1".equals(storageConform)?NO_YES[1]:NO_YES[0];
+    }
 }

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

@@ -32,6 +32,7 @@ public class ExecutorInit extends FormulaExecutor {
 
         /*加载合同数据*/
         BaseInfo baseInfo = baseInfoFc.apply(tec.getContractId());
+        baseInfo.setTotalAmount(baseInfo.getContractAmount());
         tec.getConstantMap().put(BaseInfo.TBN,baseInfo);
         tec.formDataMap.putAll(FormulaUtils.toFormDataMap(baseInfo));
         if(MeterType.MATERIAL.equals(tec.getMeterType())||MeterType.START.equals(tec.getMeterType())){

+ 30 - 69
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -109,20 +109,20 @@ public class ExecutorMeter extends FormulaExecutor {
 
     @Data
     public  class MaterialCalc implements Special{
-        private FormData index;
+/*        private FormData index;
         private FormData materialName;
         private FormData unit;
         private FormData meterAmount;
-        private FormData price;
+        private FormData price;*/
         private FormData sum;
-        private FormData ratio;
+       /* private FormData ratio;*/
         private FormData advancePayment;
-        private FormData source;
+/*        private FormData source;
         private FormData materialConform;
         private FormData storagePlace;
         private FormData storageStatus;
         private FormData storageConform;
-        private FormData remark;
+        private FormData remark;*/
         /**材料合计*/
         private String total;
         /**预付款合计*/
@@ -145,55 +145,23 @@ public class ExecutorMeter extends FormulaExecutor {
            }
             select(candidate);
         }
+
+        private  final List<String> FIELD_SORT_ORDER = Arrays.asList(
+                "序号", "材料名称", "单位", "数量", "单价", "材料合计价",
+                "预付比例(%)", "材料预付款", "材料来源", "是否符合要求",
+                "备料堆放地点", "存储情况", "存储方法是否符合要求", "备注"
+        );
+
         public void select(List<FormData> candidate ){
-            for(FormData fd:candidate){
-                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;
-                }
+            Map<String, FormData> fieldMap = new HashMap<>();
+            for (FormData fd : candidate) {
+                fieldMap.put(fd.getEName(), fd);
             }
+            this.sum=fieldMap.get(FIELD_SORT_ORDER.get(5));
+            this.advancePayment=fieldMap.get(FIELD_SORT_ORDER.get(7));
+            this.fds = FIELD_SORT_ORDER.stream()
+                    .map(fieldMap::get)
+                    .collect(Collectors.toList());
         }
 
         @Override
@@ -216,6 +184,13 @@ public class ExecutorMeter extends FormulaExecutor {
                 }
                 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);
+                /*合计*/
+                Material summary= new Material();
+                summary.setMaterialName("合计");
+                summary.setIndex(materials.size());
+                summary.setSum(this.total);
+                summary.setAdvancePayment(this.totalAdvance);
+                materials.add(summary);
                 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()
@@ -224,28 +199,14 @@ public class ExecutorMeter extends FormulaExecutor {
                    for(int i=0;i<this.fds.size();i++){
                        List<Object> dl= groupData.get(i);
                        FormData fd= fds.get(i);
+                       /*计算完结*/
+                       fd.setFinished(true);
                        elementWriter.write(fd,dl);
                    }
-                   /*追加合计*/
-                   append(this.sum,this.total);
-                   append(this.advancePayment,this.totalAdvance);
                 }
             }
         }
-        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);
-                         }
-                     }
-                 }
-             }
-        }
+
     }
 
 

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

@@ -69,7 +69,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<Material>> getMaterialFormFc() {
         return id->{
-            String sql="select  b.material_name name,b.unit,b.price,a.meter_amount amount,meter_money sum,a.material_source source,material_conform  materialConform,a.storage_place storagePlace,a.storage_status storageStatus,a.storage_conform storageConform,a.remark from s_material_meter_form a left join s_contract_material b on a.contract_material_id = b.id where a.meter_period_id="+id+"  and a.is_deleted=0";
+            String sql="select  b.material_name materialName,b.unit,b.price,a.meter_amount meterAmount,meter_money sum,a.material_source source,material_conform  materialConform,a.storage_place storagePlace,a.storage_status storageStatus,a.storage_conform storageConform,a.remark from s_material_meter_form a left join s_contract_material b on a.contract_material_id = b.id where a.meter_period_id="+id+"  and a.is_deleted=0";
             return  getEntityList(sql,Material.class);
         };
     }

+ 1 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -2680,7 +2680,7 @@ public class TaskController extends BladeController {
                                         sheet.getPrintSetup().setPaperSize(PrintSetup.A4_PAPERSIZE);
                                         ByteArrayOutputStream out = new ByteArrayOutputStream();
                                         workbook.write(out);
-                                       // workbook.write(new FileOutputStream(rs.getExcelPath()));
+                                        //workbook.write(new FileOutputStream(rs.getExcelPath()));
                                         com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook( new ByteArrayInputStream(out.toByteArray()));
                                         out.reset();
                                         wb.save(out, SaveFormat.PDF);