ly 1 anno fa
parent
commit
cca303bb27

+ 136 - 8
src/main/java/cn/ezhizao/project/business/order/controller/BizArchiveInputController.java

@@ -17,6 +17,7 @@ import cn.ezhizao.project.business.company.domain.BizCompany;
 import cn.ezhizao.project.business.company.service.IBizCompanyService;
 import cn.ezhizao.project.business.order.domain.*;
 import cn.ezhizao.project.business.order.domain.vo.InputVo;
+import cn.ezhizao.project.business.order.domain.vo.TimeVo;
 import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailProcessService;
 import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailService;
 import cn.ezhizao.project.business.order.service.IBizArchiveInputService;
@@ -49,10 +50,11 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.BufferedInputStream;
 import java.io.OutputStream;
 import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -115,6 +117,38 @@ public class BizArchiveInputController extends BaseController {
         }
 //        List<BizArchiveInput> list = bizArchiveInputService.getList(bizArchiveInput);
         List<BizArchiveInput> list = bizArchiveInputService.getListByInput(bizArchiveInput);
+        for (BizArchiveInput item : list) {
+
+        }
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('business:archive:order:list')")
+    @GetMapping("/list2")
+    public TableDataInfo list2(InputVo bizArchiveInput) throws NoSuchFieldException, IllegalAccessException {
+        setTenantId(bizArchiveInput);
+        //分页
+        startPage();
+        //排序
+        startOrderBy();
+        //根据客户名称模糊查询去除两边空格
+        if (bizArchiveInput.getCompanyName() != null) {
+            if (!bizArchiveInput.getCompanyName().equals(""))
+                bizArchiveInput.setCompanyName(bizArchiveInput.getCompanyName().trim());
+        }
+//        List<BizArchiveInput> list = bizArchiveInputService.getList(bizArchiveInput);
+        List<BizArchiveInput> list = bizArchiveInputService.getListByInput(bizArchiveInput);
+        for (BizArchiveInput item : list) {
+            Integer serviceType = item.getServiceType();
+            if (serviceType.equals(1)) {
+                List<BizArchiveInputDetail> details = archiveInputDetailService.list(new LambdaQueryWrapper<>(BizArchiveInputDetail.class).eq(BizArchiveInputDetail::getContractId, item.getId()));
+                for (BizArchiveInputDetail detail : details) {
+                    detail.setTaskTypeName(taskTypeService.getById(detail.getTaskTypeId()).getName());
+                }
+                item.setRemark(details.stream().map(BizArchiveInputDetail::getTaskTypeName).collect(Collectors.joining(",")));
+            }
+
+        }
         return getDataTable(list);
     }
 
