feat:报告-iwork用印回调;设备-检定校准接口

This commit is contained in:
FCL
2026-03-19 15:38:51 +08:00
parent 868b9d5eec
commit faab71424c
27 changed files with 772 additions and 82 deletions

View File

@@ -2,7 +2,7 @@ package com.zt.plat.module.qms.business.reportdoc.constant;
public class ReportDocConstant {
public static final String REPORT_DOCUMENT_BUSINESS_FILE_SOURCE_QMS = "qms.reportdoc";
public static final String REPORT_DOCUMENT_BUSINESS_FILE_SOURCE_IWORK = "iwork";
public static final String REPORT_DOCUMENT_BUSINESS_FILE_SOURCE_QMS = "qms.reportdoc"; //报告模块产生的文件
public static final String REPORT_DOCUMENT_BUSINESS_FILE_SOURCE_IWORK = "iwork"; //iwork产生的文件
}

View File

@@ -0,0 +1,88 @@
package com.zt.plat.module.qms.business.reportdoc.controller.admin;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.client.impl.factory.MQClientInstance;
import org.apache.rocketmq.client.impl.MQClientAPIImpl;
import org.apache.rocketmq.remoting.protocol.route.BrokerData;
import org.apache.rocketmq.remoting.protocol.route.TopicRouteData;
public class RocketMqDebugDemo {
public static void main(String[] args) throws Exception {
// 1. 【标准定义】创建 Producer 实例
// 这里的 "MyProducerGroup" 是你的生产者组名,随意定义,但要唯一
DefaultMQProducer producer = new DefaultMQProducer("MyProducerGroup");
// 2. 【关键配置】设置 NameServer 地址
// 注意:这里填你映射到宿主机的地址,如 127.0.0.1:9876 或 服务器IP:9876
producer.setNamesrvAddr("127.0.0.1:9876");
// 3. 【可选优化】关闭 VIP 通道 (解决部分网络环境问题)
producer.setVipChannelEnabled(false);
// 4. 启动 Producer
producer.start();
System.out.println("Producer 启动成功...");
// ==========================================
// 5. 【插入调试代码】在发送消息前,获取路由信息
// ==========================================
String targetTopic = "SYSTEM_IWORK_BIZ_CALLBACK";
try {
// 获取内部实现对象
MQClientInstance factory = producer.getDefaultMQProducerImpl().getmQClientFactory();
MQClientAPIImpl apiImpl = factory.getMQClientAPIImpl();
// 请求路由信息 (超时设为 3000ms)
TopicRouteData routeData = apiImpl.getTopicRouteInfoFromNameServer(targetTopic, 3000);
if (routeData != null && routeData.getBrokerDatas() != null) {
System.out.println("\n====== 路由调试信息 ======");
for (BrokerData bd : routeData.getBrokerDatas()) {
System.out.println("Broker 名称: " + bd.getBrokerName());
System.out.println("Cluster 名称: " + bd.getCluster());
// 【核心】打印 Broker 地址列表Key 是 BrokerID (0 代表 Master)
System.out.println("Broker 地址列表: " + bd.getBrokerAddrs());
// 检查地址是否包含内网 IP (如 172.17.x.x)
bd.getBrokerAddrs().values().forEach(addr -> {
if (addr.startsWith("172.") || addr.startsWith("10.") && !addr.startsWith("10.0.0.")) {
System.out.println("⚠️ 警告:发现疑似容器内网 IP: " + addr);
System.out.println("⚠️ 这会导致外部 Producer 连接超时!请检查 brokerIP1 配置。");
} else {
System.out.println("✅ 地址看起来是可达的: " + addr);
}
});
}
System.out.println("========================\n");
} else {
System.out.println("❌ 错误:未获取到 Topic [" + targetTopic + "] 的路由信息。");
System.out.println("可能原因Topic 不存在且自动创建被禁用,或 NameServer 连接正常但无数据。");
}
} catch (Exception e) {
System.out.println("❌ 获取路由信息失败: " + e.getMessage());
e.printStackTrace();
}
// ==========================================
// 6. 【正式发送】如果上面调试没报错,尝试发送
// ==========================================
try {
Message msg = new Message(targetTopic, "TagA", "Hello RocketMQ from Debug Code".getBytes());
// 发送超时时间设为 3000ms
SendResult sendResult = producer.send(msg, 3000);
System.out.println("✅ 发送成功! MessageId: " + sendResult.getMsgId());
} catch (Exception e) {
System.out.println("❌ 发送失败! 错误信息: " + e.getMessage());
e.printStackTrace();
} finally {
// 7. 关闭 Producer
producer.shutdown();
}
}
}

