Ver Fonte

节点复制过程拷贝formulaOption

yangyj há 1 ano atrás
pai
commit
9592b062d8

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

@@ -46,6 +46,7 @@ public class BaseInfo {
     private String  bankAccountName;
     /**合同总金额*/
     private String  TotalAmount;
-
+    /**预付款比例*/
+    private Double  deductRatio=0.7;
 
 }

+ 25 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java

@@ -0,0 +1,25 @@
+package org.springblade.manager.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.time.LocalDate;
+
+/**
+ * @author yangyj
+ * @Date 2023/12/20 10:36
+ * @description 计量期信息
+ */
+public class MeterPeriodInfo {
+    /**计量期信息表名*/
+    public static final String TBN="MPI";
+
+    private String periodNumber;
+    /**
+     * 期名称
+     */
+    private String periodName;
+    /**
+     * 报表打印日期
+     */
+    private LocalDate formPrintDate;
+}

+ 46 - 10
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1383,7 +1383,8 @@ public class InformationWriteQueryController extends BladeController {
         } else if (vo.getIsCopyData() == 0) {
             tabOwner = "1,2,3,4,5,6"; //如果选择的是否复制数据=0(否),默认所属方123456
         }
-
+        /*用来标识新旧工序结对*/
+        Map<Long,Long> peerMap = new HashMap<>();
         //TODO 单份复制
         if (("1").equals(vo.getCopyType())) {
             //首先查询需要复制的节点及其下级所有子节点的信息
@@ -1431,6 +1432,9 @@ public class InformationWriteQueryController extends BladeController {
                     //重塑关键信息
                     //重塑primaryKeyId
                     newData.setPKeyId(SnowFlakeUtil.getId());
+                    if(nodeOld.getNodeType()!=null&&nodeOld.getNodeType()==6){
+                        peerMap.put(newData.getPKeyId(),nodeOld.getPKeyId());
+                    }
                     //设置旧ID
                     if (StringUtils.isNotEmpty(nodeOld.getOldId())) {
                         newData.setOldId(nodeOld.getOldId());
@@ -1595,7 +1599,8 @@ public class InformationWriteQueryController extends BladeController {
             if (newTabs.size() > 0 && oldTabs.size() > 0 && vo.getIsCopyData() == 1) {
                 this.addCopyTabFile(new HashSet<>(newTabs), oldTabs);
             }
-
+            /*复制formulaOption*/
+            this.copyFormulaOptions(saveList,peerMap);
             //更新redis缓存
             informationQueryService.delAsyncWbsTree(needCopyNode.getContractId());
 
@@ -1669,7 +1674,7 @@ public class InformationWriteQueryController extends BladeController {
                                         List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
 
                                         //构造新的节点、表、数据
-                                        this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 1, tabOwner, vo.getIsCopyData());
+                                        this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 1, tabOwner, vo.getIsCopyData(),peerMap);
 
                                         //附件
                                         addNewFileTabs.addAll(addTabList);
@@ -1698,7 +1703,7 @@ public class InformationWriteQueryController extends BladeController {
                                             List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
 
                                             //构造新的节点、表、数据
-                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData());
+                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData(),peerMap);
 
                                             //附件
                                             addNewFileTabs.addAll(addTabList);
@@ -1715,7 +1720,7 @@ public class InformationWriteQueryController extends BladeController {
                                             List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
 
                                             //构造新的节点、表、数据
-                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData());
+                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData(),peerMap);
 
                                             //附件
                                             addNewFileTabs.addAll(addTabList);
@@ -1778,7 +1783,10 @@ public class InformationWriteQueryController extends BladeController {
                             throw new ServiceException("保存数据异常,请联系管理员");
                         }
                     }
