Browse Source

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

zdm 6 years ago
parent
commit
0e50ebed35
22 changed files with 744 additions and 47 deletions
  1. 3 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java
  2. 72 0
      common/common-util/src/main/java/com/yihu/jw/util/common/RSAUtils.java
  3. 4 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/dict/DictDoctorDutyDao.java
  4. 4 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/dict/DictHospitalDeptDao.java
  5. 4 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/dict/DictJobTitleDao.java
  6. 2 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/wx/WxWechatSaasDao.java
  7. 35 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/doctor/BaseDoctorEndpoint.java
  8. 6 2
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/open/register/RegisterEndpoint.java
  9. 12 3
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEndpoint.java
  10. 13 4
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEntryEndpoint.java
  11. 8 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/user/UserEndpoint.java
  12. 3 4
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/wx/WechatController.java
  13. 101 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/BaseDoctorService.java
  14. 181 11
      svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/excelImport/BaseDoctorExcelDO.java
  15. 122 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/excelImport/BaseDoctorExcelDOReader.java
  16. 2 2
      svr/svr-base/src/main/java/com/yihu/jw/base/service/org/BaseOrgService.java
  17. 29 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/org/tree/SimpleTree.java
  18. 29 13
      svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasService.java
  19. 20 6
      svr/svr-base/src/main/java/com/yihu/jw/base/service/system/SystemDictService.java
  20. 70 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/user/UserService.java
  21. 23 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WechatService.java
  22. 1 1
      svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WxAccessTokenService.java

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

@ -156,8 +156,10 @@ public class BaseRequestMapping {
     */
    public static class User extends Basic {
        public static final String PREFIX  = "/user";
        public static final String api_success ="success";
        public static final String CHECK_USERNAME = "/check_username";
        public static final String CHECK_MOBILE = "/check_mobile";
        public static final String findUserBaseInfo = "/findUserBaseInfo";
    }
    /**
@ -394,6 +396,7 @@ public class BaseRequestMapping {
        public static final String docOrgDutyTreeInfo  = "/docOrgDutyTreeInfo";
        public static final String docOrgDeptTreeInfo  = "/docOrgDeptTreeInfo";
        public static final String getDoctorListByDept  = "/getDoctorListByDept";
        public static final String DOCTOR_INFO_IMPORT  = "/baseDoctorInfoImport";
    }

+ 72 - 0
common/common-util/src/main/java/com/yihu/jw/util/common/RSAUtils.java

@ -0,0 +1,72 @@
package com.yihu.jw.util.common;
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;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Base64;
public class RSAUtils {
//    private static final KeyPair keyPair = initKey();
    private static KeyPair initKey(){
        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/dao/dict/DictDoctorDutyDao.java

@ -18,4 +18,8 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 * @since 1.
 */
public interface DictDoctorDutyDao extends PagingAndSortingRepository<DictDoctorDutyDO, Integer>, JpaSpecificationExecutor<DictDoctorDutyDO>  {
    boolean existsByCode(String code);
    DictDoctorDutyDO findByCode(String code);
}

+ 4 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/dict/DictHospitalDeptDao.java

@ -37,4 +37,8 @@ public interface DictHospitalDeptDao extends PagingAndSortingRepository<DictHosp
    Long countByCodeIn(String orgCode);
    boolean existsByCodeAndOrgCode(String code,String orgCode);
    DictHospitalDeptDO findByCode(String code);
}

+ 4 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/dict/DictJobTitleDao.java

@ -34,4 +34,8 @@ public interface DictJobTitleDao extends PagingAndSortingRepository<DictJobTitle
    List<DictJobTitleDO> findBySaasId(String saasId);
    Long countBySaasId(String saasId);
    DictJobTitleDO findByCode(String code);
    boolean existsByCode(String code);
}

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

@ -11,4 +11,6 @@ import java.util.List;
 */
public interface WxWechatSaasDao  extends PagingAndSortingRepository<WxWechatSaasDO, String>, JpaSpecificationExecutor<WxWechatSaasDO> {
    List<WxWechatSaasDO> findByWechatId(String wechatId);
    List<WxWechatSaasDO> findBySaasId(String saasId);
}

+ 35 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/doctor/BaseDoctorEndpoint.java

