| | |
| | | import java.awt.image.BufferedImage; |
| | | import java.io.IOException; |
| | | import java.security.SecureRandom; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | public Map<String, Object> data() { |
| | | Map<String, Object> r = new HashMap<>(); |
| | | r.put("config", appGuideConfigMapper.selectOne(new QueryWrapper<AppGuideConfig>().orderByDesc("id").last("limit 1"))); |
| | | r.put("banners", appGuideBannerMapper.selectList(new QueryWrapper<AppGuideBanner>().orderByAsc("sort").orderByDesc("id"))); |
| | | r.put("links", qrLinkMapper.selectList(new QueryWrapper<QrLink>().eq("type", "SITE_BOOKING").orderByDesc("id"))); |
| | | r.put("banners", appGuideBannerMapper.selectList(new QueryWrapper<AppGuideBanner>().orderByDesc("sort").orderByDesc("id"))); |
| | | List<QrLink> links = qrLinkMapper.selectList(new QueryWrapper<QrLink>().eq("type", "SITE_BOOKING").orderByDesc("id")); |
| | | List<Map<String, Object>> linkData = new ArrayList<>(); |
| | | for (QrLink link : links) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | // Map 不会触发实体的 @JsonSerialize;雪花 ID 必须转字符串,避免前端 Number 精度丢失。 |
| | | item.put("id", String.valueOf(link.getId())); item.put("name", link.getName()); item.put("pageName", link.getPageName()); |
| | | item.put("storeId", link.getStoreId()); item.put("siteId", link.getSiteId()); item.put("shortCode", link.getShortCode()); |
| | | item.put("enabled", link.getEnabled()); item.put("guideUrl", guideUrl(link)); linkData.add(item); |
| | | } |
| | | r.put("links", linkData); |
| | | return r; |
| | | } |
| | | |
| | |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/siteQr") |
| | | public Map<String, Object> createSiteQr(Integer storeId, Integer siteId, String name, String channel) { |
| | | public Map<String, Object> createSiteQr(Integer storeId, Integer siteId, String name, String channel, String pageName) { |
| | | if (storeId == null || siteId == null) return error("门店 ID 和场地 ID 必填"); |
| | | QrLink old = qrLinkMapper.selectOne(new QueryWrapper<QrLink>().eq("type", "SITE_BOOKING").eq("siteId", siteId).eq("enabled", 1).last("limit 1")); |
| | | if (old != null) return error("该场地已有启用二维码,请先停用或使用现有二维码"); |
| | |
| | | link.setSiteId(siteId); |
| | | link.setName(name); |
| | | link.setChannel(channel); |
| | | link.setPageName(pageName); |
| | | link.setType("SITE_BOOKING"); |
| | | link.setEnabled(1); |
| | | link.setShortCode(nextCode()); |
| | |
| | | return ok(); |
| | | } |
| | | |
| | | /** 逻辑删除场地订场二维码。 */ |
| | | @ResponseBody |
| | | @PostMapping("/siteQr/delete") |
| | | public Map<String, Object> deleteSiteQr(Long id) { |
| | | qrLinkMapper.deleteById(id); |
| | | return ok(); |
| | | } |
| | | |
| | | @GetMapping("/siteQr/{id}.png") |
| | | public void qrImage(@PathVariable Long id, HttpServletResponse response) throws IOException { |
| | | QrLink link = qrLinkMapper.selectById(id); |
| | |
| | | } |
| | | |
| | | private String guideUrl(QrLink link) { |
| | | AppGuideConfig c = appGuideConfigMapper.selectOne(new QueryWrapper<AppGuideConfig>().orderByDesc("id").last("limit 1")); |
| | | String domain = c == null ? null : c.getGuideDomain(); |
| | | if (domain == null || domain.trim().isEmpty()) domain = "https://online.daowepark.com/other"; |
| | | return domain.replaceAll("/$", "") + "/q/" + link.getShortCode(); |
| | | return "https://package.daowepark.com/appdown?code=" + link.getShortCode(); |
| | | } |
| | | |
| | | private String nextCode() { |