Browse Source

合并代码

LiTaohong 6 years ago
parent
commit
e5d0e0d2de
28 changed files with 365 additions and 78 deletions
  1. 11 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/role/MenuDO.java
  2. 10 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasDO.java
  3. 3 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java
  4. 13 3
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/ModuleVO.java
  5. 10 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/role/MenuVO.java
  6. 1 1
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasVO.java
  7. 4 0
      server/svr-authentication/pom.xml
  8. 1 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/model/PublicKey.java
  9. 16 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/model/PublickeyVO.java
  10. 28 11
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  11. 71 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/utils/RSAUtils.java
  12. 4 0
      svr/svr-base/src/main/java/com/yihu/jw/base/contant/CommonContant.java
  13. 6 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasDao.java
  14. 2 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasTypeDictDao.java
  15. 2 2
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxTemplateDao.java
  16. 27 8
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/module/ModuleEndpoint.java
  17. 16 6
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/notice/NoticeEndPoint.java
  18. 53 8
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/role/MenuEndpoint.java
  19. 10 6
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasEndpoint.java
  20. 20 8
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasTypeDictEndpoint.java
  21. 3 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEndpoint.java
  22. 7 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEntryEndpoint.java
  23. 14 4
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java
  24. 15 12
      svr/svr-base/src/main/java/com/yihu/jw/base/service/module/ModuleService.java
  25. 2 2
      svr/svr-base/src/main/java/com/yihu/jw/base/service/org/BaseOrgService.java
  26. 4 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/role/MenuService.java
  27. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/system/SystemDictService.java
  28. 11 4
      svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WechatService.java

+ 11 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/role/MenuDO.java

@ -5,6 +5,7 @@ import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
 * @author progr1mmer
