mp:menu 菜单的修改,移除多余的类

This commit is contained in:
YunaiV 2023-01-05 20:35:36 +08:00
parent 69e653cd94
commit 47f071560f
25 changed files with 334 additions and 665 deletions

View File

@ -2,7 +2,7 @@
"local": { "local": {
"baseUrl": "http://127.0.0.1:48080/admin-api", "baseUrl": "http://127.0.0.1:48080/admin-api",
"token": "test1", "token": "test1",
"appTenantId": "1", "adminTenentId": "1",
"appApi": "http://127.0.0.1:48080/app-api", "appApi": "http://127.0.0.1:48080/app-api",
"appToken": "test247", "appToken": "test247",

View File

@ -3,15 +3,15 @@ package cn.iocoder.yudao.module.mp.enums;
import cn.iocoder.yudao.framework.common.exception.ErrorCode; import cn.iocoder.yudao.framework.common.exception.ErrorCode;
/** /**
* Member 错误码枚举类 * Mp 错误码枚举类
* *
* wechatMp 系统使用 1-004-000-000 * mp 系统使用 1-006-000-000
*/ */
public interface ErrorCodeConstants { public interface ErrorCodeConstants {
// ========== 用户相关 1004001000============ // ========== 用户相关 1004001000============
ErrorCode WX_ACCOUNT_NOT_EXISTS = new ErrorCode(1004001000, "公众号账户不存在"); ErrorCode WX_ACCOUNT_NOT_EXISTS = new ErrorCode(1006001000, "公众号账户不存在");
ErrorCode WX_ACCOUNT_FANS_NOT_EXISTS = new ErrorCode(1004001001, "粉丝账号不存在"); ErrorCode WX_ACCOUNT_FANS_NOT_EXISTS = new ErrorCode(1006001001, "粉丝账号不存在");
ErrorCode COMMON_NOT_EXISTS = new ErrorCode(1004001002, "用户不存在"); ErrorCode COMMON_NOT_EXISTS = new ErrorCode(1006001002, "用户不存在");
} }

View File

@ -22,8 +22,8 @@ public class MpAccountBaseVO {
@NotNull(message = "公众号账户不能为空") @NotNull(message = "公众号账户不能为空")
private String account; private String account;
@ApiModelProperty(value = "公众号 appid", required = true) @ApiModelProperty(value = "公众号 appId", required = true, example = "wx5b23ba7a5589ecbb")
@NotNull(message = "公众号 appid 不能为空") @NotNull(message = "公众号 appId 不能为空")
private String appId; private String appId;
@ApiModelProperty(value = "公众号密钥", required = true) @ApiModelProperty(value = "公众号密钥", required = true)

View File

@ -88,16 +88,4 @@ public class WxAccountFansTagController {
return success(WxAccountFansTagConvert.INSTANCE.convertPage(pageResult)); return success(WxAccountFansTagConvert.INSTANCE.convertPage(pageResult));
} }
@GetMapping("/export-excel")
@ApiOperation("导出粉丝标签关联 Excel")
@PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans-tag:export')")
@OperateLog(type = EXPORT)
public void exportWxAccountFansTagExcel(@Valid WxAccountFansTagExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<WxAccountFansTagDO> list = wxAccountFansTagService.getWxAccountFansTagList(exportReqVO);
// 导出 Excel
List<WxAccountFansTagExcelVO> datas = WxAccountFansTagConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "粉丝标签关联.xls", "数据", WxAccountFansTagExcelVO.class, datas);
}
} }

View File

@ -0,0 +1,20 @@
### 请求 /login 接口 => 成功
POST {{baseUrl}}/mp/menu/save
Content-Type: application/json
Authorization: Bearer {{token}}
tenant-id: {{adminTenentId}}
{
"accountId": "1",
"buttons": [
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"name":"搜索",
"type":"view",
"url":"http://www.soso.com/"
}]
}

View File

