浏览代码

Merge remote-tracking branch 'origin/master' into master

yangyj 1 年之前
父节点
当前提交
0da79bd81a

+ 3 - 0
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -128,6 +128,9 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
         assert result != null;
         if (result.isSuccess()) {
             UserInfo userInfo = result.getData();
+            if (userInfo == null){
+                throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+            }
             User user = userInfo.getUser();
             // 用户不存在,但提示用户名与密码错误并锁定账号
             if (user == null || user.getId() == null) {

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java

@@ -113,4 +113,7 @@ public class ContractFromVO {
 
     @ApiModelProperty(value = "最高支付比例金额")
     private BigDecimal upPayMoney;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
 }

+ 52 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/FormNodeSortVO.java

@@ -0,0 +1,52 @@
+package org.springblade.meter.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Param   合同工程清单节点按清单排序VO
+ * @Author wangwl
+ * @Date 2023/12/26 15:38
+ **/
+@Data
+public class FormNodeSortVO implements INode<FormNodeSortVO> {
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<FormNodeSortVO> children;
+
+    /**
+     * 是否有子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    @Override
+    public List<FormNodeSortVO> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
+    private String formNumber;
+}

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java

@@ -79,4 +79,7 @@ public class MeterInventoryVO {
     @ApiModelProperty(value = "合同计量单元实际变更后施工图数量")
     private BigDecimal currentBuildChangeTotal;
 
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
 }

+ 1 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/TaskDetailVO.java

@@ -14,6 +14,7 @@ public class TaskDetailVO implements Serializable {
 
     @ApiModelProperty(value = "流程信息")
     private List<Map<String, String>> taskProcessInfo;
+    //private Map<String, List<Map<String, String>>> taskProcessInfo;
 
     @ApiModelProperty(value = "中间的业务数据列表信息")
     private Object taskCenterDataInfo;

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

@@ -1653,6 +1653,7 @@ public class TaskController extends BladeController {
 
             if (messageWarningList.size() > 0) {
                 List<MessageWarning> messageWarnings = messageWarningServiceImpl.getBaseMapper().selectList(Wrappers.<MessageWarning>lambdaQuery()
+                        .select(MessageWarning::getTaskId, MessageWarning::getPushUser, MessageWarning::getProjectId, MessageWarning::getContractId)
                         .isNotNull(MessageWarning::getTaskId)
                 );
                 if (messageWarnings.size() > 0) {

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

@@ -571,7 +571,6 @@ public class TaskController extends BladeController {
         taskClient.saveTask(task);
 
         /*副任务*/
-
         /*1.非预设流程*/
         if (sortedMap == null) {
             Map<Long, String> nameMap = jdbcTemplate.query("select id,name from blade_user where is_deleted = 0"
@@ -605,8 +604,8 @@ public class TaskController extends BladeController {
             }
 
         } else {
+
             /*2.预设流程*/
-            int sort = 1;
             Set<Integer> sortList = new HashSet<>();
             for (Map.Entry<String, List<FixedFlowLink>> stringListEntry : sortedMap.entrySet()) {
                 int maxSort;
@@ -669,7 +668,8 @@ public class TaskController extends BladeController {
                         taskParallel.setStatus(1);
                         taskParallel.setIsDeleted(0);
 
-                        taskParallel.setSort(sort); //sort固定
+                        sortList.add(maxSort);
+                        taskParallel.setSort(maxSort);
 
                         taskClient.saveTaskParallel(taskParallel);
 
@@ -1131,6 +1131,7 @@ public class TaskController extends BladeController {
             taskUserOne.put("date", sdf.format(task.getCreateTime()));
             taskUserOne.put("status", "2");
             taskUserOne.put("flowValue", "上报");
+            taskUserOne.put("sort", "0");
             taskProcessInfo.add(0, taskUserOne);
 
             /*流程人*/
@@ -1147,10 +1148,15 @@ public class TaskController extends BladeController {
                 } else {
                     taskUserOther.put("flowValue", taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除");
                 }
+                taskUserOther.put("sort", taskParallel.getSort().toString());
                 taskProcessInfo.add(taskUserOther);
             }
             vo.setTaskProcessInfo(taskProcessInfo);
 
+            /*Map<String, List<Map<String, String>>> groupedBySort = taskProcessInfo.stream().collect(Collectors.groupingBy(obj_1 -> obj_1.get("sort")));
+            groupedBySort.values().forEach(group -> group.sort(Comparator.comparing(obj_2 -> obj_2.get("sort"))));
+            vo.setTaskProcessInfo(groupedBySort);*/
+
             /*中间业务taskVO复制数据(只有待审批、已审批任务才能查看到具体的taskVO复制数据,因为废除任务时taskVO被删除,但是单条驳回时有记录单条数据的历史信息,所以通过的任务还是能查看到)*/
             if (ObjectUtil.isNotEmpty(task.getFormDataId()) && Arrays.asList(1, 2).contains(task.getStatus())) {
                 /*获取当条任务所有批注信息*/
@@ -2147,8 +2153,8 @@ public class TaskController extends BladeController {
             if (isCurrentUserLastApprove) {
                 //TODO 重新生成报表,执行电签(电签失败直接return或抛出异常,不修改下方状态)
                 Long reportId = 0L;
-                if(task.getMeterTaskType()==3 || task.getMeterTaskType()==2){ //2材料,3开工
-                    MaterialStartStatement materialS = materialStartStatementService.getBaseMapper().selectOne(Wrappers.<MaterialStartStatement>lambdaQuery().eq(MaterialStartStatement::getContractId, task.getContractId()).eq(MaterialStartStatement::getMeterPeriodId, task.getFormDataId()).eq(MaterialStartStatement::getType, task.getMeterTaskType()-1));
+                if (task.getMeterTaskType() == 3 || task.getMeterTaskType() == 2) { //2材料,3开工
+                    MaterialStartStatement materialS = materialStartStatementService.getBaseMapper().selectOne(Wrappers.<MaterialStartStatement>lambdaQuery().eq(MaterialStartStatement::getContractId, task.getContractId()).eq(MaterialStartStatement::getMeterPeriodId, task.getFormDataId()).eq(MaterialStartStatement::getType, task.getMeterTaskType() - 1));
                     if (materialS == null || Func.isNull(materialS)) {
                         MeterPeriod me = periodService.getById(task.getFormDataId());
                         MaterialStartStatement data = new MaterialStartStatement();
@@ -2156,13 +2162,13 @@ public class TaskController extends BladeController {
                         data.setContractId(Func.toLong(task.getContractId()));
                         data.setMeterPeriodId(Func.toLong(task.getFormDataId()));
                         data.setPrintDate(me.getFormPrintDate());
-                        if(task.getMeterTaskType()==2){
+                        if (task.getMeterTaskType() == 2) {
                             data.setRepaymentCause("材料预付款");
                             data.setStatementName("材料预付款--" + me.getPeriodName());
                             data.setType(1);
                         }
                         //计量任务类型 1=中间计量申请,2=材料计量单,3=开工预付款计量单,4=变更令
-                        if(task.getMeterTaskType()==3){
+                        if (task.getMeterTaskType() == 3) {
                             data.setRepaymentCause("开工预付款");
                             data.setStatementName("开工预付款--" + me.getPeriodName());
                             data.setType(2);
@@ -2172,8 +2178,8 @@ public class TaskController extends BladeController {
                     } else {
                         reportId = materialS.getId();
                     }
-                } else if ( task.getMeterTaskType()==1) { // 1中间
-                    InterimPayCertificate inData = interimPayCertificateService.getBaseMapper().selectOne(Wrappers.<InterimPayCertificate>lambdaQuery().eq(InterimPayCertificate::getContractId,task.getContractId()).eq(InterimPayCertificate::getContractPeriodId ,task.getFormDataId()));
+                } else if (task.getMeterTaskType() == 1) { // 1中间
+                    InterimPayCertificate inData = interimPayCertificateService.getBaseMapper().selectOne(Wrappers.<InterimPayCertificate>lambdaQuery().eq(InterimPayCertificate::getContractId, task.getContractId()).eq(InterimPayCertificate::getContractPeriodId, task.getFormDataId()));
                     if (inData == null || Func.isNull(inData)) {
                         InterimPayCertificate inData2 = new InterimPayCertificate();
                         ContractMeterPeriod me = contractMeterPeriodService.getById(task.getFormDataId());
@@ -2580,7 +2586,6 @@ public class TaskController extends BladeController {
     }
 
 
-
     @GetMapping("/meterPdfInfo")
     @ApiOperationSupport(order = 22)
     @ApiOperation(value = "计量生成Pdf", notes = "计量生成Pdf")
@@ -2776,10 +2781,10 @@ public class TaskController extends BladeController {
                     e.printStackTrace();
                     return "无效地址";
                 }
-            },(v1,v2)->v1,LinkedHashMap::new));
-            String upSql = "update "+REPORT_TYPE[this.type]+" set raw_url=?,file_url_list=? ,calculate_date=SYSDATE() where id="+this.id;
-            jdbcTemplate.update(upSql,this.pdfUrl , JSON.toJSONString(fileListMap));
-            return  this.pdfUrl;
+            }, (v1, v2) -> v1, LinkedHashMap::new));
+            String upSql = "update " + REPORT_TYPE[this.type] + " set raw_url=?,file_url_list=? ,calculate_date=SYSDATE() where id=" + this.id;
+            jdbcTemplate.update(upSql, this.pdfUrl, JSON.toJSONString(fileListMap));
+            return this.pdfUrl;
         }
 
         public Report(Long id, Integer type) {

+ 3 - 5
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.java

@@ -19,11 +19,7 @@ package org.springblade.meter.mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.ContractInventoryForm;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.meter.vo.ContractFromVO;
-import org.springblade.meter.vo.ContractInventoryFormVO;
-import org.springblade.meter.vo.ContractInventoryFormVO2;
-import org.springblade.meter.vo.FormTreeVO;
-import org.springblade.meter.vo.InventoryFormDetailVO;
+import org.springblade.meter.vo.*;
 
 import java.util.List;
 
@@ -71,4 +67,6 @@ public interface ContractInventoryFormMapper extends BaseMapper<ContractInventor
     List<ContractFromVO> getNodeResolveForm(@Param("contractId") Long contractId,@Param("meterId") Long meterId);
 
     List<String> getAllEqualsNumber(@Param("contractId") Long contractId,@Param("numbers") List<String> collect);
+
+    List<FormNodeSortVO> getAllForm(@Param("contractId") Long contractId);
 }

+ 7 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml

@@ -75,7 +75,7 @@
                         and (sci.id = scif.id or FIND_IN_SET(scif.id,ancestors) > 0)) as change_money
         from s_contract_inventory_form scif
         where is_deleted=0 and contract_id = #{contractId} and parent_id = #{id}
-        order by sort
+        order by -sort desc,create_time
     </select>
     <select id="getChildNode" resultType="org.springblade.meter.vo.ContractInventoryFormVO2">
         select *,
@@ -84,7 +84,7 @@
                 WHERE contract_id = #{contractId} and is_deleted=0 and parent_id = scif.id) as hasChild
         from s_contract_inventory_form scif
         where contract_id = #{contractId} and is_deleted = 0 and parent_id = #{parentId}
-        order by sort IS NOT NULL DESC,create_time
+        order by -sort desc,create_time
     </select>
 
     <select id="getContrFormAllByContrId" resultType="org.springblade.meter.vo.ContractFromVO">
@@ -167,5 +167,10 @@
             #{number}
         </foreach>
     </select>
+    <select id="getAllForm" resultType="org.springblade.meter.vo.FormNodeSortVO">
+        select id ,parent_id,form_number
+        from s_contract_inventory_form where contract_id = #{contractId} and is_deleted = 0
+        order by -sort desc,create_time
+    </select>
 
 </mapper>

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractInventoryFormService.java

@@ -59,4 +59,7 @@ public interface IContractInventoryFormService extends BaseService<ContractInven
 
     //获取节点下分解的清单
     List<ContractFromVO> getNodeResolveForm(Long contractId, Long id);
+
+    //清单公共方法,返回当前清单编号顺序集合
+    List<String> getAllFormNumberBySort(Long contractId);
 }

+ 38 - 9
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java

@@ -36,20 +36,13 @@ import org.springblade.meter.service.IContractInventoryFormService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.service.IInventoryFormMeterService;
 import org.springblade.meter.utils.ForestNodeMerger;
-import org.springblade.meter.vo.ContractFromVO;
-import org.springblade.meter.vo.ContractInventoryFormVO;
-import org.springblade.meter.vo.ContractInventoryFormVO2;
-import org.springblade.meter.vo.FormTreeVO;
-import org.springblade.meter.vo.InventoryFormDetailVO;
+import org.springblade.meter.vo.*;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -616,12 +609,36 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
     @Override
     public List<ContractFromVO> getNodeResolveForm(Long contractId, Long id) {
         List<ContractFromVO> vos = baseMapper.getNodeResolveForm(contractId, id);
+        if (vos.size() > 1){
+            Map<String, ContractFromVO> map = vos.stream().collect(Collectors.toMap(ContractFromVO::getFormNumber, l -> l));
+            List<String> list = this.getAllFormNumberBySort(contractId);
+            for (String s : map.keySet()) {
+                ContractFromVO vo = map.get(s);
+                vo.setSort(list.indexOf(s));
+            }
+            vos = vos.stream().sorted(Comparator.comparingInt(ContractFromVO::getSort)).collect(Collectors.toList());
+        }
         for (ContractFromVO vo : vos) {
             vo.setResidueNum(vo.getChangeTotal().subtract(vo.getPoseNum()));
         }
         return vos;
     }
 
+    @Override
+    public List<String> getAllFormNumberBySort(Long contractId) {
+        List<FormNodeSortVO> vos = baseMapper.getAllForm(contractId);
+        Long l1 = System.currentTimeMillis();
+        List<FormNodeSortVO> list = ForestNodeMerger.merge(vos);
+        Long l2 = System.currentTimeMillis();
+        System.out.println(l2-l1);
+        List<String> forms = new ArrayList<>();
+        Long l3 = System.currentTimeMillis();
+        gatherSortNode(list,forms);
+        Long l4 = System.currentTimeMillis();
+        System.out.println(l4-l3);
+        return forms;
+    }
+
     /**
      * 判断当前清单是否已经分解或变更过,变更过返回true
      */
@@ -642,5 +659,17 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         return false;
     }
 
+    //递归方法
+    private void gatherSortNode(List<FormNodeSortVO> list, List<String> forms){
+        for (FormNodeSortVO vo : list) {
+            if (vo.getChildren().size() == 0 && StringUtils.isNotBlank(vo.getFormNumber())){
+                forms.add(vo.getFormNumber());
+                continue;
+            }else {
+                gatherSortNode(vo.getChildren(), forms);
+            }
+        }
+    }
+
 
 }

+ 15 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -76,6 +76,8 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     //合同计量期
     private final IContractMeterPeriodService contractMeterPeriodService;
 
+    private final IContractInventoryFormService inventoryFormService;
+
 
 
     /**
@@ -327,6 +329,10 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     @Override
     @Transactional
     public void update2(MiddleMeterApplyDTO dto) {
+        //先校验是否删除了所有清单
+        if (dto.getFormList().size() == 0){
+            throw new ServiceException("修改失败,不能删除所有计量清单");
+        }
         //删除附件
         attachmentFormService.deleteByMasterId(dto.getId());
         //先保存附件,因为要判断是否关联
@@ -699,6 +705,15 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         List<String> list = vos.stream().map(l -> l.getId()+"").collect(Collectors.toList());
         String join = String.join(",", list);
         voList = this.addResolveForm(apply.getContractId(), apply.getContractUnitId(), join);
+        if (voList.size() > 1){
+            Map<String, MeterInventoryVO> map = voList.stream().collect(Collectors.toMap(MeterInventoryVO::getFormNumber, l -> l));
+            List<String> list2 = inventoryFormService.getAllFormNumberBySort(apply.getContractId());
+            for (String s : map.keySet()) {
+                MeterInventoryVO vo = map.get(s);
+                vo.setSort(list2.indexOf(s));
+            }
+            voList = voList.stream().sorted(Comparator.comparingInt(MeterInventoryVO::getSort)).collect(Collectors.toList());
+        }
         return voList;
     }