@ -1,10 +1,15 @@
package com.yihu.jw.base.endpoint.doctor;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.base.endpoint.common.excel.AExcelReader;
import com.yihu.jw.base.endpoint.common.populationBatchImport.PopulationMsg;
import com.yihu.jw.base.service.doctor.BaseDoctorService;
import com.yihu.jw.base.service.doctor.excelImport.BaseDoctorExcelDO;
import com.yihu.jw.base.service.doctor.excelImport.BaseDoctorExcelDOReader;
import com.yihu.jw.base.service.org.OrgTreeService;
import com.yihu.jw.base.util.ConstantUtils;
import com.yihu.jw.base.util.JavaBeanUtils;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.jw.restmodel.base.doctor.BaseDoctorVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
@ -16,12 +21,17 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
/**
 * 医生基础信息控制器
@ -250,4 +260,29 @@ public class BaseDoctorEndpoint extends EnvelopRestEndpoint {
        return success(jsonObject.getJSONArray("msg"));
    }
    @PostMapping(value = BaseRequestMapping.BaseDoctor.DOCTOR_INFO_IMPORT)
    @Transactional(rollbackFor = Exception.class)
    @ApiOperation(value = "基础医生信息列表导入")
    public Envelop importData(
            @ApiParam(name = "file", value = "文件", required = true)
            @RequestPart(value = "file") MultipartFile file,
            HttpServletRequest request) throws IOException, ManageException {
        try {
            request.setCharacterEncoding("UTF-8");
            AExcelReader excelReader = new BaseDoctorExcelDOReader();
            excelReader.read(file);
            //验证未通过(暂无验证)
            List<BaseDoctorExcelDO> errorLs = excelReader.getErrorLs();
            List<BaseDoctorExcelDO> correctLs = excelReader.getCorrectLs();
            if(correctLs.size()>0){
                Map<String, Object> result = baseDoctorService.batchInsertDoctor(correctLs);
                result.put("errorLs", errorLs);
                return success("导入成功!", result);
            }
        }catch (Exception e){
            e.printStackTrace();
            return failed("导入异常,请检查导入文件格式" + e.getMessage());
        }
        return failed("导入失败");
    }
}

+ 6 - 2
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/open/register/RegisterEndpoint.java

@ -70,10 +70,10 @@ public class RegisterEndpoint extends EnvelopRestEndpoint {
        SaasDO saasDO = toEntity(jsonSaas, SaasDO.class);
        if(!ValidateUtil.isValidMobileNo(saasDO.getMobile())){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Saas.MOBILE_IS_EXIST), Envelop.class);
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Saas.PHONE_IS_NOT_FORMAT), Envelop.class);
        }
        if(!ValidateUtil.isValidEmail(saasDO.getEmail())){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Saas.EMAIL_IS_EXIST), Envelop.class);
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Saas.EMAIL_IS_NOT_FORMAT), Envelop.class);
        }
        String redisKey = redisPrefix + saasDO.getEmail();
@ -147,6 +147,10 @@ public class RegisterEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "邮件发送")
    public Envelop send(@ApiParam(name = "email", value = "邮箱地址", required = true)
                         @RequestParam String email) throws Exception {
        if(!ValidateUtil.isValidEmail(email)){
            return failed(errorCodeUtil.getErrorMsg(BaseErrorCode.Saas.EMAIL_IS_NOT_FORMAT), Envelop.class);
        }
        //建立邮件消息
        SimpleMailMessage mainMessage = new SimpleMailMessage();
        //发送者

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

@ -8,7 +8,6 @@ import com.yihu.jw.entity.base.system.SystemDictDO;
import com.yihu.jw.restmodel.base.system.SystemDictVO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
@ -33,7 +32,7 @@ public class SystemDictEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SystemDictService systemDictService;
    @Value("${configDefault.saasId}")
    private String saasId;
    private String defaultSaasId;
    @PostMapping(value = BaseRequestMapping.SystemDict.DELETE)
@ -54,7 +53,7 @@ public class SystemDictEndpoint extends EnvelopRestEndpoint {
            @RequestParam String jsonData) throws Exception {
        SystemDictDO systemDictDO = toEntity(jsonData, SystemDictDO.class);
        if(StringUtils.isBlank(systemDictDO.getSaasId())){
            systemDictDO.setSaasId(saasId);
            systemDictDO.setSaasId(defaultSaasId);
        }
        if (null == systemDictDO.getCode()) {
            return failed("ID不能为空", Envelop.class);
@ -68,6 +67,8 @@ public class SystemDictEndpoint extends EnvelopRestEndpoint {
    public Envelop page(
            @ApiParam(name = "dictType", value = "字典类型")
            @RequestParam(value = "dictType", required = true) String dictType,
            @ApiParam(name = "saasId", value = "saasId")
            @RequestParam(value = "saasId", required = false) String saasId,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
@ -76,6 +77,9 @@ public class SystemDictEndpoint 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(saasId)){
            saasId = defaultSaasId;
        }
        if (StringUtils.isBlank(filters)) {
            filters = "saasId=" + saasId+";";
        } else {
@ -93,10 +97,15 @@ public class SystemDictEndpoint extends EnvelopRestEndpoint {
    public ListEnvelop<SystemDictVO> list(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "saasId", value = "saasId")
            @RequestParam(value = "saasId", required = false) String saasId,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        if(StringUtils.isBlank(saasId)){
            saasId = defaultSaasId;
        }
        if (StringUtils.isBlank(filters)) {
            filters = "saasId=" + saasId+";";
        } else {

+ 13 - 4
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/system/SystemDictEntryEndpoint.java

@ -16,7 +16,6 @@ import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -33,7 +32,7 @@ public class SystemDictEntryEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SystemDictEntryService systemDictEntryService;
    @Value("${configDefault.saasId}")
    private String saasId;
    private String defaultSaasId;
    @PostMapping(value = BaseRequestMapping.SystemDictEntry.CREATE)
    @ApiOperation(value = "创建")
@ -47,7 +46,7 @@ public class SystemDictEntryEndpoint extends EnvelopRestEndpoint {
            return failed("字典项编码不能为空!",ObjEnvelop.class);
        }
        if(StringUtils.isBlank(systemDictEntryDO.getSaasId())){
            systemDictEntryDO.setSaasId(saasId);
            systemDictEntryDO.setSaasId(defaultSaasId);
        }
        if(StringUtils.isNotBlank(systemDictEntryDO.getValue())){
            systemDictEntryDO.setPyCode(PinyinUtil.getPinYinHeadChar(systemDictEntryDO.getValue(), true));
@ -80,7 +79,7 @@ public class SystemDictEntryEndpoint extends EnvelopRestEndpoint {
            return failed("字典项编码不能为空!",ObjEnvelop.class);
        }
        if(StringUtils.isBlank(systemDictEntryDO.getSaasId())){
            systemDictEntryDO.setSaasId(saasId);
            systemDictEntryDO.setSaasId(defaultSaasId);
        }
        if(StringUtils.isNotBlank(systemDictEntryDO.getValue())){
            systemDictEntryDO.setPyCode(PinyinUtil.getPinYinHeadChar(systemDictEntryDO.getValue(), true));
@ -122,12 +121,17 @@ public class SystemDictEntryEndpoint extends EnvelopRestEndpoint {
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "saasId", value = "saasId")
            @RequestParam(value = "saasId", required = false) String saasId,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        if(StringUtils.isBlank(saasId)){
            saasId = defaultSaasId;
        }
        if (StringUtils.isBlank(filters)) {
            filters = "saasId=" + saasId+";";
        } else {
@ -143,10 +147,15 @@ public class SystemDictEntryEndpoint extends EnvelopRestEndpoint {
    public ListEnvelop<SystemDictEntryVO> list (
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "saasId", value = "saasId")
            @RequestParam(value = "saasId", required = false) String saasId,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts) throws Exception {
        if(StringUtils.isBlank(saasId)){
            saasId = defaultSaasId;
        }
        if (StringUtils.isBlank(filters)) {
            filters = "saasId=" + saasId+";";
        } else {

+ 8 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/user/UserEndpoint.java

@ -1,5 +1,6 @@
package com.yihu.jw.base.endpoint.user;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.base.service.user.UserService;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.jw.restmodel.base.user.UserVO;
@ -17,6 +18,7 @@ import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * Endpoint - 后台管理员
@ -117,4 +119,10 @@ public class UserEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = BaseRequestMapping.User.findUserBaseInfo)
    @ApiOperation(value = "获取登录基本信息")
    public ObjEnvelop<Map<String,Object>> findUserBaseInfo(@ApiParam(name = "id", value = "用户id", required = true)
                                                               @RequestParam(value = "id", required = false)String id){
        return success(BaseRequestMapping.User.api_success,userService.findUserBaseInfo(id));
    }
}

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

@ -11,12 +11,10 @@ import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
import com.yihu.jw.rm.base.WechatRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -94,8 +92,9 @@ public class WechatController extends EnvelopRestEndpoint {
    @GetMapping(value = BaseRequestMapping.WeChat.findWechatCombo)
    @ApiOperation(value = "微信信息下拉框", notes = "微信信息下拉框")
    public MixEnvelop<WxComboVO,WxComboVO> findWechatCombo() {
        return wechatService.findWechatCombo();
    public MixEnvelop<WxComboVO,WxComboVO> findWechatCombo(@ApiParam(name = "saasId", value = "微信id")
                                                           @RequestParam(value = "saasId", required = false)String saasId) {
        return wechatService.findWechatCombo(saasId);
    }
    //====================微信与租户管理end=======================

+ 101 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/BaseDoctorService.java

@ -4,9 +4,15 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.base.dao.dict.DictDoctorDutyDao;
import com.yihu.jw.base.dao.dict.DictHospitalDeptDao;
import com.yihu.jw.base.dao.dict.DictJobTitleDao;
import com.yihu.jw.base.dao.doctor.BaseDoctorDao;
import com.yihu.jw.base.service.dict.DictDoctorDutyService;
import com.yihu.jw.base.service.dict.DictHospitalDeptService;
import com.yihu.jw.base.dao.doctor.BaseDoctorHospitalDao;
import com.yihu.jw.base.dao.org.BaseOrgDao;
import com.yihu.jw.base.service.doctor.excelImport.BaseDoctorExcelDO;
import com.yihu.jw.base.service.org.OrgTree;
import com.yihu.jw.base.service.org.OrgTreeService;
import com.yihu.jw.base.service.org.tree.SimpleTree;
@ -16,9 +22,13 @@ import com.yihu.jw.base.util.ConstantUtils;
import com.yihu.jw.base.util.JavaBeanUtils;
import com.yihu.jw.entity.base.dict.DictDoctorDutyDO;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
import com.yihu.jw.entity.base.dict.DictJobTitleDO;
import com.yihu.jw.entity.base.dict.DictDoctorDutyDO;
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.exception.business.ManageException;
import com.yihu.mysql.query.BaseJpaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
@ -61,6 +71,16 @@ public class BaseDoctorService extends BaseJpaService<BaseDoctorDO, BaseDoctorDa
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private BaseOrgDao baseOrgDao;
    @Autowired
    private DictHospitalDeptDao deptDao;
    @Autowired
    private DictDoctorDutyDao dutyDao;
    @Autowired
    private BaseDoctorHospitalDao doctorHospitalDao;
    @Autowired
    private DictJobTitleDao jobTitleDao;
    @Autowired
    private OrgTreeService orgTreeService;
@ -554,4 +574,85 @@ public class BaseDoctorService extends BaseJpaService<BaseDoctorDO, BaseDoctorDa
        result.put("msg",JavaBeanUtils.getInstance().mapListJson(list));
        return result;
    }
    public Map<String, Object> batchInsertDoctor(List<BaseDoctorExcelDO> doctors) throws ManageException {
        Map<String, Object> result = new HashMap<>();
        //批量存储的集合
//        int correctCount = 0;
//        List<BaseDoctorExcelDO> corrects = new ArrayList<>();
        BaseDoctorDO baseDoctorDO;
        //批量存储
        for(BaseDoctorExcelDO one:doctors){
            baseDoctorDO = new BaseDoctorDO();
            baseDoctorDO.setName(one.getName());
            baseDoctorDO.setDel(one.getDel());
            baseDoctorDO.setSex(one.getSex());
            baseDoctorDO.setIdcard(one.getIdcard());
            baseDoctorDO.setMobile(one.getMobile());
            baseDoctorDO.setIsFamous(one.getIsFamous());
            baseDoctorDO.setExpertise(one.getExpertise());
            baseDoctorDO.setIntroduce(one.getBrief());
            if(!StringUtils.isEmpty(one.getJobTitleName())){
                String[] job = one.getJobTitleName().split(",");
                String jobCode = job[0];
                DictJobTitleDO jobTitleDO = jobTitleDao.findByCode(jobCode);
                baseDoctorDO.setJobTitleCode(jobTitleDO.getCode());
                baseDoctorDO.setJobTitleName(jobTitleDO.getName());
            }
//            baseDoctorDao.save(baseDoctorDO);
            if(!StringUtils.isEmpty(one.getHospitalInfo())){
                BaseOrgDO orgDO = null;
                DictHospitalDeptDO hospitalDeptDO = null;
                DictDoctorDutyDO doctorDutyDO = null;
                String[] hospitals = one.getHospitalInfo().split(";");
                List<BaseDoctorHospitalDO> doctorHospitalList = new ArrayList<>();
                for(String hospital:hospitals){
                    String[] element = hospital.split("/");
                    String[] org = element[0].split(",");//机构
                    String[] dept = element[1].split(",");//部门
                    String[] duty = element[2].split(",");//职务
                    String orgCode = org[0];
                    String deptCode = dept[0];
                    String dutyCode = duty[0];
                    orgDO =baseOrgDao.findByCode(orgCode);
                    hospitalDeptDO = deptDao.findByCode(deptCode);
                    doctorDutyDO = dutyDao.findByCode(dutyCode);
                    //医生执业信息实体
                    BaseDoctorHospitalDO doctorHospitalDO = new BaseDoctorHospitalDO();
                    doctorHospitalDO.setOrgCode(orgDO.getCode());
                    doctorHospitalDO.setOrgName(orgDO.getName());
                    doctorHospitalDO.setDoctorCode(baseDoctorDO.getId());
                    doctorHospitalDO.setDeptCode(hospitalDeptDO.getCode());
                    doctorHospitalDO.setDoctorDutyCode(doctorDutyDO.getCode());
                    doctorHospitalDO.setDoctorDutyName(doctorDutyDO.getName());
                    doctorHospitalDO.setDel("1");
                    doctorHospitalList.add(doctorHospitalDO);
                }
                doctorHospitalDao.save(doctorHospitalList);
                if(!StringUtils.isEmpty(one.getRoleInfo())){
                    BaseDoctorRoleDO baseDoctorRoleDO = null;
                    DictJobTitleDO dictJobTitleDO = null;
                    String[] roles = one.getRoleInfo().split(";");
                    List<BaseDoctorRoleDO> baseDoctorRoleDOList = new ArrayList<>();
                    for(String role:roles){
                        String[] element = role.split(",");
                        String roleCode = element[0];
                        dictJobTitleDO = jobTitleDao.findByCode(roleCode);
                        baseDoctorRoleDO = new BaseDoctorRoleDO();
                        baseDoctorRoleDO.setDoctorCode(baseDoctorDO.getId());
                        baseDoctorRoleDO.setRoleModuleCode(dictJobTitleDO.getCode());
                        baseDoctorRoleDO.setName(dictJobTitleDO.getName());
                        baseDoctorRoleDO.setDel("1");
                        baseDoctorRoleDOList.add(baseDoctorRoleDO);
                    }
                    baseDoctorRoleService.batchInsert(baseDoctorRoleDOList);
                }
            }
        }
        result.put("correctCount", doctors.size());
        return result;
    }
}

+ 181 - 11
svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/excelImport/BaseDoctorExcelDO.java

@ -15,7 +15,7 @@ import java.util.Map;
import java.util.Set;
/**
 *  基础人口信息列表-excel实体类
 *  医生信息列表-excel实体类
 * @author lith
 * Created at 2018/10/22.
 */
