新增打印模板管理功能,包含免密接口和实时通知机制,支持桌面端打印模板的查询和列表展示。更新相关控制器、服务和视图,优化用户体验并增强系统的实时数据同步能力。
This commit is contained in:
@@ -48,6 +48,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.jeecg.modules.print.ai.INativePrintTemplateImageAnalyzeService;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
|
||||
/**
|
||||
* 打印模板维护(Hiprint)
|
||||
@@ -63,6 +65,16 @@ public class PrintTemplateController extends JeecgController<PrintTemplate, IPri
|
||||
@Autowired
|
||||
private INativePrintTemplateImageAnalyzeService nativePrintTemplateImageAnalyzeService;
|
||||
|
||||
/**
|
||||
* STOMP 实时通知:广播打印模板变更到 /topic/sync/print-templates。
|
||||
* 直接用 SimpMessagingTemplate 内联推送,避免 jeecg-system-biz(核心模块)
|
||||
* 反向依赖 jeecg-module-xslmes(业务模块)造成的循环依赖。
|
||||
* 消息体格式与 MesXslStompNotifyService.publishPrintTemplateChanged 完全一致,
|
||||
* 桌面端订阅方无需任何改动。
|
||||
*/
|
||||
@Autowired
|
||||
private SimpMessagingTemplate messagingTemplate;
|
||||
|
||||
@Operation(summary = "打印模板-分页列表")
|
||||
@GetMapping(value = "/list")
|
||||
@RequiresPermissions("print:template:list")
|
||||
@@ -92,6 +104,7 @@ public class PrintTemplateController extends JeecgController<PrintTemplate, IPri
|
||||
entity.setTemplateJson("{}");
|
||||
}
|
||||
service.save(entity);
|
||||
publishPrintTemplateChanged("add", entity.getId());
|
||||
return Result.OK("添加成功");
|
||||
}
|
||||
|
||||
@@ -111,6 +124,7 @@ public class PrintTemplateController extends JeecgController<PrintTemplate, IPri
|
||||
}
|
||||
}
|
||||
service.updateById(entity);
|
||||
publishPrintTemplateChanged("edit", entity.getId());
|
||||
return Result.OK("修改成功");
|
||||
}
|
||||
|
||||
@@ -142,6 +156,7 @@ public class PrintTemplateController extends JeecgController<PrintTemplate, IPri
|
||||
@RequiresPermissions("print:template:delete")
|
||||
public Result<String> delete(@RequestParam(name = "id") String id) {
|
||||
service.removeById(id);
|
||||
publishPrintTemplateChanged("delete", id);
|
||||
return Result.OK("删除成功");
|
||||
}
|
||||
|
||||
@@ -153,7 +168,9 @@ public class PrintTemplateController extends JeecgController<PrintTemplate, IPri
|
||||
if (StringUtils.isBlank(ids)) {
|
||||
return Result.error("参数 ids 不能为空");
|
||||
}
|
||||
service.removeByIds(java.util.Arrays.asList(ids.split(",")));
|
||||
List<String> idList = java.util.Arrays.asList(ids.split(","));
|
||||
service.removeByIds(idList);
|
||||
idList.forEach(id -> publishPrintTemplateChanged("delete", id.trim()));
|
||||
return Result.OK("批量删除成功");
|
||||
}
|
||||
|
||||
@@ -450,6 +467,30 @@ public class PrintTemplateController extends JeecgController<PrintTemplate, IPri
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
// ═══════════════════════════ 桌面端免密接口 ═══════════════════════════
|
||||
|
||||
@Operation(summary = "打印模板-免密通过编码查询(桌面端)")
|
||||
@GetMapping(value = "/anon/queryByCode")
|
||||
public Result<PrintTemplate> anonQueryByCode(@RequestParam(name = "code") String code) {
|
||||
PrintTemplate t = service.getByCode(code);
|
||||
if (t == null) {
|
||||
return Result.error("未找到模板: " + code);
|
||||
}
|
||||
return Result.OK(t);
|
||||
}
|
||||
|
||||
@Operation(summary = "打印模板-免密分页列表(桌面端)")
|
||||
@GetMapping(value = "/anon/list")
|
||||
public Result<IPage<PrintTemplate>> anonList(PrintTemplate query,
|
||||
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(name = "pageSize", defaultValue = "100") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
QueryWrapper<PrintTemplate> qw = QueryGenerator.initQueryWrapper(query, req.getParameterMap());
|
||||
qw.orderByAsc("template_code");
|
||||
Page<PrintTemplate> page = new Page<>(pageNo, pageSize);
|
||||
return Result.OK(service.page(page, qw));
|
||||
}
|
||||
|
||||
private PrintService resolvePrintService(String printerName) {
|
||||
PrintService target = null;
|
||||
if (StringUtils.isNotBlank(printerName) && !"__system_default__".equals(printerName)) {
|
||||
@@ -469,4 +510,22 @@ public class PrintTemplateController extends JeecgController<PrintTemplate, IPri
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* 广播打印模板变更事件到 /topic/sync/print-templates,桌面端订阅同步刷新本地缓存。
|
||||
* 消息体格式 = MesXslStompNotifyService.publishPrintTemplateChanged 的输出,
|
||||
* 内联实现避免反向依赖业务模块。
|
||||
*/
|
||||
private void publishPrintTemplateChanged(String action, String templateId) {
|
||||
try {
|
||||
Map<String, Object> event = new HashMap<>();
|
||||
event.put("cmd", "PRINT_TEMPLATE_CHANGED");
|
||||
event.put("action", action);
|
||||
event.put("templateId", templateId);
|
||||
event.put("timestamp", System.currentTimeMillis());
|
||||
messagingTemplate.convertAndSend("/topic/sync/print-templates", JSON.toJSONString(event));
|
||||
} catch (Exception e) {
|
||||
log.debug("广播 STOMP 事件失败 [PRINT_TEMPLATE_CHANGED]: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user