Преглед на файлове

受理单编号规则变更

xy преди 1 седмица
родител
ревизия
f72338d2e5
променени са 12 файла, в които са добавени 379 реда и са изтрити 13 реда
  1. 6 0
      build-prod/updata.sql
  2. 3 1
      tz-module-pressure2/tz-module-pressure2-api/src/main/java/cn/start/tz/module/pressure2/enums/RedisKeyEnums.java
  3. 5 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/orderreport/OrderReportDO.java
  4. 15 3
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/AcceptOrderServiceImpl.java
  5. 3 3
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/AppointmentConfirmOrderServiceImpl.java
  6. 3 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/PipeAppointmentConfirmOrderServiceImpl.java
  7. 11 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0405_202402ReportOFData.java
  8. 10 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0418_202402ReportOFData.java
  9. 12 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0413_0415ReportOFData.java
  10. 11 1
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0424_202404ReportOFData.java
  11. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportService.java
  12. 297 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java

+ 6 - 0
build-prod/updata.sql

@@ -49,3 +49,9 @@ ALTER TABLE "PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT" ADD COLUMN "RECYCLE_EXPIRE_D
 COMMENT ON COLUMN "PRESSURE2_PIPE_TASK_ORDER_ITEM_REPORT"."RECYCLE_EXPIRE_DATE" IS '检验意见通知书回收截止时间';
 
 --已加
+        
+--20260630
+ALTER TABLE "PRESSURE2_ORDER_REPORT" ADD COLUMN "ACCEPT_ORDER_NO" VARCHAR(50);
+COMMENT ON COLUMN "PRESSURE2_ORDER_REPORT"."ACCEPT_ORDER_NO" IS '受理单/服务单编号';
+
+--已加

+ 3 - 1
tz-module-pressure2/tz-module-pressure2-api/src/main/java/cn/start/tz/module/pressure2/enums/RedisKeyEnums.java

@@ -13,8 +13,10 @@ public enum RedisKeyEnums {
     TASK_ORDER_ITEM("TASK_ORDER_ITEM", "业务受理单item"),
     TASK_ORDER_ITEM_PIPE("TASK_ORDER_ITEM_PIPE", "管道业务受理单item"),
     TASK_ORDER_ITEM_SUB("TASK_ORDER_ITEM_SUB", "业务受理单item 子报告"),
-    TASK_ORDER_ITEM_SUB_PIPE("TASK_ORDER_ITEM_SUB_PIPE", "管道业务受理单item 子报告"),;
+    TASK_ORDER_ITEM_SUB_PIPE("TASK_ORDER_ITEM_SUB_PIPE", "管道业务受理单item 子报告"),
 
+    BUSINESS_ACCEPTANCE_NO("Business_Acceptance_no", "业务受理流水号生成"),
+    SERVICE_ACCEPTANCE_NO("Service_Acceptance_no", "服务单流水号生成");
 
     /**
      * key值

+ 5 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/orderreport/OrderReportDO.java

@@ -59,4 +59,9 @@ public class OrderReportDO extends BaseDO {
      * 签名时间
      */
     private LocalDate signDate;
+
+    /**
+     * 受理单/服务单编号
+     */
+    private String acceptOrderNo;
 }

+ 15 - 3
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/acceptorder/AcceptOrderServiceImpl.java

@@ -3,8 +3,10 @@ package cn.start.tz.module.pressure2.service.acceptorder;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.start.tz.framework.common.exception.ServiceException;
 import cn.start.tz.framework.common.exception.ErrorCode;
+import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageResult;
 import cn.start.tz.framework.security.core.LoginUser;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.BoilerTaskOrderPageReqVO;
@@ -27,7 +29,13 @@ import cn.start.tz.module.infra.api.pay.PayApi;
 import cn.start.tz.module.infra.api.pay.dto.TaskChargeDTO;
 import cn.start.tz.module.member.api.user.MemberUserApi;
 import cn.start.tz.module.pressure.constant.TemplateIdConstants;
