|
@ -1,8 +1,8 @@
|
|
|
package com.yihu.jw.business.wx.service;
|
|
|
|
|
|
import com.yihu.jw.base.wx.WxAccessToken;
|
|
|
import com.yihu.jw.base.wx.WxMenu;
|
|
|
import com.yihu.jw.base.wx.WxWechat;
|
|
|
import com.yihu.jw.base.wx.WxAccessTokenDO;
|
|
|
import com.yihu.jw.base.wx.WxMenuDO;
|
|
|
import com.yihu.jw.base.wx.WxWechatDO;
|
|
|
import com.yihu.jw.business.wx.dao.WxMenuDao;
|
|
|
import com.yihu.jw.exception.ApiException;
|
|
|
import com.yihu.jw.exception.code.ExceptionCode;
|
|
@ -26,7 +26,7 @@ import java.util.UUID;
|
|
|
* Created by Administrator on 2017/5/19 0019.
|
|
|
*/
|
|
|
@Service
|
|
|
public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
public class WxMenuService extends BaseJpaService<WxMenuDO, WxMenuDao> {
|
|
|
|
|
|
private Logger logger= LoggerFactory.getLogger(WxMenuService.class);
|
|
|
|
|
@ -44,7 +44,7 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
* @param wxMenu
|
|
|
* @return
|
|
|
*/
|
|
|
public WxMenu createWxMenu(WxMenu wxMenu) {
|
|
|
public WxMenuDO createWxMenu(WxMenuDO wxMenu) {
|
|
|
String code = UUID.randomUUID().toString().replaceAll("-", "");
|
|
|
wxMenu.setId(code);
|
|
|
if(canSaveOrUpata(wxMenu)){
|
|
@ -54,12 +54,12 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
}
|
|
|
|
|
|
@Transient
|
|
|
public WxMenu updateWxMenu(WxMenu wxMenu) {
|
|
|
public WxMenuDO updateWxMenu(WxMenuDO wxMenu) {
|
|
|
if (StringUtils.isEmpty(wxMenu.getId())) {
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_id_is_null, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
|
if(canSaveOrUpata(wxMenu)){
|
|
|
WxMenu wxMenu1 = findById(wxMenu.getId());
|
|
|
WxMenuDO wxMenu1 = findById(wxMenu.getId());
|
|
|
if(wxMenu1==null){
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_WxMenu_is_no_exist, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
@ -74,15 +74,15 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
String[] codeArray = ids.split(",");
|
|
|
Date date = new Date();
|
|
|
for (String code : codeArray) {
|
|
|
WxMenu wxMenu = wxMenuDao.findById(code);
|
|
|
WxMenuDO wxMenu = wxMenuDao.findById(code);
|
|
|
if (wxMenu == null) {
|
|
|
continue;
|
|
|
}
|
|
|
String supMenucode = wxMenu.getSupMenuid();
|
|
|
if (StringUtils.isEmpty(supMenucode)) {//如果是空,则为父菜单
|
|
|
List<WxMenu> childMenus = findChildMenus(wxMenu.getWechatId(), wxMenu.getId());
|
|
|
List<WxMenuDO> childMenus = findChildMenus(wxMenu.getWechatId(), wxMenu.getId());
|
|
|
if (childMenus != null) {
|
|
|
for (WxMenu wxmenu : childMenus) {
|
|
|
for (WxMenuDO wxmenu : childMenus) {
|
|
|
wxmenu.setStatus(-1);
|
|
|
wxmenu.setUpdateUser(userId);
|
|
|
wxmenu.setUpdateUserName(userName);
|
|
@ -103,15 +103,15 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
if(!StringUtils.isEmpty(codes)) {
|
|
|
String[] codeArray = codes.split(",");
|
|
|
for (String code : codeArray) {
|
|
|
WxMenu wxMenu = wxMenuDao.findById(code);
|
|
|
WxMenuDO wxMenu = wxMenuDao.findById(code);
|
|
|
if (wxMenu == null) {
|
|
|
continue;
|
|
|
}
|
|
|
String supMenucode = wxMenu.getSupMenuid();
|
|
|
if (StringUtils.isEmpty(supMenucode)) {//如果是空,则为父菜单
|
|
|
List<WxMenu> childMenus = findChildMenus(wxMenu.getWechatId(), wxMenu.getId());
|
|
|
List<WxMenuDO> childMenus = findChildMenus(wxMenu.getWechatId(), wxMenu.getId());
|
|
|
if (childMenus != null) {
|
|
|
for (WxMenu wxmenu : childMenus) {
|
|
|
for (WxMenuDO wxmenu : childMenus) {
|
|
|
wxmenu.setStatus(-1);
|
|
|
wxmenu.setUpdateUser(userCode);
|
|
|
wxMenuDao.save(wxmenu);
|
|
@ -125,7 +125,7 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public WxMenu findById(String id) {
|
|
|
public WxMenuDO findById(String id) {
|
|
|
return wxMenuDao.findById(id);
|
|
|
}
|
|
|
/**
|
|
@ -133,8 +133,8 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
* @param wechatCode
|
|
|
* @return
|
|
|
*/
|
|
|
public List<WxMenu> findParentMenuByWechatCode(String wechatCode){
|
|
|
List<WxMenu> parentMenus = wxMenuDao.findParentMenuByWechatId(wechatCode);
|
|
|
public List<WxMenuDO> findParentMenuByWechatCode(String wechatCode){
|
|
|
List<WxMenuDO> parentMenus = wxMenuDao.findParentMenuByWechatId(wechatCode);
|
|
|
return parentMenus;
|
|
|
}
|
|
|
|
|
@ -144,18 +144,18 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
* @return JSONObject
|
|
|
*/
|
|
|
public JSONObject createWechatMenu(String wechatId) {
|
|
|
WxWechat wechat = wechatService.findById(wechatId);
|
|
|
WxWechatDO wechat = wechatService.findById(wechatId);
|
|
|
if(wechat==null){
|
|
|
throw new ApiException(WechatRequestMapping.WxConfig.message_fail_wxWechat_is_no_exist, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
|
//首先根据wechatCode获取菜单,然后封装成json字符串
|
|
|
List<WxMenu> menus = wxMenuDao.findByWechatId(wechatId);
|
|
|
List<WxMenuDO> menus = wxMenuDao.findByWechatId(wechatId);
|
|
|
if(menus==null){
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_WxMenu_is_no_exist, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
|
String menuJsonString = getMenuToString(menus, wechatId);
|
|
|
logger.info("-----------------微信菜单json字符串:"+ menuJsonString+"--------------------");
|
|
|
WxAccessToken wxAccessTokenByCode = wxAccessTokenService.getWxAccessTokenById(wechatId);
|
|
|
WxAccessTokenDO wxAccessTokenByCode = wxAccessTokenService.getWxAccessTokenById(wechatId);
|
|
|
String token = wxAccessTokenByCode.getAccessToken();
|
|
|
// 请求微信接口创建菜单
|
|
|
String url = " https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + token;
|
|
@ -165,19 +165,19 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
private String getMenuToString(List<WxMenu> menus,String wechatCode){
|
|
|
private String getMenuToString(List<WxMenuDO> menus,String wechatCode){
|
|
|
String menuJsonStr = "";
|
|
|
List<WxMenu> parentMenus = new ArrayList<WxMenu>();//存储父菜单
|
|
|
List<WxMenuDO> parentMenus = new ArrayList<WxMenuDO>();//存储父菜单
|
|
|
if(menus!=null){
|
|
|
menuJsonStr = "{\"button\":[{";
|
|
|
for(WxMenu wxMenu:menus){
|
|
|
for(WxMenuDO wxMenu:menus){
|
|
|
if(StringUtils.isEmpty(wxMenu.getSupMenuid())){//说明是父菜单
|
|
|
parentMenus.add(wxMenu);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
int j = 0;
|
|
|
for(WxMenu menu:parentMenus){//遍历父菜单
|
|
|
for(WxMenuDO menu:parentMenus){//遍历父菜单
|
|
|
if(j==0){
|
|
|
j++;
|
|
|
}else{
|
|
@ -185,11 +185,11 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
}
|
|
|
menuJsonStr = getString(menuJsonStr, menu);
|
|
|
//查找是否有子菜单
|
|
|
List<WxMenu> childMenus = findChildMenus(wechatCode, menu.getId());
|
|
|
List<WxMenuDO> childMenus = findChildMenus(wechatCode, menu.getId());
|
|
|
if(childMenus!=null){
|
|
|
int i =0;
|
|
|
menuJsonStr += ",\"sub_button\":[{";
|
|
|
for(WxMenu childMenu:childMenus){
|
|
|
for(WxMenuDO childMenu:childMenus){
|
|
|
if(i==0){
|
|
|
i++;
|
|
|
}else{
|
|
@ -205,7 +205,7 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
return menuJsonStr;
|
|
|
}
|
|
|
|
|
|
private String getString(String menuJsonStr, WxMenu menu) {
|
|
|
private String getString(String menuJsonStr, WxMenuDO menu) {
|
|
|
menuJsonStr += "\"name\":\""+ menu.getName()+"\"";
|
|
|
if(!StringUtils.isEmpty(menu.getType())){
|
|
|
menuJsonStr += ",\"type\":\"" + menu.getType()+"\"";
|
|
@ -234,19 +234,19 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
* @param sup_menucode
|
|
|
* @return
|
|
|
*/
|
|
|
public List<WxMenu> findChildMenus(String wechatCode,String sup_menucode ){
|
|
|
public List<WxMenuDO> findChildMenus(String wechatCode,String sup_menucode ){
|
|
|
return wxMenuDao.findChildMenus(wechatCode,sup_menucode);
|
|
|
}
|
|
|
|
|
|
public List<WxMenu> findChildMenus(String parentCode ){
|
|
|
public List<WxMenuDO> findChildMenus(String parentCode ){
|
|
|
return wxMenuDao.findChildMenus(parentCode);
|
|
|
}
|
|
|
|
|
|
private boolean canSaveOrUpata(WxMenu wxMenu){
|
|
|
private boolean canSaveOrUpata(WxMenuDO wxMenu){
|
|
|
String wechatCode = wxMenu.getWechatId();
|
|
|
String supMenucode = wxMenu.getSupMenuid();
|
|
|
if(StringUtils.isEmpty(wechatCode)){
|
|
|
WxMenu parentMenuCode = findById(supMenucode);
|
|
|
WxMenuDO parentMenuCode = findById(supMenucode);
|
|
|
wechatCode = parentMenuCode.getWechatId();
|
|
|
wxMenu.setWechatId(wechatCode);
|
|
|
}
|
|
@ -261,20 +261,20 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_sort_is_null, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
|
//根据wechatCode查找是否存在微信配置
|
|
|
WxWechat wxWechat = wechatService.findById(wechatCode);
|
|
|
WxWechatDO wxWechat = wechatService.findById(wechatCode);
|
|
|
if(wxWechat==null){
|
|
|
throw new ApiException(WechatRequestMapping.WxConfig.message_fail_wxWechat_is_no_exist, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
|
if (!"0".equals(supMenucode)) {//不为0,说明是子菜单,判断父菜单是否存在
|
|
|
//说明是子菜单
|
|
|
//判断父菜单是否存在
|
|
|
WxMenu parentMenuCode = findById(supMenucode);
|
|
|
WxMenuDO parentMenuCode = findById(supMenucode);
|
|
|
if(parentMenuCode==null){
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_supMenuId_is_no_exist, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
|
|
|
|
//查询已经存在的子菜单条数
|
|
|
List<WxMenu> childMenus = findChildMenus(wechatCode, supMenucode);
|
|
|
List<WxMenuDO> childMenus = findChildMenus(wechatCode, supMenucode);
|
|
|
if(childMenus.size()==5){
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_childMenu_is_to_much, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
@ -286,7 +286,7 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
}
|
|
|
}else{
|
|
|
//查找父菜单
|
|
|
List<WxMenu> parentMenus = findParentMenuByWechatCode(wechatCode);
|
|
|
List<WxMenuDO> parentMenus = findParentMenuByWechatCode(wechatCode);
|
|
|
if(parentMenus!=null){
|
|
|
if(parentMenus.size()==3){
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_parentMenu_is_to_much, ExceptionCode.common_error_params_code);
|
|
@ -341,7 +341,7 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
|
|
|
throw new ApiException(WechatRequestMapping.WxMenu.message_fail_mediaId_is_null, ExceptionCode.common_error_params_code);
|
|
|
}
|
|
|
}
|
|
|
WxMenu wxMenuTemp = null;
|
|
|
WxMenuDO wxMenuTemp = null;
|
|
|
if(StringUtils.isEmpty(wxMenu.getSupMenuid())){//如果是空,则为父菜单
|
|
|
//判断sort是否重复
|
|
|
wxMenuTemp = wxMenuDao.findByWechatIdExcludeSortFromParent(wxMenu.getWechatId(), wxMenu.getSort(),wxMenu.getId());
|