@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu;
import cn.iocoder.yudao.module.mp.convert.menu.MpMenuConvert;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.MpMenuDO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.annotations.*;
import javax.validation.*;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.service.menu.MpMenuService;
@Api(tags = "管理后台 - 微信菜单")
@RestController
@RequestMapping("/mp/menu")
@Validated
public class MpMenuController {
@Resource
private MpMenuService mpMenuService;
@PostMapping("/save")
@ApiOperation("保存微信菜单")
@PreAuthorize("@ss.hasPermission('mp:menu:save')")
public CommonResult<Long> saveMenu(@Valid @RequestBody MpMenuSaveReqVO createReqVO) {
return success(mpMenuService.saveMenu(createReqVO));
}
@DeleteMapping("/delete")
@ApiOperation("删除微信菜单")
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
@PreAuthorize("@ss.hasPermission('mp:menu:delete')")
public CommonResult<Boolean> deleteMenu(@RequestParam("id") Long id) {
mpMenuService.deleteMenu(id);
return success(true);
}
@GetMapping("/get")
@ApiOperation("获得微信菜单")
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
@PreAuthorize("@ss.hasPermission('mp:menu:query')")
public CommonResult<MpMenuRespVO> getMenu(@RequestParam("id") Long id) {
MpMenuDO menu = mpMenuService.getMenu(id);
return success(MpMenuConvert.INSTANCE.convert(menu));
}
}

View File