@@ -278,12 +312,18 @@ public class BizArchiveInputController extends BaseController {
                 if (one != null) {
                     List<BizWorkOrderRecord> list = workOrderRecordService.list(new LambdaQueryWrapper<BizWorkOrderRecord>()
                             .eq(BizWorkOrderRecord::getWorkOrderId, one.getWorkOrderId()));
-                    if (CollectionUtils.isNotEmpty(list)){
+                    if (CollectionUtils.isNotEmpty(list)) {
                         detail.setDisabled(true);
-                    }else {
+                    } else {
                         detail.setDisabled(false);
                     }
                 }
+                if (bizArchiveInput.getServiceType() == 1) {
+                    TimeVo time = getTime(detail.getContractId(), detail.getId(), detail.getTaskTypeId(), detail.getCompanyId());
+                    if (time != null) {
+                        detail.setTimeVo(time);
+                    }
+                }
             }
 
             List<BizArchiveInputDetailProcess> processes = archiveInputDetailProcessService.getList(conditionProcess);
@@ -311,6 +351,7 @@ public class BizArchiveInputController extends BaseController {
     }
 
     private boolean checkAlter(BizArchiveInput newBizArchiveInput, BizArchiveInput oldArchiveInput) {
+        boolean result = true;
         // 假设是单次任务判断删掉的任务是否已开始
         if (!newBizArchiveInput.getServiceType().equals(oldArchiveInput.getServiceType())) {
             throw new ServiceException("变更任务和原任务类型不相符");
@@ -328,7 +369,7 @@ public class BizArchiveInputController extends BaseController {
                 BizArchiveInputDetail newItem = newBizArchiveInput.getDetails().stream().filter(v -> l.getId().equals(v.getId())).findFirst().orElse(new BizArchiveInputDetail());
                 delProcess.addAll(l.getProcesses().stream()
                         .filter(v -> newItem.getProcesses().stream()
-                                .noneMatch(e -> e.getId()!= null && e.getId().equals(v.getId()))).collect(Collectors.toList()));
+                                .noneMatch(e -> e.getId() != null && e.getId().equals(v.getId()))).collect(Collectors.toList()));
                 if (newBizArchiveInput.getServiceType().equals(1)) {
                     boolean a = (newItem.getFreeNum() + newItem.getServiceNum()) != (l.getServiceNum() + l.getFreeNum());
                     boolean b = (newItem.getPrice().subtract(newItem.getDiscountAmount())).compareTo(l.getPrice().subtract(l.getDiscountAmount())) != 0;
@@ -355,12 +396,32 @@ public class BizArchiveInputController extends BaseController {
                 BizWorkOrderDetail one = bizWorkOrderDetailService.getOne(new LambdaQueryWrapper<BizWorkOrderDetail>()
                         .eq(BizWorkOrderDetail::getContractDetailId, item.getId())
                         .eq(BizWorkOrderDetail::getIsStop, 0));
+
+
                 //通过明细查询workorderID 进而查询record表
                 if (one != null) {
                     Long workOrderId = one.getWorkOrderId();
                     List<BizWorkOrderRecord> list = workOrderRecordService.list(new LambdaQueryWrapper<BizWorkOrderRecord>()
                             .eq(BizWorkOrderRecord::getWorkOrderId, workOrderId));
-                    if (CollectionUtils.isNotEmpty(list)) {
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+                    List<LocalDate> datesList = list.stream().map(x -> {
+                        String formattedMonth = String.format("%02d", Integer.valueOf(x.getMonth()).intValue());
+                        return LocalDate.parse(x.getYear() + "-" +formattedMonth+"-01", formatter);
+                    }).collect(Collectors.toList());
+
+                    //续签时当前时间段如果没有工单则可以修改
+                    TimeVo time = getTime(item.getContractId(), item.getId(), item.getTaskTypeId(), newBizArchiveInput.getCompanyId());
+                    if (time != null) {
+                        String startM = format.format(time.getStartTime());
+                        String endM = format.format(time.getEndTime());
+                        LocalDate startDate = LocalDate.parse(startM, formatter);
+                        LocalDate endDate = LocalDate.parse(endM, formatter);
+                        result = isAnyDateInRange(datesList, startDate, endDate);
+                    }
+
+
+                    if (CollectionUtils.isNotEmpty(list) && result) {
                         throw new ServiceException("存在已开始的任务,不能修改该合同明细");
                     }
                 }
@@ -384,6 +445,11 @@ public class BizArchiveInputController extends BaseController {
         return true;
     }
 
+    public static boolean isAnyDateInRange(List<LocalDate> dates, LocalDate startDate, LocalDate endDate) {
+        return dates.stream()
+                .anyMatch(date -> !date.isBefore(startDate) && !date.isAfter(endDate));
+    }
+
     @Log(title = "合同导入", businessType = BusinessType.IMPORT)
     @PreAuthorize("@ss.hasPermi('business:archive:order:import')")
     @PostMapping("/importLoop")
@@ -528,4 +594,66 @@ public class BizArchiveInputController extends BaseController {
         return success();
     }
 
+    //获取当前合同工单起始结束区间
+    public TimeVo getTime(Long contractId, Long contractDetailId, Long typeId, Long companyId) {
+        //排序获取当前索引位置
+        BizWorkOrderDetail one = bizWorkOrderDetailService.getOne(
+                new LambdaQueryWrapper<BizWorkOrderDetail>()
+                        .eq(BizWorkOrderDetail::getContractId, contractId)
+                        .eq(BizWorkOrderDetail::getContractDetailId, contractDetailId)
+                        .eq(BizWorkOrderDetail::getCompanyId, companyId)
+                        .eq(BizWorkOrderDetail::getTaskTypeId, typeId).eq(BizWorkOrderDetail::getDeleted, 0));
+        if (one == null){
+            return null;
+        }
+        Long workOrderId = one.getWorkOrderId();
+
+        BizWorkOrder workOrder = workOrderService.getById(workOrderId);
+        if (workOrder == null) {
+            logger.error("获取工单失败");
+            return null;
+        }
+        List<BizWorkOrderDetail> list = bizWorkOrderDetailService.list(new LambdaQueryWrapper<BizWorkOrderDetail>()
+                .eq(BizWorkOrderDetail::getWorkOrderId, workOrderId)
+                .eq(BizWorkOrderDetail::getTaskTypeId, typeId)
+                .orderByAsc(BizWorkOrderDetail::getCreateTime));
+
+        List<Long> indexList = list.stream().map(m -> m.getContractDetailId()).collect(Collectors.toList());
+        //确定当前索引元素
+        int i = indexList.indexOf(contractDetailId);
+        if (i == -1) {
+            return null;
+        }
+        //当前元素所有月份
+        BizWorkOrderDetail bizWorkOrderDetail = list.get(i);
+        int monthNum = bizWorkOrderDetail.getFreeNum() + bizWorkOrderDetail.getServiceNum();
+        //判断是不是第一个
+        if (i == 0) {
+            DateTime startMonth = DateTime.of(workOrder.getStartMonth());
+            Date endMonth = startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate();
+            return new TimeVo(workOrder.getStartMonth(), endMonth);
+        } else {
+            //中间的工单
+            //获取起始时间 并获取 i 之前所有月数 相加为起始时间
+            int totalNum = getMonthNum(i - 1, list);
+            DateTime month = DateTime.of(workOrder.getStartMonth());
+            Date startMonth = month.offset(DateField.MONTH, totalNum).toSqlDate();
+            DateTime startMonthTemp = DateTime.of(startMonth);
+            Date endMonth = startMonthTemp.offset(DateField.MONTH, monthNum - 1).toSqlDate();
+            return new TimeVo(startMonth, endMonth);
+        }
+
+    }
+
+    public static int getMonthNum(int i, List<BizWorkOrderDetail> list) {
+        int total = 0;
+        while (i >= 0) {
+            BizWorkOrderDetail bizWorkOrderDetail = list.get(i);
+            total += bizWorkOrderDetail.getFreeNum() + bizWorkOrderDetail.getServiceNum();
+            i--;
+        }
+        return total;
+    }
+
+
 }

+ 4 - 0
src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInputDetail.java

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
+import cn.ezhizao.project.business.order.domain.vo.TimeVo;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import cn.ezhizao.framework.web.domain.BaseEntity;
@@ -164,4 +165,7 @@ public class BizArchiveInputDetail extends BaseEntity {
     //禁用状态
     @TableField(exist = false)
     private boolean isDisabled;
+
+    @TableField(exist = false)
+    private TimeVo timeVo;
 }

+ 23 - 0
src/main/java/cn/ezhizao/project/business/order/domain/vo/TimeVo.java

@@ -0,0 +1,23 @@
+package cn.ezhizao.project.business.order.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+public class TimeVo implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+}