@ -39,6 +40,7 @@ public class MenuDO extends UuidIdentityEntityWithOperator {
	 * 父级ID
	 */
	private String parentId;
	private String parentName;
	/**
	 * 状态
	 */
@ -142,4 +144,13 @@ public class MenuDO extends UuidIdentityEntityWithOperator {
	public void setShow(Integer show) {
		this.show = show;
	}
	@Transient
	public String getParentName() {
		return parentName;
	}
	public void setParentName(String parentName) {
		this.parentName = parentName;
	}
}

+ 10 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/saas/SaasDO.java

@ -36,6 +36,7 @@ public class SaasDO extends UuidIdentityEntityWithOperator {
	private String remark; //备注
	private String logo; //远程fastDFS文件地址
    private String type; //类型
    private String typeName; //租户类型名称
	private String manager; //管理员 - 关联user表id字段
	private String email; //管理员邮箱
	private String mobile; //管理员手机号码
@ -238,4 +239,13 @@ public class SaasDO extends UuidIdentityEntityWithOperator {
    public void setAppSecret(String appSecret) {
        this.appSecret = appSecret;
    }
    @Transient
    public String getTypeName() {
        return typeName;
    }
    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }
}

+ 3 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java

@ -86,6 +86,7 @@ public class BaseRequestMapping {
        public static final String STATUS  = "/status";
        public static final String IS_NAME_EXIST  = "/isNameExist";
        public static final String FIND_ALL  = "/findAll";
        public static final String GET_TREE  = "/getTree";
    }
@ -188,6 +189,7 @@ public class BaseRequestMapping {
        public static final String IS_NAME_EXIST  = "/isNameExist";
        public static final String MOVE_UP  = "/moveUp";
        public static final String MOVE_DOWN  = "/moveDown";
        public static final String GET_TREE  = "/getTree";
        public static final String FIND_ALL  = "/findAll";
    }
@ -264,6 +266,7 @@ public class BaseRequestMapping {
        public static final String findWxReplyScene ="/findWxReplyScene";
        public static final String saveWxTemp ="/saveWxTemp";
        public static final String findWxTempExist ="/findWxTempExist";
        public static final String findWxTempNameExist ="/findWxTempNameExist";
        public static final String findWxtemp ="/findWxtemp";
        public static final String saveWxTempConfig ="/saveWxTempConfig";
        public static final String findWxTempConfigList ="/findWxTempConfigList";

+ 13 - 3
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/module/ModuleVO.java

@ -18,10 +18,12 @@ public class ModuleVO extends UuidIdentityVOWithOperator {
    private String name;
    @ApiModelProperty(value = "父ID", example = "402803ee656498890165649ad2da0000")
    private String parentId;
    @ApiModelProperty(value = "父name", example = "无")
    private String parentName;
    @ApiModelProperty(value = "url", example = "/doctor/*")
    private String url;
    @ApiModelProperty(value = "类型", example = "0通用,1医生端你,2居民端")
    private String type;
    private Integer type;
    @ApiModelProperty(value = "状态", example = "1有效,0失效")
    private Integer status;
    @ApiModelProperty(value = "备注", example = "我是备注")
@ -83,11 +85,11 @@ public class ModuleVO extends UuidIdentityVOWithOperator {
        this.isEnd = isEnd;
    }
    public String getType() {
    public Integer getType() {
        return type;
    }
    public void setType(String type) {
    public void setType(Integer type) {
        this.type = type;
    }
@ -114,4 +116,12 @@ public class ModuleVO extends UuidIdentityVOWithOperator {
    public void setIsCheck(Integer isCheck) {
        this.isCheck = isCheck;
    }
    public String getParentName() {
        return parentName;
    }
    public void setParentName(String parentName) {
        this.parentName = parentName;
    }
}

+ 10 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/role/MenuVO.java

@ -25,6 +25,8 @@ public class MenuVO extends UuidIdentityVOWithOperator {
    private Integer sort;
    @ApiModelProperty(value = "父级ID", example = "父级ID")
    private String parentId;
    @ApiModelProperty(value = "父级名称", example = "父级名称")
    private String parentName;
    @ApiModelProperty(value = "状态", example = "1生效,0失效")
    private Integer status;
    @ApiModelProperty(value = "备注", example = "说明")
@ -105,4 +107,12 @@ public class MenuVO extends UuidIdentityVOWithOperator {
    public void setChildren(List<MenuVO> children) {
        this.children = children;
    }
    public String getParentName() {
        return parentName;
    }
    public void setParentName(String parentName) {
        this.parentName = parentName;
    }
}

+ 1 - 1
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/base/saas/SaasVO.java

@ -19,7 +19,7 @@ public class SaasVO extends UuidIdentityVOWithOperator {
	@ApiModelProperty(value = "机构编码", example = "495323X")
	private String orgCode;
	@ApiModelProperty(value = "系统名称", example = "厦门医疗服务")
	@ApiModelProperty(value = "租户名称", example = "厦门医疗服务")
	private String name;
	@ApiModelProperty(value = "状态", example = "auditPassed")
	private SaasDO.Status status;

+ 4 - 0
server/svr-authentication/pom.xml

@ -105,6 +105,10 @@
            <artifactId>utils</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-rest-model</artifactId>
        </dependency>
    </dependencies>

+ 1 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/model/PublicKey.java

@ -1,6 +1,7 @@
package com.yihu.jw.security.model;
import java.io.Serializable;
import java.math.BigInteger;
/**
 * Model 公钥

+ 16 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/model/PublickeyVO.java

@ -0,0 +1,16 @@
package com.yihu.jw.security.model;
/**
 * Created by Trick on 2018/10/22.
 */
public class PublickeyVO {
    private String publicKey;
    public String getPublicKey() {
        return publicKey;
    }
    public void setPublicKey(String publicKey) {
        this.publicKey = publicKey;
    }
}

+ 28 - 11
server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java

@ -1,16 +1,17 @@
package com.yihu.jw.security.oauth2.provider.endpoint;
import com.yihu.jw.restmodel.base.wx.WxTemplateConfigVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.security.core.userdetails.jdbc.WlyyUserDetailsService;
import com.yihu.jw.security.model.Captcha;
import com.yihu.jw.security.model.Oauth2Envelop;
import com.yihu.jw.security.model.PublicKey;
import com.yihu.jw.security.model.WlyyUserSimple;
import com.yihu.jw.security.model.*;
import com.yihu.jw.security.oauth2.core.redis.WlyyRedisVerifyCodeService;
import com.yihu.jw.security.oauth2.provider.WlyyTokenGranter;
import com.yihu.jw.security.oauth2.provider.error.WlyyOAuth2ExceptionTranslator;
import com.yihu.utils.security.RSAUtils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -45,6 +46,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
@ -121,12 +123,14 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        if (StringUtils.isEmpty(parameters.get("captcha"))) {
            parameters.put("grant_type", "password");
            //解密密码
//            if (parameters.get("password") != null) {
            if (parameters.get("password") != null) {
//                RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)httpSession.getAttribute("privateKey");
////                byte[] en_data = Hex.decodeHex(parameters.get("password").toCharArray());
////                parameters.put("password", RSAUtils.decryptByPrivateKey(new String(en_data), rsaPrivateKey));
//                parameters.put("password", RSAUtils.decryptByPrivateKey(new String(Base64.decodeBase64(parameters.get("password"))), rsaPrivateKey));
//            }
                KeyPair keyPair = (KeyPair)httpSession.getAttribute("privateKey");
//                parameters.put("password", RSAUtils.decryptByPrivateKey(parameters.get("password"), rsaPrivateKey));
                String password = com.yihu.jw.security.utils.RSAUtils.decryptBase64(parameters.get("password"),keyPair);
                parameters.put("password",password);
//                parameters.put("password", RSAUtils.decryptByPrivateKey(parameters.get("password"), rsaPrivateKey));
            }
        } else {
            parameters.put("grant_type", "captcha");
        }
@ -249,8 +253,12 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        RSAPublicKey rsaPublicKey = (RSAPublicKey) map.get("public");
        RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) map.get("private");
        PublicKey publicKey = new PublicKey();
        publicKey.setModulus(Base64.encodeBase64String(rsaPublicKey.getModulus().toByteArray()));
        publicKey.setExponent(Base64.encodeBase64String(rsaPublicKey.getPublicExponent().toByteArray()));
        publicKey.setModulus(rsaPublicKey.getModulus().toString(16));
        publicKey.setExponent(rsaPublicKey.getPublicExponent().toString(16));
//        publicKey.setModulus(Base64.encodeBase64String(rsaPublicKey.getModulus().toByteArray()));
//        publicKey.setExponent(Base64.encodeBase64String(rsaPublicKey.getPublicExponent().toByteArray()));
//        publicKey.setModulus(new String(Hex.encodeHex(rsaPublicKey.getModulus().toByteArray())));
//        publicKey.setExponent(new String(Hex.encodeHex(rsaPublicKey.getPublicExponent().toByteArray())));
        httpSession.setAttribute("privateKey", rsaPrivateKey);
@ -266,6 +274,15 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        return new ResponseEntity<>(oauth2Envelop, headers, HttpStatus.OK);
    }
    @RequestMapping(value = "/oauth/getPublicKey", method = RequestMethod.GET)
    public ObjEnvelop<PublickeyVO> getPublicKey(HttpSession httpSession, HttpServletResponse httpServletResponse){
        KeyPair keyPair =  com.yihu.jw.security.utils.RSAUtils.getKey();
        httpSession.setAttribute("privateKey", keyPair);
        PublickeyVO pk = new PublickeyVO();
        pk.setPublicKey(com.yihu.jw.security.utils.RSAUtils.generateBase64PublicKey(keyPair));
        return ObjEnvelop.getSuccess("success",pk);
    }
    /**
     * 获取验证码
     * @param parameters

+ 71 - 0
server/svr-authentication/src/main/java/com/yihu/jw/security/utils/RSAUtils.java

@ -0,0 +1,71 @@
package com.yihu.jw.security.utils;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.Security;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class RSAUtils {
//    private static final KeyPair keyPair = initKey();
    public static KeyPair getKey(){
        try {
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
            SecureRandom random = new SecureRandom();
            KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC");
            generator.initialize(1024, random);
            return generator.generateKeyPair();
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 生成public key
     * @return
     */
    public static String generateBase64PublicKey(KeyPair keyPair){
        RSAPublicKey key = (RSAPublicKey)keyPair.getPublic();
        return new String(Base64.encodeBase64(key.getEncoded()));
    }
    /**
     * 解密
     * @param string
     * @return
     */
    public static String decryptBase64(String string,KeyPair keyPair) {
        return new String(decrypt(Base64.decodeBase64(string),keyPair));
    }
    private static byte[] decrypt(byte[] string,KeyPair keyPair) {
        try {
            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
            RSAPrivateKey pbk = (RSAPrivateKey)keyPair.getPrivate();
            cipher.init(Cipher.DECRYPT_MODE, pbk);
            byte[] plainText = cipher.doFinal(string);
            return plainText;
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
//    public static void main(String[] args) {
//
//        KeyPair keyPair =  initKey();
//        // 生成public key
//        System.out.println(generateBase64PublicKey(keyPair));
//
//        // 解密
//        System.out.println(decryptBase64("wAfY9JkoKay9SxcPIs1FcG+t6sR+wYwAs/mh9DpfcBraxzqoZdb9LyaAigzFQ0EKck9OyHL0dhv+Uxuw5hHw6CPT0B2Z0i1gwrjDUNaL1gWvqt1pDJVGrIYPLJSjs9xktFhY1jbxQgXGjyCt06Rwid5sJknw90AUO0CyQulfipg=",keyPair));
//    }
}

+ 4 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/contant/CommonContant.java

@ -10,6 +10,10 @@ public class CommonContant {
     * 默认父类id 0
     */
    public static final String DEFAULT_PARENTID = "0";
    /**
     * 默认父类无
     */
    public static final String DEFAULT_PARENTNAME = "无";
    //是否必选0-表示非必选,1-表示必选
    public static final String IS_MUST = "1";
}

+ 6 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasDao.java

@ -1,8 +1,11 @@
package com.yihu.jw.base.dao.saas;
import com.yihu.jw.entity.base.saas.SaasDO;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Dao - SAAS
 * Created by progr1mmer on 2018/8/14.
@ -14,4 +17,7 @@ public interface SaasDao extends PagingAndSortingRepository<SaasDO, String> {
    SaasDO findById(String id);
    SaasDO findByCreateUser(String createUser);
    @Query("from SaasDO  ")
    List<SaasDO> findList();
}

+ 2 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/saas/SaasTypeDictDao.java

@ -19,6 +19,8 @@ public interface SaasTypeDictDao extends PagingAndSortingRepository<SaasTypeDict
    SaasTypeDictDO findByCode(Integer code);
    List<SaasTypeDictDO> findListByStatus(SaasTypeDictDO.Status status);
    @Query("select Max(code) from SaasTypeDictDO ")
    Integer findTopCode();

+ 2 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxTemplateDao.java

@ -19,8 +19,8 @@ public interface WxTemplateDao extends PagingAndSortingRepository<WxTemplateDO,
    @Query("from WxTemplateDO w where w.wechatId = ?1 and w.status =1")
    List<WxTemplateDO> findByWxId(String wechatId);
    List<WxTemplateDO> findByTemplateIdAndWechatId(String templateId,String wechatId);
    List<WxTemplateDO> findByTemplateIdAndWechatIdAndStatus(String templateId,String wechatId,Integer status);
    List<WxTemplateDO> findByTemplateNameAndWechatId(String templateId,String wechatId);
    List<WxTemplateDO> findByTemplateNameAndWechatIdAndStatus(String templateId,String wechatId,Integer status);
}

+ 27 - 8
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/module/ModuleEndpoint.java

@ -132,22 +132,41 @@ public class ModuleEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "获取列表")
    public ListEnvelop<ModuleVO> findAll (
            @ApiParam(name = "status", value = "状态")
            @RequestParam(value = "status", required = false) String status) throws Exception {
        String filters = null;
            @RequestParam(value = "status", required = false) String status,
            @ApiParam(name = "type", value = "类型")
            @RequestParam(value = "type", required = false) String type,
            @ApiParam(name = "name", value = "名称")
            @RequestParam(value = "name", required = false) String name) throws Exception {
        String filters = "";
        if(StringUtils.isNotBlank(status)){
            filters = "status="+status;
            filters = "status="+status+";";
        }
        List<ModuleDO> modules = moduleService.search(null, filters, null);
        if(StringUtils.isNotBlank(name)){
            filters += "name?"+name+";";
        }
        if(StringUtils.isNotBlank(type)){
            filters += "type="+type+";";
        }
        List<ModuleDO> modules = moduleService.search(null, filters, "-createTime");
        List<ModuleVO> moduleVOs = convertToModels(modules,new ArrayList<>(modules.size()),ModuleVO.class);
        moduleVOs.forEach(moduleVO -> {
            if(CommonContant.DEFAULT_PARENTID.equals(moduleVO.getParentId())){
                moduleVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
            }else {
                ModuleDO moduleDO = moduleService.findOne(moduleVO.getParentId());
                moduleVO.setParentName(moduleDO.getName());
            }
        });
        Map<String,List<ModuleVO>> map = moduleVOs.stream().collect(Collectors.groupingBy(ModuleVO::getParentId));
        moduleVOs.forEach(module->{
            List<ModuleVO> tmp = map.get(module.getId());
            module.setChildren(tmp);
        });
        moduleVOs = moduleVOs.stream()
                .filter(module -> CommonContant.DEFAULT_PARENTID.equals(module.getParentId()))
                .collect(Collectors.toList());
        if(StringUtils.isBlank(name)) {
            moduleVOs = moduleVOs.stream()
                    .filter(module -> CommonContant.DEFAULT_PARENTID.equals(module.getParentId()))
                    .collect(Collectors.toList());
        }
        return success(moduleVOs);
    }

+ 16 - 6
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/notice/NoticeEndPoint.java

@ -34,11 +34,11 @@ public class NoticeEndPoint extends EnvelopRestEndpoint {
    @Autowired
    private ErrorCodeUtil errorCodeUtil;
    @PostMapping(value = BaseRequestMapping.Notice.CREATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @PostMapping(value = BaseRequestMapping.Notice.CREATE)
    @ApiOperation(value = "创建")
    public ObjEnvelop<NoticeVO> create (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam(value = "jsonData", required = true)  String jsonData) throws Exception {
        NoticeDO noticeDO = toEntity(jsonData, NoticeDO.class);
        if(StringUtils.isBlank(noticeDO.getTitle())||noticeDO.getTitle().length()>50){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Notice.LIMIT_TITLE), ObjEnvelop.class);
@ -73,11 +73,11 @@ public class NoticeEndPoint extends EnvelopRestEndpoint {
        return success("发布成功");
    }
    @PostMapping(value = BaseRequestMapping.Notice.UPDATE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @PostMapping(value = BaseRequestMapping.Notice.UPDATE)
    @ApiOperation(value = "更新")
    public ObjEnvelop<NoticeVO> update (
            @ApiParam(name = "json_data", value = "Json数据", required = true)
            @RequestParam String jsonData) throws Exception {
            @ApiParam(name = "jsonData", value = "Json数据", required = true)
            @RequestParam(value = "jsonData", required = true) String jsonData) throws Exception {
        NoticeDO noticeDO = toEntity(jsonData, NoticeDO.class);
        if (null == noticeDO.getId()) {
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Common.ID_IS_NULL), ObjEnvelop.class);
@ -102,6 +102,11 @@ public class NoticeEndPoint extends EnvelopRestEndpoint {
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        if(StringUtils.isBlank(filters)){
            filters="del=1;";
        }else {
            filters="del=1;"+filters;
        }
        List<NoticeDO> noticeDOs = noticeService.search(fields, filters, sorts, page, size);
        int count = (int)noticeService.getCount(filters);
        return success(noticeDOs, count, page, size, NoticeVO.class);
@ -116,6 +121,11 @@ public class NoticeEndPoint extends EnvelopRestEndpoint {
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        if(StringUtils.isBlank(filters)){
            filters="del=1;";
        }else {
            filters="del=1;"+filters;
        }
        List<NoticeDO> noticeDOs = noticeService.search(fields, filters, sorts);
        return success(noticeDOs, NoticeVO.class);
    }

+ 53 - 8
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/role/MenuEndpoint.java

@ -127,19 +127,64 @@ public class MenuEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = BaseRequestMapping.Menu.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<MenuVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        List<MenuDO> menuDOS = menuService.search(fields, filters, sorts);
            @ApiParam(name = "id", value = "id")
            @RequestParam(value = "id", required = false) String id) throws Exception {
        String filters = "";
        if(StringUtils.isNotBlank(id)){
            filters = "parentId="+id+";";
        }
        List<MenuDO> menuDOS = menuService.search(null, filters, "+sort");
        MenuDO menuDO = menuService.findOne(id);
        menuDOS.forEach(menu -> {
            if(CommonContant.DEFAULT_PARENTID.equals(menu.getParentId())){
                menu.setParentName(CommonContant.DEFAULT_PARENTNAME);
            }else {
                menu.setParentName(menuDO.getName());
            }
        });
        return success(menuDOS, MenuVO.class);
    }
    @GetMapping(value = BaseRequestMapping.Module.FIND_ALL)
    @GetMapping(value = BaseRequestMapping.Menu.FIND_ALL)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<MenuVO> findAll (
            @ApiParam(name = "status", value = "状态")
            @RequestParam(value = "status", required = false) String status,
            @ApiParam(name = "name", value = "名称")
            @RequestParam(value = "name", required = false) String name) throws Exception {
        String filters = "";
        if(StringUtils.isNotBlank(status)){
            filters = "status="+status+";";
        }
        if(StringUtils.isNotBlank(name)){
            filters += "name?"+name+";";
        }
        List<MenuDO> menuDOs = menuService.search(null, filters, "+sort");
        List<MenuVO> menuVOs = convertToModels(menuDOs,new ArrayList<>(menuDOs.size()), MenuVO.class);
        menuVOs.forEach(menuVO -> {
            if(CommonContant.DEFAULT_PARENTID.equals(menuVO.getParentId())){
                menuVO.setParentName(CommonContant.DEFAULT_PARENTNAME);
            }else {
                MenuDO menuDO = menuService.findOne(menuVO.getParentId());
                menuVO.setParentName(menuDO.getName());
            }
        });
        Map<String,List<MenuVO>> map = menuVOs.stream().collect(Collectors.groupingBy(MenuVO::getParentId));
        menuVOs.forEach(menu->{
            List<MenuVO> tmp = map.get(menu.getId());
            menu.setChildren(tmp);
        });
        if(StringUtils.isBlank(name)){
            menuVOs = menuVOs.stream()
                    .filter(menu -> CommonContant.DEFAULT_PARENTID.equals(menu.getParentId()))
                    .collect(Collectors.toList());
        }
        return success(menuVOs);
    }
    @GetMapping(value = BaseRequestMapping.Menu.GET_TREE)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<MenuVO> getTree (
            @ApiParam(name = "status", value = "状态")
            @RequestParam(value = "status", required = false) String status) throws Exception {
        String filters = null;

+ 10 - 6
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasEndpoint.java

@ -95,9 +95,9 @@ public class SaasEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = BaseRequestMapping.Saas.SYSTEM_CONFIGURATION)
    @ApiOperation(value = "创建-系统配置")
    public Envelop createSystemConfig (
            @ApiParam(name = "saasDO", value = "Json数据", required = true)
            @RequestParam(value = "saasDO") SaasDO saasDO) throws Exception {
            @ApiParam(name = "jsonSaas", value = "租户数据", required = true)
            @RequestParam String jsonSaas) throws Exception {
        SaasDO saasDO = toEntity(jsonSaas, SaasDO.class);
        saasService.saveSystemConfig(saasDO);
        return success("创建成功",saasDO);
    }
@ -105,9 +105,9 @@ public class SaasEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = BaseRequestMapping.Saas.THEME_STYLE)
    @ApiOperation(value = "创建-主题风格")
    public Envelop createThemeConfig (
            @ApiParam(name = "saasDO", value = "Json数据", required = true)
            @RequestParam(value = "saasDO") SaasDO saasDO) throws Exception {
            @ApiParam(name = "jsonSaas", value = "租户数据", required = true)
            @RequestParam String jsonSaas) throws Exception {
        SaasDO saasDO = toEntity(jsonSaas, SaasDO.class);
        saasService.createThemeConfig(saasDO);
        return success("创建成功");
    }
@ -184,6 +184,10 @@ public class SaasEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        List<SaasDO> saasDOS = saasService.search(fields, filters, sorts, page, size);
        saasDOS.forEach(saas->{
            SaasTypeDictDO saasTypeDictDO = saasTypeDictService.findById(saas.getType());
            saas.setTypeName(saasTypeDictDO.getName());
        });
        int count = (int)saasService.getCount(filters);
        return success(saasDOS, count, page, size, SaasVO.class);
    }

+ 20 - 8
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/saas/SaasTypeDictEndpoint.java

@ -135,17 +135,29 @@ public class SaasTypeDictEndpoint extends EnvelopRestEndpoint {
            //根据租户类型获取关联的模块(右边树)
            String fis = "status=1;saasTypeId=" + saasTypeDictId;
            List<SaasTypeModuleDO> saasTypeModuleDOList = saasTypeModuleService.search(fis);
            //获取租户类型关联的生效中的模块
            List<SaasTypeModuleVO> saasTypeModuleVOS = convertToModels(saasTypeModuleDOList, new ArrayList<>(saasTypeModuleDOList.size()), SaasTypeModuleVO.class);
            Map<String, List<SaasTypeModuleVO>> map = saasTypeModuleVOS.stream().collect(Collectors.groupingBy(SaasTypeModuleVO::getParentModuleId));
            saasTypeModuleVOS.forEach(module -> {
                List<SaasTypeModuleVO> tmp = map.get(module.getModuleId());
            List<ModuleVO> moduleVOList=new ArrayList<>();
            ModuleVO moduleVO;
            for(SaasTypeModuleDO  saasTypeModuleDO:saasTypeModuleDOList){
                moduleVO=new ModuleVO();
                moduleVO.setId(saasTypeModuleDO.getModuleId());
                moduleVO.setName(saasTypeModuleDO.getName());
                moduleVO.setParentId(saasTypeModuleDO.getParentModuleId());
                moduleVO.setIsCheck(1);
                moduleVO.setIsMust(saasTypeModuleDO.getIsMust());
                moduleVO.setIsEnd(saasTypeModuleDO.getIsEnd());
                moduleVOList.add(moduleVO);
            }
//            //获取租户类型关联的生效中的模块
//            List<SaasTypeModuleVO> saasTypeModuleVOS = convertToModels(saasTypeModuleDOList, new ArrayList<>(saasTypeModuleDOList.size()), SaasTypeModuleVO.class);
            Map<String, List<ModuleVO>> map = moduleVOList.stream().collect(Collectors.groupingBy(ModuleVO::getParentId));
            moduleVOList.forEach(module -> {
                List<ModuleVO> tmp = map.get(module.getId());
                module.setChildren(tmp);
            });
            saasTypeModuleVOS = saasTypeModuleVOS.stream()
                    .filter(module -> CommonContant.DEFAULT_PARENTID.equals(module.getParentModuleId()))
            moduleVOList = moduleVOList.stream()
                    .filter(module -> CommonContant.DEFAULT_PARENTID.equals(module.getParentId()))
                    .collect(Collectors.toList());
            envelop.setDetailModelList(saasTypeModuleVOS);
            envelop.setDetailModelList(moduleVOList);
        }
        envelop.setStatus(EnvelopStatus.success.code);
        envelop.setMessage("success");

+ 3 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEndpoint.java

@ -105,6 +105,8 @@ public class SystemDictEndpoint extends EnvelopRestEndpoint {
    public ListEnvelop queryDictBySaasId(
            @ApiParam(name = "saasId", value = "saasId")
            @RequestParam(value = "saasId", required = true) String saasId,
            @ApiParam(name = "name", value = "字典名称")
            @RequestParam(value = "name", required = false) String name,
            @ApiParam(name = "type", value = "字典类型")
            @RequestParam(value = "type", required = true) String type,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
@ -114,7 +116,7 @@ public class SystemDictEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size
    ) throws Exception {
        JSONArray list = systemDictService.getDistListBySaasId(type,saasId,sorts,page,size);
        JSONArray list = systemDictService.getDistListBySaasId(type,saasId,name,sorts,page,size);
        return success(list);
    }

+ 7 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEntryEndpoint.java

@ -12,6 +12,7 @@ import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@ -65,8 +66,10 @@ public class SystemDictEntryEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = BaseRequestMapping.SystemDictEntry.PAGE_SAASID)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<SystemDictEntryVO> pageSaasId (
            @ApiParam(name = "saasId", value = "true")
            @ApiParam(name = "saasId", value = "saasId")
            @RequestParam(value = "saasId", required = true) String saasId,
            @ApiParam(name = "value", value = "请输入字典代码或值查询")
            @RequestParam(value = "value", required = false) String value,
            @ApiParam(name = "dictCode", value = "字典code")
            @RequestParam(value = "dictCode", required = true) String dictCode,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
@ -78,6 +81,9 @@ public class SystemDictEntryEndpoint extends EnvelopRestEndpoint {
        StringBuilder filters = new StringBuilder();
        filters.append("saasId=").append(saasId).append(";")
                .append("dictCode=").append(dictCode).append(";");
        if(StringUtils.isNotBlank(value)){
            filters.append("code?").append(value).append(" g1;").append("value?").append(value).append(" g1;");
        }
        List<SystemDictEntryDO> systemDictEntryDOS = systemDictEntryService.search(null, filters.toString(), sorts, page, size);
        int count = (int)systemDictEntryService.getCount(filters.toString());
        return success(systemDictEntryDOS, count, page, size, SystemDictEntryVO.class);

+ 14 - 4
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java

@ -256,17 +256,27 @@ public class WechatController extends EnvelopRestEndpoint {
        return wechatService.saveWxTemp(wxTemplate);
    }
    @PostMapping(value = BaseRequestMapping.WeChat.findWxTempExist)
    @GetMapping(value = BaseRequestMapping.WeChat.findWxTempExist)
    @ApiOperation(value = "判断微信模板(模板id且模板名称)是否存在", notes = "判断微信模板(模板id且模板名称)是否存在")
    public Envelop findWxTempExist(@ApiParam(name = "wechatId", value = "微信id")
                                   @RequestParam(value = "wechatId", required = true)String wechatId,
                                   @ApiParam(name = "templateName", value = "微信id")
                                   @ApiParam(name = "templateName", value = "微信模板名称")
                                   @RequestParam(value = "templateName", required = true)String templateName,
                                   @ApiParam(name = "templateId", value = "微信模板id(微信的同步的id)")
                                   @RequestParam(value = "templateId", required = true)String templateId) {
       return success(BaseRequestMapping.WeChat.api_success,wechatService.findWxTempExist(wechatId,templateId,templateName));
    }
    @GetMapping(value = BaseRequestMapping.WeChat.findWxTempNameExist)
    @ApiOperation(value = "判断微信模板(模板名称)是否存在", notes = "判断微信模板(模板名称)是否存在")
    public Envelop findWxTempNameExist(@ApiParam(name = "wechatId", value = "微信id")
                                       @RequestParam(value = "wechatId", required = true)String wechatId,
                                       @ApiParam(name = "templateName", value = "微信模板名称")
                                       @RequestParam(value = "templateName", required = true)String templateName) {
        return success(BaseRequestMapping.WeChat.api_success,wechatService.findWxTempNameExist(wechatId,templateName));
    }
    @GetMapping(value = BaseRequestMapping.WeChat.findWxtemp)
    @ApiOperation(value = "获取微信模板消息基础信息(列表)", notes = "获取微信模板消息基础信息(列表)")
    public MixEnvelop<WxTemplateVO,WxTemplateVO> findWxtemp(@ApiParam(name = "wechatId", value = "微信id")
@ -297,9 +307,9 @@ public class WechatController extends EnvelopRestEndpoint {
    public MixEnvelop<WxTemplateConfigVO,WxTemplateConfigVO> findWxTempConfigList(@ApiParam(name = "wechatId", value = "微信id")
                                                                                  @RequestParam(value = "wechatId", required = true)String wechatId,
                                                                                  @ApiParam(name = "scene", value = "微信场景值")
                                                                                  @RequestParam(value = "scene", required = true)String scene,
                                                                                  @RequestParam(value = "scene", required = false)String scene,
                                                                                  @ApiParam(name = "templateId", value = "微信公众号模板id")
                                                                                  @RequestParam(value = "templateId", required = true)String templateId,
                                                                                  @RequestParam(value = "templateId", required = false)String templateId,
                                                                                  @ApiParam(name = "page", value = "第几页")
                                                                                  @RequestParam(value = "page", required = true)Integer page,
                                                                                  @ApiParam(name = "size", value = "分页大小")

+ 15 - 12
svr/svr-base/src/main/java/com/yihu/jw/base/service/module/ModuleService.java

@ -84,10 +84,9 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> {
            }
            //租户类型
            Iterable<SaasTypeDictDO> saasTypeDictDOs = saasTypeDictDao.findAll();
            List<SaasTypeDictDO> saasTypeDictDOs = saasTypeDictDao.findListByStatus(SaasTypeDictDO.Status.effective);
            List<SaasTypeModuleDO> saasTypeModuleDOList = new ArrayList<>(16);
            while (saasTypeDictDOs.iterator().hasNext()){
                SaasTypeDictDO saasTypeDictDO = saasTypeDictDOs.iterator().next();
            for (SaasTypeDictDO saasTypeDictDO : saasTypeDictDOs) {
                SaasTypeModuleDO saasTypeModuleDO = new SaasTypeModuleDO();
                saasTypeModuleDO.setCreateTime(new Date());
                saasTypeModuleDO.setDel(moduleDO.getDel());
@ -128,10 +127,9 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> {
            saasTypeModuleDao.save(saasTypeModuleDOList);
            //租户
            Iterable<SaasDO> saasDOs = saasDao.findAll();
            Iterable<SaasDO> saasDOs = saasDao.findList();
            List<SaasModuleDO> saasModuleDOList = new ArrayList<>(16);
            while (saasDOs.iterator().hasNext()){
                SaasDO saasDO = saasDOs.iterator().next();
            for (SaasDO saasDO : saasDOs) {
                SaasModuleDO saasModuleDO = new SaasModuleDO();
                saasModuleDO.setCreateTime(new Date());
                saasModuleDO.setDel(moduleDO.getDel());
@ -197,14 +195,16 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> {
     * @param moduleDO
     */
    public void available(ModuleDO moduleDO){
        moduleDO.setStatus(ModuleDO.Status.unAvailable.getValue());
        moduleDO.setStatus(ModuleDO.Status.available.getValue());
        moduleDao.save(moduleDO);
        addSubModule(moduleDO);
        ModuleDO parentModule = moduleDao.findOne(moduleDO.getParentId());
        if(ModuleDO.Status.unAvailable.getValue().equals(parentModule.getStatus())){
            available(moduleDO);
        if(!CommonContant.DEFAULT_PARENTID.equals(moduleDO.getParentId())){
            ModuleDO parentModule = moduleDao.findOne(moduleDO.getParentId());
            if(ModuleDO.Status.available.getValue().equals(parentModule.getStatus())){
                available(parentModule);
            }
        }
    }
@ -224,8 +224,8 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> {
        //把子类失效
        List<ModuleDO> moduleDOList = moduleDao.findByParentId(moduleDO.getId());
        moduleDOList.forEach(module->{
            if(ModuleDO.Status.available.getValue().equals(module.getStatus())){
                unavailable(moduleDO);
            if(ModuleDO.Status.unAvailable.getValue().equals(module.getStatus())){
                unavailable(module);
            }
        });
    }
@ -239,4 +239,7 @@ public class ModuleService extends BaseJpaService<ModuleDO, ModuleDao> {
        return moduleDao.isExistName(name);
    }
    public ModuleDO findOne(String id){
        return moduleDao.findOne(id);
    }
}

+ 2 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/service/org/BaseOrgService.java

@ -239,7 +239,7 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
        SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
        filter.getExcludes().add("parent");
        filter.getExcludes().add("allChildren");
        filter.getExcludes().add("parentNodeId");
//        filter.getExcludes().add("parentNodeId");
        filter.getExcludes().add("orderNum");
        filter.getExcludes().add("level");
@ -258,7 +258,7 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
        SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
        filter.getExcludes().add("parent");
        filter.getExcludes().add("allChildren");
        filter.getExcludes().add("parentNodeId");
//        filter.getExcludes().add("parentNodeId");
        filter.getExcludes().add("orderNum");
        filter.getExcludes().add("level");

+ 4 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/role/MenuService.java

@ -87,4 +87,8 @@ public class MenuService extends BaseJpaService<MenuDO, MenuDao> {
    public int isExistName(String name){
        return menuDao.isExistName(name);
    }
    public MenuDO findOne(String id){
        return menuDao.findOne(id);
    }
}

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/system/SystemDictService.java

@ -65,7 +65,7 @@ public class SystemDictService extends BaseJpaService<SystemDictDO, SystemDictDa
     * @param saasId
     * @return
     */
    public JSONArray getDistListBySaasId(String type, String saasId, String sorts, int page, int size) throws Exception {
    public JSONArray getDistListBySaasId(String type, String saasId,String name, String sorts, int page, int size) throws Exception {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = new JSONObject();
        if (SystemDictEnum.Icd10Dict == SystemDictEnum.valueOf(type)) {

+ 11 - 4
svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WechatService.java

@ -461,11 +461,19 @@ public class WechatService {
    }
    public Boolean findWxTempExist(String wechatId,String templateId,String templateName){
        List<WxTemplateDO> list = wxTemplateDao.findByTemplateIdAndWechatId(templateId,wechatId);
        List<WxTemplateDO> list = wxTemplateDao.findByTemplateIdAndWechatIdAndStatus(templateId,wechatId,1);
        if(list!=null&&list.size()>0){
            return true;
        }
        List<WxTemplateDO> list2 = wxTemplateDao.findByTemplateNameAndWechatId(templateName,wechatId);
        List<WxTemplateDO> list2 = wxTemplateDao.findByTemplateNameAndWechatIdAndStatus(templateName,wechatId,1);
        if(list2!=null&&list2.size()>0){
            return true;
        }
        return false;
    }
    public Boolean findWxTempNameExist(String wechatId,String templateName){
        List<WxTemplateDO> list2 = wxTemplateDao.findByTemplateNameAndWechatIdAndStatus(templateName,wechatId,1);
        if(list2!=null&&list2.size()>0){
            return true;
        }
@ -573,7 +581,7 @@ public class WechatService {
            sql += " AND g.scene = '"+scene+"'";
        }
        if(StringUtils.isNotBlank(templateId)){
            totalSql += " AND g.template_id = '"+templateId+"'";
            sql += " AND g.template_id = '"+templateId+"'";
        }
        sql+=" LIMIT  " + (page - 1) * size + "," + size + "";
        List<WxTemplateConfigVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxTemplateConfigVO.class));
@ -590,7 +598,6 @@ public class WechatService {
        if(list!=null&&list.size()>0){
            return true;
        }
        return false;
    }