+import cn.start.tz.module.pressure2.dal.dataobject.boilerconnectrecordreport.BoilerConnectRecordReportDO;
+import cn.start.tz.module.pressure2.dal.dataobject.dynamictb.DynamicTbDO;
+import cn.start.tz.module.pressure2.dal.dataobject.equipboilerschedulingitem.EquipBoilerSchedulingCheckDO;
+import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipeacceptorderuser.PipeAcceptOrderUserDO;
+import cn.start.tz.module.pressure2.dal.mysql.dynamictb.DynamicTbMapper;
+import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipeacceptorderuser.PipeAcceptOrderUserMapper;
 import cn.start.tz.module.pressure2.enums.IndexTodoTypeNameEnum;
 import cn.start.tz.module.pressure2.enums.RedisKeyEnums;
@@ -52,15 +60,19 @@ import cn.start.tz.module.pressure2.dal.mysql.boilerorderexception.BoilerOrderEx
 import cn.start.tz.module.pressure2.dal.mysql.bpmtaskinfo.BpmTaskInfoMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
 import cn.start.tz.module.pressure2.dal.mysql.reporttemplate.ReportTemplateMapper;
+import cn.start.tz.module.pressure2.service.boilerconnectrecordreport.BoilerConnectRecordReportService;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.common.RedisService;
 import cn.start.tz.module.pressure2.service.equipboiler.EquipBoilerService;
+import cn.start.tz.module.pressure2.service.equipboilerschedulingcheck.EquipBoilerSchedulingCheckService;
 import cn.start.tz.module.pressure2.service.indextodo.IndexTodoService;
 import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
 import cn.start.tz.module.system.api.dept.DeptApi;
 import cn.start.tz.module.system.api.dept.dto.DeptRespDTO;
 import cn.start.tz.module.system.api.dict.DictDataApi;
 import cn.start.tz.module.system.api.dict.dto.DictDataRespDTO;
+import cn.start.tz.module.system.api.standard.dto.StandardClassRespDTO;
+import cn.start.tz.module.system.api.standard.dto.StandardTemplateRespDTO;
 import cn.start.tz.module.system.api.user.AdminUserApi;
 import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.fastjson.JSONObject;
@@ -73,6 +85,7 @@ import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -83,12 +96,11 @@ import java.io.ByteArrayOutputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;

+ 3 - 3
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/AppointmentConfirmOrderServiceImpl.java

@@ -877,12 +877,12 @@ public class AppointmentConfirmOrderServiceImpl implements AppointmentConfirmOrd
         AcceptOrderDO acceptOrder = BeanUtils.toBean(submitVO, AcceptOrderDO.class);
         // 清空ID,确保是新增操作
         acceptOrder.setId(null);
-        // 生成受理单编号
-        String orderNo = acceptOrderService.generateOrderNo(submitVO.getAppointmentDate());
+        // 生成受理单编号 改成在生成受理单文件时再生成
+//        String orderNo = acceptOrderService.generateOrderNo(submitVO.getAppointmentDate());
         // 设置约检单ID
         acceptOrder.setAppointmentId(submitVO.getId());
         // 设置受理单编号
-        acceptOrder.setAcceptNo(orderNo);
+//        acceptOrder.setAcceptNo(orderNo);
 
 
         // 查询约检确认单设备项列表

+ 3 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/appointmentconfirmorder/PipeAppointmentConfirmOrderServiceImpl.java

@@ -861,11 +861,12 @@ public class PipeAppointmentConfirmOrderServiceImpl implements PipeAppointmentCo
         // 清空ID,确保是新增操作
         acceptOrder.setId(null);
         // 生成受理单编号
-        String orderNo = acceptOrderService.generateOrderNo(submitVO.getAppointmentDate() );
+//        String orderNo = acceptOrderService.generateOrderNo(submitVO.getAppointmentDate() );
+//        String orderNo = orderReportService.generateAcceptOrderNo(submitVO.getDeptId(), submitVO.getEquipMainType(), submitVO.getId());
         // 设置约检单ID
         acceptOrder.setAppointmentId(submitVO.getId());
         // 设置受理单编号
-        acceptOrder.setAcceptNo(orderNo);
+//        acceptOrder.setAcceptNo(orderNo);
 
 
         // 查询约检确认单设备项列表

+ 11 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0405_202402ReportOFData.java

@@ -1,6 +1,7 @@
 package cn.start.tz.module.pressure2.service.dynamicOFData.boiler;
 
 import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
 import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boileracceptorderitem.BoilerAcceptOrderItemDO;