View File

@@ -220,6 +220,7 @@ public class ReportDocumentAssistService {
fileSaveReqVO.setPath(fileRespDTO.getDirectory());
fileSaveReqVO.setUrl(fileRespDTO.getUrl());
fileSaveReqVO.setVersion(mainDO.getDocumentVersion());
fileSaveReqVO.setType(ReportDocConstant.REPORT_DOCUMENT_BUSINESS_FILE_SOURCE_QMS);
reportDocumentFileService.createReportDocumentFile(fileSaveReqVO);
return BeanUtils.toBean(fileRespDTO, ReportDocumentFileDO.class);
}

View File

@@ -26,6 +26,7 @@ public interface ReportDocumentFileService {
* @return 编号
*/
ReportDocumentFileRespVO createReportDocumentFile(@Valid ReportDocumentFileSaveReqVO createReqVO);
ReportDocumentFileDO createReportDocumentFile(ReportDocumentFileDO fileDO);
/**
* 更新检测报告附件

View File

@@ -53,6 +53,12 @@ public class ReportDocumentFileServiceImpl implements ReportDocumentFileService
return BeanUtils.toBean(reportDocumentFile, ReportDocumentFileRespVO.class);
}
@Override
public ReportDocumentFileDO createReportDocumentFile(ReportDocumentFileDO fileDO) {
reportDocumentFileMapper.insert(fileDO);
return fileDO;
}
@Override
public void updateReportDocumentFile(ReportDocumentFileSaveReqVO updateReqVO) {
// 校验存在

View File

@@ -30,11 +30,8 @@ import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigUserSignature
import com.zt.plat.module.qms.business.config.service.ConfigUserSignatureService;
import com.zt.plat.module.qms.business.reportdoc.constant.ReportDocConstant;
import com.zt.plat.module.qms.business.reportdoc.controller.vo.*;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentDataDO;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainCorrelationDO;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentTypeDO;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.*;
import com.zt.plat.module.qms.business.reportdoc.dal.mapper.ReportDocumentMainMapper;
import com.zt.plat.module.qms.business.reportdoc.dal.dataobject.ReportDocumentMainDO;
import com.zt.plat.module.qms.common.data.service.DataKeyCheckService;
import com.zt.plat.module.qms.core.code.SequenceUtil;
import com.zt.plat.module.qms.enums.QmsBpmConstant;
@@ -80,6 +77,7 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
@Resource private ConfigUserSignatureService configUserSignatureService;
@Resource private BusinessSampleEntrustRegistrationService businessSampleEntrustRegistrationService;
@Resource private ReportDocumentAssistService reportDocumentAssistService;
@Resource private ReportDocumentFileService reportDocumentFileService;
@Resource private DataKeyCheckService dataKeyCheckService;
@Resource private SequenceUtil sequenceUtil;
@@ -434,7 +432,6 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
throw exception0(ERROR_CODE_MODULE_COMMON, result.getMsg());
}
entity.setFlowStatus(QmsCommonConstant.IN_PROGRESS);
//todo 生成报告编号 documentCode
reportDocumentMainMapper.updateById(entity);
ReportDocumentMainRespVO respVO = BeanUtils.toBean(entity, ReportDocumentMainRespVO.class);
return CommonResult.success(respVO);
@@ -469,7 +466,6 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
return CommonResult.success(respVO);
}
//流程回调
@Override
@Transactional(rollbackFor = Exception.class)
@@ -594,7 +590,8 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
public CommonResult<String> execCallBackByIwork(IWorkBizCallbackMessage message){
JSONObject payload = new JSONObject();
try{
payload = JSONObject.parseObject((String) message.getPayload());
Map<String, Object> payloadMap = (Map<String, Object>) message.getPayload();
payload = new JSONObject(payloadMap);
}catch (Exception e){
log.error("iwork用印回调解析回调数据失败", e.getMessage());
e.getMessage();
@@ -605,7 +602,7 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
String fileName = payload.getString("fileName");
String requestId = payload.getString("requestId");
//获取主数据
ReportDocumentMainDO entity = getByCode(businessCode);
ReportDocumentMainDO mainDO = getByCode(businessCode);
//查询附件对象
BusinessFilePageReqDTO pageReqDTO = new BusinessFilePageReqDTO();
@@ -625,20 +622,30 @@ public class ReportDocumentMainServiceImpl implements ReportDocumentMainService,
BusinessFileRespDTO bisFile = bisFileList.get(0);
Long fileId = bisFile.getFileId();
CommonResult<FileRespDTO> fileRet = fileApi.getFile(fileId);
FileRespDTO file = fileRet.getData();
FileRespDTO fileRespDTO = fileRet.getData();
//写入ReportDocumentFile
ReportDocumentFileSaveReqVO fileSaveReqVO = new ReportDocumentFileSaveReqVO();
// fileSaveReqVO.setMainId(mainDO.getId());
// fileSaveReqVO.setFileId(fileRespDTO.getId());
// fileSaveReqVO.setName(filename);
// fileSaveReqVO.setPath(fileRespDTO.getDirectory());
// fileSaveReqVO.setUrl(fileRespDTO.getUrl());
// fileSaveReqVO.setVersion(mainDO.getDocumentVersion());
// reportDocumentFileService.createReportDocumentFile(fileSaveReqVO);
ReportDocumentFileDO documentFileDO = new ReportDocumentFileDO();
documentFileDO.setMainId(mainDO.getId());
documentFileDO.setFileId(fileRespDTO.getId());
documentFileDO.setName(fileName);
documentFileDO.setPath(fileRespDTO.getDirectory());
documentFileDO.setUrl(fileRespDTO.getUrl());
documentFileDO.setVersion(mainDO.getDocumentVersion());
documentFileDO.setType(ReportDocConstant.REPORT_DOCUMENT_BUSINESS_FILE_SOURCE_IWORK);
reportDocumentFileService.createReportDocumentFile(documentFileDO);
//触发流程提交
return null;
String flowInsId = mainDO.getFlowInstanceId();
CommonResult<List<BpmTaskRespDTO>> taskRet = bpmTaskApi.getTaskListByProcessInstanceId(flowInsId);
List<BpmTaskRespDTO> taskList = taskRet.getData();
if(taskList.isEmpty())
throw exception0(ERROR_CODE_MODULE_COMMON, "流程任务查询失败,请联系管理员处理");
String taskId = taskList.get(taskList.size() - 1).getId();
//驳回后重新提交
BpmTaskApproveReqDTO reqVO = new BpmTaskApproveReqDTO();
reqVO.setId(taskId);
CommonResult<Boolean> result = bpmProcessInstanceApi.approveTask(reqVO);
return CommonResult.success("");
}
}

View File

@@ -22,10 +22,10 @@ public class DeviceUtil {
* @param frequency 频率
* @return
*/
public static LocalDateTime[] getDateRangeByFrequency(LocalDate date, boolean nextFlag, String frequencyType, String frequency) {
LocalDate referenceDate = (date != null) ? date : LocalDate.now();
LocalDate startDate = null;
LocalDate endDate = null;
public static LocalDateTime[] getDateRangeByFrequency(LocalDateTime date, boolean nextFlag, String frequencyType, String frequency) {
LocalDateTime referenceDate = (date != null) ? date : LocalDateTime.now();
LocalDateTime startDate = null;
LocalDateTime endDate = null;
int frequencyInt = Integer.parseInt(frequency);
if(!nextFlag)
frequencyInt --;
@@ -56,8 +56,8 @@ public class DeviceUtil {
}
return new LocalDateTime[]{
LocalDateTime.of(startDate, LocalTime.of(0, 0, 0)),
LocalDateTime.of(endDate, LocalTime.of(23, 59, 59))
LocalDateTime.of(startDate.toLocalDate(), LocalTime.of(0, 0, 0)),
LocalDateTime.of(endDate.toLocalDate(), LocalTime.of(23, 59, 59))
};
}
@@ -128,7 +128,7 @@ public class DeviceUtil {
}
public static void main(String[] args) {
LocalDate lastDate = LocalDate.of(2025, 3 , 25);
LocalDateTime lastDate = LocalDateTime.of(2025, 3 , 25, 0, 0);
String frequencyType = "month";
String frequency = "3";

View File

@@ -1,8 +1,14 @@
package com.zt.plat.module.qms.resource.device.controller.admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceCalibrationPageReqVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceCalibrationRespVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceCalibrationSaveReqVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceCalibrationVO;
import com.zt.plat.module.qms.resource.device.service.DeviceCalibrationPlanService;
import com.zt.plat.module.qms.resource.device.service.DeviceProductService;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@@ -52,19 +58,18 @@ public class DeviceCalibrationController extends AbstractFileUploadController im
}
}
@Resource
private DeviceCalibrationService deviceCalibrationService;
@Resource private DeviceCalibrationService deviceCalibrationService;
@Resource private DeviceCalibrationPlanService deviceCalibrationPlanService;
@Resource private DeviceProductService deviceProductService;
@PostMapping("/create")
@Operation(summary = "创建设备-检定校准")
@PreAuthorize("@ss.hasPermission('qms:device-calibration:create')")
public CommonResult<DeviceCalibrationRespVO> createDeviceCalibration(@Valid @RequestBody DeviceCalibrationSaveReqVO createReqVO) {
return success(deviceCalibrationService.createDeviceCalibration(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新设备-检定校准")
@PreAuthorize("@ss.hasPermission('qms:device-calibration:update')")
public CommonResult<Boolean> updateDeviceCalibration(@Valid @RequestBody DeviceCalibrationSaveReqVO updateReqVO) {
deviceCalibrationService.updateDeviceCalibration(updateReqVO);
return success(true);
@@ -73,7 +78,6 @@ public class DeviceCalibrationController extends AbstractFileUploadController im
@DeleteMapping("/delete")
@Operation(summary = "删除设备-检定校准")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:device-calibration:delete')")
public CommonResult<Boolean> deleteDeviceCalibration(@RequestParam("id") Long id) {
deviceCalibrationService.deleteDeviceCalibration(id);
return success(true);
@@ -91,7 +95,6 @@ public class DeviceCalibrationController extends AbstractFileUploadController im
@GetMapping("/get")
@Operation(summary = "获得设备-检定校准")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:device-calibration:query')")
public CommonResult<DeviceCalibrationRespVO> getDeviceCalibration(@RequestParam("id") Long id) {
DeviceCalibrationDO deviceCalibration = deviceCalibrationService.getDeviceCalibration(id);
return success(BeanUtils.toBean(deviceCalibration, DeviceCalibrationRespVO.class));
@@ -99,18 +102,33 @@ public class DeviceCalibrationController extends AbstractFileUploadController im
@GetMapping("/page")
@Operation(summary = "获得设备-检定校准分页")
@PreAuthorize("@ss.hasPermission('qms:device-calibration:query')")
public CommonResult<PageResult<DeviceCalibrationRespVO>> getDeviceCalibrationPage(@Valid DeviceCalibrationPageReqVO pageReqVO) {
PageResult<DeviceCalibrationDO> pageResult = deviceCalibrationService.getDeviceCalibrationPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DeviceCalibrationRespVO.class));
public CommonResult<PageResult<DeviceCalibrationRespVO>> getDeviceCalibrationPage(@Valid DeviceCalibrationPageReqVO param) {
Page<DeviceCalibrationPageReqVO> page = new Page<>(param.getPageNo(), param.getPageSize());
Long productId = param.getProductId();
if(!ObjectUtils.isEmpty(productId)){
List<Long> productIdList = deviceProductService.getIdListByIdPath(productId);
param.setProductIdList(productIdList);
param.setProductId(null);
}
String flowStatus = param.getFlowStatus();
if (!ObjectUtils.isEmpty(flowStatus)) {
param.setFlowStatusList(Arrays.asList(flowStatus.split(",")));
param.setFlowStatus("");
}
IPage<DeviceCalibrationVO> pageList = deviceCalibrationService.queryPageList(page, param);
PageResult pageResult = new PageResult<>(pageList.getRecords(), pageList.getTotal());
return CommonResult.success(pageResult);
// PageResult<DeviceCalibrationDO> pageResult = deviceCalibrationService.getDeviceCalibrationPage(pageReqVO);
// return success(BeanUtils.toBean(pageResult, DeviceCalibrationRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出设备-检定校准 Excel")
@PreAuthorize("@ss.hasPermission('qms:device-calibration:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportDeviceCalibrationExcel(@Valid DeviceCalibrationPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
public void exportDeviceCalibrationExcel(@Valid DeviceCalibrationPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DeviceCalibrationDO> list = deviceCalibrationService.getDeviceCalibrationPage(pageReqVO).getList();
// 导出 Excel

View File

@@ -1,8 +1,6 @@
package com.zt.plat.module.qms.resource.device.controller.admin;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceCalibrationPlanPageReqVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceCalibrationPlanRespVO;
import com.zt.plat.module.qms.resource.device.controller.vo.DeviceCalibrationPlanSaveReqVO;
import com.zt.plat.module.qms.resource.device.controller.vo.*;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@@ -55,16 +53,20 @@ public class DeviceCalibrationPlanController extends AbstractFileUploadControlle
@Resource
private DeviceCalibrationPlanService deviceCalibrationPlanService;
@PostMapping("/create")
@PostMapping("/createPlan")
@Operation(summary = "创建设备-检定校准计划")
@PreAuthorize("@ss.hasPermission('qms:device-calibration-plan:create')")
public CommonResult<DeviceCalibrationPlanRespVO> createDeviceCalibrationPlan(@Valid @RequestBody DeviceCalibrationPlanSaveReqVO createReqVO) {
return success(deviceCalibrationPlanService.createDeviceCalibrationPlan(createReqVO));
public CommonResult<DeviceCalibrationPlanRespVO> createPlan(String checkYear) {
return deviceCalibrationPlanService.createPlan(checkYear);
}
@RequestMapping("/submitApply")
@Operation(summary = "提交申请")
public CommonResult<DeviceCalibrationPlanRespVO> submitApply(@RequestBody DeviceCalibrationPlanSaveReqVO param) {
return deviceCalibrationPlanService.submitApply(param);
}
@PutMapping("/update")
@Operation(summary = "更新设备-检定校准计划")
@PreAuthorize("@ss.hasPermission('qms:device-calibration-plan:update')")
public CommonResult<Boolean> updateDeviceCalibrationPlan(@Valid @RequestBody DeviceCalibrationPlanSaveReqVO updateReqVO) {
deviceCalibrationPlanService.updateDeviceCalibrationPlan(updateReqVO);
return success(true);
@@ -73,7 +75,6 @@ public class DeviceCalibrationPlanController extends AbstractFileUploadControlle
@DeleteMapping("/delete")
@Operation(summary = "删除设备-检定校准计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:device-calibration-plan:delete')")
public CommonResult<Boolean> deleteDeviceCalibrationPlan(@RequestParam("id") Long id) {
deviceCalibrationPlanService.deleteDeviceCalibrationPlan(id);
return success(true);
@@ -91,7 +92,6 @@ public class DeviceCalibrationPlanController extends AbstractFileUploadControlle
@GetMapping("/get")
@Operation(summary = "获得设备-检定校准计划")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:device-calibration-plan:query')")
public CommonResult<DeviceCalibrationPlanRespVO> getDeviceCalibrationPlan(@RequestParam("id") Long id) {
DeviceCalibrationPlanDO deviceCalibrationPlan = deviceCalibrationPlanService.getDeviceCalibrationPlan(id);
return success(BeanUtils.toBean(deviceCalibrationPlan, DeviceCalibrationPlanRespVO.class));
@@ -99,7 +99,6 @@ public class DeviceCalibrationPlanController extends AbstractFileUploadControlle
@GetMapping("/page")
@Operation(summary = "获得设备-检定校准计划分页")
@PreAuthorize("@ss.hasPermission('qms:device-calibration-plan:query')")
public CommonResult<PageResult<DeviceCalibrationPlanRespVO>> getDeviceCalibrationPlanPage(@Valid DeviceCalibrationPlanPageReqVO pageReqVO) {
PageResult<DeviceCalibrationPlanDO> pageResult = deviceCalibrationPlanService.getDeviceCalibrationPlanPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DeviceCalibrationPlanRespVO.class));

View File

@@ -22,6 +22,8 @@ import jakarta.servlet.http.*;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.io.IOException;
@@ -125,11 +127,11 @@ public class DeviceMaintainController extends AbstractFileUploadController imple
if(!checkResult.isSuccess()){
return checkResult.error(checkResult.getCode(), checkResult.getMsg());
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
LocalDateTime dateTime = LocalDate.now().atStartOfDay();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
if(ObjectUtils.isEmpty(dateStr))
dateStr = sdf.format(new Date());
LocalDate localDate = LocalDate.parse(dateStr);
return deviceMaintainService.create(deviceId, localDate, dataType);
dateTime = LocalDateTime.parse(dateStr, formatter);
return deviceMaintainService.create(deviceId, dateTime, dataType);
}
@PutMapping("/update")

Some files were not shown because too many files have changed in this diff Show More