@ -25,34 +25,37 @@ public class BaseDoctorExcelDO extends ExcelUtil implements Validation {
    @Location(x=0)
    @ValidRepeat
    String name;
    String name;//姓名
    @Location(x=1)
    @ValidRepeat
    String del;
    String del;//状态(1生效,0失效)
    @Location(x=2)
    @ValidRepeat
    String sex;
    Integer sex;//性别(1男2女)
    @Location(x=3)
    @ValidRepeat
    String idcard;
    String idcard;//身份证号
    @Location(x=4)
    @ValidRepeat
    String mobile;
    String mobile;//联系方式
    @Location(x=5)
    @ValidRepeat
    String hospitalInfo;
    String hospitalInfo;//机构/部门/职务
    @Location(x=6)
    @ValidRepeat
    Integer roleInfo;
    String jobTitleName;//职称
    @Location(x=7)
    @ValidRepeat
    String isFamous;
    String roleInfo;//归属业务模块角色
    @Location(x=8)
    @ValidRepeat
    Integer expertise;
    Integer isFamous;//是否名医
    @Location(x=9)
    @ValidRepeat
    String brief;
    String expertise;//专长
    @Location(x=10)
    @ValidRepeat
    String brief;//简介
    private String  saasId;
    //租户创建时间
@ -79,4 +82,171 @@ public class BaseDoctorExcelDO extends ExcelUtil implements Validation {
        return rs;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
    public String getIdcard() {
        return idcard;
    }
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    public String getHospitalInfo() {
        return hospitalInfo;
    }
    public void setHospitalInfo(String hospitalInfo) {
        this.hospitalInfo = hospitalInfo;
    }
    public String getRoleInfo() {
        return roleInfo;
    }
    public void setRoleInfo(String roleInfo) {
        this.roleInfo = roleInfo;
    }
    public Integer getIsFamous() {
        return isFamous;
    }
    public void setIsFamous(Integer isFamous) {
        this.isFamous = isFamous;
    }
    public String getExpertise() {
        return expertise;
    }
    public void setExpertise(String expertise) {
        this.expertise = expertise;
    }
    public String getBrief() {
        return brief;
    }
    public void setBrief(String brief) {
        this.brief = brief;
    }
    public String getSaasId() {
        return saasId;
    }
    public void setSaasId(String saasId) {
        this.saasId = saasId;
    }
    public Date getSaasCreateTime() {
        return saasCreateTime;
    }
    public void setSaasCreateTime(Date saasCreateTime) {
        this.saasCreateTime = saasCreateTime;
    }
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public String getDistrictCode() {
        return districtCode;
    }
    public void setDistrictCode(String districtCode) {
        this.districtCode = districtCode;
    }
    public String getDistrictName() {
        return districtName;
    }
    public void setDistrictName(String districtName) {
        this.districtName = districtName;
    }
    public Integer getNcdNum() {
        return ncdNum;
    }
    public void setNcdNum(Integer ncdNum) {
        this.ncdNum = ncdNum;
    }
    public int getYearNow() {
        return yearNow;
    }
    public void setYearNow(int yearNow) {
        this.yearNow = yearNow;
    }
    public String getJobTitleName() {
        return jobTitleName;
    }
    public void setJobTitleName(String jobTitleName) {
        this.jobTitleName = jobTitleName;
    }
}

+ 122 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/excelImport/BaseDoctorExcelDOReader.java

@ -0,0 +1,122 @@
package com.yihu.jw.base.service.doctor.excelImport;
import com.yihu.jw.base.dao.dict.DictDoctorDutyDao;
import com.yihu.jw.base.dao.dict.DictHospitalDeptDao;
import com.yihu.jw.base.dao.dict.DictJobTitleDao;
import com.yihu.jw.base.dao.org.BaseOrgDao;
import com.yihu.jw.base.endpoint.common.excel.AExcelReader;
import com.yihu.jw.entity.base.dict.DictJobTitleDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
/**
 * 医生信息列表-excel解析类
 * Created by 刘文彬 on 2018/10/24.
 */
public class BaseDoctorExcelDOReader extends AExcelReader {
    @Autowired
    private BaseOrgDao baseOrgDao;
    @Autowired
    private DictHospitalDeptDao deptDao;
    @Autowired
    private DictDoctorDutyDao dutyDao;
    @Autowired
    private DictJobTitleDao jobTitleDao;
    @Override
    public void read(Workbook rwb) throws Exception {
        try{
            Iterator<Sheet> sheets = rwb.sheetIterator();
            int j = 0, rows;
            BaseDoctorExcelDO baseDoctorExcelDO;
            getRepeat().put("name", new HashSet<>());
            getRepeat().put("del", new HashSet<>());
            getRepeat().put("sex", new HashSet<>());
            getRepeat().put("idcard", new HashSet<>());
            getRepeat().put("mobile", new HashSet<>());
            getRepeat().put("hospitalInfo", new HashSet<>());
            getRepeat().put("jobTitleName", new HashSet<>());
            getRepeat().put("roleInfo", new HashSet<>());
            getRepeat().put("isFamous", new HashSet<>());
            getRepeat().put("expertise", new HashSet<>());
            getRepeat().put("brief", new HashSet<>());
            while (sheets.hasNext()){
                Sheet sheet = sheets.next();
                if ((rows = sheet.getLastRowNum()) == 0) {
                    continue;
                }
                for (int i = 1; i <= rows; i++) {
                    baseDoctorExcelDO = new BaseDoctorExcelDO();
                    baseDoctorExcelDO.setName(replaceBlank(getCellCont(sheet, i, 0)));
                    baseDoctorExcelDO.setDel(replaceBlank(getCellCont(sheet, i, 1)));
                    baseDoctorExcelDO.setSex(null == getCellCont(sheet, i, 2)?null:Integer.valueOf(replaceBlank(getCellCont(sheet, i, 2)).trim()));
                    baseDoctorExcelDO.setIdcard(replaceBlank(getCellCont(sheet, i, 3)));
                    baseDoctorExcelDO.setMobile(replaceBlank(getCellCont(sheet, i, 4)));
                    baseDoctorExcelDO.setHospitalInfo(replaceBlank(getCellCont(sheet, i, 5)));
                    baseDoctorExcelDO.setJobTitleName(replaceBlank(getCellCont(sheet, i, 6)));
                    baseDoctorExcelDO.setRoleInfo(replaceBlank(getCellCont(sheet, i, 7)));
                    baseDoctorExcelDO.setIsFamous(null == getCellCont(sheet, i, 8)?null:Integer.valueOf(replaceBlank(getCellCont(sheet, i, 7)).trim()));
                    baseDoctorExcelDO.setExpertise(replaceBlank(getCellCont(sheet, i, 9)));
                    baseDoctorExcelDO.setBrief(replaceBlank(getCellCont(sheet, i, 10)));
                    baseDoctorExcelDO.setExcelSeq(i);
                    int rs = baseDoctorExcelDO.validate(repeat);
                    if (rs == 0||validate(baseDoctorExcelDO)== 0) {
                        errorLs.add(baseDoctorExcelDO);
                    } else if (rs == 1) {
                        correctLs.add(baseDoctorExcelDO);
                    }
                }
                j++;
            }
        }catch (Exception e){
            e.printStackTrace();
            throw e;
        }finally {
            if (rwb != null) {
                rwb.close();
            }
        }
    }
    public int validate(BaseDoctorExcelDO baseDoctorExcelDO) {
        int rs = 1;
        if(StringUtils.isNotEmpty(baseDoctorExcelDO.getHospitalInfo())){
            String[] hospitals = baseDoctorExcelDO.getHospitalInfo().split(";");
            for(String hospital:hospitals){
                String[] element = hospital.split("/");
                String[] org = element[0].split(",");//机构
                String[] dept = element[1].split(",");//部门
                String[] duty = element[1].split(",");//职务
                String orgCode = org[0];
                String deptCode = dept[0];
                String dutyCode = duty[0];
                if(!baseOrgDao.existsByCode(orgCode)){
                    return 0;
                }
                if(!deptDao.existsByCodeAndOrgCode(deptCode,orgCode)){
                    return 0;
                }
                if(!dutyDao.existsByCode(dutyCode)){
                    return 0;
                }
            }
        }
        if(StringUtils.isNotEmpty(baseDoctorExcelDO.getRoleInfo())){
            String[] roles = baseDoctorExcelDO.getRoleInfo().split(";");
            for(String role:roles){
                String[] element = role.split(",");
                String roleCode = element[0];
                if(jobTitleDao.existsByCode(roleCode)){
                    return 0;
                }
            }
        }
        return rs;
    }
}

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

@ -248,7 +248,7 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
        List<TreeNode> treeNodes = new ArrayList<>();
        treeNodes.addAll(orgTreeService.findListByLevel(OrgTree.Level.org.getLevelValue()));
        SimpleTree tree = new SimpleTree(treeNodes);
        SimpleTree tree = new SimpleTree(treeNodes,"");
        List<SimpleTreeNode> treeNode = tree.getRoot();
        SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
        filter.getExcludes().add("parent");
@ -267,7 +267,7 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
        List<TreeNode> treeNodes = new ArrayList<>();
        treeNodes.addAll(jdbcTemplate.query(sql.toString(),new BeanPropertyRowMapper(OrgTree.class)));
        SimpleTree tree = new SimpleTree(treeNodes);
        SimpleTree tree = new SimpleTree(treeNodes,"");
        List<SimpleTreeNode> treeNode = tree.getRoot();
        SimplePropertyPreFilter filter = new SimplePropertyPreFilter();
        filter.getExcludes().add("parent");

+ 29 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/org/tree/SimpleTree.java

@ -14,6 +14,35 @@ public class SimpleTree implements Tree{
        initTreeNodeList();
    }
    public SimpleTree(List<TreeNode> list,String isOrg){
        initOrgTreeNodeMap(list);
        initTreeNodeList();
    }
    private void initOrgTreeNodeMap(List<TreeNode> list){
        SimpleTreeNode treeNode = null;
        for(TreeNode item : list){
            treeNode = new SimpleTreeNode(item);
//            treeNodesMap.put(treeNode.getParentNodeId() + treeNode.getNodeId(), treeNode);
            treeNodesMap.put( treeNode.getNodeId(), treeNode);
        }
        Iterator<SimpleTreeNode> iter = treeNodesMap.values().iterator();
        SimpleTreeNode parentTreeNode = null;
        while(iter.hasNext()){
            treeNode = iter.next();
            if(treeNode.getParentNodeId() == null || treeNode.getParentNodeId() == ""){
                continue;
            }
            parentTreeNode = treeNodesMap.get(treeNode.getParentNodeId());
            if(parentTreeNode != null){
                treeNode.setParent(parentTreeNode);
                parentTreeNode.addChild(treeNode);
            }
        }
    }
    private void initTreeNodeMap(List<TreeNode> list){
        SimpleTreeNode treeNode = null;
        for(TreeNode item : list){

+ 29 - 13
svr/svr-base/src/main/java/com/yihu/jw/base/service/saas/SaasService.java

@ -131,6 +131,9 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
        userDO.setMobile(saas.getMobile());
        userDO.setName(saas.getManagerName());
        userDO.setUsername(userDO.getEmail());
        userDO.setAk("access_key");
        userDO.setGender(UserDO.Gender.male);
        userDO.setLoginFailureCount(0);
        saasAudit(saas, userDO);
        send(saas);
@ -353,7 +356,6 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
        //判断该用户是否已经存在
        UserDO userDO= userDao.findByUsername(saas.getEmail());
        userDO.setRoleCode(roleCode);
        if (null == userDO) {
            //初始化租户管理员
            user.setEnabled(true);
@ -370,6 +372,7 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
            }
            user.setPassword(MD5.md5Hex(password + "{" + user.getSalt() + "}"));
            user.setSaasId(saas.getId());
            user.setRoleCode(roleCode);
            user = userDao.save(user);
        } else {
            userDO.setSaasId(saas.getId());
@ -382,6 +385,19 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
        saas.setAppSecret(getCode());
        saas = saasDao.save(saas);
        String saasId = saas.getId();
        //字典配置(由于需要支持租户对字典的crud,目前考虑直接复制一套字典给租户单独使用)
//        List<SystemDictDO> systemDictDOList = systemDictDao.findBySaasId(defaultSaasId);
//        List<SystemDictDO> dictDOList = new ArrayList<>(systemDictDOList.size());
//        systemDictDOList.forEach(dict->{
//            SystemDictDO systemDictDO = new SystemDictDO();
//            systemDictDO.setSaasId(saasId);
//            systemDictDO.setName(dict.getName());
//            systemDictDO.setCode(dict.getCode());
//            systemDictDO.setPyCode(dict.getPyCode());
//            systemDictDO.setType(dict.getType());
//            dictDOList.add(systemDictDO);
//        });
        //系统字典项
        List<SystemDictEntryDO> systemDictEntryDOList = systemDictEntryDao.findBySaasId(defaultSaasId);
        List<SystemDictEntryDO> dictEntryDOList = new ArrayList<>(systemDictEntryDOList.size());
@ -462,17 +478,17 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
            diseaseDO.setCreateTime(new Date());
            diseaseDOList.add(diseaseDO);
        });
        //科室字典
        List<DictHospitalDeptDO> dictHospitalDeptDOList = dictHospitalDeptService.findBySaasId(defaultSaasId);
        List<DictHospitalDeptDO> hospitalDeptDOList = new ArrayList<>(dictHospitalDeptDOList.size());
        dictHospitalDeptDOList.forEach(dict->{
            DictHospitalDeptDO deptDO = new DictHospitalDeptDO();
            deptDO.setOrgCode(saasId);
            deptDO.setName(dict.getName());
            deptDO.setCode(dict.getCode());
            deptDO.setCreateTime(new Date());
            hospitalDeptDOList.add(deptDO);
        });
//        //科室字典
//        List<DictHospitalDeptDO> dictHospitalDeptDOList = dictHospitalDeptService.findBySaasId(defaultSaasId);
//        List<DictHospitalDeptDO> hospitalDeptDOList = new ArrayList<>(dictHospitalDeptDOList.size());
//        dictHospitalDeptDOList.forEach(dict->{
//            DictHospitalDeptDO deptDO = new DictHospitalDeptDO();
//            deptDO.setOrgCode(saasId);
//            deptDO.setName(dict.getName());
//            deptDO.setCode(dict.getCode());
//            deptDO.setCreateTime(new Date());
//            hospitalDeptDOList.add(deptDO);
//        });
        //保存数据
//        systemDictDao.save(dictDOList);
@ -482,7 +498,7 @@ public class SaasService extends BaseJpaService<SaasDO, SaasDao> {
        dictIcd10Dao.save(icd10DOList);
        dictHealthProblemDao.save(healthProblemDOList);
        dictDiseaseDao.save(diseaseDOList);
        dictHospitalDeptService.batchInsert(hospitalDeptDOList);
//        dictHospitalDeptService.batchInsert(hospitalDeptDOList);
        return saas;
    }

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

@ -91,6 +91,8 @@ public class SystemDictService extends BaseJpaService<SystemDictDO, SystemDictDa
        } else if (SystemDictEnum.DiseaseDict == SystemDictEnum.valueOf(type)) {
            jsonObject = dictDiseaseService.queryAll(saasId, createPage(page, size, sorts));
        } else {
            jsonObject = this.queryAll(saasId, createPage(page, size, sorts));
        }
        jsonArray.add(jsonObject);
        return jsonArray;
