package com.vincent.rsf.server.system.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.common.SnowflakeIdWorker; import com.vincent.rsf.server.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.system.entity.AiPromptPublishLog; import com.vincent.rsf.server.system.entity.AiPromptTemplate; import com.vincent.rsf.server.system.service.AiPromptPublishLogService; import com.vincent.rsf.server.system.service.AiPromptTemplateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @RestController public class AiPromptController extends BaseController { @Autowired private AiPromptTemplateService aiPromptTemplateService; @Autowired private AiPromptPublishLogService aiPromptPublishLogService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @PreAuthorize("hasAuthority('system:aiPrompt:list')") @PostMapping("/aiPrompt/page") public R page(@RequestBody Map map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, AiPromptTemplate.class); com.baomidou.mybatisplus.core.conditions.query.QueryWrapper wrapper = pageParam.buildWrapper(true); wrapper.eq("tenant_id", getTenantId()); return R.ok().add(aiPromptTemplateService.page(pageParam, wrapper)); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @PostMapping("/aiPrompt/list") public R list(@RequestBody(required = false) Map map) { return R.ok().add(aiPromptTemplateService.list(new LambdaQueryWrapper() .eq(AiPromptTemplate::getTenantId, getTenantId()) .orderByAsc(AiPromptTemplate::getSceneCode) .orderByDesc(AiPromptTemplate::getVersionNo, AiPromptTemplate::getId))); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @PostMapping({"/aiPrompt/many/{ids}", "/aiPrompts/many/{ids}"}) public R many(@PathVariable Long[] ids) { return R.ok().add(aiPromptTemplateService.list(new LambdaQueryWrapper() .eq(AiPromptTemplate::getTenantId, getTenantId()) .in(AiPromptTemplate::getId, Arrays.asList(ids)))); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @GetMapping("/aiPrompt/{id}") public R get(@PathVariable("id") Long id) { AiPromptTemplate promptTemplate = aiPromptTemplateService.getTenantTemplate(getTenantId(), id); if (promptTemplate == null) { return R.error("record not found"); } return R.ok().add(promptTemplate); } @PreAuthorize("hasAuthority('system:aiPrompt:save')") @OperationLog("Create AiPrompt") @PostMapping("/aiPrompt/save") public R save(@RequestBody AiPromptTemplate aiPromptTemplate) { if (Cools.isEmpty(aiPromptTemplate.getSceneCode())) { return R.error("场景编码不能为空"); } Date now = new Date(); aiPromptTemplate.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); aiPromptTemplate.setTenantId(getTenantId()); aiPromptTemplate.setCreateBy(getLoginUserId()); aiPromptTemplate.setCreateTime(now); aiPromptTemplate.setUpdateBy(getLoginUserId()); aiPromptTemplate.setUpdateTime(now); aiPromptTemplate.setVersionNo(aiPromptTemplate.getVersionNo() == null ? aiPromptTemplateService.nextVersionNo(getTenantId(), aiPromptTemplate.getSceneCode()) : aiPromptTemplate.getVersionNo()); if (aiPromptTemplate.getPublishedFlag() == null) { aiPromptTemplate.setPublishedFlag(0); } if (aiPromptTemplate.getStatus() == null) { aiPromptTemplate.setStatus(1); } if (!aiPromptTemplateService.save(aiPromptTemplate)) { return R.error("Save Fail"); } return R.ok("Save Success").add(aiPromptTemplate); } @PreAuthorize("hasAuthority('system:aiPrompt:update')") @OperationLog("Update AiPrompt") @PostMapping("/aiPrompt/update") public R update(@RequestBody AiPromptTemplate aiPromptTemplate) { AiPromptTemplate existed = aiPromptTemplateService.getTenantTemplate(getTenantId(), aiPromptTemplate.getId()); if (existed == null) { return R.error("record not found"); } aiPromptTemplate.setTenantId(getTenantId()); aiPromptTemplate.setUpdateBy(getLoginUserId()); aiPromptTemplate.setUpdateTime(new Date()); aiPromptTemplate.setCreateBy(existed.getCreateBy()); aiPromptTemplate.setCreateTime(existed.getCreateTime()); if (!aiPromptTemplateService.updateById(aiPromptTemplate)) { return R.error("Update Fail"); } return R.ok("Update Success").add(aiPromptTemplate); } @PreAuthorize("hasAuthority('system:aiPrompt:remove')") @OperationLog("Delete AiPrompt") @PostMapping("/aiPrompt/remove/{ids}") public R remove(@PathVariable Long[] ids) { List idList = Arrays.asList(ids); List records = aiPromptTemplateService.list(new LambdaQueryWrapper() .eq(AiPromptTemplate::getTenantId, getTenantId()) .in(AiPromptTemplate::getId, idList)); if (records.size() != idList.size() || !aiPromptTemplateService.removeByIds(idList)) { return R.error("Delete Fail"); } return R.ok("Delete Success").add(ids); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @PostMapping("/aiPrompt/export") public void export(@RequestBody Map map, HttpServletResponse response) throws Exception { ExcelUtil.build(ExcelUtil.create(aiPromptTemplateService.list(new LambdaQueryWrapper() .eq(AiPromptTemplate::getTenantId, getTenantId())), AiPromptTemplate.class), response); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @GetMapping("/ai/prompt/list") public R customList(@RequestParam(required = false) String sceneCode) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(AiPromptTemplate::getTenantId, getTenantId()) .orderByAsc(AiPromptTemplate::getSceneCode) .orderByDesc(AiPromptTemplate::getVersionNo, AiPromptTemplate::getId); if (!Cools.isEmpty(sceneCode)) { wrapper.eq(AiPromptTemplate::getSceneCode, sceneCode); } return R.ok().add(aiPromptTemplateService.list(wrapper)); } @PreAuthorize("hasAnyAuthority('system:aiPrompt:save','system:aiPrompt:update')") @PostMapping("/ai/prompt/save") public R customSave(@RequestBody AiPromptTemplate aiPromptTemplate) { if (aiPromptTemplate.getId() == null) { if (!hasAuthority("system:aiPrompt:save")) { return R.error("无新增权限"); } return save(aiPromptTemplate); } if (!hasAuthority("system:aiPrompt:update")) { return R.error("无更新权限"); } return update(aiPromptTemplate); } @PreAuthorize("hasAuthority('system:aiPrompt:publish')") @OperationLog("Publish AiPrompt") @PostMapping("/ai/prompt/publish") public R publish(@RequestBody Map map) { Long id = Long.valueOf(String.valueOf(map.get("id"))); if (!aiPromptTemplateService.publishTemplate(getTenantId(), id, getLoginUserId())) { return R.error("record not found"); } return R.ok(); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @GetMapping("/ai/prompt/version/list") public R versionList(@RequestParam String sceneCode) { List list = aiPromptTemplateService.listVersions(getTenantId(), sceneCode); return R.ok().add(list); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @GetMapping("/ai/prompt/publish-log/list") public R publishLogList(@RequestParam(required = false) String sceneCode) { List list = aiPromptPublishLogService.listSceneLogs(getTenantId(), sceneCode); return R.ok().add(list); } @PreAuthorize("hasAuthority('system:aiPrompt:save')") @OperationLog("Copy AiPrompt") @PostMapping("/ai/prompt/copy") public R copy(@RequestBody Map map) { Long id = Long.valueOf(String.valueOf(map.get("id"))); AiPromptTemplate copied = aiPromptTemplateService.copyTemplate(getTenantId(), id, getLoginUserId()); if (copied == null) { return R.error("record not found"); } return R.ok().add(copied); } @PreAuthorize("hasAuthority('system:aiPrompt:list')") @GetMapping("/ai/prompt/compare") public R compare(@RequestParam Long leftId, @RequestParam Long rightId) { AiPromptTemplate left = aiPromptTemplateService.getTenantTemplate(getTenantId(), leftId); AiPromptTemplate right = aiPromptTemplateService.getTenantTemplate(getTenantId(), rightId); if (left == null || right == null) { return R.error("record not found"); } Map result = new LinkedHashMap<>(); result.put("left", left); result.put("right", right); return R.ok().add(result); } @PreAuthorize("hasAuthority('system:aiPrompt:publish')") @OperationLog("Rollback AiPrompt") @PostMapping("/ai/prompt/rollback") public R rollback(@RequestBody Map map) { Long id = Long.valueOf(String.valueOf(map.get("id"))); if (!aiPromptTemplateService.rollbackTemplate(getTenantId(), id, getLoginUserId())) { return R.error("record not found"); } return R.ok(); } }