From d028780bd3d132909ad76279fd5ad50d15dcd1d5 Mon Sep 17 00:00:00 2001 From: Vinjor Date: Thu, 7 Aug 2025 16:18:08 +0800 Subject: [PATCH 1/4] 1 --- .../ruoyi/base/controller/WebController.java | 76 ++--- .../busi/controller/BusiPageController.java | 112 +++++++ .../java/com/ruoyi/busi/domain/BusiPage.java | 64 ++++ .../com/ruoyi/busi/mapper/BusiPageMapper.java | 21 ++ .../ruoyi/busi/service/IBusiPageService.java | 28 ++ .../service/impl/BusiPageServiceImpl.java | 57 ++++ .../com/ruoyi/busi/utils/CommonUtils.java | 37 +++ .../resources/mapper/busi/BusiPageMapper.xml | 32 ++ dl_vue/.env.development | 2 +- dl_vue/src/api/busi/page.js | 44 +++ dl_vue/src/views/busi/page/index.vue | 302 ++++++++++++++++++ 11 files changed, 731 insertions(+), 44 deletions(-) create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiPage.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java create mode 100644 dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml create mode 100644 dl_vue/src/api/busi/page.js create mode 100644 dl_vue/src/views/busi/page/index.vue diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java index 631ccef..3adf05f 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java @@ -12,10 +12,7 @@ import com.ruoyi.base.service.IBaseInquiryService; import com.ruoyi.base.service.IBaseNationalService; import com.ruoyi.base.service.IBasePicService; import com.ruoyi.base.service.IBaseSiteInfoService; -import com.ruoyi.busi.domain.BusiCategory; -import com.ruoyi.busi.domain.BusiChatMain; -import com.ruoyi.busi.domain.BusiInquiryItem; -import com.ruoyi.busi.domain.BusiProdNew; +import com.ruoyi.busi.domain.*; import com.ruoyi.busi.service.*; import com.ruoyi.busi.utils.CommonUtils; import com.ruoyi.busi.vo.BusiCategoryVO; @@ -75,6 +72,10 @@ public class WebController extends BaseController { private IBusiChatMainService busiChatMainService; @Autowired private GoogleKeywordService googleKeywordService; + @Autowired + private IBusiPageService pageService; + @Autowired + private CommonUtils commonUtils; /** * 导航栏接口--所有分类 @@ -372,14 +373,7 @@ public class WebController extends BaseController { **/ @PostMapping("/chatMain") public AjaxResult saveChatMain(@RequestBody BusiChatMain busiChatMain, HttpServletRequest request) { - String ip = ""; - String nationalStr = ""; - try { - ip = CommonUtils.getIpAddr(request); - nationalStr = CommonUtils.getAddr(ip); - } catch (Exception e) { - logger.error("识别所属国家失败"); - } + String ip = CommonUtils.getIpAddr(request); ip = StringUtils.isNotEmpty(ip) ? ip : "未知"; BusiChatMain result = busiChatMainService.queryByIpAndCusCode(ip, busiChatMain.getCusCode(), busiChatMain.getProdId()); if (result != null) { @@ -389,17 +383,10 @@ public class WebController extends BaseController { } return success(result); } else { - nationalStr = StringUtils.isNotEmpty(nationalStr) ? nationalStr : "未知"; - String national = nationalStr.split("\\|")[0]; - System.out.println(ip + "-----" + nationalStr); - String oceania = "未知"; - Map nationalMap = nationalService.getNationalMap(); - if (nationalMap.containsKey(national)) { - oceania = nationalMap.get(national); - } - busiChatMain.setIp(ip); - busiChatMain.setNational(nationalStr); - busiChatMain.setOceania(oceania); + Map ipMap = commonUtils.getIPAndCountry(request); + busiChatMain.setIp(ipMap.get("ip")); + busiChatMain.setNational(ipMap.get("national")); + busiChatMain.setOceania(ipMap.get("oceania")); busiChatMain.setNums(0); busiChatMainService.save(busiChatMain); return success(busiChatMain); @@ -441,26 +428,10 @@ public class WebController extends BaseController { }) @PostMapping("/inquirySave") public R inquirySave(@ApiIgnore @RequestBody BusiInquiryItem inquiryItem, HttpServletRequest request) { - String ip = ""; - String nationalStr = ""; - try { - ip = CommonUtils.getIpAddr(request); - nationalStr = CommonUtils.getAddr(ip); - } catch (Exception e) { - logger.error("识别所属国家失败"); - } - ip = StringUtils.isNotEmpty(ip) ? ip : "未知"; - nationalStr = StringUtils.isNotEmpty(nationalStr) ? nationalStr : "未知"; - String national = nationalStr.split("\\|")[0]; - System.out.println(ip + "-----" + nationalStr); - String oceania = "未知"; - Map nationalMap = nationalService.getNationalMap(); - if (nationalMap.containsKey(national)) { - oceania = nationalMap.get(national); - } - inquiryItem.setIp(ip); - inquiryItem.setNational(national); - inquiryItem.setOceania(oceania); + Map ipMap = commonUtils.getIPAndCountry(request); + inquiryItem.setIp(ipMap.get("ip")); + inquiryItem.setNational(ipMap.get("national")); + inquiryItem.setOceania(ipMap.get("oceania")); inquiryItemService.save(inquiryItem); return R.ok(); } @@ -480,4 +451,23 @@ public class WebController extends BaseController { public R> siteMap(@RequestParam(required = true) String tenantId, @RequestParam(required = true) String catgType){ return R.ok(prodNewService.getSiteMap(tenantId,catgType)); } + + /** + * 记录网页访问次数 + * @author vinjor-M + * @date 10:04 2025/7/8 + * @return com.ruoyi.common.core.domain.AjaxResult + **/ + @ApiOperation("记录网页访问次数") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "url", value = "网页地址", required = true, paramType = "body"), + @ApiImplicitParam(name = "tenantId", value = "站点编码", required = true, paramType = "body"), + @ApiImplicitParam(name = "equipment", value = "设备类型(移动端|电脑端)", required = true, paramType = "body") + }) + @PostMapping("/pageSave") + public R pageSave(@ApiIgnore @RequestBody BusiPage busiPage, HttpServletRequest request) { + busiPage.setCreateTime(new Date()); + pageService.pageSave(busiPage,request); + return R.ok(); + } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java new file mode 100644 index 0000000..44f9968 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java @@ -0,0 +1,112 @@ +package com.ruoyi.busi.controller; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.busi.domain.BusiPage; +import com.ruoyi.busi.service.IBusiPageService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 全站网页访问次数统计Controller + * + * @author vinjor-m + * @date 2025-08-07 + */ +@RestController +@RequestMapping("/busi/page") +public class BusiPageController extends BaseController +{ + @Autowired + private IBusiPageService busiPageService; + + /** + * 查询全站网页访问次数统计列表 + */ + @PreAuthorize("@ss.hasPermi('busi:page:list')") + @GetMapping("/list") + public AjaxResult list(BusiPage busiPage, + @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) + { + Page page = new Page<>(pageNum, pageSize); + IPage list = busiPageService.queryListPage(busiPage,page); + return success(list); + } + + /** + * 导出全站网页访问次数统计列表 + */ + @PreAuthorize("@ss.hasPermi('busi:page:export')") + @Log(title = "全站网页访问次数统计", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BusiPage busiPage) + { + List list = busiPageService.list(); + ExcelUtil util = new ExcelUtil(BusiPage.class); + util.exportExcel(response, list, "全站网页访问次数统计数据"); + } + + /** + * 获取全站网页访问次数统计详细信息 + */ + @PreAuthorize("@ss.hasPermi('busi:page:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(busiPageService.getById(id)); + } + + /** + * 新增全站网页访问次数统计 + */ + @PreAuthorize("@ss.hasPermi('busi:page:add')") + @Log(title = "全站网页访问次数统计", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BusiPage busiPage) + { + return toAjax(busiPageService.save(busiPage)); + } + + /** + * 修改全站网页访问次数统计 + */ + @PreAuthorize("@ss.hasPermi('busi:page:edit')") + @Log(title = "全站网页访问次数统计", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BusiPage busiPage) + { + return toAjax(busiPageService.updateById(busiPage)); + } + + /** + * 删除全站网页访问次数统计 + */ + @PreAuthorize("@ss.hasPermi('busi:page:remove')") + @Log(title = "全站网页访问次数统计", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + List list = new ArrayList<>(Arrays.asList(ids)); + return toAjax(busiPageService.removeByIds(list)); + } +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiPage.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiPage.java new file mode 100644 index 0000000..9d26e54 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/domain/BusiPage.java @@ -0,0 +1,64 @@ +package com.ruoyi.busi.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import com.ruoyi.common.core.domain.DlBaseEntity; + +import java.util.Date; + +/** + * 全站网页访问次数统计对象 dl_busi_page + * + * @author vinjor-m + * @date 2025-08-07 + */ +@TableName("dl_busi_page") +@Data +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "BusiPage", description = "网页访问次数实体") +public class BusiPage +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + @TableId(type = IdType.ASSIGN_UUID) + private String id; + + /** 网页地址 */ + @Excel(name = "网页地址") + @ApiModelProperty("网页地址") + private String url; + + /** 设备类型 */ + @Excel(name = "设备类型") + @ApiModelProperty("设备类型") + private String equipment; + + /** 来源IP */ + @Excel(name = "来源IP") + private String ip; + + /** 来源国家 */ + @Excel(name = "来源国家") + private String national; + /** 洲 */ + @Excel(name = "洲") + private String oceania; + + /** 站点唯一编码(租户id) */ + @Excel(name = "站点唯一编码", readConverterExp = "租=户id") + @ApiModelProperty("站点唯一编码") + private String tenantId; + /** 创建时间 */ + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java new file mode 100644 index 0000000..62441c7 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java @@ -0,0 +1,21 @@ +package com.ruoyi.busi.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.busi.domain.BusiPage; +import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 全站网页访问次数统计Mapper接口 + * + * @author vinjor-m + * @date 2025-08-07 + */ +@Mapper +public interface BusiPageMapper extends BaseMapper +{ + IPage queryListPage(@Param("entity") BusiPage entity, Page page); +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java new file mode 100644 index 0000000..ba9c846 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java @@ -0,0 +1,28 @@ +package com.ruoyi.busi.service; + +import java.util.List; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.busi.domain.BusiPage; + +import javax.servlet.http.HttpServletRequest; + +/** + * 全站网页访问次数统计Service接口 + * + * @author vinjor-m + * @date 2025-08-07 + */ +public interface IBusiPageService extends IService +{ + IPage queryListPage(BusiPage pageReqVO, Page page); + + /** + * 保存网页访问记录 + * @author vinjor-M + * @date 11:13 2025/8/7 + * @param busiPage TODO + **/ + void pageSave(BusiPage busiPage, HttpServletRequest request); +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java new file mode 100644 index 0000000..ea9c5f1 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java @@ -0,0 +1,57 @@ +package com.ruoyi.busi.service.impl; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +import com.ruoyi.busi.utils.CommonUtils; +import com.ruoyi.common.utils.DateUtils; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.busi.mapper.BusiPageMapper; +import com.ruoyi.busi.domain.BusiPage; +import com.ruoyi.busi.service.IBusiPageService; + +import javax.servlet.http.HttpServletRequest; + +/** + * 全站网页访问次数统计Service业务层处理 + * + * @author vinjor-m + * @date 2025-08-07 + */ +@Service +public class BusiPageServiceImpl extends ServiceImpl implements IBusiPageService +{ + @Autowired + private BusiPageMapper busiPageMapper; + @Autowired + private CommonUtils commonUtils; + + @Override + public IPage queryListPage(BusiPage pageReqVO, Page page) { + return busiPageMapper.queryListPage(pageReqVO, page); + } + + /** + * 保存网页访问记录 + * + * @param busiPage TODO + * @author vinjor-M + * @date 11:13 2025/8/7 + **/ + @Override + public void pageSave(BusiPage busiPage, HttpServletRequest request) { + // 2. 异步保存到数据库(RuoYi已内置线程池) + CompletableFuture.runAsync(() -> { + Map ipMap = commonUtils.getIPAndCountry(request); + busiPage.setIp(ipMap.get("ip")); + busiPage.setNational(ipMap.get("national")); + busiPage.setOceania(ipMap.get("oceania")); + this.save(busiPage); + }); + } +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java index d15f980..0777caf 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java @@ -1,9 +1,12 @@ package com.ruoyi.busi.utils; import cn.hutool.core.util.StrUtil; +import com.ruoyi.base.service.IBaseNationalService; +import com.ruoyi.common.utils.StringUtils; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.poi.util.IOUtils; import org.lionsoul.ip2region.xdb.Searcher; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; @@ -24,6 +27,9 @@ import java.util.stream.Collectors; @Slf4j public class CommonUtils { + @Autowired + private IBaseNationalService nationalService; + private static final String UNKNOWN = "unknown"; /** @@ -102,4 +108,35 @@ public class CommonUtils { } return yearMonthList; } + + /** + * 根据IP查询所属国家和洲 + * @author vinjor-M + * @date 15:48 2025/8/7 + * @return java.util.Map + **/ + public Map getIPAndCountry(HttpServletRequest request){ + Map rtnMap = new HashMap<>(); + String ip = ""; + String nationalStr = ""; + try { + ip = CommonUtils.getIpAddr(request); + nationalStr = CommonUtils.getAddr(ip); + } catch (Exception e) { + log.error("识别所属国家失败"); + } + ip = StringUtils.isNotEmpty(ip) ? ip : "未知"; + nationalStr = StringUtils.isNotEmpty(nationalStr) ? nationalStr : "未知"; + String national = nationalStr.split("\\|")[0]; + System.out.println(ip + "-----" + nationalStr); + String oceania = "未知"; + Map nationalMap = nationalService.getNationalMap(); + if (nationalMap.containsKey(national)) { + oceania = nationalMap.get(national); + } + rtnMap.put("ip",ip); + rtnMap.put("national",national); + rtnMap.put("oceania",oceania); + return rtnMap; + } } diff --git a/dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml b/dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml new file mode 100644 index 0000000..5a128e6 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + select id, url, equipment, ip, national,oceania, tenant_id, create_time from dl_busi_page + + + + \ No newline at end of file diff --git a/dl_vue/.env.development b/dl_vue/.env.development index a050276..5c95054 100644 --- a/dl_vue/.env.development +++ b/dl_vue/.env.development @@ -5,7 +5,7 @@ VUE_APP_TITLE = 成事达管理平台 ENV = 'development' # 成事达管理平台/开发环境 -VUE_APP_BASE_API = 'http://127.0.0.1:8099' +VUE_APP_BASE_API = 'http://192.168.1.13:8099' # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/dl_vue/src/api/busi/page.js b/dl_vue/src/api/busi/page.js new file mode 100644 index 0000000..b9ce068 --- /dev/null +++ b/dl_vue/src/api/busi/page.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询全站网页访问次数统计列表 +export function listPage(query) { + return request({ + url: '/busi/page/list', + method: 'get', + params: query + }) +} + +// 查询全站网页访问次数统计详细 +export function getPage(id) { + return request({ + url: '/busi/page/' + id, + method: 'get' + }) +} + +// 新增全站网页访问次数统计 +export function addPage(data) { + return request({ + url: '/busi/page', + method: 'post', + data: data + }) +} + +// 修改全站网页访问次数统计 +export function updatePage(data) { + return request({ + url: '/busi/page', + method: 'put', + data: data + }) +} + +// 删除全站网页访问次数统计 +export function delPage(id) { + return request({ + url: '/busi/page/' + id, + method: 'delete' + }) +} diff --git a/dl_vue/src/views/busi/page/index.vue b/dl_vue/src/views/busi/page/index.vue new file mode 100644 index 0000000..18273a8 --- /dev/null +++ b/dl_vue/src/views/busi/page/index.vue @@ -0,0 +1,302 @@ + + + From 05c5161894c7c9168bd3b8718277212393d0dd4c Mon Sep 17 00:00:00 2001 From: Vinjor Date: Thu, 7 Aug 2025 18:16:27 +0800 Subject: [PATCH 2/4] 1 --- .../ruoyi/base/controller/WebController.java | 3 +- .../busi/controller/BusiPageController.java | 12 +- .../com/ruoyi/busi/mapper/BusiPageMapper.java | 3 + .../ruoyi/busi/service/IBusiPageService.java | 14 +- .../service/impl/BusiPageServiceImpl.java | 53 +++- .../com/ruoyi/busi/utils/CommonUtils.java | 29 +- .../java/com/ruoyi/busi/vo/BusiPageVO.java | 19 ++ .../resources/mapper/busi/BusiPageMapper.xml | 20 ++ dl_vue/src/views/busi/page/index.vue | 252 +++++++----------- .../views/statistics/inquiryItem/index.vue | 13 +- 10 files changed, 243 insertions(+), 175 deletions(-) create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/BusiPageVO.java diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java index 3adf05f..e265329 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/WebController.java @@ -466,8 +466,9 @@ public class WebController extends BaseController { }) @PostMapping("/pageSave") public R pageSave(@ApiIgnore @RequestBody BusiPage busiPage, HttpServletRequest request) { + busiPage.setIp(CommonUtils.getIpAddr(request)); busiPage.setCreateTime(new Date()); - pageService.pageSave(busiPage,request); + pageService.pageSave(busiPage); return R.ok(); } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java index 44f9968..30c9ef8 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/BusiPageController.java @@ -6,6 +6,7 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.busi.vo.BusiPageVO; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -40,17 +41,12 @@ public class BusiPageController extends BaseController private IBusiPageService busiPageService; /** - * 查询全站网页访问次数统计列表 + * 查询全站网页访问次数统计列表---排名前10 */ @PreAuthorize("@ss.hasPermi('busi:page:list')") @GetMapping("/list") - public AjaxResult list(BusiPage busiPage, - @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) - { - Page page = new Page<>(pageNum, pageSize); - IPage list = busiPageService.queryListPage(busiPage,page); - return success(list); + public AjaxResult list(BusiPageVO busiPage){ + return success(busiPageService.queryListNum(busiPage)); } /** diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java index 62441c7..735202e 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/mapper/BusiPageMapper.java @@ -4,6 +4,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.busi.domain.BusiPage; +import com.ruoyi.busi.vo.BusiPageVO; import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @@ -18,4 +19,6 @@ import org.apache.ibatis.annotations.Mapper; public interface BusiPageMapper extends BaseMapper { IPage queryListPage(@Param("entity") BusiPage entity, Page page); + + List selectListCus(@Param("entity")BusiPageVO busiPageVO); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java index ba9c846..7609302 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/IBusiPageService.java @@ -1,10 +1,13 @@ package com.ruoyi.busi.service; import java.util.List; +import java.util.Map; + import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.busi.domain.BusiPage; +import com.ruoyi.busi.vo.BusiPageVO; import javax.servlet.http.HttpServletRequest; @@ -24,5 +27,14 @@ public interface IBusiPageService extends IService * @date 11:13 2025/8/7 * @param busiPage TODO **/ - void pageSave(BusiPage busiPage, HttpServletRequest request); + void pageSave(BusiPage busiPage); + + /** + * 查全站访问网页前十 + * @author vinjor-M + * @date 16:52 2025/8/7 + * @param busiPage TODO + * @return java.util.List + **/ + List queryListNum(BusiPageVO busiPage); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java index ea9c5f1..acb5d13 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiPageServiceImpl.java @@ -1,13 +1,19 @@ package com.ruoyi.busi.service.impl; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.busi.utils.CommonUtils; +import com.ruoyi.busi.vo.BusiPageVO; import com.ruoyi.common.utils.DateUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.constant.StrConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -44,14 +50,55 @@ public class BusiPageServiceImpl extends ServiceImpl i * @date 11:13 2025/8/7 **/ @Override - public void pageSave(BusiPage busiPage, HttpServletRequest request) { + public void pageSave(BusiPage busiPage) { // 2. 异步保存到数据库(RuoYi已内置线程池) CompletableFuture.runAsync(() -> { - Map ipMap = commonUtils.getIPAndCountry(request); - busiPage.setIp(ipMap.get("ip")); + Map ipMap = commonUtils.getCountryByIp(busiPage.getIp()); busiPage.setNational(ipMap.get("national")); busiPage.setOceania(ipMap.get("oceania")); this.save(busiPage); }); } + + /** + * 查全站访问网页前十 + * + * @param busiPage TODO + * @return java.util.List + * @author vinjor-M + * @date 16:52 2025/8/7 + **/ + @Override + public List queryListNum(BusiPageVO busiPage) { + if(StringUtils.isNotEmpty(busiPage.getStartDate())){ + busiPage.setStartDate(busiPage.getStartDate()+ StrConstants.START_DATE); + } + if(StringUtils.isNotEmpty(busiPage.getEndDate())){ + busiPage.setEndDate(busiPage.getEndDate()+StrConstants.END_DATE); + } + List rtnList = new ArrayList<>(); + List dataList = busiPageMapper.selectListCus(busiPage); + // 1. 按 url 分组并统计数量 + Map countMap = dataList.stream() + .collect(Collectors.groupingBy( + // 分组字段 + BusiPageVO::getUrl, + // 统计数量 + Collectors.counting() + )); + // 2. 按数量降序排序,并取前10 + List> top10 = countMap.entrySet().stream() + // 降序排序 + .sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue())) + // 取前10 + .limit(10) + .collect(Collectors.toList()); + top10.forEach(item->{ + BusiPageVO pageVO = new BusiPageVO(); + pageVO.setUrl(item.getKey()); + pageVO.setNum(item.getValue()); + rtnList.add(pageVO); + }); + return rtnList; + } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java index 0777caf..e4d75ce 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/utils/CommonUtils.java @@ -110,7 +110,7 @@ public class CommonUtils { } /** - * 根据IP查询所属国家和洲 + * 根据请求查询IP、所属国家和洲 * @author vinjor-M * @date 15:48 2025/8/7 * @return java.util.Map @@ -128,7 +128,6 @@ public class CommonUtils { ip = StringUtils.isNotEmpty(ip) ? ip : "未知"; nationalStr = StringUtils.isNotEmpty(nationalStr) ? nationalStr : "未知"; String national = nationalStr.split("\\|")[0]; - System.out.println(ip + "-----" + nationalStr); String oceania = "未知"; Map nationalMap = nationalService.getNationalMap(); if (nationalMap.containsKey(national)) { @@ -139,4 +138,30 @@ public class CommonUtils { rtnMap.put("oceania",oceania); return rtnMap; } + + /** + * 根据IP查询所属国家和洲 + * @author vinjor-M + * @date 15:48 2025/8/7 + * @return java.util.Map + **/ + public Map getCountryByIp(String ip){ + Map rtnMap = new HashMap<>(); + String nationalStr = ""; + try { + nationalStr = CommonUtils.getAddr(ip); + } catch (Exception e) { + log.error("识别所属国家失败"); + } + nationalStr = StringUtils.isNotEmpty(nationalStr) ? nationalStr : "未知"; + String national = nationalStr.split("\\|")[0]; + String oceania = "未知"; + Map nationalMap = nationalService.getNationalMap(); + if (nationalMap.containsKey(national)) { + oceania = nationalMap.get(national); + } + rtnMap.put("national",national); + rtnMap.put("oceania",oceania); + return rtnMap; + } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/BusiPageVO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/BusiPageVO.java new file mode 100644 index 0000000..187a66d --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/vo/BusiPageVO.java @@ -0,0 +1,19 @@ +package com.ruoyi.busi.vo; + +import com.ruoyi.busi.domain.BusiPage; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class BusiPageVO extends BusiPage { + + /** 时间范围-开始 */ + private String startDate; + /** 时间范围-结束 */ + private String endDate; + /** 访问次数 */ + private Long num; + /** 是否归属中国 */ + private Boolean ifChina; +} diff --git a/dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml b/dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml index 5a128e6..eca2010 100644 --- a/dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml +++ b/dl_admin/ruoyi-admin/src/main/resources/mapper/busi/BusiPageMapper.xml @@ -29,4 +29,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and tenant_id = #{entity.tenantId} + \ No newline at end of file diff --git a/dl_vue/src/views/busi/page/index.vue b/dl_vue/src/views/busi/page/index.vue index 18273a8..c2eaff9 100644 --- a/dl_vue/src/views/busi/page/index.vue +++ b/dl_vue/src/views/busi/page/index.vue @@ -1,45 +1,28 @@ @@ -163,34 +55,59 @@ export default { name: "Page", data() { return { + options: [{ + value: null, + label: '全部' + }, { + label: '是', + value: true + }, { + label: '否', + value: false + }], // 遮罩层 loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, // 显示搜索条件 showSearch: true, - // 总条数 - total: 0, // 全站网页访问次数统计表格数据 pageList: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, - url: null, - equipment: null, - ip: null, - national: null, + dataRange: '', + startDate: '', + endDate: '', + ifChina:null, tenantId: null, }, + pickerOptions: { + shortcuts: [{ + text: '最近一周', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 7) + picker.$emit('pick', [start, end]) + } + }, { + text: '最近一个月', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 30) + picker.$emit('pick', [start, end]) + } + }, { + text: '最近三个月', + onClick(picker) { + const end = new Date() + const start = new Date() + start.setTime(start.getTime() - 3600 * 1000 * 24 * 90) + picker.$emit('pick', [start, end]) + } + }] + }, // 表单参数 form: {}, // 表单校验 @@ -206,8 +123,7 @@ export default { getList() { this.loading = true; listPage(this.queryParams).then(response => { - this.pageList = response.data.records; - this.total = response.data.total; + this.pageList = response.data; this.loading = false; }); }, @@ -232,6 +148,13 @@ export default { /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; + if (this.queryParams.dataRange && this.queryParams.dataRange.length > 1) { + this.queryParams.startDate = this.formatDate(this.queryParams.dataRange[0]) + this.queryParams.endDate = this.formatDate(this.queryParams.dataRange[1]) + }else{ + this.queryParams.startDate = null + this.queryParams.endDate = null + } this.getList(); }, /** 重置按钮操作 */ @@ -296,7 +219,18 @@ export default { this.download('busi/page/export', { ...this.queryParams }, `page_${new Date().getTime()}.xlsx`) - } + }, + /** + * 格式化时间戳 + */ + formatDate(timestamp) { + const date = new Date(timestamp) + const year = date.getFullYear() + // 月份是从0开始的,所以要加1 + const month = String(date.getMonth() + 1).padStart(2, '0') + const day = String(date.getDate()).padStart(2, '0') + return `${year}-${month}-${day}` + }, } }; diff --git a/dl_vue/src/views/statistics/inquiryItem/index.vue b/dl_vue/src/views/statistics/inquiryItem/index.vue index 7308795..353637e 100644 --- a/dl_vue/src/views/statistics/inquiryItem/index.vue +++ b/dl_vue/src/views/statistics/inquiryItem/index.vue @@ -287,7 +287,18 @@ export default { this.download('busi/inquiryItem/export', { ...this.queryParams }, `inquiryItem_${new Date().getTime()}.xlsx`) - } + }, + /** + * 格式化时间戳 + */ + formatDate(timestamp) { + const date = new Date(timestamp) + const year = date.getFullYear() + // 月份是从0开始的,所以要加1 + const month = String(date.getMonth() + 1).padStart(2, '0') + const day = String(date.getDate()).padStart(2, '0') + return `${year}-${month}-${day}` + }, } }; From c6280780a21ddab9eb41fc67efab29d59e34a9bc Mon Sep 17 00:00:00 2001 From: Vinjor Date: Mon, 11 Aug 2025 15:36:00 +0800 Subject: [PATCH 3/4] 1 --- .../controller/BaseManagerController.java | 118 ++++++++ .../base/controller/BaseSiteController.java | 3 +- .../com/ruoyi/base/domain/BaseManager.java | 39 +++ .../ruoyi/base/mapper/BaseManagerMapper.java | 25 ++ .../com/ruoyi/base/mapper/BaseSiteMapper.java | 3 +- .../base/service/IBaseManagerService.java | 29 ++ .../ruoyi/base/service/IBaseSiteService.java | 3 +- .../service/impl/BaseManagerServiceImpl.java | 46 +++ .../service/impl/BaseSiteServiceImpl.java | 4 +- .../java/com/ruoyi/base/vo/ManagerVO.java | 25 ++ .../main/java/com/ruoyi/base/vo/SiteVO.java | 14 + .../busi/controller/StatisticsController.java | 16 ++ .../mapper/base/BaseManagerMapper.xml | 46 +++ .../resources/mapper/base/BaseSiteMapper.xml | 26 +- dl_vue/src/api/base/manager.js | 44 +++ dl_vue/src/views/base/manager/index.vue | 263 ++++++++++++++++++ dl_vue/src/views/base/site/index.vue | 39 ++- .../src/views/system/user/selectAllUser.vue | 30 +- 18 files changed, 758 insertions(+), 15 deletions(-) create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseManagerController.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseManager.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseManagerMapper.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseManagerService.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseManagerServiceImpl.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/ManagerVO.java create mode 100644 dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/SiteVO.java create mode 100644 dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseManagerMapper.xml create mode 100644 dl_vue/src/api/base/manager.js create mode 100644 dl_vue/src/views/base/manager/index.vue diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseManagerController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseManagerController.java new file mode 100644 index 0000000..39eb5e7 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseManagerController.java @@ -0,0 +1,118 @@ +package com.ruoyi.base.controller; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.base.vo.ManagerVO; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.base.domain.BaseManager; +import com.ruoyi.base.service.IBaseManagerService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 站点分配Controller + * + * @author vinjor-m + * @date 2025-08-11 + */ +@RestController +@RequestMapping("/base/manager") +public class BaseManagerController extends BaseController +{ + @Autowired + private IBaseManagerService baseManagerService; + + /** + * 查询站点分配列表 + */ + @PreAuthorize("@ss.hasPermi('base:manager:list')") + @GetMapping("/list") + public AjaxResult list(ManagerVO baseManager, + @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) + { + Page page = new Page<>(pageNum, pageSize); + IPage list = baseManagerService.queryListPage(baseManager,page); + return success(list); + } + + /** + * 导出站点分配列表 + */ + @PreAuthorize("@ss.hasPermi('base:manager:export')") + @Log(title = "站点分配", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BaseManager baseManager) + { + List list = baseManagerService.list(); + ExcelUtil util = new ExcelUtil(BaseManager.class); + util.exportExcel(response, list, "站点分配数据"); + } + + /** + * 获取站点分配详细信息 + */ + @PreAuthorize("@ss.hasPermi('base:manager:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") String id) + { + return success(baseManagerService.getById(id)); + } + + /** + * 新增站点分配 + */ + @PreAuthorize("@ss.hasPermi('base:manager:add')") + @Log(title = "站点分配", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ManagerVO baseManager) { + baseManager.setTenantId(baseManager.getSiteId()); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .eq(BaseManager::getTenantId,baseManager.getSiteId()); + baseManagerService.remove(lambdaQueryWrapper); + return toAjax(baseManagerService.save(baseManager)); + } + + /** + * 修改站点分配 + */ + @PreAuthorize("@ss.hasPermi('base:manager:edit')") + @Log(title = "站点分配", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BaseManager baseManager) + { + return toAjax(baseManagerService.updateById(baseManager)); + } + + /** + * 删除站点分配 + */ + @PreAuthorize("@ss.hasPermi('base:manager:remove')") + @Log(title = "站点分配", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) + { + List list = new ArrayList<>(Arrays.asList(ids)); + return toAjax(baseManagerService.removeByIds(list)); + } +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java index a06b7a4..d4c097d 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/controller/BaseSiteController.java @@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.base.vo.SiteVO; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -48,7 +49,7 @@ public class BaseSiteController extends BaseController { @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Page page = new Page<>(pageNum, pageSize); - IPage list = baseSiteService.queryListPage(baseSite, page); + IPage list = baseSiteService.queryListPage(baseSite, page); return success(list); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseManager.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseManager.java new file mode 100644 index 0000000..9c764fc --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/domain/BaseManager.java @@ -0,0 +1,39 @@ +package com.ruoyi.base.domain; + +import com.ruoyi.common.annotation.Excel; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; +import com.ruoyi.common.core.domain.DlBaseEntity; + +/** + * 站点分配对象 dl_base_manager + * + * @author vinjor-m + * @date 2025-08-11 + */ +@TableName("dl_base_manager") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BaseManager extends DlBaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + @TableId(type = IdType.ASSIGN_UUID) + private String id; + + /** 用户id */ + @Excel(name = "用户id") + private Long userId; + + /** 站点唯一编码 */ + @Excel(name = "站点唯一编码") + private String tenantId; + +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseManagerMapper.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseManagerMapper.java new file mode 100644 index 0000000..3108f7b --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseManagerMapper.java @@ -0,0 +1,25 @@ +package com.ruoyi.base.mapper; + +import java.util.List; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.base.domain.BaseManager; +import com.ruoyi.base.vo.ManagerVO; +import com.ruoyi.common.core.domain.entity.SysUser; +import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 站点分配Mapper接口 + * + * @author vinjor-m + * @date 2025-08-11 + */ +@Mapper +public interface BaseManagerMapper extends BaseMapper +{ + IPage queryListPage(@Param("entity") ManagerVO entity, Page page); + + List selectManagerUserByTenantId(@Param("tenantId")String tenantId); +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseSiteMapper.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseSiteMapper.java index 38b351c..ec68933 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseSiteMapper.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/mapper/BaseSiteMapper.java @@ -4,6 +4,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.base.domain.BaseSite; +import com.ruoyi.base.vo.SiteVO; import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @@ -17,5 +18,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface BaseSiteMapper extends BaseMapper { - IPage queryListPage(@Param("entity") BaseSite entity, Page page); + IPage queryListPage(@Param("entity") BaseSite entity, Page page); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseManagerService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseManagerService.java new file mode 100644 index 0000000..acec129 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseManagerService.java @@ -0,0 +1,29 @@ +package com.ruoyi.base.service; + +import java.util.List; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.base.domain.BaseManager; +import com.ruoyi.base.vo.ManagerVO; +import com.ruoyi.common.core.domain.entity.SysUser; + +/** + * 站点分配Service接口 + * + * @author vinjor-m + * @date 2025-08-11 + */ +public interface IBaseManagerService extends IService +{ + IPage queryListPage(ManagerVO pageReqVO, Page page); + + /** + * 根据站点编码查负责的用户 + * @author vinjor-M + * @date 15:33 2025/8/11 + * @param tenantId TODO + * @return java.util.List + **/ + List getManagerUserByTenantId(String tenantId); +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseSiteService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseSiteService.java index 473ea77..d662731 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseSiteService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/IBaseSiteService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.base.domain.BaseSite; +import com.ruoyi.base.vo.SiteVO; /** * 站点管理Service接口 @@ -14,5 +15,5 @@ import com.ruoyi.base.domain.BaseSite; */ public interface IBaseSiteService extends IService { - IPage queryListPage(BaseSite pageReqVO, Page page); + IPage queryListPage(BaseSite pageReqVO, Page page); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseManagerServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseManagerServiceImpl.java new file mode 100644 index 0000000..f7cb308 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseManagerServiceImpl.java @@ -0,0 +1,46 @@ +package com.ruoyi.base.service.impl; + +import java.util.List; + +import com.ruoyi.base.vo.ManagerVO; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.DateUtils; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.base.mapper.BaseManagerMapper; +import com.ruoyi.base.domain.BaseManager; +import com.ruoyi.base.service.IBaseManagerService; + +/** + * 站点分配Service业务层处理 + * + * @author vinjor-m + * @date 2025-08-11 + */ +@Service +public class BaseManagerServiceImpl extends ServiceImpl implements IBaseManagerService +{ + @Autowired + private BaseManagerMapper baseManagerMapper; + + @Override + public IPage queryListPage(ManagerVO pageReqVO, Page page) { + return baseManagerMapper.queryListPage(pageReqVO, page); + } + + /** + * 根据站点编码查负责的用户 + * + * @param tenantId TODO + * @return java.util.List + * @author vinjor-M + * @date 15:33 2025/8/11 + **/ + @Override + public List getManagerUserByTenantId(String tenantId) { + return null; + } +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseSiteServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseSiteServiceImpl.java index a77ea7e..755d2e4 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseSiteServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/service/impl/BaseSiteServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.base.service.impl; import java.util.List; + +import com.ruoyi.base.vo.SiteVO; import com.ruoyi.common.utils.DateUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -24,7 +26,7 @@ public class BaseSiteServiceImpl extends ServiceImpl i private BaseSiteMapper baseSiteMapper; @Override - public IPage queryListPage(BaseSite pageReqVO, Page page) { + public IPage queryListPage(BaseSite pageReqVO, Page page) { return baseSiteMapper.queryListPage(pageReqVO, page); } } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/ManagerVO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/ManagerVO.java new file mode 100644 index 0000000..cdaf9c4 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/ManagerVO.java @@ -0,0 +1,25 @@ +package com.ruoyi.base.vo; + +import com.ruoyi.base.domain.BaseManager; +import com.ruoyi.base.domain.BasePics; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ManagerVO extends BaseManager { + /** + * 站点名称 + **/ + private String siteName; + /** + * 用户名称 + **/ + private String userName; + /** + * 站点名称 + **/ + private String siteId; +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/SiteVO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/SiteVO.java new file mode 100644 index 0000000..b8b4ad5 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/base/vo/SiteVO.java @@ -0,0 +1,14 @@ +package com.ruoyi.base.vo; + +import com.ruoyi.base.domain.BaseSite; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SiteVO extends BaseSite { + /** + * 站点管理人姓名 + **/ + private String managerUser; +} diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/StatisticsController.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/StatisticsController.java index 3a0bcd1..8840514 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/StatisticsController.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/controller/StatisticsController.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.busi.domain.BusiThirdItem; import com.ruoyi.busi.service.IBusiProdNewService; import com.ruoyi.busi.service.IBusiThirdItemService; +import com.ruoyi.busi.vo.ChartDataVO; import com.ruoyi.busi.vo.ThirdVO; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; @@ -66,4 +67,19 @@ public class StatisticsController extends BaseController public AjaxResult countryChart(String tenantId,String startDate,String endDate){ return success(busiThirdItemService.nationalData(tenantId,startDate,endDate,null)); } + + /** + * 询盘国家列表--分页表格 + */ + @GetMapping("/inquiryCountryList") + public AjaxResult inquiryCountryList(@RequestParam(name = "tenantId", defaultValue = "1") String tenantId, + @RequestParam(name = "startDate", defaultValue = "1") String startDate, + @RequestParam(name = "endDate", defaultValue = "1") String endDate, + @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize){ + List list = busiThirdItemService.nationalData(tenantId,startDate,endDate,null); + int startIndex = (pageNum-1)*pageSize; + int endIndex = Math.min(startIndex+pageSize,list.size()); + return success(list.subList(startIndex,endIndex)); + } } diff --git a/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseManagerMapper.xml b/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseManagerMapper.xml new file mode 100644 index 0000000..393f049 --- /dev/null +++ b/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseManagerMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + select id, user_id, tenant_id, creator, create_time, updater, update_time, del_flag from dl_base_manager + + + + + \ No newline at end of file diff --git a/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseSiteMapper.xml b/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseSiteMapper.xml index 8f3725d..879d446 100644 --- a/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseSiteMapper.xml +++ b/dl_admin/ruoyi-admin/src/main/resources/mapper/base/BaseSiteMapper.xml @@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -14,6 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -21,12 +22,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" \ No newline at end of file diff --git a/dl_vue/src/api/base/manager.js b/dl_vue/src/api/base/manager.js new file mode 100644 index 0000000..e4ec671 --- /dev/null +++ b/dl_vue/src/api/base/manager.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询站点分配列表 +export function listManager(query) { + return request({ + url: '/base/manager/list', + method: 'get', + params: query + }) +} + +// 查询站点分配详细 +export function getManager(id) { + return request({ + url: '/base/manager/' + id, + method: 'get' + }) +} + +// 新增站点分配 +export function addManager(data) { + return request({ + url: '/base/manager', + method: 'post', + data: data + }) +} + +// 修改站点分配 +export function updateManager(data) { + return request({ + url: '/base/manager', + method: 'put', + data: data + }) +} + +// 删除站点分配 +export function delManager(id) { + return request({ + url: '/base/manager/' + id, + method: 'delete' + }) +} diff --git a/dl_vue/src/views/base/manager/index.vue b/dl_vue/src/views/base/manager/index.vue new file mode 100644 index 0000000..c59f7e9 --- /dev/null +++ b/dl_vue/src/views/base/manager/index.vue @@ -0,0 +1,263 @@ + + + diff --git a/dl_vue/src/views/base/site/index.vue b/dl_vue/src/views/base/site/index.vue index 90acdc4..5cf9a0d 100644 --- a/dl_vue/src/views/base/site/index.vue +++ b/dl_vue/src/views/base/site/index.vue @@ -74,6 +74,7 @@ + diff --git a/dl_vue/src/views/base/info/index.vue b/dl_vue/src/views/base/info/index.vue index 9dc6a82..57fe810 100644 --- a/dl_vue/src/views/base/info/index.vue +++ b/dl_vue/src/views/base/info/index.vue @@ -89,15 +89,20 @@ - - + + - - - + + + + + + + + @@ -130,6 +135,7 @@ export default { qrCode: null, contactUs: null, companyInfo: null, + companyInfoApp: null, tenantId: null, creator: null, createTime: null, diff --git a/dl_vue/src/views/busi/category/form/categoryForm.vue b/dl_vue/src/views/busi/category/form/categoryForm.vue index 6b26dbc..1aad18f 100644 --- a/dl_vue/src/views/busi/category/form/categoryForm.vue +++ b/dl_vue/src/views/busi/category/form/categoryForm.vue @@ -61,19 +61,36 @@ - + + + + + + + + + + + + + - + + + + + + @@ -107,8 +124,11 @@ export default { keyword:"", description:"", prodUp:"", + prodUpApp:"", prodDown:"", - content:"" + prodDownApp:"", + content:"", + contentApp:"", }, id:null, //列表页入参 @@ -176,8 +196,11 @@ export default { keyword:"", description:"", prodUp:"", + prodUpApp:"", prodDown:"", - content:"" + prodDownApp:"", + content:"", + contentApp:"", } }