@ -1,103 +0,0 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.annotations.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.WxMenuDO;
import cn.iocoder.yudao.module.mp.convert.menu.WxMenuConvert;
import cn.iocoder.yudao.module.mp.service.menu.WxMenuService;
@Api(tags = "管理后台 - 微信菜单")
@RestController
@RequestMapping("/wechatMp/wx-menu")
@Validated
public class WxMenuController {
@Resource
private WxMenuService wxMenuService;
@PostMapping("/create")
@ApiOperation("创建微信菜单")
@PreAuthorize("@ss.hasPermission('wechatMp:wx-menu:create')")
public CommonResult<Integer> createWxMenu(@Valid @RequestBody WxMenuCreateReqVO createReqVO) {
return success(wxMenuService.createWxMenu(createReqVO));
}
@PutMapping("/update")
@ApiOperation("更新微信菜单")
@PreAuthorize("@ss.hasPermission('wechatMp:wx-menu:update')")
public CommonResult<Boolean> updateWxMenu(@Valid @RequestBody WxMenuUpdateReqVO updateReqVO) {
wxMenuService.updateWxMenu(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@ApiOperation("删除微信菜单")
@ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Integer.class)
@PreAuthorize("@ss.hasPermission('wechatMp:wx-menu:delete')")
public CommonResult<Boolean> deleteWxMenu(@RequestParam("id") Integer id) {
wxMenuService.deleteWxMenu(id);
return success(true);
}
@GetMapping("/get")
@ApiOperation("获得微信菜单")
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Integer.class)
@PreAuthorize("@ss.hasPermission('wechatMp:wx-menu:query')")
public CommonResult<WxMenuRespVO> getWxMenu(@RequestParam("id") Integer id) {
WxMenuDO wxMenu = wxMenuService.getWxMenu(id);
return success(WxMenuConvert.INSTANCE.convert(wxMenu));
}
@GetMapping("/list")
@ApiOperation("获得微信菜单列表")
@ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class)
@PreAuthorize("@ss.hasPermission('wechatMp:wx-menu:query')")
public CommonResult<List<WxMenuRespVO>> getWxMenuList(@RequestParam("ids") Collection<Integer> ids) {
List<WxMenuDO> list = wxMenuService.getWxMenuList(ids);
return success(WxMenuConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@ApiOperation("获得微信菜单分页")
@PreAuthorize("@ss.hasPermission('wechatMp:wx-menu:query')")
public CommonResult<PageResult<WxMenuRespVO>> getWxMenuPage(@Valid WxMenuPageReqVO pageVO) {
PageResult<WxMenuDO> pageResult = wxMenuService.getWxMenuPage(pageVO);
return success(WxMenuConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@ApiOperation("导出微信菜单 Excel")
@PreAuthorize("@ss.hasPermission('wechatMp:wx-menu:export')")
@OperateLog(type = EXPORT)
public void exportWxMenuExcel(@Valid WxMenuExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<WxMenuDO> list = wxMenuService.getWxMenuList(exportReqVO);
// 导出 Excel
List<WxMenuExcelVO> datas = WxMenuConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "微信菜单.xls", "数据", WxMenuExcelVO.class, datas);
}
}

View File

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import me.chanjar.weixin.common.bean.menu.WxMenuButton;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 微信菜单 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data
public class MpMenuBaseVO {
@ApiModelProperty(value = "公众号账号的编号", required = true, example = "2048")
@NotNull(message = "公众号账号的编号不能为空")
private Long accountId;
@NotNull(message = "按钮不能为空")
private List<WxMenuButton> buttons;
}

View File

@ -10,10 +10,10 @@ import io.swagger.annotations.*;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true) @ToString(callSuper = true)
public class WxMenuRespVO extends WxMenuBaseVO { public class MpMenuRespVO extends MpMenuBaseVO {
@ApiModelProperty(value = "主键", required = true) @ApiModelProperty(value = "主键", required = true)
private Integer id; private Long id;
@ApiModelProperty(value = "创建时间", required = true) @ApiModelProperty(value = "创建时间", required = true)
private Date createTime; private Date createTime;

View File

@ -3,10 +3,10 @@ package cn.iocoder.yudao.module.mp.controller.admin.menu.vo;
import lombok.*; import lombok.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
@ApiModel("管理后台 - 微信菜单创建 Request VO") @ApiModel("管理后台 - 微信菜单保存 Request VO")
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true) @ToString(callSuper = true)
public class WxMenuCreateReqVO extends WxMenuBaseVO { public class MpMenuSaveReqVO extends MpMenuBaseVO {
} }

View File

@ -1,43 +0,0 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu.vo;
import lombok.*;
import io.swagger.annotations.*;
/**
* 微信菜单 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data
public class WxMenuBaseVO {
@ApiModelProperty(value = "父ID")
private String parentId;
@ApiModelProperty(value = "菜单名称")
private String menuName;
@ApiModelProperty(value = "菜单类型 1文本消息2图文消息3网址链接4小程序")
private String menuType;
@ApiModelProperty(value = "菜单等级")
private String menuLevel;
@ApiModelProperty(value = "模板ID")
private String tplId;
@ApiModelProperty(value = "菜单URL")
private String menuUrl;
@ApiModelProperty(value = "排序")
private String menuSort;
@ApiModelProperty(value = "微信账号ID")
private String wxAccountId;
@ApiModelProperty(value = "小程序appid")
private String miniprogramAppid;
@ApiModelProperty(value = "小程序页面路径")
private String miniprogramPagepath;
}

View File

@ -1,53 +0,0 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu.vo;
import lombok.*;
import java.util.*;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* 微信菜单 Excel VO
*
* @author 芋道源码
*/
@Data
public class WxMenuExcelVO {
@ExcelProperty("主键")
private Integer id;
@ExcelProperty("父ID")
private String parentId;
@ExcelProperty("菜单名称")
private String menuName;
@ExcelProperty("菜单类型 1文本消息2图文消息3网址链接4小程序")
private String menuType;
@ExcelProperty("菜单等级")
private String menuLevel;
@ExcelProperty("模板ID")
private String tplId;
@ExcelProperty("菜单URL")
private String menuUrl;
@ExcelProperty("排序")
private String menuSort;
@ExcelProperty("微信账号ID")
private String wxAccountId;
@ExcelProperty("小程序appid")
private String miniprogramAppid;
@ExcelProperty("小程序页面路径")
private String miniprogramPagepath;
@ExcelProperty("创建时间")
private Date createTime;
}

View File

@ -1,54 +0,0 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu.vo;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel(value = "管理后台 - 微信菜单 Excel 导出 Request VO", description = "参数和 WxMenuPageReqVO 是一致的")
@Data
public class WxMenuExportReqVO {
@ApiModelProperty(value = "父ID")
private String parentId;
@ApiModelProperty(value = "菜单名称")
private String menuName;
@ApiModelProperty(value = "菜单类型 1文本消息2图文消息3网址链接4小程序")
private String menuType;
@ApiModelProperty(value = "菜单等级")
private String menuLevel;
@ApiModelProperty(value = "模板ID")
private String tplId;
@ApiModelProperty(value = "菜单URL")
private String menuUrl;
@ApiModelProperty(value = "排序")
private String menuSort;
@ApiModelProperty(value = "微信账号ID")
private String wxAccountId;
@ApiModelProperty(value = "小程序appid")
private String miniprogramAppid;
@ApiModelProperty(value = "小程序页面路径")
private String miniprogramPagepath;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "开始创建时间")
private Date beginCreateTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "结束创建时间")
private Date endCreateTime;
}

View File

