|
@@ -28,7 +28,9 @@ import org.springblade.core.mp.support.Query;
|
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.manager.entity.ContractInfo;
|
|
|
+import org.springblade.manager.entity.WbsTreeContract;
|
|
|
import org.springblade.meter.dto.MiddleMeterApplyDTO;
|
|
|
+import org.springblade.meter.dto.WbsNodeDTO;
|
|
|
import org.springblade.meter.entity.*;
|
|
|
import org.springblade.meter.mapper.MiddleMeterApplyMapper;
|
|
|
import org.springblade.meter.service.*;
|
|
@@ -44,10 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Set;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -154,6 +153,8 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
|
|
|
if (dto.getBusinessDate() == null){
|
|
|
throw new ServiceException("新增失败,请填写业务日期");
|
|
|
}
|
|
|
+
|
|
|
+ dto.setMeterNumber(this.getMeterNumber(dto));
|
|
|
//保存中间计量申请,设置计量金额为0,如果存在计量清单,则统计计量清单总金额
|
|
|
MiddleMeterApply apply = new MiddleMeterApply();
|
|
|
Long id = SnowFlakeUtil.getId();
|
|
@@ -503,8 +504,28 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
|
|
|
}
|
|
|
str.append(contractMeterPeriod.getPeriodNumber()+"-");
|
|
|
//获取流水号:当前合同段存在的当前计量期的申请单总数+1
|
|
|
- Integer count = baseMapper.getAllAPPly(apply.getContractId(),apply.getContractPeriodId());
|
|
|
- str.append(count+1);
|
|
|
+ List<MiddleMeterApply> allAPPly = baseMapper.getAllAPPly(apply.getContractId(), apply.getContractPeriodId());
|
|
|
+ if (allAPPly.size() == 0){
|
|
|
+ str.append(1);
|
|
|
+ }else {
|
|
|
+ List<Integer> list = allAPPly.stream().filter(l -> l.getApproveStatus() != null).map(l -> l.getApproveStatus()).sorted().collect(Collectors.toList());
|
|
|
+ if (list.size() == 0 || list.get(0) != 1){
|
|
|
+ str.append(1);
|
|
|
+ }else {
|
|
|
+ for (int i = 0; i < list.size() - 1; i++) {
|
|
|
+ Integer num = list.get(i);
|
|
|
+ if (num == list.get(i+1)){
|
|
|
+ throw new ServiceException("计量期期号出现相同,请联系管理员");
|
|
|
+ }
|
|
|
+ if (++num != list.get(i+1)){
|
|
|
+ str.append(num);
|
|
|
+ return str.toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ str.append(list.size()+1);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
return str.toString();
|
|
|
}
|
|
|
|
|
@@ -560,20 +581,28 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
|
|
|
|
|
|
@Override
|
|
|
public String test() {
|
|
|
- Long contractId = 1612329251049537537L;
|
|
|
+ Long contractId = 1632993681739259906L;
|
|
|
//获取当前合同下所以计量单元
|
|
|
- List<NodeSortVO> vos = baseMapper.getAllNode(contractId);
|
|
|
+ List<WbsNodeVO> vos = baseMapper.getAllNode(contractId);
|
|
|
//转换为树
|
|
|
Long l1 = System.currentTimeMillis();
|
|
|
- List<NodeSortVO> list = ForestNodeMerger.merge(vos);
|
|
|
+ List<WbsNodeVO> list = ForestNodeMerger.merge(vos);
|
|
|
Long l2 = System.currentTimeMillis();
|
|
|
System.out.println("----------------------");
|
|
|
System.out.println(l2-l1);
|
|
|
+ List<WbsNodeVO> list2 = new ArrayList<>();
|
|
|
+ for (WbsNodeVO vo : list) {
|
|
|
+ if (vo.getId() == 1538783484087627777L){
|
|
|
+ list2.add(vo);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
//递归循环树,存在子节点就深入,不存在子节点就add后返回上一层
|
|
|
List<Long> ids = new ArrayList<>();
|
|
|
Long l3 = System.currentTimeMillis();
|
|
|
- gatherSortNode(list,ids);
|
|
|
+ gatherSortNode2(list2, ids);
|
|
|
Long l4 = System.currentTimeMillis();
|
|
|
+ //构造数据
|
|
|
System.out.println("---------------");
|
|
|
System.out.println(l4-l3);
|
|
|
return "";
|
|
@@ -596,6 +625,89 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
|
|
|
return voList;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取当前WBS节点下的资料
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public IPage<WbsFileVO> getWbsNodeInfo(WbsNodeDTO dto) {
|
|
|
+ if (dto.getCurrent() == null || dto.getSize() == null){
|
|
|
+ throw new ServiceException("请传入分页信息");
|
|
|
+ }
|
|
|
+ Integer current = dto.getCurrent();
|
|
|
+ Integer size = dto.getSize();
|
|
|
+ Integer start = (current-1) * size;
|
|
|
+ Integer end = current * size;
|
|
|
+ //获取当前合同节点下所有子节点
|
|
|
+ List<WbsNodeVO> vos = baseMapper.getAllChildNode(dto);
|
|
|
+ List<WbsNodeVO> list = ForestNodeMerger.merge(vos);
|
|
|
+ List<WbsNodeVO> list2 = new ArrayList<>();
|
|
|
+ for (WbsNodeVO vo : list) {
|
|
|
+ if (vo.getId().equals(dto.getNodeId())){
|
|
|
+ list2.add(vo);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (list2.size() == 0){
|
|
|
+ throw new ServiceException("获取首节点错误");
|
|
|
+ }
|
|
|
+ List<Long> ids = new ArrayList<>();
|
|
|
+ gatherSortNode2(list2, ids);
|
|
|
+ IPage<WbsFileVO> iPage = new Page<WbsFileVO>(current,size);
|
|
|
+ iPage.setTotal(ids.size());
|
|
|
+ if (ids.size() == 0){
|
|
|
+ iPage.setRecords(null);
|
|
|
+ iPage.setPages(1);
|
|
|
+ }else {
|
|
|
+ if (ids.size() <= size){
|
|
|
+ iPage.setPages(1);
|
|
|
+ }else {
|
|
|
+ iPage.setPages((int) Math.ceil(new Double(ids.size()) / new Double(size)));
|
|
|
+ if (ids.size() < end) {
|
|
|
+ ids = ids.subList(start,ids.size());
|
|
|
+ }else {
|
|
|
+ ids = ids.subList(start,end);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询节点资料
|
|
|
+ List<WbsFileVO> voList = baseMapper.getNodeData(ids);
|
|
|
+ //节点划分
|
|
|
+ if (voList.size() != 0){
|
|
|
+ StringBuilder str = new StringBuilder();
|
|
|
+ for (WbsFileVO vo : voList) {
|
|
|
+ str.append(vo.getAncestors()+",");
|
|
|
+ }
|
|
|
+ str.deleteCharAt(str.length() -1);
|
|
|
+ List<Long> longs = Func.toLongList(str.toString());
|
|
|
+ HashSet<Long> set = new HashSet<>(longs);
|
|
|
+ List<WbsTreeContract> infoList = baseMapper.getAllAncestors(set,dto.getContractId());
|
|
|
+ if (infoList.size() == 0){
|
|
|
+ throw new ServiceException("未获取到节点划分信息");
|
|
|
+ }
|
|
|
+ Map<Long, WbsTreeContract> map = infoList.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
|
|
|
+ for (WbsFileVO vo : voList) {
|
|
|
+ List<Long> longList = Func.toLongList(vo.getAncestors());
|
|
|
+ Collections.reverse(longList);
|
|
|
+ StringBuilder str2 = new StringBuilder();
|
|
|
+ if (vo.getNodeType() == 6){
|
|
|
+ for (Long aLong : longList) {
|
|
|
+ WbsTreeContract info = map.get(aLong);
|
|
|
+ str2.append(info.getNodeName()+"/");
|
|
|
+ if (info.getNodeType() == 4){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ str2.deleteCharAt(str2.length() -1);
|
|
|
+ }else {
|
|
|
+ str2.append(vo.getNodeName());
|
|
|
+ }
|
|
|
+ vo.setPartName(str2.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ iPage.setRecords(voList);
|
|
|
+ return iPage;
|
|
|
+ }
|
|
|
+
|
|
|
//递归方法
|
|
|
private void gatherSortNode(List<NodeSortVO> list,List<Long> ids){
|
|
|
for (NodeSortVO vo : list) {
|
|
@@ -607,4 +719,15 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //质检WBS树专用,可能会设置条件,不重载
|
|
|
+ private void gatherSortNode2(List<WbsNodeVO> list,List<Long> ids){
|
|
|
+ for (WbsNodeVO vo : list) {
|
|
|
+ if (vo.getChildren().size() == 0 && vo.getIsData() > 0){
|
|
|
+ ids.add(vo.getPId());
|
|
|
+ continue;
|
|
|
+ }else {
|
|
|
+ gatherSortNode2(vo.getChildren(), ids);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|