pom.xml
@@ -43,6 +43,7 @@ <spring-security.version>5.7.12</spring-security.version> <spring-framework.version>5.3.39</spring-framework.version> <mybatis-plus.version>3.5.3.1</mybatis-plus.version> <getui-sdk.version>1.0.7.0</getui-sdk.version> </properties> <dependencies> @@ -53,6 +54,13 @@ <version>3.0.3</version> </dependency> <dependency> <groupId>com.getui.push</groupId> <artifactId>restful-sdk</artifactId> <version>${getui-sdk.version}</version> <scope>compile</scope> </dependency> <!-- SpringBoot æ ¸å¿å --> <dependency> <groupId>org.springframework.boot</groupId> src/main/java/com/ruoyi/project/system/controller/SysUserClientController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package com.ruoyi.project.system.controller; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.project.system.domain.SysUserClient; import com.ruoyi.project.system.service.SysUserClientService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * ç¨æ·å®å设å¤ç®¡çæ§å¶å± * * @author deslrey * @version 1.0 * @since 2026/2/9 */ @Api(tags = "ç¨æ·è®¾å¤ç»å®") @RestController @RequestMapping("/system/client") public class SysUserClientController extends BaseController { @Autowired private SysUserClientService sysUserClientService; /** * æ·»å /æ´æ°ç¨æ·cid */ @PostMapping("/addOrUpdateClientId") @ApiOperation("æ·»å /æ´æ°ç¨æ·cid") public AjaxResult addOrUpdateClientId(@RequestBody SysUserClient sysUserClient) { Long userId = SecurityUtils.getUserId(); sysUserClient.setUserId(userId); boolean result = sysUserClientService.addOrUpdateClientId(sysUserClient); return result ? success() : error("设å¤ç»å®å¤±è´¥"); } } src/main/java/com/ruoyi/project/system/domain/GetuiConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.ruoyi.project.system.domain; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * <p> * ä¸ªæ¨ (Unipush v2) æ¶æ¯æ¨éé 置类 * </p> * * @author deslrey * @version 1.0 * @since 2026/2/9 */ @Data @Component @ConfigurationProperties(prefix = "ruoyi.getui") public class GetuiConfig { /** * AppID */ private String appId; /** * AppKey */ private String appKey; /** * MasterSecret */ private String masterSecret; /** * ä¸ªæ¨ RESTful API ååå°å */ private String domain; /** * 离线æ¨é Intent ç®æ ç»ä»¶å * æ ¼å¼: å å/å ¥å£Activityå */ private String intentComponent; } src/main/java/com/ruoyi/project/system/domain/SysMenu.java
@@ -18,6 +18,16 @@ { private static final long serialVersionUID = 1L; private String appComponent; public String getAppComponent() { return appComponent; } public void setAppComponent(String appComponent) { this.appComponent = appComponent; } /** èåID */ private Long menuId; src/main/java/com/ruoyi/project/system/domain/SysNotice.java
@@ -2,21 +2,30 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.xss.Xss; import com.ruoyi.framework.web.domain.BaseEntity; import java.time.LocalDateTime; /** * éç¥å ¬å表 sys_notice * * @author ruoyi */ public class SysNotice extends BaseEntity @Data @TableName("sys_notice") public class SysNotice { private static final long serialVersionUID = 1L; /** å ¬åID */ @TableId(value = "notice_id", type = IdType.AUTO) private Long noticeId; /** å ¬åæ é¢ */ @@ -31,72 +40,43 @@ /** å ¬åç¶æï¼0æ£å¸¸ 1å ³éï¼ */ private String status; public Long getNoticeId() { return noticeId; } /** åé人id */ private Long senderId; public void setNoticeId(Long noticeId) { this.noticeId = noticeId; } /** æ¶ä»¶äººid */ private Long consigneeId; public void setNoticeTitle(String noticeTitle) { this.noticeTitle = noticeTitle; } /** è·³è½¬è·¯å¾ */ private String jumpPath; @Xss(message = "å ¬åæ é¢ä¸è½å å«èæ¬å符") @NotBlank(message = "å ¬åæ é¢ä¸è½ä¸ºç©º") @Size(min = 0, max = 50, message = "å ¬åæ é¢ä¸è½è¶ è¿50个å符") public String getNoticeTitle() { return noticeTitle; } /** APPè·³è½¬è·¯å¾ */ private String appJumpPath; public void setNoticeType(String noticeType) { this.noticeType = noticeType; } /** å建è */ @TableField(fill = FieldFill.INSERT) private String createBy; public String getNoticeType() { return noticeType; } /** å建æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; public void setNoticeContent(String noticeContent) { this.noticeContent = noticeContent; } /** æ´æ°è */ @TableField(fill = FieldFill.INSERT_UPDATE) private String updateBy; public String getNoticeContent() { return noticeContent; } /** æ´æ°æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; public void setStatus(String status) { this.status = status; } /** 夿³¨ */ private String remark; public String getStatus() { return status; } /** * ç§æ·id */ private Long tenantId; @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("noticeId", getNoticeId()) .append("noticeTitle", getNoticeTitle()) .append("noticeType", getNoticeType()) .append("noticeContent", getNoticeContent()) .append("status", getStatus()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) .append("updateTime", getUpdateTime()) .append("remark", getRemark()) .toString(); } } src/main/java/com/ruoyi/project/system/domain/SysUser.java
@@ -23,6 +23,17 @@ { private static final long serialVersionUID = 1L; public String getPostCode() { return postCode; } public void setPostCode(String postCode) { this.postCode = postCode; } @TableField(exist = false) private String postCode; /** ç¨æ·ID */ @Excel(name = "ç¨æ·åºå·", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "ç¨æ·ç¼å·") private Long userId; src/main/java/com/ruoyi/project/system/domain/SysUserClient.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,47 @@ package com.ruoyi.project.system.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.Date; /** * <br> * ç¨æ·å®å设å¤å ³è对象 sys_user_client * </br> * * @author deslrey * @version 1.0 * @since 2026/2/9 */ @Data @NoArgsConstructor @AllArgsConstructor @TableName("sys_user_client") public class SysUserClient implements Serializable { private static final long serialVersionUID = 1L; /** * ç¨æ·ID */ @TableId(type = IdType.INPUT) private Long userId; /** * 个æ¨è®¾å¤æ è¯ (CID) */ private String cid; /** * æåæ´»è·æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; } src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java
@@ -122,4 +122,11 @@ * @return ç»æ */ public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId); /** * æ ¹æ®è·¯ç±å°åæ¥è¯¢èå * * @param lastSegment è·¯ç±å°å * @return èå */ SysMenu selectMenuByPath(String lastSegment); } src/main/java/com/ruoyi/project/system/mapper/SysUserClientMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.project.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.project.system.domain.SysUserClient; /** * <br> * ç¨æ·å®å设å¤å ³èmapper * </br> * * @author deslrey * @version 1.0 * @since 2026/2/9 */ public interface SysUserClientMapper extends BaseMapper<SysUserClient> { } src/main/java/com/ruoyi/project/system/service/SysUserClientService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.project.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.project.system.domain.SysUserClient; /** * <br> * ç¨æ·å®å设å¤å ³èæ¥å£ * </br> * * @author deslrey * @version 1.0 * @since 2026/2/9 */ public interface SysUserClientService extends IService<SysUserClient> { boolean addOrUpdateClientId(SysUserClient sysUserClient); } src/main/java/com/ruoyi/project/system/service/impl/SysUserClientServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.ruoyi.project.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.system.domain.SysUserClient; import com.ruoyi.project.system.mapper.SysUserClientMapper; import com.ruoyi.project.system.service.SysUserClientService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; /** * ç¨æ·å®å设å¤å ³èæ¥å£å®ç°ç±» * * @author deslrey * @version 1.0 * @since 2026/2/9 */ @Service public class SysUserClientServiceImpl extends ServiceImpl<SysUserClientMapper, SysUserClient> implements SysUserClientService { @Override @Transactional(rollbackFor = Exception.class) public boolean addOrUpdateClientId(SysUserClient sysUserClient) { if (sysUserClient == null || sysUserClient.getUserId() == null || StringUtils.isEmpty(sysUserClient.getCid())) { return false; } String cid = sysUserClient.getCid(); Long userId = sysUserClient.getUserId(); remove(new LambdaQueryWrapper<SysUserClient>().eq(SysUserClient::getCid, cid).ne(SysUserClient::getUserId, userId)); SysUserClient userClient = new SysUserClient(); userClient.setUserId(userId); userClient.setCid(cid); userClient.setUpdateTime(new Date()); return saveOrUpdate(userClient); } } src/main/java/com/ruoyi/project/system/service/impl/UnipushService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,208 @@ package com.ruoyi.project.system.service.impl; import com.alibaba.fastjson2.JSON; import com.getui.push.v2.sdk.ApiHelper; import com.getui.push.v2.sdk.GtApiConfiguration; import com.getui.push.v2.sdk.api.PushApi; import com.getui.push.v2.sdk.common.ApiResult; import com.getui.push.v2.sdk.dto.req.Audience; import com.getui.push.v2.sdk.dto.req.message.PushChannel; import com.getui.push.v2.sdk.dto.req.message.PushDTO; import com.getui.push.v2.sdk.dto.req.message.PushMessage; import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO; import com.getui.push.v2.sdk.dto.req.message.android.ThirdNotification; import com.getui.push.v2.sdk.dto.req.message.android.Ups; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.system.domain.GetuiConfig; import com.ruoyi.project.system.domain.SysMenu; import com.ruoyi.project.system.domain.SysNotice; import com.ruoyi.project.system.domain.SysUserClient; import com.ruoyi.project.system.mapper.SysMenuMapper; import com.ruoyi.project.system.service.SysUserClientService; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.List; import java.util.Map; /** * APPæ¶æ¯æ¨éæå¡ * * @author deslrey * @version 1.4 * @since 2026/2/9 */ @Slf4j @Component public class UnipushService { @Autowired private SysMenuMapper sysMenuMapper; @Autowired private GetuiConfig getuiConfig; @Autowired private SysUserClientService userClientService; private PushApi pushApi; private static final String DEFAULT_APP_PAGE = "pages/index"; @PostConstruct public void init() { GtApiConfiguration config = new GtApiConfiguration(); config.setAppId(getuiConfig.getAppId()); config.setAppKey(getuiConfig.getAppKey()); config.setMasterSecret(getuiConfig.getMasterSecret()); config.setDomain(getuiConfig.getDomain()); ApiHelper apiHelper = ApiHelper.build(config); this.pushApi = apiHelper.creatApi(PushApi.class); } /** * æ¹éåééç¥å ¬åå°ç§»å¨ç«¯ */ @Async public void sendClientMessage(List<SysNotice> sysNoticeList) { if (sysNoticeList == null || sysNoticeList.isEmpty()) { return; } for (SysNotice sysNotice : sysNoticeList) { SysUserClient client = userClientService.getById(sysNotice.getConsigneeId()); if (client == null || StringUtils.isEmpty(client.getCid())) { log.warn("ç¨æ· {} æªç»å®ç§»å¨ç«¯ CID,è·³è¿æ¨é", sysNotice.getConsigneeId()); continue; } // 转æ¢è·¯å¾ // String appPath = convertWebPathToAppPath(sysNotice.getJumpPath()); // æ¨é sendRoutingPush( sysNotice.getNoticeId(), client.getCid(), sysNotice.getNoticeTitle(), sysNotice.getRemark() != null ? sysNotice.getRemark() : sysNotice.getNoticeContent(), sysNotice.getAppJumpPath() ); } } /** * å° Web 端åå±å ¨è·¯å¾è½¬æ¢ä¸º App 端ç»ä»¶è·¯ç± */ public String convertWebPathToAppPath(String webPath) { if (StringUtils.isEmpty(webPath)) { return DEFAULT_APP_PAGE; } String pathOnly = webPath; String queryString = ""; if (webPath.contains("?")) { int index = webPath.indexOf("?"); pathOnly = webPath.substring(0, index); queryString = webPath.substring(index); } String lastSegment; int lastSlashIndex = pathOnly.lastIndexOf("/"); if (lastSlashIndex != -1) { lastSegment = pathOnly.substring(lastSlashIndex + 1); } else { lastSegment = pathOnly; } if (StringUtils.isEmpty(lastSegment)) { return DEFAULT_APP_PAGE; } SysMenu menu = sysMenuMapper.selectMenuByPath(lastSegment); if (menu != null && StringUtils.isNotEmpty(menu.getAppComponent())) { String appPath = menu.getAppComponent(); if (appPath.startsWith("/")) { appPath = appPath.substring(1); } // æ¼æ¥ Web 端åå§åæ°å¹¶è¿å return appPath + queryString; } return DEFAULT_APP_PAGE; } /** * åéåäººè·¯ç±æ¨é */ private void sendRoutingPush(Long noticeId, String cid, String title, String content, String targetPath) { log.info("å夿¨éæ¶æ¯:NoticeId={}, CID={}, Title={}, TargetPath={}", noticeId, cid, title, targetPath); PushDTO<Audience> pushDTO = new PushDTO<>(); pushDTO.setRequestId("REQ_" + System.currentTimeMillis()); // å¨çº¿éä¼ å 容 PushMessage pushMessage = new PushMessage(); Map<String, Object> pushMessageMap = new HashMap<>(); Map<String, Object> payloadMap = new HashMap<>(); pushMessageMap.put("title", title); pushMessageMap.put("content", content); payloadMap.put("url", targetPath); payloadMap.put("noticeId", noticeId); pushMessageMap.put("payload", JSON.toJSONString(payloadMap)); String transmissionContent = JSON.toJSONString(pushMessageMap); pushMessage.setTransmission(transmissionContent); pushDTO.setPushMessage(pushMessage); // æ¥æ¶äºº Audience audience = new Audience(); audience.addCid(cid); pushDTO.setAudience(audience); // 离线æ¨ééé // pushDTO.setPushChannel(getPushChannel(noticeId, title, content, targetPath)); try { ApiResult<Map<String, Map<String, String>>> result = pushApi.pushToSingleByCid(pushDTO); if (result.isSuccess()) { log.info("Unipush æ¨éæå: CID={}", cid); } else { log.error("Unipush æ¨é失败: CID={}, Code={}, Msg={}", cid, result.getCode(), result.getMsg()); } } catch (Exception e) { log.error("Unipush æ¨éå¼å¸¸: ", e); } } @NotNull private PushChannel getPushChannel(Long noticeId, String title, String content, String targetPath) { PushChannel pushChannel = new PushChannel(); AndroidDTO androidDTO = new AndroidDTO(); Ups ups = new Ups(); ThirdNotification thirdNotification = new ThirdNotification(); thirdNotification.setTitle(title); thirdNotification.setBody(content); thirdNotification.setClickType("intent"); String intent = "intent:#Intent;launchFlags=0x04000000;" + "component=" + getuiConfig.getIntentComponent() + ";" + "S.UP-OL-P9=true;" + "S.path=" + targetPath + ";" + "S.payload=" + targetPath + ";" + "end"; thirdNotification.setIntent(intent); ups.setNotification(thirdNotification); androidDTO.setUps(ups); pushChannel.setAndroid(androidDTO); return pushChannel; } } src/main/java/com/ruoyi/sales/controller/BusinessOpportunityController.java
@@ -3,10 +3,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.project.system.domain.SysNotice; import com.ruoyi.project.system.service.impl.UnipushService; import com.ruoyi.sales.mapper.BusinessDescriptionMapper; import com.ruoyi.sales.pojo.BusinessDescription; import com.ruoyi.sales.pojo.BusinessOpportunity; @@ -20,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; /** @@ -39,6 +43,9 @@ @Autowired private CommonFileServiceImpl commonFileService; @Autowired private UnipushService unipushService; @ApiOperation("è·åç级å表") @GetMapping("/getProvinceList") @@ -76,6 +83,17 @@ businessDescription.setBusinessOpportunityId(businessOpportunity.getId()); // è¿ç§»ä¸´æ¶æä»¶å°æ£å¼æä»¶ commonFileService.migrateTempFilesToFormal(businessOpportunity.getId(), businessOpportunity.getTempFileIds()); // æ¨éæ¶æ¯ List<SysNotice> sysNoticeList = new ArrayList<>(); SysNotice sysNotice = new SysNotice(); sysNotice.setNoticeTitle("ä¸å¡å "+ businessOpportunity.getEntryPerson()); sysNotice.setNoticeContent("æ°å¢å®¢æ· " + businessOpportunity.getCustomerName() + " éé¢ "+ businessOpportunity.getContractAmount()); sysNotice.setNoticeType("1"); sysNotice.setStatus("0"); sysNotice.setSenderId(SecurityUtils.getUserId()); sysNotice.setConsigneeId(SecurityUtils.getUserId()); sysNotice.setAppJumpPath("pages/opportunityManagement/index"); unipushService.sendClientMessage(sysNoticeList); return businessDescriptionMapper.insert(businessDescription) > 0 ? success() : error(); } @@ -90,6 +108,17 @@ if(byId != null){ byId.setStatus(businessDescription.getStatus()); businessOpportunityService.updateById(byId); // æ¨éæ¶æ¯ List<SysNotice> sysNoticeList = new ArrayList<>(); SysNotice sysNotice = new SysNotice(); sysNotice.setNoticeTitle("ä¸å¡å "+ businessDescription.getEntryPerson()); sysNotice.setNoticeContent("å®¢æ· " + byId.getCustomerName() + " éé¢ "+ byId.getContractAmount() + " ç¶æ " + businessDescription.getStatus()); sysNotice.setNoticeType("1"); sysNotice.setStatus("0"); sysNotice.setSenderId(SecurityUtils.getUserId()); sysNotice.setConsigneeId(SecurityUtils.getUserId()); sysNotice.setAppJumpPath("pages/opportunityManagement/index"); unipushService.sendClientMessage(sysNoticeList); } return businessDescriptionMapper.insert(businessDescription) > 0 ? success() : error(); } src/main/java/com/ruoyi/sales/pojo/BusinessDescription.java
@@ -7,6 +7,7 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; import java.util.List; src/main/java/com/ruoyi/sales/pojo/BusinessOpportunity.java
@@ -8,6 +8,7 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -71,6 +72,12 @@ @TableField(exist = false) private String description; @ApiModelProperty(value = "ååéé¢") private BigDecimal contractAmount; @ApiModelProperty(value = "仿¬¾æè¿°") private String paymentDescription; @ApiModelProperty(value = "åæºæ¥æº") private String businessSource; src/main/resources/application-dev.yml
@@ -14,6 +14,15 @@ # éªè¯ç ç±»å math æ°åè®¡ç® char å符éªè¯ captchaType: math # ä¸ªæ¨ Unipush é ç½® getui: appId: PfjyAAE0FK64FaO1w2CMb1 appKey: zTMb831OEL6J4GK1uE3Ob4 masterSecret: K1GFtsv42v61tXGnF7SGE5 domain: https://restapi.getui.cn/v2/ # 离线æ¨é使ç¨çå å/ç»ä»¶å intentComponent: uni.app.UNI099A590/io.dcloud.PandoraEntry # å¼åç¯å¢é ç½® server: # æå¡å¨çHTTP端å£ï¼é»è®¤ä¸º8080 src/main/resources/application-prod.yml
@@ -14,6 +14,15 @@ # éªè¯ç ç±»å math æ°åè®¡ç® char å符éªè¯ captchaType: math # ä¸ªæ¨ Unipush é ç½® getui: appId: PfjyAAE0FK64FaO1w2CMb1 appKey: zTMb831OEL6J4GK1uE3Ob4 masterSecret: K1GFtsv42v61tXGnF7SGE5 domain: https://restapi.getui.cn/v2/ # 离线æ¨é使ç¨çå å/ç»ä»¶å intentComponent: uni.app.UNI099A590/io.dcloud.PandoraEntry # å¼åç¯å¢é ç½® server: # æå¡å¨çHTTP端å£ï¼é»è®¤ä¸º8080 src/main/resources/mapper/system/SysMenuMapper.xml
@@ -12,6 +12,7 @@ <result property="orderNum" column="order_num" /> <result property="path" column="path" /> <result property="component" column="component" /> <result property="appComponent" column="app_component" /> <result property="query" column="query" /> <result property="routeName" column="route_name" /> <result property="isFrame" column="is_frame" /> @@ -132,6 +133,12 @@ <include refid="selectMenuVo"/> where menu_name=#{menuName} and parent_id = #{parentId} limit 1 </select> <select id="selectMenuByPath" resultType="com.ruoyi.project.system.domain.SysMenu" parameterType="java.lang.String"> SELECT menu_id, menu_name, parent_id, path, app_component, status FROM sys_menu WHERE path = #{path} AND status = '0' LIMIT 1 </select> <update id="updateMenu" parameterType="com.ruoyi.project.system.domain.SysMenu"> update sys_menu src/main/resources/mapper/system/SysUserMapper.xml
@@ -56,7 +56,24 @@ </sql> <select id="selectUserList" parameterType="com.ruoyi.project.system.domain.SysUser" resultMap="SysUserResult"> select u.user_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,T2.dept_names from sys_user u select u.user_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, T2.dept_names, GROUP_CONCAT(DISTINCT p.post_name SEPARATOR ', ') AS post_names from sys_user u left join ( SELECT T1.user_id,GROUP_CONCAT(T2.dept_name SEPARATOR ', ') AS dept_names FROM @@ -69,6 +86,8 @@ </where> GROUP BY T1.user_id ) T2 on T2.user_id = u.user_id LEFT JOIN sys_user_post up ON u.user_id = up.user_id LEFT JOIN sys_post p ON up.post_id = p.post_id where u.del_flag = '0' <if test="userId != null and userId != 0"> AND u.user_id = #{userId} @@ -91,11 +110,22 @@ <if test="params.deptId != null"> AND u.user_id IN ( SELECT user_id FROM sys_user_dept WHERE dept_id = #{deptId} SELECT user_id FROM sys_user_dept WHERE dept_id = #{params.deptId} ) </if> <!-- æ°å¢ï¼æ ¹æ®å²ä½ç¼ç çéç¨æ· --> <if test="postCode != null and postCode != ''"> AND u.user_id IN ( SELECT DISTINCT up.user_id FROM sys_user_post up LEFT JOIN sys_post p ON up.post_id = p.post_id WHERE p.post_code = #{postCode} ) </if> <!-- æ°æ®èå´è¿æ»¤ --> ${params.dataScope} GROUP BY u.user_id </select> <select id="selectAllocatedList" parameterType="com.ruoyi.project.system.domain.SysUser" resultMap="SysUserResult">