@ -1,57 +0,0 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu.vo;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("管理后台 - 微信菜单分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class WxMenuPageReqVO extends PageParam {
@ApiModelProperty(value = "父ID")
private String parentId;
@ApiModelProperty(value = "菜单名称")
private String menuName;
@ApiModelProperty(value = "菜单类型 1文本消息2图文消息3网址链接4小程序")
private String menuType;
@ApiModelProperty(value = "菜单等级")
private String menuLevel;
@ApiModelProperty(value = "模板ID")
private String tplId;
@ApiModelProperty(value = "菜单URL")
private String menuUrl;
@ApiModelProperty(value = "排序")
private String menuSort;
@ApiModelProperty(value = "微信账号ID")
private String wxAccountId;
@ApiModelProperty(value = "小程序appid")
private String miniprogramAppid;
@ApiModelProperty(value = "小程序页面路径")
private String miniprogramPagepath;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "开始创建时间")
private Date beginCreateTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "结束创建时间")
private Date endCreateTime;
}

View File

@ -1,18 +0,0 @@
package cn.iocoder.yudao.module.mp.controller.admin.menu.vo;
import lombok.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
@ApiModel("管理后台 - 微信菜单更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class WxMenuUpdateReqVO extends WxMenuBaseVO {
@ApiModelProperty(value = "主键", required = true)
@NotNull(message = "主键不能为空")
private Integer id;
}

View File

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.mp.convert.menu;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.MpMenuDO;
@Mapper
public interface MpMenuConvert {
MpMenuConvert INSTANCE = Mappers.getMapper(MpMenuConvert.class);
MpMenuDO convert(MpMenuSaveReqVO bean);
MpMenuRespVO convert(MpMenuDO bean);
}

View File

@ -1,34 +0,0 @@
package cn.iocoder.yudao.module.mp.convert.menu;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.WxMenuDO;
/**
* 微信菜单 Convert
*
* @author 芋道源码
*/
@Mapper
public interface WxMenuConvert {
WxMenuConvert INSTANCE = Mappers.getMapper(WxMenuConvert.class);
WxMenuDO convert(WxMenuCreateReqVO bean);
WxMenuDO convert(WxMenuUpdateReqVO bean);
WxMenuRespVO convert(WxMenuDO bean);
List<WxMenuRespVO> convertList(List<WxMenuDO> list);
PageResult<WxMenuRespVO> convertPage(PageResult<WxMenuDO> page);
List<WxMenuExcelVO> convertList02(List<WxMenuDO> list);
}

View File