@ -286,7 +288,9 @@ public class SystemDictService extends BaseJpaService<SystemDictDO, SystemDictDa
        long count = 0;
        if (SystemDictEnum.Icd10Dict == SystemDictEnum.valueOf(type)) {
            DictIcd10DO dictIcd10DO = objectMapper.readValue(json, DictIcd10DO.class);
            dictIcd10DO.setSaasId(saasId);
            if(StringUtils.isBlank(dictIcd10DO.getSaasId())){
                dictIcd10DO.setSaasId(saasId);
            }
            dictIcd10Service.save(dictIcd10DO);
        } else if (SystemDictEnum.HospitalDeptDict == SystemDictEnum.valueOf(type)) {
            //科室只与机构有关。
@ -295,22 +299,30 @@ public class SystemDictService extends BaseJpaService<SystemDictDO, SystemDictDa
        } else if (SystemDictEnum.JobTitleDict == SystemDictEnum.valueOf(type)) {
            DictJobTitleDO dictJobTitleDO = objectMapper.readValue(json, DictJobTitleDO.class);
            dictJobTitleDO.setSaasId(saasId);
            if(StringUtils.isBlank(dictJobTitleDO.getSaasId())){
                dictJobTitleDO.setSaasId(saasId);
            }
            dictJobTitleService.save(dictJobTitleDO);
        } else if (SystemDictEnum.HealthProblemDict == SystemDictEnum.valueOf(type)) {
            DictHealthProblemDO dictHealthProblemDO = objectMapper.readValue(json, DictHealthProblemDO.class);
            dictHealthProblemDO.setSaasId(saasId);
            if(StringUtils.isBlank(dictHealthProblemDO.getSaasId())){
                dictHealthProblemDO.setSaasId(saasId);
            }
            dictHealthProblemService.save(dictHealthProblemDO);
        } else if (SystemDictEnum.MedicineDict == SystemDictEnum.valueOf(type)) {
            DictMedicineDO dictMedicineDO = objectMapper.readValue(json, DictMedicineDO.class);
            dictMedicineDO.setSaasId(saasId);
            if(StringUtils.isBlank(dictMedicineDO.getSaasId())){
                dictMedicineDO.setSaasId(saasId);
            }
            dictMedicineService.save(dictMedicineDO);
        } else if (SystemDictEnum.DiseaseDict == SystemDictEnum.valueOf(type)) {
            DictDiseaseDO dictDiseaseDO = objectMapper.readValue(json, DictDiseaseDO.class);
            dictDiseaseDO.setSaasId(saasId);
            if(StringUtils.isBlank(dictDiseaseDO.getSaasId())){
                dictDiseaseDO.setSaasId(saasId);
            }
            dictDiseaseService.save(dictDiseaseDO);
        } else {
            SystemDictDO systemDictDO = objectMapper.readValue(json, SystemDictDO.class);
@ -321,7 +333,9 @@ public class SystemDictService extends BaseJpaService<SystemDictDO, SystemDictDa
                systemDictDO.setPyCode(PinyinUtil.getPinYinHeadChar(systemDictDO.getName(), true));
            }
            systemDictDO.setType(SystemDictDO.Type.basic);
            systemDictDO.setSaasId(saasId);
            if(StringUtils.isBlank(systemDictDO.getSaasId())){
                systemDictDO.setSaasId(saasId);
            }
            this.save(systemDictDO);
        }
        result.put("response", ConstantUtils.SUCCESS);