-
+                    if(nodes.size()>0){
+                        /*复制formulaOpion*/
+                        this.copyFormulaOptions(nodes,peerMap);
+                    }
                     if (row) {
                         //更新redis缓存
                         informationQueryService.delAsyncWbsTree(contractId);
@@ -1813,6 +1821,30 @@ public class InformationWriteQueryController extends BladeController {
         return R.fail("操作失败");
     }
 
+    @Async
+    public void copyFormulaOptions( List<WbsTreeContract>  saveList,Map<Long,Long> peerMap){
+        if(peerMap.size()>0){
+            try {
+            String sqlTemplate="INSERT INTO m_formula_option (id,parent_id,contract_id,val) select #1,#2,contract_id,val from m_formula_option where id=#3";
+            Map<Long,Long> idMap = saveList.stream().filter(e->e.getNodeType()!=null&&e.getNodeType()==6).collect(Collectors.toMap(WbsTreeContract::getPKeyId,WbsTreeContract::getId));
+            List<String> sqlList= new ArrayList<>();
+            for(Map.Entry<Long,Long> p:peerMap.entrySet()){
+                try {
+                    String newPkeyId=p.getKey().toString();
+                    String oldPkeyId=p.getValue().toString();
+                    String newId=idMap.get(p.getKey()).toString();
+                    sqlList.add(sqlTemplate.replace("#1", newPkeyId).replace("#2", newId).replace("#3", oldPkeyId));
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+            BaseUtils.splitList(sqlList,50).parallelStream().map(l->String.join(";",l)).forEach(this.jdbcTemplate::execute);
+            }catch (Exception e){
+                StaticLog.error("formulaOption复制失败");
+            }
+        }
+    }
+
     static String[] G8_TBN = new String[]{"m_20220922161954_1572863246099021824", "m_20220928134702_1574999102784012288"};
 
     private boolean checkG8(String tableName) {
@@ -2147,7 +2179,7 @@ public class InformationWriteQueryController extends BladeController {
     private void addCopyNodesAndTabsBuildData
     (List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract
             needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String
-             tabOwner, Integer isCopyData) {
+             tabOwner, Integer isCopyData,Map<Long,Long> peerMap ) {
         int var = 0;
         if (needNodes.size() == 1) {
             //判断是否为最下级节点
@@ -2178,8 +2210,10 @@ public class InformationWriteQueryController extends BladeController {
                     obj.setCreateTime(new Date());
                     //获取当前复制的节点的sort
                     obj.setSort(ObjectUtils.isNotEmpty(needNode.getSort()) ? needNode.getSort() : 0);
-
                     addNodeList.add(obj);
+                    if(obj.getNodeType()!=null&&obj.getNodeType()==6){
+                        peerMap.put(obj.getPKeyId(),needNode.getPKeyId());
+                    }
                     break;
                 }
             }
@@ -2229,7 +2263,7 @@ public class InformationWriteQueryController extends BladeController {
                             String delSql = "delete from " + tableName + " where p_key_id = " + obj.getPKeyId() + " ; ";
                             //insert into SQL
                             String testColVal = reviseCols(eMap, colVal, oldPKeyId, tableName);
-                            StaticLog.info("KT3356:" + testColVal);
+                            /*StaticLog.info("KT3356:" + testColVal);*/
                             copyDataSql.append(delSql).append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(testColVal).append(" from ").append(tableName).append(" where p_key_id='").append(oldPKeyId).append("' LIMIT 1;");
                             resultTablesData.add(copyDataSql.toString());
                         }
@@ -2284,7 +2318,9 @@ public class InformationWriteQueryController extends BladeController {
                     obj.setSort(ObjectUtils.isNotEmpty(node.getSort()) ? node.getSort() : 0);
 
                     addNodeList.add(obj);
-
+                    if(obj.getNodeType()!=null&&obj.getNodeType()==6){
+                        peerMap.put(obj.getPKeyId(),node.getPKeyId());
+                    }
                     //构造当前节点下所有元素表
                     List<WbsTreeContract> tabs = tabMap.get(oldId);
                     //构造节点下的表

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

@@ -2,11 +2,12 @@ package org.springblade.manager.formula.impl;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.utils.BeanUtil;
 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 org.springblade.meter.entity.MeterPeriod;
 
-import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 
@@ -23,7 +24,7 @@ public class ExecutorInit extends FormulaExecutor {
     }
     private  Function<Long, BaseInfo> baseInfoFc;
     private  Function<Long, Map<String,Object>>  meterPeriodFc;
-    private Function<Long, List<Material>> materialListFc;
+
 
     public void handle() {
         /*加载合同数据*/
@@ -31,7 +32,6 @@ public class ExecutorInit extends FormulaExecutor {
         tec.getConstantMap().put(BaseInfo.TBN,baseInfo);
         /*加载计量期信息*/
         Map<String,Object> meterPeriod=meterPeriodFc.apply(tec.getPeriodId());
-        /*加载合同材料、材料清单*/
-        List<Material> materials = materialListFc.apply(tec.getPeriodId());
+        tec.getConstantMap().put(MeterPeriodInfo.TBN, BeanUtil.toBean(meterPeriod,MeterPeriodInfo.class));
     }
 }

+ 104 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSpecial.java

@@ -0,0 +1,104 @@
+package org.springblade.manager.formula.impl;
+
+import com.mixsmart.utils.StringUtils;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.utils.Func;
+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.List;
+import java.util.function.Function;
+
+/**
+ * @author yangyj
+ * @Date 2023/12/19 17:40
+ * @description TODO
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ExecutorSpecial extends FormulaExecutor {
+    private Function<Long, List<Material>> materialListFc;
+    public ExecutorSpecial(TableElementConverter tec) {
+        super(tec);
+    }
+
+    @Override
+    public void handle() {
+           for(FormData fd:tec.getFormDataList()){
+
+           }
+    }
+    @Data
+    public  class MaterialCalc {
+        private FormData index;
+        private FormData materialName;
+        private FormData unit;
+        private FormData meterAmount;
+        private FormData price;
+        private FormData sum;
+        private FormData ratio;
+        private FormData advancePayment;
+        private FormData source;
+        private FormData materialConform;
+        private FormData storagePlace;
+        private FormData storageStatus;
+        private FormData storageConform;
+        private FormData remark;
+        /**材料合计*/
+        private String total;
+        /**预付款合计*/
+        private String totalAdvance;
+        public MaterialCalc(List<FormData> list) {
+            for(FormData fd:list){
+                if(fd.getEName().contains("序号")){
+                    this.index=fd;
+                }else if(fd.getEName().contains("材料名称")){
+                    this.materialName=fd;
+                }else if(fd.getEName().contains("单位")){
+                    this.unit=fd;
+                }else if(fd.getEName().contains("数量")){
+                    this.meterAmount=fd;
+                }else if(fd.getEName().contains("单价")){
+                    this.price=fd;
+                }else if(fd.getEName().contains("材料合计价")){
+                    this.sum=fd;
+                }else if(fd.getEName().contains("预付比例")){
+                    this.ratio=fd;
+                }else if(fd.getEName().contains("材料预付款")){
+                    this.advancePayment=fd;
+                }else if(fd.getEName().contains("材料来源")){
+                    this.source=fd;
+                }else if(fd.getEName().contains("是否符合要求")){
+                    this.materialConform=fd;
+                }else if(fd.getEName().contains("备料对方地点")){
+                    this.storagePlace=fd;
+                }else if(fd.getEName().contains("存储情况")){
+                    this.storageStatus=fd;
+                }else if(fd.getEName().contains("存储方法是否符合要求")){
+                    this.storageConform=fd;
+                }else if(fd.getEName().contains("备注")){
+                    this.remark=fd;
+                }
+            }
+        }
+        public void handle(){
+            /*加载合同材料、材料清单*/
+            /* 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);
+                for(Material m:materials){
+                    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);
+            }
+        }
+    }
+}

+ 5 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -346,8 +346,11 @@ public class TableElementConverter implements ITableElementConverter {
                          String coords =keyMap.get(fd.getKey());
                          if(Func.isNotBlank(coords)){
                              fd.flushCoords(coords);
-                         }else{
-                             continue;
+                             List<Coords> coordsList = fd.getCoordsList();
+                             List<ElementData> eds = fd.getValues();
+                             for(Coords c:coordsList){
+                                 eds.add(new ElementData(0,0,"",c.getX(),c.getY()));
+                             }
                          }
                      }
               }

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

@@ -45,7 +45,7 @@ public class FormulaDaoImpl implements IFormulaDao {
 
     @Override
     public Function<Long,Map<String,Object>> getMeterPeriod(){
-        return id-> this.jdbcTemplate.queryForMap("select * from s_meter_period where id= "+id);
+        return id-> this.jdbcTemplate.queryForMap("select period_number periodNumber,period_name periodName,form_print_date formPrintDate from s_meter_period where id= "+id);
     }
 
     @Override

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

@@ -2477,10 +2477,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         ExecutorInit init= new ExecutorInit(tec);
         init.setBaseInfoFc(this.formulaDao.getBaseInfo());
         init.setMeterPeriodFc(this.formulaDao.getMeterPeriod());
-        init.setMaterialListFc(this.formulaDao.getMaterialForm());
         formulaHandleChains.add(init);
         formulaHandleChains.add(new ExecutorSort(tec));
         formulaHandleChains.add(new ExecutorPre(tec));
+        ExecutorSpecial special = new ExecutorSpecial(tec);
+        special.setMaterialListFc(this.formulaDao.getMaterialForm());
+        formulaHandleChains.add(special);
         formulaHandleChains.add(new ExecutorCalc(tec));
         formulaHandleChains.add(new ExecutorFormat(tec));
         formulaHandleChains.forEach(FormulaHandleChain::handle);