@ -0,0 +1,75 @@
package cn.iocoder.yudao.module.mp.dal.dataobject.menu;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import me.chanjar.weixin.common.bean.menu.WxMenu;
import me.chanjar.weixin.common.bean.menu.WxMenuButton;
import java.util.List;
/**
* 微信菜单 DO
*
* 一个公众号只有一个 MpMenuDO 记录一个公众号的多个菜单对应到就是 {@link #buttons} 多个按钮
*
* @author 芋道源码
*/
@TableName(value = "mp_menu", autoResultMap = true)
@KeySequence("mp_menu_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MpMenuDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 微信公众号 ID
*
* 关联 {@link MpAccountDO#getId()}
*/
private Long accountId;
/**
* 微信公众号 appid
*
* 冗余 {@link MpAccountDO#getAppId()}
*/
private String appId;
/**
* 按钮列表
*/
@TableField(typeHandler = WxMenuButtonTypeHandler.class)
private List<WxMenuButton> buttons;
/**
* 同步状态
*
* true - 已同步
* false - 未同步
*/
private Boolean syncStatus;
// TODO @芋艿可以找一些新的思路
public static class WxMenuButtonTypeHandler extends AbstractJsonTypeHandler<List<WxMenuButton>> {
@Override
protected List<WxMenuButton> parse(String json) {
return JsonUtils.parseArray(json, WxMenuButton.class);
}
@Override
protected String toJson(List<WxMenuButton> obj) {
return JsonUtils.toJsonString(obj);
}
}
}

View File

@ -1,71 +0,0 @@
package cn.iocoder.yudao.module.mp.dal.dataobject.menu;
import lombok.*;
import java.util.*;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 微信菜单 DO
*
* @author 芋道源码
*/
@TableName("wx_menu")
@KeySequence("wx_menu_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WxMenuDO extends BaseDO {
/**
* 主键
*/
@TableId
private Integer id;
/**
* 父ID
*/
private String parentId;
/**
* 菜单名称
*/
private String menuName;
/**
* 菜单类型 1文本消息2图文消息3网址链接4小程序
*/
private String menuType;
/**
* 菜单等级
*/
private String menuLevel;
/**
* 模板ID
*/
private String tplId;
/**
* 菜单URL
*/
private String menuUrl;
/**
* 排序
*/
private String menuSort;
/**
* 微信账号ID
*/
private String wxAccountId;
/**
* 小程序appid
*/
private String miniprogramAppid;
/**
* 小程序页面路径
*/
private String miniprogramPagepath;
}

View File

@ -0,0 +1,10 @@
package cn.iocoder.yudao.module.mp.dal.mysql.menu;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.MpMenuDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MpMenuMapper extends BaseMapperX<MpMenuDO> {
}

View File

@ -1,52 +0,0 @@
package cn.iocoder.yudao.module.mp.dal.mysql.menu;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.WxMenuDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
/**
* 微信菜单 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface WxMenuMapper extends BaseMapperX<WxMenuDO> {
default PageResult<WxMenuDO> selectPage(WxMenuPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<WxMenuDO>()
.eqIfPresent(WxMenuDO::getParentId, reqVO.getParentId())
.likeIfPresent(WxMenuDO::getMenuName, reqVO.getMenuName())
.eqIfPresent(WxMenuDO::getMenuType, reqVO.getMenuType())
.eqIfPresent(WxMenuDO::getMenuLevel, reqVO.getMenuLevel())
.eqIfPresent(WxMenuDO::getTplId, reqVO.getTplId())
.eqIfPresent(WxMenuDO::getMenuUrl, reqVO.getMenuUrl())
.eqIfPresent(WxMenuDO::getMenuSort, reqVO.getMenuSort())
.eqIfPresent(WxMenuDO::getWxAccountId, reqVO.getWxAccountId())
.eqIfPresent(WxMenuDO::getMiniprogramAppid, reqVO.getMiniprogramAppid())
.eqIfPresent(WxMenuDO::getMiniprogramPagepath, reqVO.getMiniprogramPagepath())
.betweenIfPresent(WxMenuDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
.orderByDesc(WxMenuDO::getId));
}
default List<WxMenuDO> selectList(WxMenuExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<WxMenuDO>()
.eqIfPresent(WxMenuDO::getParentId, reqVO.getParentId())
.likeIfPresent(WxMenuDO::getMenuName, reqVO.getMenuName())
.eqIfPresent(WxMenuDO::getMenuType, reqVO.getMenuType())
.eqIfPresent(WxMenuDO::getMenuLevel, reqVO.getMenuLevel())
.eqIfPresent(WxMenuDO::getTplId, reqVO.getTplId())
.eqIfPresent(WxMenuDO::getMenuUrl, reqVO.getMenuUrl())
.eqIfPresent(WxMenuDO::getMenuSort, reqVO.getMenuSort())
.eqIfPresent(WxMenuDO::getWxAccountId, reqVO.getWxAccountId())
.eqIfPresent(WxMenuDO::getMiniprogramAppid, reqVO.getMiniprogramAppid())
.eqIfPresent(WxMenuDO::getMiniprogramPagepath, reqVO.getMiniprogramPagepath())
.betweenIfPresent(WxMenuDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
.orderByDesc(WxMenuDO::getId));
}
}

View File

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.mp.service.menu;
import javax.validation.*;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.MpMenuDO;
/**
* 微信菜单 Service 接口
*
* @author 芋道源码
*/
public interface MpMenuService {
/**
* 保存微信菜单
*
* @param createReqVO 创建信息
* @return 编号
*/
Long saveMenu(@Valid MpMenuSaveReqVO createReqVO);
/**
* 删除微信菜单
*
* @param id 编号
*/
void deleteMenu(Long id);
/**
* 获得微信菜单
*
* @param id 编号
* @return 微信菜单
*/
MpMenuDO getMenu(Long id);
}

View File

@ -0,0 +1,80 @@
package cn.iocoder.yudao.module.mp.service.menu;
import cn.iocoder.yudao.module.mp.convert.menu.MpMenuConvert;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.MpMenuDO;
import cn.iocoder.yudao.module.mp.framework.mp.core.MpServiceFactory;
import me.chanjar.weixin.common.bean.menu.WxMenu;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.dal.mysql.menu.MpMenuMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mp.enums.ErrorCodeConstants.*;
/**
* 微信菜单 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class MpMenuServiceImpl implements MpMenuService {
@Resource
@Lazy // 延迟加载避免循环引用报错
private MpServiceFactory mpServiceFactory;
@Resource
private MpMenuMapper mpMenuMapper;
@Override
public Long saveMenu(MpMenuSaveReqVO createReqVO) {
String appId = "wx5b23ba7a5589ecbb";
// 插入
MpMenuDO menu = MpMenuConvert.INSTANCE.convert(createReqVO);
// mpMenuMapper.insert(menu);
// TODO 同步菜单
WxMpService mpService = mpServiceFactory.getRequiredMpService(appId);
WxMenu wxMenu = new WxMenu();
wxMenu.setButtons(createReqVO.getButtons());
try {
mpService.getMenuService().menuCreate(wxMenu);
} catch (WxErrorException e) {
throw new RuntimeException(e);
}
// 返回
return menu.getId();
}
@Override
public void deleteMenu(Long id) {
// 校验存在
validateMenuExists(id);
// 删除
mpMenuMapper.deleteById(id);
}
private void validateMenuExists(Long id) {
if (mpMenuMapper.selectById(id) == null) {
// TODO 芋艿错误码不太对
throw exception(COMMON_NOT_EXISTS);
}
}
@Override
public MpMenuDO getMenu(Long id) {
return mpMenuMapper.selectById(id);
}
}

View File

@ -1,71 +0,0 @@
package cn.iocoder.yudao.module.mp.service.menu;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.WxMenuDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
/**
* 微信菜单 Service 接口
*
* @author 芋道源码
*/
public interface WxMenuService {
/**
* 创建微信菜单
*
* @param createReqVO 创建信息
* @return 编号
*/
Integer createWxMenu(@Valid WxMenuCreateReqVO createReqVO);
/**
* 更新微信菜单
*
* @param updateReqVO 更新信息
*/
void updateWxMenu(@Valid WxMenuUpdateReqVO updateReqVO);
/**
* 删除微信菜单
*
* @param id 编号
*/
void deleteWxMenu(Integer id);
/**
* 获得微信菜单
*
* @param id 编号
* @return 微信菜单
*/
WxMenuDO getWxMenu(Integer id);
/**
* 获得微信菜单列表
*
* @param ids 编号
* @return 微信菜单列表
*/
List<WxMenuDO> getWxMenuList(Collection<Integer> ids);
/**
* 获得微信菜单分页
*
* @param pageReqVO 分页查询
* @return 微信菜单分页
*/
PageResult<WxMenuDO> getWxMenuPage(WxMenuPageReqVO pageReqVO);
/**
* 获得微信菜单列表, 用于 Excel 导出
*
* @param exportReqVO 查询条件
* @return 微信菜单列表
*/
List<WxMenuDO> getWxMenuList(WxMenuExportReqVO exportReqVO);
}

View File

@ -1,85 +0,0 @@
package cn.iocoder.yudao.module.mp.service.menu;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import cn.iocoder.yudao.module.mp.controller.admin.menu.vo.*;
import cn.iocoder.yudao.module.mp.dal.dataobject.menu.WxMenuDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.convert.menu.WxMenuConvert;
import cn.iocoder.yudao.module.mp.dal.mysql.menu.WxMenuMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mp.enums.ErrorCodeConstants.*;
/**
* 微信菜单 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class WxMenuServiceImpl implements WxMenuService {
@Resource
private WxMenuMapper wxMenuMapper;
@Override
public Integer createWxMenu(WxMenuCreateReqVO createReqVO) {
// 插入
WxMenuDO wxMenu = WxMenuConvert.INSTANCE.convert(createReqVO);
wxMenuMapper.insert(wxMenu);
// 返回
return wxMenu.getId();
}
@Override
public void updateWxMenu(WxMenuUpdateReqVO updateReqVO) {
// 校验存在
this.validateWxMenuExists(updateReqVO.getId());
// 更新
WxMenuDO updateObj = WxMenuConvert.INSTANCE.convert(updateReqVO);
wxMenuMapper.updateById(updateObj);
}
@Override
public void deleteWxMenu(Integer id) {
// 校验存在
this.validateWxMenuExists(id);
// 删除
wxMenuMapper.deleteById(id);
}
private void validateWxMenuExists(Integer id) {
if (wxMenuMapper.selectById(id) == null) {
throw exception(COMMON_NOT_EXISTS);
}
}
@Override
public WxMenuDO getWxMenu(Integer id) {
return wxMenuMapper.selectById(id);
}
@Override
public List<WxMenuDO> getWxMenuList(Collection<Integer> ids) {
return wxMenuMapper.selectBatchIds(ids);
}
@Override
public PageResult<WxMenuDO> getWxMenuPage(WxMenuPageReqVO pageReqVO) {
return wxMenuMapper.selectPage(pageReqVO);
}
@Override
public List<WxMenuDO> getWxMenuList(WxMenuExportReqVO exportReqVO) {
return wxMenuMapper.selectList(exportReqVO);
}
}