+ 70 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/user/UserService.java

@ -1,10 +1,18 @@
package com.yihu.jw.base.service.user;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.base.dao.role.BaseRoleMenuDao;
import com.yihu.jw.base.dao.role.RoleDao;
import com.yihu.jw.base.dao.saas.SaasDao;
import com.yihu.jw.base.dao.user.UserDao;
import com.yihu.jw.entity.base.role.RoleDO;
import com.yihu.jw.entity.base.saas.SaasDO;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@ -21,6 +29,14 @@ public class UserService extends BaseJpaService<UserDO, UserDao> {
    @Autowired
    private UserDao userDao;
    @Autowired
    private RoleDao roleDao;
    @Autowired
    private SaasDao saasDao;
    @Autowired
    private BaseRoleMenuDao baseRoleMenuDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public UserDO registerWithIdcard(UserDO userDO) {
        userDO.setSalt(randomString(5));
@ -108,5 +124,59 @@ public class UserService extends BaseJpaService<UserDO, UserDao> {
        return result;
    }
    public Map<String,Object> findUserBaseInfo(String id){
        Map<String,Object> userinfo = new HashedMap();
        UserDO user = userDao.findOne(id);
        RoleDO role = roleDao.findByCode(user.getRoleCode());
        userinfo.put("id",user.getId());
        userinfo.put("name",user.getName());
        userinfo.put("role",role.getName());
        userinfo.put("roleCode",role.getCode());
        userinfo.put("system",role.getSystem());
        if("admin".equals(role.getCode())){
        }else if("saasAdmin".equals(role.getCode())){
            if(org.apache.commons.lang3.StringUtils.isNotBlank(user.getId())){
                SaasDO saas = saasDao.findOne(user.getSaasId());
                Map<String,Object> ss = new HashedMap();
                ss.put("id",saas.getId());
                ss.put("name",saas.getName());
                userinfo.put("saas",ss);
            }
        }else if("hosAdmin".equals(role.getCode())){
            String sql = "SELECT " +
                    " g.code AS orgCode, " +
                    " g.province_code AS provinceCode, " +
                    " g.province_name AS privinceName, " +
                    " g.city_code AS cityCode, " +
                    " g.city_name AS cityName, " +
                    " g.town_code AS townCode, " +
                    " g.town_name AS townName, " +
                    " g.street_code AS streetCode, " +
                    " g.street_name AS streetName, " +
                    " g.name, " +
                    " address " +
                    " FROM " +
                    " base_org g " +
                    " JOIN base_org_user u ON g.`code` = u.org_code " +
                    " WHERE  " +
                    " u.user_id = '"+id+"'";
            List<Map<String,Object>> org = jdbcTemplate.queryForList(sql);
            userinfo.put("org",org.get(0));
        }
        return userinfo;
    }
//    public Map<String,Object> findUserMenu(String id){
//
//    }
}

+ 23 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WechatService.java

@ -142,6 +142,12 @@ public class WechatService {
        if(wxWechatSaasDOs!=null&&wxWechatSaasDOs.size()>0){
            for(WxWechatSaasDO wxs:wxWechatSaasDOs){
                //删除该SaaS之前所以微信的关联关系
                List<WxWechatSaasDO> allsaas = wxWechatSaasDao.findBySaasId(wxs.getSaasId());
                if(allsaas!=null&&allsaas.size()>0){
                    wxWechatSaasDao.delete(allsaas);
                }
                wxs.setWechatId(wechat.getId());
            }
            wxWechatSaasDao.save(wxWechatSaasDOs);
@ -152,14 +158,23 @@ public class WechatService {
    public Envelop updateWxAndSaas(WxWechatDO wxWechatDO, List<WxWechatSaasDO> wxWechatSaasDOs) {
        wechatDao.save(wxWechatDO);
        //删除该微信所以SaaS关联关系
        List<WxWechatSaasDO> ws = wxWechatSaasDao.findByWechatId(wxWechatDO.getId());
        wxWechatSaasDao.delete(ws);
        if(wxWechatSaasDOs!=null&&wxWechatSaasDOs.size()>0){
            for(WxWechatSaasDO wxs:wxWechatSaasDOs){
                //删除该SaaS之前所以微信的关联关系
                List<WxWechatSaasDO> allsaas = wxWechatSaasDao.findBySaasId(wxs.getSaasId());
                if(allsaas!=null&&allsaas.size()>0){
                    wxWechatSaasDao.delete(allsaas);
                }
                wxs.setWechatId(wxWechatDO.getId());
            }
            //保存现有SaaS关系
            wxWechatSaasDao.save(wxWechatSaasDOs);
        }
        return Envelop.getSuccess(BaseRequestMapping.WeChat.api_success);
@ -183,15 +198,20 @@ public class WechatService {
    //====================图文素材管理============================
    public MixEnvelop findWechatCombo(){
    public MixEnvelop findWechatCombo(String saasId){
        String sql ="SELECT t.id,t.`name`," +
                "t.app_origin_id AS appOriginId," +
                "t.public_type AS publicType " +
                "from wx_wechat t";
        if(StringUtils.isNotBlank(saasId)){
            sql += " JOIN wx_wechat_saas s ON s.wechat_id = t.id " +
                   " WHERE s.saas_id ="+saasId;
        }
        List<WxComboVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WxComboVO.class));
        return MixEnvelop.getSuccessList(BaseRequestMapping.WeChat.api_success,list);
    }
    public MixEnvelop findWechatImgGroup(String wechatId,String scene,Integer page,Integer size){
        String totalSql ="SELECT COUNT(1) AS total from wx_graphic_scene g WHERE g.wechat_id ='"+wechatId+"'";
@ -657,6 +677,7 @@ public class WechatService {
    public JSONObject getusersummary(String wechatId,String beginDate,String endDate){
        String url ="https://api.weixin.qq.com/datacube/getusersummary?access_token="+wxAccessTokenService.getWxAccessTokenById(wechatId).getAccessToken();
        //          "https://api.weixin.qq.com/datacube/getusersummary?access_token=ACCESS_TOKEN"
        JSONObject paramJson = new JSONObject();
@ -670,6 +691,7 @@ public class WechatService {
    }
    public JSONObject getusercumulate(String wechatId,String beginDate,String endDate){
        String url ="https://api.weixin.qq.com/datacube/getusercumulate?access_token="+wxAccessTokenService.getWxAccessTokenById(wechatId).getAccessToken();
        JSONObject paramJson = new JSONObject();

+ 1 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/service/wx/WxAccessTokenService.java

@ -102,10 +102,10 @@ public class WxAccessTokenService extends BaseJpaService<WxAccessTokenDO, WxAcce
        try {
            //根据wechatCode查找出appid和appSecret
            WxWechatDO wxWechat = wechatDao.findById(wechatId);
            List<WxAccessTokenDO> wxAccessTokens =  wxAccessTokenDao.getWxAccessTokenById(wechatId);
            if(wxWechat==null){
                throw new ApiException(WechatRequestMapping.WxConfig.message_fail_wxWechat_is_no_exist, ExceptionCode.common_error_params_code);
            }
            List<WxAccessTokenDO> wxAccessTokens =  wxAccessTokenDao.getWxAccessTokenById(wechatId);
            if(wxAccessTokens!=null&&wxAccessTokens.size()>0){
                for (WxAccessTokenDO accessToken : wxAccessTokens) {
                    if ((System.currentTimeMillis() - accessToken.getAddTimestamp()) < (accessToken.getExpiresIn() * 500)) {