@@ -16,6 +17,7 @@ import cn.start.tz.module.pressure2.dal.mysql.boileracceptorderuser.BoilerAccept
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitem.BoilerTaskOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderuser.BoilerTaskOrderUserMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
+import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
 import cn.start.tz.module.pressure2.service.dynamicOFData.IDynamicOFData;
@@ -54,6 +56,9 @@ public class QR0405_202402ReportOFData implements IDynamicOFData {
     @Resource
     private OrderReportService orderReportService;
 
+    @Resource
+    private OrderReportMapper orderReportMapper;
+
     @Resource
     private BoilerAcceptOrderItemMapper acceptOrderItemMapper;
 
@@ -97,7 +102,12 @@ public class QR0405_202402ReportOFData implements IDynamicOFData {
             // refId 是任务单id
             return getDataByTaskOrder(result, refId, ruleVO);
         }
-        result.put("reportNo", acceptOrderDO.getAcceptNo());
+
+        OrderReportDO orderReportDO = orderReportMapper.selectById(orderReportDOId);
+        if (orderReportDO != null){
+            result.put("reportNo", orderReportDO.getAcceptOrderNo());
+        }
+
         result.put("unitName", acceptOrderDO.getUnitName());
         result.put("unitAddress", acceptOrderDO.getUnitAddress());
         result.put("unitCode", acceptOrderDO.getUnitCode());

+ 10 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/boiler/QR0418_202402ReportOFData.java

@@ -23,6 +23,7 @@ import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitem.BoilerTaskOrde
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitemreport.BoilerTaskOrderItemReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderuser.BoilerTaskOrderUserMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
+import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
 import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
 import cn.start.tz.module.pressure2.service.dynamicOFData.IDynamicOFData;
@@ -58,6 +59,9 @@ public class QR0418_202402ReportOFData implements IDynamicOFData {
     @Resource
     private OrderReportService orderReportService;
 
+    @Resource
+    private OrderReportMapper orderReportMapper;
+
     @Resource
     private BoilerAcceptOrderItemMapper acceptOrderItemMapper;
 
@@ -105,7 +109,12 @@ public class QR0418_202402ReportOFData implements IDynamicOFData {
         if (acceptOrderDO == null) {
             return result;
         }
-        result.put("reportNo", acceptOrderDO.getAcceptNo());
+
+        OrderReportDO orderReportDO = orderReportMapper.selectById(orderReportDOId);
+        if (orderReportDO != null){
+            result.put("reportNo", orderReportDO.getAcceptOrderNo());
+        }
+
         result.put("unitName", acceptOrderDO.getUnitName());
         result.put("unitAddress", acceptOrderDO.getUnitAddress());
         result.put("unitCode", acceptOrderDO.getUnitCode());

+ 12 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0413_0415ReportOFData.java

@@ -1,5 +1,6 @@
 package cn.start.tz.module.pressure2.service.dynamicOFData.pipe;
 
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
 import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskordersignfile.BoilerTaskOrderSignFileDO;
@@ -9,6 +10,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.pipeacceptorderitem.PipeAccep
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
 import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equippipe.EquipPipeMapper;
+import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipeacceptorderitem.PipeAcceptOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemMapper;
 import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
@@ -47,6 +49,9 @@ public class QR0413_0415ReportOFData implements IDynamicOFData {
     @Resource
     private OrderReportService orderReportService;
 
+    @Resource
+    private OrderReportMapper orderReportMapper;
+
     @Resource
     private PipeAcceptOrderItemMapper acceptOrderItemMapper;
 
@@ -83,7 +88,13 @@ public class QR0413_0415ReportOFData implements IDynamicOFData {
         if (acceptOrderDO == null) {
             return result;
         }
-        result.put("reportNo", acceptOrderDO.getAcceptNo());
+
+        OrderReportDO orderReportDO = orderReportMapper.selectOne(new LambdaQueryWrapperX<OrderReportDO>()
+                .eq(OrderReportDO::getAcceptOrderId, refId),false);
+        if (orderReportDO != null){
+            result.put("reportNo", orderReportDO.getAcceptOrderNo());
+        }
+
         result.put("unitName", acceptOrderDO.getUnitName());
         result.put("unitAddress", acceptOrderDO.getUnitAddress());
         result.put("unitCode", acceptOrderDO.getUnitCode());

+ 11 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/dynamicOFData/pipe/QR0424_202404ReportOFData.java

@@ -11,6 +11,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
 import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equippipe.EquipPipeMapper;
+import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipeacceptorderitem.PipeAcceptOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemreport.PipeTaskOrderItemReportMapper;
@@ -48,6 +49,9 @@ public class QR0424_202404ReportOFData implements IDynamicOFData {
     @Resource
     private OrderReportService orderReportService;
 
+    @Resource
+    private OrderReportMapper orderReportMapper;
+
     @Resource
     private PipeAcceptOrderItemMapper acceptOrderItemMapper;
 
@@ -87,7 +91,13 @@ public class QR0424_202404ReportOFData implements IDynamicOFData {
         if (acceptOrderDO == null) {
             return result;
         }
-        result.put("reportNo", acceptOrderDO.getAcceptNo());
+
+        OrderReportDO orderReportDO = orderReportMapper.selectOne(new LambdaQueryWrapperX<OrderReportDO>()
+                .eq(OrderReportDO::getAcceptOrderId, refId),false);
+        if (orderReportDO != null){
+            result.put("reportNo", orderReportDO.getAcceptOrderNo());
+        }
+
         result.put("unitName", acceptOrderDO.getUnitName());
         result.put("unitAddress", acceptOrderDO.getUnitAddress());
         result.put("unitCode", acceptOrderDO.getUnitCode());

+ 3 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportService.java

@@ -95,4 +95,7 @@ public interface OrderReportService extends IService<OrderReportDO>  {
      * @param equipMainType 设备类型 (boiler/pipe)
      */
     void refreshSingleOrderReport(String orderReportId, String equipMainType);
+
+    String generateAcceptOrderNo(String acceptOrderId,Integer EquipMainType,String prefix);
+
 }

+ 297 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/orderreport/OrderReportServiceImpl.java

@@ -22,10 +22,13 @@ import cn.start.tz.module.pressure2.dal.dataobject.equipboilerschedulingitem.Equ
 import cn.start.tz.module.pressure2.dal.dataobject.equippipeschedulingitem.EquipPipeSchedulingCheckDO;
 import cn.start.tz.module.pressure2.dal.dataobject.notificationformreport.NotificationformReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
+import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilerconnecttbservice.BoilerConnectTbServiceMapper;
 import cn.start.tz.module.pressure2.dal.mysql.boilertaskorder.BoilerTaskOrderMapper;
+import cn.start.tz.module.pressure2.dal.mysql.dynamictb.DynamicTbMapper;
 import cn.start.tz.module.pressure2.dal.mysql.notificationformreport.NotificationformReportMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorder.PipeTaskOrderMapper;
+import cn.start.tz.module.pressure2.enums.RedisKeyEnums;
 import cn.start.tz.module.pressure2.service.acceptorder.AcceptOrderService;
 import cn.start.tz.module.pressure2.service.boilerconnectrecordreport.BoilerConnectRecordReportService;
 import cn.start.tz.module.pressure2.service.boilertaskorderitem.BoilerTaskOrderItemService;
@@ -35,6 +38,8 @@ import cn.start.tz.module.pressure2.service.dynamictbins.DynamicTbInsService;
 import cn.start.tz.module.pressure2.service.equipboilerschedulingcheck.EquipBoilerSchedulingCheckService;
 import cn.start.tz.module.pressure2.service.equippipeschedulingcheck.EquipPipeSchedulingCheckService;
 import cn.start.tz.module.pressure2.service.pdf.PdfService;
+import cn.start.tz.module.system.api.dept.DeptApi;
+import cn.start.tz.module.system.api.dept.dto.DeptRespDTO;
 import cn.start.tz.module.system.api.mail.MailSendApi;
 import cn.start.tz.module.system.api.mail.dto.MailSendSingleToUserReqDTO;
 import com.alibaba.fastjson2.JSONObject;
@@ -42,6 +47,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import jakarta.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
@@ -49,7 +55,12 @@ import org.springframework.transaction.annotation.Transactional;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.Duration;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import cn.start.tz.module.pressure2.controller.admin.orderreport.vo.*;
@@ -133,6 +144,18 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
     @Resource
     private ConfigApi configApi;
 
+    @Resource
+    private DynamicTbMapper dynamicTbMapper;
+
+    @Resource
+    private StringRedisTemplate stringRedisTemplate;
+
+    @Resource
+    private AcceptOrderMapper acceptOrderMapper;
+
+    @Resource
+    private DeptApi deptApi;
+
 
     private final String ACCEPT = "1";
     private final String TASK = "2";
@@ -209,6 +232,8 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
             orderReportDO.setAcceptOrderId(acceptOrderId);
             orderReportDO.setOrderType(ACCEPT);
             orderReportDO.setTemplateId(reportTemplateDO.getId());
+            String acceptOrderNo = this.generateAcceptOrderNo(acceptOrderId, 200, "SL");
+            orderReportDO.setAcceptOrderNo(acceptOrderNo);
 
             // 生成报表数据
             CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
@@ -229,6 +254,13 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
             }
 
             orderReportMapper.insertOrUpdate(orderReportDO);
+
+            //修改受理单编号
+            AcceptOrderDO updateAcceptOrder = new AcceptOrderDO();
+            updateAcceptOrder.setId(acceptOrderId);
+            updateAcceptOrder.setAcceptNo(acceptOrderNo);
+            acceptOrderMapper.updateById(updateAcceptOrder);
+
         }
         // 锅炉设备检验,定检存在委托收费项目时,需要生成一张受理单一张服务单
         String code = configApi.getConfigValueByKey("boiler_legal_service_code").getCheckedData();
@@ -250,6 +282,8 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
             orderReportDO.setAcceptOrderId(acceptOrderId);
             orderReportDO.setOrderType(ACCEPT);
             orderReportDO.setTemplateId(reportTemplateDO.getId());
+            String acceptOrderNo = this.generateAcceptOrderNo(acceptOrderId, 200, "WT");
+            orderReportDO.setAcceptOrderNo(acceptOrderNo);
 
             // 生成报表数据
             CreateInstantiateWithRuleVO ruleVO = new CreateInstantiateWithRuleVO();
@@ -280,6 +314,17 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
         orderReportDO.setAcceptOrderId(acceptOrderId);
         orderReportDO.setOrderType(ACCEPT);
 
+        String acceptOrderNo = "";
+        AcceptOrderDO acceptOrderDO = acceptOrderMapper.selectById(acceptOrderId);
+        if (acceptOrderDO != null){
+            if (acceptOrderDO.getCheckType() == 100){
+                acceptOrderNo = this.generateAcceptOrderNo(acceptOrderId, 300, "SL");
+            }else if (acceptOrderDO.getCheckType() == 200){
+                acceptOrderNo = this.generateAcceptOrderNo(acceptOrderId, 300, "WT");
+            }
+        }
+        orderReportDO.setAcceptOrderNo(acceptOrderNo);
+
         /*List<DynamicTbDO> list = dynamicTbService.list(new LambdaQueryWrapperX<DynamicTbDO>()
                 .eq(DynamicTbDO::getPjType, 4)
                 .eq(DynamicTbDO::getReportType, 300)
@@ -328,6 +373,13 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
             }
 
             orderReportMapper.insertOrUpdate(orderReportDO);
+
+            //修改受理单编号
+            AcceptOrderDO updateAcceptOrder = new AcceptOrderDO();
+            updateAcceptOrder.setId(acceptOrderId);
+            updateAcceptOrder.setAcceptNo(acceptOrderNo);
+            acceptOrderMapper.updateById(updateAcceptOrder);
+
         }else {
             throw new ServiceException(500, "生成报表数据失败,未找到主项目受理单配置");
         }
@@ -640,4 +692,249 @@ public class OrderReportServiceImpl extends ServiceImpl<OrderReportMapper, Order
         return orderReportMapper.selectList(lqw);
     }
 
+    @Override
+    public String generateAcceptOrderNo(String acceptOrderId,Integer EquipMainType,String prefix){
+
+        AcceptOrderDO acceptOrderDO = acceptOrderMapper.selectById(acceptOrderId);
+        if (acceptOrderDO == null) {
+            throw new ServiceException(500, "受理单号不存在");
+        }
+
+        String deptId = acceptOrderDO.getDeptId();
+        DeptRespDTO dept = deptApi.getDept(deptId).getCheckedData();
+        String deptCode = dept.getCode();
+
+        // 获取项目代码(2位)
+        String projectCode = "";
+        if (EquipMainType == 200){
+            projectCode = getProjectCodeBoiler(acceptOrderId);
+        }else if (EquipMainType == 300){
+            projectCode = getProjectCodePipe(acceptOrderId);
+        }
+
+        // 根据前缀类型选择不同的Redis key
+        String redisKeyBase = "WT".equals(prefix) ?
+                RedisKeyEnums.SERVICE_ACCEPTANCE_NO.getKey() :
+                RedisKeyEnums.BUSINESS_ACCEPTANCE_NO.getKey();
+
+        // 生成日期部分
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMdd"); // 6位年月日
+        String dateStr = simpleDateFormat.format(new Date());
+
+        // 生成Redis键:key类型 + 部门代码 + 项目代码 + 日期
+        String redisKey = redisKeyBase + deptCode + projectCode + dateStr;
+
+        // 获取当天的流水号
+        String value = stringRedisTemplate.opsForValue().get(redisKey);
+        long curEndTime = getCurEndTime();
+
+        if (StringUtils.isBlank(value)) {
+            //获取当前时间到今天24点的时间距离多少秒
+            stringRedisTemplate.opsForValue()
+                    .set(redisKey, "01", curEndTime, TimeUnit.SECONDS);
+            return prefix + deptCode + projectCode + dateStr + "01";
+        } else {
+            Integer numberValue = Integer.parseInt(value) + 1;
+            String serialNum = String.format("%02d", numberValue); // 格式化为2位数字
+            stringRedisTemplate.opsForValue().set(redisKey, serialNum, curEndTime, TimeUnit.SECONDS);
+            return prefix + deptCode + projectCode + dateStr + serialNum;
+        }
+
+    }
+
+    /**
+     * 获取项目代码(2位)锅炉
+     *
+     * @param acceptOrderId 约检确认ID
+     * @return 项目代码(2位),如果获取不到则返回"00"
+     */
+    private String getProjectCodeBoiler(String acceptOrderId) {
+
+        try {
+            List<EquipBoilerSchedulingCheckDO> checkDOList = equipBoilerSchedulingCheckService.lambdaQuery()
+                    .eq(EquipBoilerSchedulingCheckDO::getAcceptOrderId, acceptOrderId)
+                    .list();
+
+            if (!checkDOList.isEmpty()) {
+                List<String> checkIds = checkDOList.stream()
+                        .map(EquipBoilerSchedulingCheckDO::getCheckId)
+                        .filter(Objects::nonNull)
+                        .toList();
+
+                if (!checkIds.isEmpty()) {
+                    List<BoilerConnectRecordReportDO> mainProjectList = boilerConnectRecordReportService.lambdaQuery()
+                            .in(BoilerConnectRecordReportDO::getId, checkIds)
+                            .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
+                            .list();
+
+                    if (!mainProjectList.isEmpty()) {
+                        return mainProjectList.get(0).getProjectCode();
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("获取项目代码失败,acceptOrderId: {}", acceptOrderId, e);
+        }
+
+        return "00"; // 默认值
+    }
+
+    /**
+     * 获取项目代码(2位)管道
+     *
+     * @param acceptOrderId 约检确认ID
+     * @return 项目代码(2位),如果获取不到则返回"00"
+     */
+    private String getProjectCodePipe(String acceptOrderId) {
+
+        try {
+            List<EquipPipeSchedulingCheckDO> checkDOList = equipPipeSchedulingCheckService.lambdaQuery()
+                    .eq(EquipPipeSchedulingCheckDO::getAcceptOrderId, acceptOrderId)
+                    .list();
+
+            if (!checkDOList.isEmpty()) {
+                List<String> checkIds = checkDOList.stream()
+                        .map(EquipPipeSchedulingCheckDO::getCheckId)
+                        .filter(Objects::nonNull)
+                        .toList();
+
+                if (!checkIds.isEmpty()) {
+                    List<BoilerConnectRecordReportDO> mainProjectList = boilerConnectRecordReportService.lambdaQuery()
+                            .in(BoilerConnectRecordReportDO::getId, checkIds)
+                            .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
+                            .list();
+
+                    if (!mainProjectList.isEmpty()) {
+                        return mainProjectList.get(0).getProjectCode();
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("获取项目代码失败,acceptOrderId: {}", acceptOrderId, e);
+        }
+
+        return "00"; // 默认值
+    }
+
+    /**
+     * 根据模版类型获取受理单编号前缀 管道
+     *
+     * @param acceptOrderId 受理单模版ID
+     * @return 前缀:SL(受理单)或 WT(服务单)
+     */
+    private String getAcceptanceNoPrefixPipe(String acceptOrderId) {
+
+        try {
+
+            String templateId = "";
+            List<EquipPipeSchedulingCheckDO> checkDOList = equipPipeSchedulingCheckService.lambdaQuery()
+                    .eq(EquipPipeSchedulingCheckDO::getAcceptOrderId, acceptOrderId)
+                    .list();
+
+            if (!checkDOList.isEmpty()) {
+                List<String> checkIds = checkDOList.stream()
+                        .map(EquipPipeSchedulingCheckDO::getCheckId)
+                        .filter(Objects::nonNull)
+                        .toList();
+
+                if (!checkIds.isEmpty()) {
+                    List<BoilerConnectRecordReportDO> mainProjectList = boilerConnectRecordReportService.lambdaQuery()
+                            .in(BoilerConnectRecordReportDO::getId, checkIds)
+                            .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
+                            .list();
+
+                    if (!mainProjectList.isEmpty()) {
+                        templateId = mainProjectList.get(0).getAcceptOrderTemplateId();
+                    }
+                }
+            }
+
+            DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(templateId);
+            if (dynamicTbDO != null) {
+                String tbName = dynamicTbDO.getTbName();
+                // 如果是服务单模版,使用WTD前缀;否则使用SLD前缀
+                if (tbName.contains("受理")) {
+                    return "SL";
+                }else if (tbName.contains("服务")){
+                    return "WT";
+                }
+            }
+        } catch (Exception e) {
+            log.error("获取模版类型失败,acceptOrderId: {}", acceptOrderId, e);
+        }
+
+        return "WT"; // 默认为服务单
+    }
+
+    /**
+     * 根据模版类型获取受理单编号前缀 锅炉
+     *
+     * @param acceptOrderId 受理单模版ID
+     * @return 前缀:SL(受理单)或 WT(服务单)
+     */
+    private String getAcceptanceNoPrefixBoiler(String acceptOrderId) {
+
+        try {
+
+            String templateId = "";
+            List<EquipBoilerSchedulingCheckDO> checkDOList = equipBoilerSchedulingCheckService.lambdaQuery()
+                    .eq(EquipBoilerSchedulingCheckDO::getAcceptOrderId, acceptOrderId)
+                    .list();
+
+            if (!checkDOList.isEmpty()) {
+                List<String> checkIds = checkDOList.stream()
+                        .map(EquipBoilerSchedulingCheckDO::getCheckId)
+                        .filter(Objects::nonNull)
+                        .toList();
+
+                if (!checkIds.isEmpty()) {
+                    List<BoilerConnectRecordReportDO> mainProjectList = boilerConnectRecordReportService.lambdaQuery()
+                            .in(BoilerConnectRecordReportDO::getId, checkIds)
+                            .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
+                            .list();
+
+                    if (!mainProjectList.isEmpty()) {
+                        if (mainProjectList.size() > 1){
+                            return "SL";
+                        }else{
+                            templateId = mainProjectList.get(0).getAcceptOrderTemplateId();
+
+                            DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(templateId);
+                            if (dynamicTbDO != null) {
+                                String tbName = dynamicTbDO.getTbName();
+                                // 如果是服务单模版,使用WTD前缀;否则使用SLD前缀
+                                if (tbName.contains("受理")) {
+                                    return "SL";
+                                }else if (tbName.contains("服务")){
+                                    return "WT";
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            log.error("获取模版类型失败,acceptOrderId: {}", acceptOrderId, e);
+        }
+
+        return "WT"; // 默认为服务单
+    }
+
+    private long getCurEndTime() {
+        // 获取带时区的当前时间(使用系统默认时区)
+        ZonedDateTime now = ZonedDateTime.now(ZoneId.systemDefault());
+
+        // 计算当天结束时间(次日00:00:00)
+        ZonedDateTime midnight = now.toLocalDate()
+                .plusDays(1)
+                .atStartOfDay(ZoneId.systemDefault());
+
+        // 计算时间差并获取秒数
+        long secondsRemaining = Duration.between(now, midnight).getSeconds();
+
+        System.out.println("距离今日24点还剩:" + secondsRemaining + "秒");
+        return secondsRemaining;
+    }
+
 }