From cb415813de667096290d6bd0f924f5b523104117 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 10 十一月 2025 17:41:04 +0800
Subject: [PATCH] 报备工单bug修改,定时任务在线问题修改新增导出扣分明细功能

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java |  138 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 132 insertions(+), 6 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
index d557e97..b076099 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -27,10 +27,12 @@
 import com.ycl.platform.wvp.WVPResult;
 import com.ycl.system.Result;
 import com.ycl.system.domain.SysConfig;
+import com.ycl.system.entity.SysDept;
 import com.ycl.system.entity.SysDictData;
 import com.ycl.system.mapper.SysConfigMapper;
 import com.ycl.system.model.LoginUser;
 import com.ycl.system.page.PageUtil;
+import com.ycl.system.service.ISysDeptService;
 import com.ycl.task.DeleteWorkOrderImgTask;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.SecurityUtils;
@@ -117,7 +119,14 @@
         WorkOrderServiceImpl self = applicationContext.getBean(WorkOrderServiceImpl.class);
         return self.batchAddWorkOrder(workOrderList);
     }
-
+    private boolean isSameDay(Date date1, Date date2) {
+        if (date1 == null || date2 == null) {
+            return false;
+        }
+        LocalDate localDate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        LocalDate localDate2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return localDate1.isEqual(localDate2);
+    }
     @Transactional(rollbackFor = Exception.class)
     public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList) {
         int total = workOrderList.size();
@@ -162,6 +171,15 @@
         for (WorkOrder workOrder : workOrderList) {
             WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
             if (Objects.nonNull(databaseWorkOrder)) {
+                //鍒ゆ柇鏄惁鏄粖澶╃殑宸ュ崟
+                if (!isSameDay(databaseWorkOrder.getCreateTime(), now)) {
+                    // 鑻ヤ负鍓嶄竴澶╃殑宸ュ崟锛屼笉鏇存柊锛岀洿鎺ュ綋浣滄柊宸ュ崟鏂板
+                    workOrder.setCreateTime(now);
+                    workOrder.setUpdateTime(now);
+                    waitAddList.add(workOrder);
+                    continue; // 璺宠繃鍚庣画鐨勬洿鏂伴�昏緫
+                }
+
                 List<String> errorNameList = databaseWorkOrder.getErrorTypeList();
                 List<String> errorTypes = workOrder.getErrorTypeList();
                 if (errorNameList.containsAll(errorTypes)) {
@@ -591,6 +609,37 @@
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
+    @Override
+    public Result ywConditionList(WorkOrderYWConditionsForm form) {
+        List<WorkOrder> workOrderList = new LambdaQueryChainWrapper<>(baseMapper)
+                .in(WorkOrder::getWorkOrderNo,form.getWorkOrderNumbers())
+                .list();
+        System.out.println("--------------");
+        System.out.println(workOrderList);
+        if (CollectionUtils.isEmpty(workOrderList)) {
+            throw new ServiceException("宸ュ崟涓嶅瓨鍦�");
+        }
+        // 宸ュ崟鐘舵��
+        for (WorkOrder workOrder : workOrderList) {
+            workOrder.setStatus(WorkOrderStatusEnum.YW_HANDLE);
+            workOrder.setYwHandleTime(LocalDateTime.now());
+        }
+        baseMapper.updateMany(workOrderList);
+        // 娣诲姞涓�鏉¤繍缁存儏鍐佃褰�
+        for (WorkOrder workOrder : workOrderList) {
+            WorkOrderYwConditionRecord workOrderYwConditionRecord = new WorkOrderYwConditionRecord();
+            workOrderYwConditionRecord.setWorkOrderNo(workOrder.getWorkOrderNo());
+            workOrderYwConditionRecord.setCommitUser(SecurityUtils.getLoginUser().getUserId().intValue());
+            workOrderYwConditionRecord.setYwCondition(form.getYwCondition());
+            workOrderYwConditionRecord.setYwProofMaterials(form.getYwProofMaterials());
+            workOrderYwConditionRecord.setSysMsg(Boolean.FALSE);
+            workOrderYwConditionRecordMapper.insert(workOrderYwConditionRecord);
+            WorkOrderServiceImpl self = applicationContext.getBean(WorkOrderServiceImpl.class);
+            self.getImage(workOrder);
+        }
+        return Result.ok("鎿嶄綔鎴愬姛");
+    }
+
     @Async("threadPoolTaskExecutor")
     public void getImage(WorkOrder workOrder) {
         List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
@@ -756,7 +805,7 @@
 
 
 
-
+    private final ISysDeptService deptService;
     /**
      * 鍒嗛〉鏌ヨ
      *
@@ -765,6 +814,24 @@
      */
     @Override
     public Result page(WorkOrderQuery query) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        SysDept sysDept = null;
+        Long deptId =null;
+        if (loginUser.getDeptId() != null){
+            deptId = loginUser.getDeptId();
+            sysDept = deptService.selectDeptById(deptId);
+        }
+        //鏌ヨ鎸囧畾鍖烘暟鎹�
+        // 鐧诲綍璐﹀彿鐨勫瓨鍦ㄩ儴闂� 涓嶅湪閮ㄩ棬鍐呭氨涓嶄紶鍊硷紝榛樿鏌ヨ鍏ㄩ儴
+        if (sysDept !=null){
+            //鏇村叿閮ㄩ棬id鑾峰緱瀵瑰簲鏋氫妇 閮ㄩ棬code
+            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
+            if (areaDeptEnum != null){
+                query.setDept(areaDeptEnum.getCode());
+            }
+        }
+
+
         IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
         if (query.getUnitId() == null) {
             query.setUnitId(SecurityUtils.getUnitId());
@@ -807,6 +874,43 @@
                 }
             });
         }
+        //鍔犱笂鎶ュ淇℃伅
+        if (!CollectionUtils.isEmpty(page.getRecords())) {
+            List<String> serialNumberList = page.getRecords().stream()
+                    .map(WorkOrderVO::getSerialNumber).collect(Collectors.toList());
+            List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
+                    .in(Report::getSerialNumber, serialNumberList)
+                    .eq(Report::getStatus,1)
+                    .eq(Report::getDeleted,Boolean.FALSE).list();
+            Map<String, List<Report>> reportMap = reports.stream()
+                    .collect(Collectors.groupingBy(Report::getSerialNumber));
+
+            for (WorkOrderVO workOrder : page.getRecords()) {
+                workOrder.setHasReport(false);
+                List<Report> reportsByWorkOrder = reportMap.get(workOrder.getSerialNumber());
+                if (CollectionUtils.isEmpty(reportsByWorkOrder)) {
+                    continue; // 鏃犳姤鍛婏紝鐩存帴璺宠繃
+                }
+                Date distributeTime = workOrder.getDistributeTime();
+                for (Report report : reportsByWorkOrder) {
+                    Date beginTime = report.getBeginCreateTime();
+                    Date endTime = report.getEndCreateTime();
+                    // 绌烘寚閽堥槻鎶�
+                    if (distributeTime == null || beginTime == null || endTime == null) {
+                        continue;
+                    }
+                    // 鏃堕棿鍖洪棿鍒ゆ柇锛歞istributeTime 鍦� [beginTime, endTime] 鍐�
+                    boolean isInRange = distributeTime.compareTo(beginTime) >= 0
+                            && distributeTime.compareTo(endTime) <= 0;
+                    if (isInRange) {
+                        workOrder.setHasReport(true);
+                        break; // 鎵惧埌涓�涓嵆閫�鍑哄惊鐜�
+                    }
+                }
+            }
+        }
+
+
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
@@ -1021,8 +1125,10 @@
 
     @Override
     public WorkOrderTotalVO workOrderTotal(DashboardQuery dashboardQuery) {
+        //todo澶у睆宸ュ崟鏈鐞嗗伐鍗曟暟閲忔湁鐐归棶棰�
         return baseMapper.workOrderTotal(dashboardQuery);
     }
+
 
     @Override
     public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
@@ -1236,10 +1342,30 @@
         }
 
         // 鏄惁鎶ュ
-        boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper)
-                .eq(Report::getSerialNumber, workOrder.getSerialNumber())
-                .exists();
-        workOrder.setHasReport(hasReport);
+
+        List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
+                .eq(Report::getSerialNumber,workOrder.getSerialNumber())
+                .eq(Report::getStatus,1)
+                .orderByDesc(Report::getCreateTime)
+                .list();
+        log.info("鎶ュ璁板綍:{}",reports);
+        Date distributeTime = workOrder.getDistributeTime();
+        workOrder.setHasReport(false);
+        for (Report report : reports) {
+            Date beginTime = report.getBeginCreateTime();
+            Date endTime = report.getEndCreateTime();
+            // 绌烘寚閽堥槻鎶�
+            if (distributeTime == null || beginTime == null || endTime == null) {
+                continue;
+            }
+            // 鏃堕棿鍖洪棿鍒ゆ柇锛歞istributeTime 鍦� [beginTime, endTime] 鍐�
+            boolean isInRange = distributeTime.compareTo(beginTime) >= 0
+                    && distributeTime.compareTo(endTime) <= 0;
+            if (isInRange) {
+                workOrder.setHasReport(true);
+                break; // 鎵惧埌涓�涓嵆閫�鍑哄惊鐜�
+            }
+        }
         // 鏁呴殰绫诲瀷
         List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo());
         List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());

--
Gitblit v1.8.0