| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- package jnpf.base.controller;
- import cn.dev33.satoken.annotation.SaCheckPermission;
- import com.alibaba.fastjson.JSONObject;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import io.swagger.v3.oas.annotations.Parameter;
- import io.swagger.v3.oas.annotations.Parameters;
- import io.swagger.v3.oas.annotations.Operation;
- import jnpf.base.ActionResult;
- import jnpf.base.model.ColumnDataModel;
- import jnpf.base.model.OnlineImport.VisualdevModelDataInfoVO;
- import jnpf.base.model.VisualDevJsonModel;
- import jnpf.base.model.VisualWebTypeEnum;
- import jnpf.model.OnlineDevData;
- import jnpf.onlinedev.model.*;
- import jnpf.util.NoDataSourceBind;
- import jnpf.base.UserInfo;
- import jnpf.base.entity.VisualdevEntity;
- import jnpf.base.entity.VisualdevReleaseEntity;
- import jnpf.base.entity.VisualdevShortLinkEntity;
- import jnpf.base.model.shortLink.*;
- import jnpf.base.service.VisualdevReleaseService;
- import jnpf.base.service.VisualdevService;
- import jnpf.base.service.VisualdevShortLinkService;
- import jnpf.base.util.VisualUtil;
- import jnpf.base.vo.PaginationVO;
- import jnpf.config.ConfigValueUtil;
- import jnpf.constant.MsgCode;
- import jnpf.consts.DeviceType;
- import jnpf.database.util.TenantDataSourceUtil;
- import jnpf.exception.DataException;
- import jnpf.exception.LoginException;
- import jnpf.exception.WorkFlowException;
- import jnpf.onlinedev.service.VisualDevInfoService;
- import jnpf.onlinedev.service.VisualDevListService;
- import jnpf.onlinedev.service.VisualdevModelDataService;
- import jnpf.onlinedev.util.onlineDevUtil.OnlinePublicUtils;
- import jnpf.onlinedev.util.onlineDevUtil.OnlineSwapDataUtils;
- import jnpf.util.*;
- import jnpf.util.context.RequestContext;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import jakarta.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.sql.SQLException;
- import java.text.ParseException;
- import java.util.Date;
- import java.util.List;
- import java.util.Map;
- /**
- * 在线开发表单外链Controller
- *
- * @author JNPF开发平台组
- * @version V3.4.2
- * @copyright 引迈信息技术有限公司
- * @date 2022/12/30 11:33:17
- */
- @Tag(name = "表单外链" , description = "BaseShortLink" )
- @RestController
- @RequestMapping("/api/visualdev/ShortLink" )
- public class VisualdevShortLinkController extends SuperController<VisualdevShortLinkService, VisualdevShortLinkEntity> {
- @Autowired
- private VisualdevShortLinkService visualdevShortLinkService;
- @Autowired
- private ConfigValueUtil configValueUtil;
- @Autowired
- protected AuthUtil authUtil;
- @Autowired
- private VisualdevService visualdevService;
- @Autowired
- private VisualdevReleaseService visualdevReleaseService;
- @Autowired
- private VisualdevModelDataService visualdevModelDataService;
- @Autowired
- private OnlineSwapDataUtils onlineSwapDataUtils;
- @Autowired
- private VisualDevListService visualDevListService;
- @Autowired
- private VisualDevInfoService visualDevInfoService;
- @Operation(summary = "获取外链信息" )
- @Parameters({
- @Parameter(name = "id" , description = "主键" ),
- })
- @GetMapping("/{id}" )
- @SaCheckPermission("onlineDev.formDesign" )
- public ActionResult getInfo(@PathVariable("id" ) String id) {
- VisualdevShortLinkEntity info = visualdevShortLinkService.getById(id);
- VisualdevShortLinkVo vo;
- if (info != null) {
- vo = JsonUtil.getJsonToBean(info, VisualdevShortLinkVo.class);
- vo.setAlreadySave(true);
- } else {
- vo = new VisualdevShortLinkVo();
- vo.setId(id);
- }
- vo.setFormLink(geturl(id, "form" ));
- vo.setColumnLink(geturl(id, "list" ));
- return ActionResult.success(vo);
- }
- /**
- * 获取url
- *
- * @param
- * @return
- * @copyright 引迈信息技术有限公司
- * @date 2023/3/9
- */
- private String geturl(String id, String type) {
- String url = configValueUtil.getApiDomain() + "/api/visualdev/ShortLink/trigger/" + id + "?encryption=";
- UserInfo userInfo = UserProvider.getUser();
- JSONObject obj = new JSONObject();
- obj.put("type" , type);
- if (configValueUtil.isMultiTenancy()) {
- obj.put("tenantId" , userInfo.getTenantId());
- }
- //参数加密
- String encryption = DesUtil.aesOrDecode(obj.toJSONString(), true,true);
- url += encryption;
- return url;
- }
- @Operation(summary = "修改外链信息" )
- @PutMapping("" )
- @SaCheckPermission("onlineDev.formDesign" )
- public ActionResult saveOrupdate(@RequestBody VisualdevShortLinkForm data) {
- VisualdevShortLinkEntity entity = JsonUtil.getJsonToBean(data, VisualdevShortLinkEntity.class);
- if(entity.getFormLink().contains(configValueUtil.getApiDomain())){
- entity.setFormLink(entity.getFormLink().replace(configValueUtil.getApiDomain(),""));
- }
- if(entity.getColumnLink().contains(configValueUtil.getApiDomain())){
- entity.setColumnLink(entity.getColumnLink().replace(configValueUtil.getApiDomain(),""));
- }
- VisualdevShortLinkEntity info = visualdevShortLinkService.getById(data.getId());
- UserInfo userInfo = UserProvider.getUser();
- if (info != null) {
- entity.setLastModifyTime(new Date());
- entity.setLastModifyUserId(userInfo.getUserId());
- } else {
- entity.setCreatorTime(new Date());
- entity.setCreatorUserId(userInfo.getUserId());
- }
- String pcLink = "/formShortLink";
- String appLink ="/pages/formShortLink/index";
- entity.setRealPcLink(pcLink);
- entity.setRealAppLink(appLink);
- entity.setUserId(userInfo.getUserId());
- visualdevShortLinkService.saveOrUpdate(entity);
- return ActionResult.success(MsgCode.SU002.get());
- }
- /**
- * 参数解密切换数据源
- *
- * @param
- * @return
- * @copyright 引迈信息技术有限公司
- * @date 2023/3/9
- */
- private VisualdevShortLinkModel aesDecodeMatchDatabase(String encryption) throws LoginException {
- //参数解密
- String str = DesUtil.aesOrDecode(encryption, false,true);
- if (StringUtil.isEmpty(str)) {
- throw new LoginException(MsgCode.VS009.get());
- }
- VisualdevShortLinkModel model = JsonUtil.getJsonToBean(str, VisualdevShortLinkModel.class);
- if (configValueUtil.isMultiTenancy()) {
- if (StringUtil.isNotEmpty(model.getTenantId())) {
- //切换成租户库
- TenantDataSourceUtil.switchTenant(model.getTenantId());
- } else {
- throw new LoginException(MsgCode.LOG115.get());
- }
- }
- return model;
- }
- @NoDataSourceBind
- @Operation(summary = "外链请求入口" )
- @Parameters({
- @Parameter(name = "id" , description = "主键" ),
- })
- @GetMapping("/trigger/{id}" )
- public ActionResult getlink(@PathVariable("id" ) String id,
- @RequestParam(value = "encryption" ) String encryption,
- HttpServletResponse response) throws LoginException, IOException {
- VisualdevShortLinkModel model = aesDecodeMatchDatabase(encryption);
- String link = "";
- VisualdevShortLinkEntity entity = visualdevShortLinkService.getById(id);
- DeviceType deviceType = UserProvider.getDeviceForAgent();
- if (entity != null) {
- if (DeviceType.PC.equals(deviceType)) {
- link = configValueUtil.getFrontDomain() + entity.getRealPcLink();
- } else {
- link = configValueUtil.getAppDomain() + entity.getRealAppLink();
- }
- } else {
- return ActionResult.fail(MsgCode.VS010.get());
- }
- JSONObject obj = new JSONObject();
- obj.put("modelId" , id);
- obj.put("type" , model.getType());
- if (configValueUtil.isMultiTenancy()) {
- obj.put("tenantId" , model.getTenantId());
- }
- //新链接参数加密
- String encryptionNew = DesUtil.aesOrDecode(obj.toJSONString(), true,true);
- link += "?encryption=" + encryptionNew;
- // link += "&modelId=" + id;
- response.sendRedirect(link);
- return ActionResult.success(MsgCode.SU000.get());
- }
- @NoDataSourceBind
- @Operation(summary = "获取外链配置" )
- @Parameters({
- @Parameter(name = "id" , description = "主键" ),
- })
- @GetMapping("/getConfig/{id}" )
- public ActionResult getConfig(@PathVariable("id" ) String id, @RequestParam("encryption" ) String encryption) throws LoginException {
- aesDecodeMatchDatabase(encryption);
- VisualdevShortLinkEntity info = visualdevShortLinkService.getById(id);
- VisualdevShortLinkConfigVo vo = JsonUtil.getJsonToBean(info, VisualdevShortLinkConfigVo.class);
- vo.setFormLink(geturl(id, "form" ));
- vo.setColumnLink(geturl(id, "list" ));
- return ActionResult.success(vo);
- }
- @NoDataSourceBind
- @Operation(summary = "密码验证" )
- @PostMapping("/checkPwd" )
- public ActionResult checkPwd(@RequestBody VisualdevShortLinkPwd form) throws LoginException {
- //参数解密
- VisualdevShortLinkModel model = aesDecodeMatchDatabase(form.getEncryption());
- VisualdevShortLinkEntity info = visualdevShortLinkService.getById(form.getId());
- boolean flag = false;
- if (OnlineDevData.STATE_ENABLE.equals(info.getFormPassUse()) && 0 == form.getType()) {
- if (Md5Util.getStringMd5(info.getFormPassword()).equals(form.getPassword())) {
- flag = true;
- }
- } else if (OnlineDevData.STATE_ENABLE.equals(info.getColumnPassUse()) && 1 == form.getType()) {
- if (Md5Util.getStringMd5(info.getColumnPassword()).equals(form.getPassword())) {
- flag = true;
- }
- }
- if (flag) {
- return ActionResult.success();
- }
- return ActionResult.fail(MsgCode.VS011.get());
- }
- @NoDataSourceBind
- @Operation(summary = "获取列表表单配置JSON" )
- @GetMapping("/{modelId}/Config" )
- public ActionResult getData(@PathVariable("modelId" ) String modelId, @RequestParam(value = "type" , required = false) String type,
- @RequestParam("encryption" ) String encryption) throws WorkFlowException, LoginException {
- aesDecodeMatchDatabase(encryption);
- VisualdevEntity entity;
- //线上版本
- if ("0".equals(type)) {
- entity = visualdevService.getInfo(modelId);
- } else {
- VisualdevReleaseEntity releaseEntity = visualdevReleaseService.getById(modelId);
- entity = JsonUtil.getJsonToBean(releaseEntity, VisualdevEntity.class);
- }
- if (entity == null) {
- return ActionResult.fail(MsgCode.VS012.get());
- }
- String s = VisualUtil.checkPublishVisualModel(entity, MsgCode.VS005.get());
- if (s != null) {
- return ActionResult.fail(s);
- }
- DataInfoVO vo = JsonUtil.getJsonToBean(entity, DataInfoVO.class);
- return ActionResult.success(vo);
- }
- @NoDataSourceBind
- @Operation(summary = "外链数据列表" )
- @Parameters({
- @Parameter(name = "modelId" , description = "模板id" ),
- })
- @PostMapping("/{modelId}/ListLink" )
- public ActionResult ListLink(@PathVariable("modelId" ) String modelId, @RequestParam("encryption" ) String encryption,
- @RequestBody PaginationModel paginationModel) throws WorkFlowException, LoginException {
- aesDecodeMatchDatabase(encryption);
- VisualdevReleaseEntity visualdevEntity = visualdevReleaseService.getById(modelId);
- VisualDevJsonModel visualJsonModel = OnlinePublicUtils.getVisualJsonModel(visualdevEntity);
- //判断请求客户端来源
- if (!RequestContext.isOrignPc()) {
- visualJsonModel.setColumnData(visualJsonModel.getAppColumnData());
- }
- List<Map<String, Object>> realList;
- if (VisualWebTypeEnum.DATA_VIEW.getType().equals(visualdevEntity.getWebType())) {//
- //数据视图的接口数据获取、
- ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(visualdevEntity.getColumnData(), ColumnDataModel.class);
- realList = onlineSwapDataUtils.getInterfaceData(visualdevEntity, paginationModel, columnDataModel);
- } else {
- realList = visualDevListService.getDataListLink(visualJsonModel, paginationModel);
- }
- PaginationVO paginationVO = JsonUtil.getJsonToBean(paginationModel, PaginationVO.class);
- return ActionResult.page(realList, paginationVO);
- }
- @NoDataSourceBind
- @Operation(summary = "获取数据信息(带转换数据)" )
- @Parameters({
- @Parameter(name = "modelId" , description = "模板id" ),
- @Parameter(name = "id" , description = "数据id" ),
- })
- @GetMapping("/{modelId}/{id}/DataChange" )
- public ActionResult infoWithDataChange(@PathVariable("modelId" ) String modelId, @PathVariable("id" ) String id,
- @RequestParam("encryption" ) String encryption) throws DataException, ParseException, IOException, SQLException, LoginException {
- aesDecodeMatchDatabase(encryption);
- modelId = XSSEscape.escape(modelId);
- id = XSSEscape.escape(id);
- VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(modelId);
- VisualdevModelDataInfoVO vo = visualDevInfoService.getDetailsDataInfo(id, visualdevEntity);
- return ActionResult.success(vo);
- }
- //**********以下微服务和单体不同
- @NoDataSourceBind
- @Operation(summary = "添加数据" )
- @Parameters({
- @Parameter(name = "modelId" , description = "模板id" ),
- @Parameter(name = "visualdevModelDataCrForm" , description = "功能数据创建表单" ),
- })
- @PostMapping("/{modelId}" )
- public ActionResult create(@PathVariable("modelId" ) String modelId, @RequestParam("encryption" ) String encryption,
- @RequestBody VisualdevModelDataCrForm visualdevModelDataCrForm) throws WorkFlowException, LoginException {
- VisualdevShortLinkModel visualdevShortLinkModel = aesDecodeMatchDatabase(encryption);
- VisualdevShortLinkEntity info = visualdevShortLinkService.getById(modelId);
- if (1 != info.getFormUse()) {
- return ActionResult.fail(MsgCode.VS013.get());
- }
- String tenantId=visualdevShortLinkModel.getTenantId();
- try {
- if (configValueUtil.isMultiTenancy()) {
- if (StringUtil.isNotEmpty(tenantId)) {
- //切换成租户库
- TenantDataSourceUtil.switchTenant(tenantId);
- } else {
- return ActionResult.fail(MsgCode.LOG115.get());
- }
- }
- VisualdevEntity visualdevEntity = visualdevService.getReleaseInfo(modelId);
- Map<String, Object> map = JsonUtil.stringToMap(visualdevModelDataCrForm.getData());
- visualdevModelDataService.visualCreate(VisualParamModel.builder().visualdevEntity(visualdevEntity).data(map).isLink(true).build());
- }catch (Exception e){
- throw new WorkFlowException(e.getMessage(), e);
- }
- return ActionResult.success(MsgCode.SU001.get());
- }
- }
|