|
@@ -110,11 +110,17 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
public boolean verify(BizArchiveInput bizArchiveInput) {
|
|
|
super.updateById(bizArchiveInput);
|
|
|
List<BizArchiveInputDetail> details = archiveInputDetailService.query().eq("contract_id", bizArchiveInput.getId()).list();
|
|
|
+ details.forEach(l -> {
|
|
|
+ BizArchiveInputDetail detail = bizArchiveInput.getDetails().stream().filter(v -> v.getId().equals(l.getId())).findFirst().orElse(l);
|
|
|
+ l.setRedirect(detail.getRedirect() != null ? detail.getRedirect() : false);
|
|
|
+ });
|
|
|
List<BizArchiveInputDetailProcess> processes = archiveInputDetailProcessService.query().eq("contract_id", bizArchiveInput.getId()).list();
|
|
|
List<BizWorkOrder> newWorkOrders = new ArrayList<>();
|
|
|
List<BizWorkOrder> changeWorkOrders = new ArrayList<>();
|
|
|
+ List<BizWorkOrder> stopWorkOrders = new ArrayList<>();
|
|
|
List<BizWorkOrderDetail> newWorkOrderDetails = new ArrayList<>();
|
|
|
List<BizWorkOrderDetail> changeWorkOrderDetails = new ArrayList<>();
|
|
|
+ List<BizWorkOrderDetail> stopWorkOrderDetails = new ArrayList<>();
|
|
|
if (bizArchiveInput.getVerifyStatus().equals(1)) {
|
|
|
// 审核通过插入不存在的工单
|
|
|
// 判断是循环还是单次
|
|
@@ -122,7 +128,7 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
// 假设是循环 判断是否已有该任务并没有签出
|
|
|
details.forEach(l -> {
|
|
|
List<BizWorkOrder> workOrders = workOrderService.query().eq("company_id", bizArchiveInput.getCompanyId()).eq("task_type_id", l.getTaskTypeId()).eq("is_stop", 0).list();
|
|
|
- List<BizWorkOrderDetail> workOrderDetails = workOrderDetailService.query().eq("contract_detail_id", l.getId()).list();
|
|
|
+ List<BizWorkOrderDetail> workOrderDetails = workOrderDetailService.query().eq("contract_detail_id", l.getId()).eq("is_stop", 0).list();
|
|
|
// 假设未有该任务 添加任务记录
|
|
|
if (workOrders.isEmpty()) {
|
|
|
BizWorkOrder workOrder = new BizWorkOrder();
|
|
@@ -142,42 +148,119 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
bizWorkOrderDetail.setCompanyId(l.getCompanyId());
|
|
|
bizWorkOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
bizWorkOrderDetail.setContractDetailId(l.getId());
|
|
|
+ bizWorkOrderDetail.setTaskTypeId(l.getTaskTypeId());
|
|
|
bizWorkOrderDetail.setServiceNum(l.getServiceNum());
|
|
|
bizWorkOrderDetail.setFreeNum(l.getFreeNum());
|
|
|
bizWorkOrderDetail.setTenantId(l.getTenantId());
|
|
|
bizWorkOrderDetail.setContractId(bizArchiveInput.getId());
|
|
|
newWorkOrderDetails.add(bizWorkOrderDetail);
|
|
|
// addLoopTasks(workOrder);
|
|
|
- } else {
|
|
|
- // 假设已有该任务 修改任务月数和结束月
|
|
|
- // 判断是否有变更 是变更的先改下
|
|
|
- workOrders.forEach(v -> {
|
|
|
- Integer monthNum = v.getMonthNum();
|
|
|
- BizWorkOrderDetail bizWorkOrderDetail = workOrderDetails.stream().filter(t -> t.getWorkOrderId().equals(v.getId())
|
|
|
- ).findFirst().orElse(new BizWorkOrderDetail());
|
|
|
- monthNum = monthNum - (bizWorkOrderDetail.getServiceNum() == null ? 0 : bizWorkOrderDetail.getServiceNum()) - (bizWorkOrderDetail.getFreeNum() == null ? 0 : bizWorkOrderDetail.getFreeNum()) + l.getFreeNum() + l.getServiceNum();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 假设已有该任务 判断是否重建任务 修改任务月数和结束月
|
|
|
+ if(l.getRedirect() != null && l.getRedirect()) {
|
|
|
+ // 重建任务将旧任务停止
|
|
|
+ workOrders.forEach(v -> v.setIsStop(1));
|
|
|
+ changeWorkOrders.addAll(workOrders);
|
|
|
+ workOrderDetails.forEach(v -> v.setIsStop(1));
|
|
|
+ changeWorkOrderDetails.addAll(workOrderDetails);
|
|
|
+ // 新建新任务。
|
|
|
+ BizWorkOrder workOrder = new BizWorkOrder();
|
|
|
+ workOrder.setCompanyId(bizArchiveInput.getCompanyId());
|
|
|
+ workOrder.setContractId(bizArchiveInput.getId());
|
|
|
+ workOrder.setNoContract(0);
|
|
|
+ workOrder.setContractDetailId(l.getId());
|
|
|
+ workOrder.setIsStop(0);
|
|
|
+ workOrder.setTenantId(l.getTenantId());
|
|
|
+ workOrder.setTaskTypeId(l.getTaskTypeId());
|
|
|
+ workOrder.setType(bizArchiveInput.getServiceType());
|
|
|
+ workOrder.setMonthNum(l.getFreeNum() + l.getServiceNum());
|
|
|
+ workOrder.setWorkOrderNo("workOrder_" + snowflakeIdWorker.nextId());
|
|
|
+ workOrder.setId(snowflakeIdWorker.nextId());
|
|
|
+ newWorkOrders.add(workOrder);
|
|
|
+ BizWorkOrderDetail bizWorkOrderDetail = new BizWorkOrderDetail();
|
|
|
bizWorkOrderDetail.setCompanyId(l.getCompanyId());
|
|
|
- bizWorkOrderDetail.setWorkOrderId(v.getId());
|
|
|
+ bizWorkOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
bizWorkOrderDetail.setContractDetailId(l.getId());
|
|
|
+ bizWorkOrderDetail.setTaskTypeId(l.getTaskTypeId());
|
|
|
bizWorkOrderDetail.setServiceNum(l.getServiceNum());
|
|
|
bizWorkOrderDetail.setFreeNum(l.getFreeNum());
|
|
|
bizWorkOrderDetail.setTenantId(l.getTenantId());
|
|
|
bizWorkOrderDetail.setContractId(bizArchiveInput.getId());
|
|
|
- if (bizWorkOrderDetail.getId() == null) {
|
|
|
- newWorkOrderDetails.add(bizWorkOrderDetail);
|
|
|
- } else {
|
|
|
- changeWorkOrderDetails.add(bizWorkOrderDetail);
|
|
|
- }
|
|
|
- v.setMonthNum(monthNum);
|
|
|
- DateTime startMonth = DateTime.of(v.getStartMonth());
|
|
|
- v.setEndMonth(startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate());
|
|
|
- changeWorkOrders.add(v);
|
|
|
- });
|
|
|
+ newWorkOrderDetails.add(bizWorkOrderDetail);
|
|
|
+ } else {
|
|
|
+ // 判断是否有变更 是变更的先改下
|
|
|
+ workOrders.forEach(v -> {
|
|
|
+ Integer monthNum = v.getMonthNum();
|
|
|
+ BizWorkOrderDetail bizWorkOrderDetail = workOrderDetails.stream().filter(t -> t.getWorkOrderId().equals(v.getId())
|
|
|
+ ).findFirst().orElse(new BizWorkOrderDetail());
|
|
|
+ monthNum = monthNum - (bizWorkOrderDetail.getServiceNum() == null ? 0 : bizWorkOrderDetail.getServiceNum()) - (bizWorkOrderDetail.getFreeNum() == null ? 0 : bizWorkOrderDetail.getFreeNum()) + l.getFreeNum() + l.getServiceNum();
|
|
|
+ bizWorkOrderDetail.setCompanyId(l.getCompanyId());
|
|
|
+ bizWorkOrderDetail.setWorkOrderId(v.getId());
|
|
|
+ bizWorkOrderDetail.setContractDetailId(l.getId());
|
|
|
+ bizWorkOrderDetail.setTaskTypeId(l.getTaskTypeId());
|
|
|
+ bizWorkOrderDetail.setServiceNum(l.getServiceNum());
|
|
|
+ bizWorkOrderDetail.setFreeNum(l.getFreeNum());
|
|
|
+ bizWorkOrderDetail.setTenantId(l.getTenantId());
|
|
|
+ bizWorkOrderDetail.setContractId(bizArchiveInput.getId());
|
|
|
+ if (bizWorkOrderDetail.getId() == null) {
|
|
|
+ newWorkOrderDetails.add(bizWorkOrderDetail);
|
|
|
+ } else {
|
|
|
+ changeWorkOrderDetails.add(bizWorkOrderDetail);
|
|
|
+ }
|
|
|
+ v.setMonthNum(monthNum);
|
|
|
+ if (v.getStartMonth() != null) {
|
|
|
+ DateTime startMonth = DateTime.of(v.getStartMonth());
|
|
|
+ v.setEndMonth(startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate());
|
|
|
+ }
|
|
|
+ changeWorkOrders.add(v);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
+ List<BizWorkOrderDetail> workOrderDetails = workOrderDetailService.query().eq("contract_id", bizArchiveInput.getId()).eq("is_stop", 0).eq("is_stop", 0).list();
|
|
|
+ stopWorkOrderDetails.addAll(workOrderDetails.stream().filter(v -> changeWorkOrderDetails.stream().noneMatch(e -> e.getId().equals(v.getId()))).collect(Collectors.toList()));
|
|
|
+ if (!stopWorkOrderDetails.isEmpty()) {
|
|
|
+ List<BizWorkOrder> workOrders = workOrderService.query().in("id", stopWorkOrderDetails.stream().map(BizWorkOrderDetail::getWorkOrderId).collect(Collectors.toList())).list();
|
|
|
+ // 停用的工单判断是否为空
|
|
|
+ workOrders.forEach(l -> {
|
|
|
+ BizWorkOrderDetail detail = stopWorkOrderDetails.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).findFirst().orElse(null);
|
|
|
+ if (changeWorkOrders.stream().noneMatch(v -> v.getId().equals(l.getId())) && detail != null) {
|
|
|
+ BizWorkOrder v = changeWorkOrders.stream().filter(e -> e.getId().equals(l.getId())).findFirst().orElse(l);
|
|
|
+ int monthNum = v.getMonthNum() - (detail.getServiceNum() == null ? 0 : detail.getServiceNum()) - (detail.getFreeNum() == null ? 0 : detail.getFreeNum());
|
|
|
+ v.setMonthNum(monthNum);
|
|
|
+ if (v.getStartMonth() != null) {
|
|
|
+ DateTime startMonth = DateTime.of(v.getStartMonth());
|
|
|
+ v.setEndMonth(startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (detail != null) {
|
|
|
+ int monthNum = l.getMonthNum() - (detail.getServiceNum() == null ? 0 : detail.getServiceNum()) - (detail.getFreeNum() == null ? 0 : detail.getFreeNum());
|
|
|
|
|
|
-
|
|
|
- } else if (bizArchiveInput.getServiceType().equals(2)) {
|
|
|
+ if (monthNum == 0) {
|
|
|
+ l.setIsStop(1);
|
|
|
+ stopWorkOrders.add(l);
|
|
|
+ } else {
|
|
|
+ l.setMonthNum(monthNum);
|
|
|
+ if (l.getStartMonth() != null) {
|
|
|
+ DateTime startMonth = DateTime.of(l.getStartMonth());
|
|
|
+ l.setEndMonth(startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate());
|
|
|
+ }
|
|
|
+ changeWorkOrders.add(l);
|
|
|
+ }
|
|
|
+ }
|
|
|
+// Integer workMonth = l.getMonthNum() - (detail != null ? detail.getFreeNum() + detail.getServiceNum() : 0);
|
|
|
+// if (workMonth.equals(0)) {
|
|
|
+// l.setIsStop(1);
|
|
|
+// stopWorkOrders.add(l);
|
|
|
+// } else {
|
|
|
+// l.setMonthNum(workMonth);
|
|
|
+// changeWorkOrders.add(l);
|
|
|
+// }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (bizArchiveInput.getServiceType().equals(2)) {
|
|
|
List<BizWorkOrder> workOrders = workOrderService.query().eq("company_id", bizArchiveInput.getCompanyId()).eq("contract_id", bizArchiveInput.getId()).eq("is_stop", 0).list();
|
|
|
// 假设是单次任务 添加该任务
|
|
|
details.forEach(l -> {
|
|
@@ -206,13 +289,20 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
+ // 假设有删除的工单 则 停止工单
|
|
|
+ stopWorkOrders.addAll(workOrders.stream().filter(e -> changeWorkOrders.stream().noneMatch(v -> v.getId().equals(e.getId()))).collect(Collectors.toList()));
|
|
|
+ stopWorkOrders.forEach(l -> l.setIsStop(1));
|
|
|
}
|
|
|
}
|
|
|
boolean status = (newWorkOrderDetails.isEmpty() || workOrderDetailService.saveBatch(newWorkOrderDetails))
|
|
|
&& (newWorkOrders.isEmpty() || workOrderService.saveBatch(newWorkOrders))
|
|
|
+ && (stopWorkOrders.isEmpty() || workOrderService.updateBatchById(stopWorkOrders))
|
|
|
&& (changeWorkOrders.isEmpty() || workOrderService.updateBatchById(changeWorkOrders))
|
|
|
- && (changeWorkOrderDetails.isEmpty() || workOrderDetailService.updateBatchById(changeWorkOrderDetails));
|
|
|
+ && (changeWorkOrderDetails.isEmpty() || workOrderDetailService.updateBatchById(changeWorkOrderDetails))
|
|
|
+ && (stopWorkOrderDetails.isEmpty() || workOrderDetailService.updateBatchById(stopWorkOrderDetails));
|
|
|
newWorkOrders.forEach(this::addLoopTasks);
|
|
|
+ stopWorkOrders.forEach(this::stopLoopTasks);
|
|
|
+ changeWorkOrders.stream().filter(v -> v.getIsStop().equals(1)).forEach(this::stopLoopTasks);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
@@ -504,16 +594,20 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
|
|
|
@Override
|
|
|
public boolean checkWorkOrderChangeStatus(List<BizArchiveInputDetail> changeList) {
|
|
|
- List<BizWorkOrderDetail> details = workOrderDetailService.query().in("contract_detail_id", changeList.stream().map(BizArchiveInputDetail::getId).collect(Collectors.toList())).list();
|
|
|
+ // 该合同的工单明细
|
|
|
+ List<BizWorkOrderDetail> details = workOrderDetailService.query().in("contract_id", changeList.stream().map(BizArchiveInputDetail::getContractId).collect(Collectors.toList())).list();
|
|
|
+ // 该合同的工单
|
|
|
List<BizWorkOrder> workOrders = workOrderService.query().in("id", details.stream().map(BizWorkOrderDetail::getWorkOrderId).collect(Collectors.toList())).list();
|
|
|
+ // 其他合同的工单明细
|
|
|
List<BizWorkOrderDetail> otherDetails = workOrderDetailService.query().eq("is_stop", 0).in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).notIn("id", details.stream().map(BizWorkOrderDetail::getId).collect(Collectors.toList())).list();
|
|
|
- List<BizWorkOrderRecord> records = workOrderRecordService.query().in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).list();
|
|
|
+ // 这些工单的完成情况
|
|
|
+ List<BizWorkOrderRecord> records = workOrderRecordService.query().in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).eq("from_id", 0).list();
|
|
|
AtomicBoolean status = new AtomicBoolean(true);
|
|
|
workOrders.forEach(l -> {
|
|
|
// 除了删除的工单明细之外的工单
|
|
|
l.setDetails(otherDetails.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
|
|
|
BizWorkOrderDetail item = details.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).findFirst().orElse(new BizWorkOrderDetail());
|
|
|
- BizArchiveInputDetail itemDetail = changeList.stream().filter(v -> v.getId().equals(item.getContractDetailId())).findFirst().orElse(new BizArchiveInputDetail());
|
|
|
+ BizArchiveInputDetail itemDetail = changeList.stream().filter(v -> v.getId().equals(item.getTaskTypeId())).findFirst().orElse(new BizArchiveInputDetail());
|
|
|
|
|
|
// 完成的部分
|
|
|
l.setRecords(records.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
|
|
@@ -522,7 +616,8 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
int monthNun = l.getDetails().stream().mapToInt(v -> v.getServiceNum() + v.getFreeNum()).sum() + (itemDetail.getServiceNum() == null ? 0 : itemDetail.getServiceNum()) + (itemDetail.getFreeNum() == null ? 0 : itemDetail.getFreeNum());
|
|
|
DateTime startDate = DateTime.of(l.getStartMonth());
|
|
|
DateTime endDate = startDate.offsetNew(DateField.MONTH, monthNun - 1);
|
|
|
- if (records.stream().noneMatch(v -> (v.getYear() + v.getMonth()).compareTo(endDate.toString("yyyyMM")) >= 0)) {
|
|
|
+ // 任务完成月没有比更改后工单的完成月更大的。
|
|
|
+ if (!records.isEmpty() && records.stream().noneMatch(v -> (v.getYear() + v.getMonth()).compareTo(endDate.toString("yyyyMM")) >= 0)) {
|
|
|
status.set(false);
|
|
|
} else {
|
|
|
status.set(status.get());
|
|
@@ -697,6 +792,7 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
workOrderDetail.setContractDetailId(detail.getId());
|
|
|
workOrderDetail.setContractId(archiveInput.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
workOrderDetail.setFreeNum(detail.getFreeNum());
|
|
|
workOrderDetail.setServiceNum(detail.getServiceNum());
|
|
@@ -742,6 +838,7 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
workOrderDetail.setContractDetailId(detail.getId());
|
|
|
workOrderDetail.setContractId(archiveInput.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
workOrderDetail.setFreeNum(detail.getFreeNum());
|
|
|
workOrderDetail.setServiceNum(detail.getServiceNum());
|
|
@@ -786,6 +883,7 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
|
|
|
workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
workOrderDetail.setContractDetailId(detail.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
workOrderDetail.setContractId(archiveInput.getId());
|
|
|
workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
workOrderDetail.setFreeNum(detail.getFreeNum());
|
|
@@ -831,6 +929,7 @@ public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMappe
|
|
|
BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
|
|
|
workOrderDetail.setCompanyId(archiveInput.getCompanyId());
|
|
|
workOrderDetail.setContractDetailId(detail.getId());
|
|
|
+ workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
|
|
|
workOrderDetail.setContractId(archiveInput.getId());
|
|
|
workOrderDetail.setWorkOrderId(workOrder.getId());
|
|
|
workOrderDetail.setFreeNum(detail.getFreeNum());
|