ソースを参照

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

zhenglingfeng 8 年 前
コミット
48d1fae5e7
28 ファイル変更660 行追加350 行削除
  1. 11 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java
  2. 1 28
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/DoctorAdminTeamDao.java
  3. 2 19
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/HospitalDao.java
  4. 2 10
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/SignDataFilter.java
  5. 4 5
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBExtract.java
  6. 1 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBPageExtract.java
  7. 187 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/mycache/CachePool.java
  8. 2 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/Level1Role.java
  9. 7 3
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/Level2Role.java
  10. 12 13
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/RedisStorage.java
  11. 3 17
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignExpenseStatusJob.java
  12. 1 8
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignJob.java
  13. 102 141
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java
  14. 1 7
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/HealthSignJob.java
  15. 1 12
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignAgeGroupDiseaseJob.java
  16. 3 17
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignExpenseStatusJob.java
  17. 1 2
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignJob.java
  18. 2 24
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/signfamily/SignFamily.java
  19. 17 2
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java
  20. 88 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/login/LoginLog.java
  21. 12 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/login/LoginLogDao.java
  22. 8 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/scheduling/DoctorWorkTimeService.java
  23. 6 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  24. 21 12
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java
  25. 20 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/common/login/LoginLogService.java
  26. 65 13
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/LoginController.java
  27. 75 15
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java
  28. 5 0
      patient-co-wlyy/src/main/resources/weixin_menu.txt

+ 11 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java

@ -310,6 +310,17 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    @ApiOperation(value = "查看緩存情况")
    @RequestMapping(value = "seeCache", method = RequestMethod.GET)
    public String seeCache() {
        try {
            String message=jobService.seeCache();
            return write(200,message);
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    //@RequestMapping(value = "startaaaa", method = RequestMethod.GET)
    public String startaaaa() {
        try {

+ 1 - 28
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/DoctorAdminTeamDao.java

@ -16,36 +16,9 @@ import java.util.List;
public interface DoctorAdminTeamDao extends
        PagingAndSortingRepository<AdminTeam, Long>,
        JpaSpecificationExecutor<AdminTeam> {
    /**
     * 团队内,全科医生的签约数。
     *
     * @param doctorCode
     * @param teamId
     * @return
     */
    @Query("SELECT count(s) FROM SignFamily s WHERE doctor = :doctorCode AND adminTeamId = :teamId")
    Integer getDoctorSignCount(@Param(value = "doctorCode") String doctorCode,
                               @Param(value = "teamId") long teamId);
    /**
     * 团队内,健康管理师的签约数。
     *
     * @param healthDoctorCode
     * @param teamId
     * @return
     */
    @Query("SELECT count(s) FROM SignFamily s WHERE doctorHealth = :healthDoctorCode AND adminTeamId = :teamId")
    Integer getHealthDoctorSignCount(@Param(value = "healthDoctorCode") String healthDoctorCode,
                                     @Param(value = "teamId") long teamId);
    @Query("SELECT t.id from AdminTeam t WHERE t.leaderCode = :leaderCode")
    Long findIdByLeaderCode(@Param("leaderCode") String leaderCode);
    @Query(" from AdminTeam t")
    @Query(" from AdminTeam t where length(t.orgCode) = 10")
    List<AdminTeam> findAllTeam();
    @Query("SELECT t from AdminTeam t WHERE t.leaderCode = :leaderCode")
    AdminTeam findByLeaderCode(@Param("leaderCode") String leaderCode);
}

+ 2 - 19
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/HospitalDao.java

@ -15,28 +15,11 @@ import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface HospitalDao extends PagingAndSortingRepository<Hospital, Long>,JpaSpecificationExecutor<Hospital>  {
	// 根據CODE查詢医院名称
	@Query("select p from Hospital p where p.code = ?1")
	Hospital findByCode(String code);
	@Query("select a from Hospital a where a.name like ?1 and a.id<?2")
	Page<Hospital> getHospitalList(String query, long id, Pageable pageRequest);
	@Query("select p from Hospital p where p.del = 1 and p.level in (1,2) ")
	List<Hospital> findAllHospital();
	@Query("select p from Hospital p where p.del = 1 and p.level = 2 ")
	List<Hospital> findAllSqHospital();
	@Query("select p from Hospital p where p.del = 1 and p.level = 2 and town = ?1")
	List<Hospital> findAreaSqHospital(String town);
	@Query("select p from Hospital p where p.del = 1 and p.level =2 and p.centerSite='00'")
	@Query("select p from Hospital p where p.del = 1 and p.level =2 and p.centerSite='00' and length(p.code) = 10 ")
	List<Hospital> findHospital2();
	@Query("select p from Hospital p where p.del = 1 and p.level =2 and p.centerSite='00'")
	@Query("select p from Hospital p where p.del = 1 and p.level =2 and p.centerSite='00' and length(p.code) = 10  ")
	List<Hospital> findHospitalzxFWZ();
	@Query("select p from Hospital p where p.town = ?1 and p.del='1' and p.level =2 and p.centerSite='00'")
	List<Hospital> findByTownCode(String town);
}

+ 2 - 10
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/SignDataFilter.java

@ -2,14 +2,12 @@ package com.yihu.wlyy.statistics.etl.dataFilter;
import com.yihu.wlyy.statistics.dao.DoctorAdminTeamDao;
import com.yihu.wlyy.statistics.dao.HospitalDao;
import com.yihu.wlyy.statistics.dao.SignPatientLabelInfoDao;
import com.yihu.wlyy.statistics.dao.TownDao;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.job.business.Constant;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
@ -47,8 +45,6 @@ public class SignDataFilter {
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
    @Autowired
    private CachePool cachePool;
    private int count=0;
@ -119,7 +115,6 @@ public class SignDataFilter {
            townsMap.put(town.getCode(), town);
        }
        List<ETLModel> etlModelList=new ArrayList<>();//返回的ETL數據
        Long cityCount = new Long(0L); //统计到市的数目
@ -338,10 +333,7 @@ public class SignDataFilter {
            count++;
        }
        String returnLevel2Key= signFamily.getExpensesStatus();
        if(returnLevel2Key==null){
            returnLevel2Key="0";
        }
        if("".equals(returnLevel2Key.trim())){
        if(StringUtils.isEmpty(returnLevel2Key)){
            returnLevel2Key="0";
        }
        return returnLevel2Key;

+ 4 - 5
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBExtract.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.statistics.etl.extract;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.util.SpringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -19,8 +20,6 @@ import java.util.List;
public class DBExtract<T> {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DBPageExtract dbPageExtract;
    /**
     * 不分页抽取
@ -41,7 +40,7 @@ public class DBExtract<T> {
     * @return
     */
    public List<T> extractByPage(Class<T> clazz,String sql,String countSql,int pageSize,Boolean isMultithreading)throws  Exception{
        return dbPageExtract.extractByPage(clazz,sql,countSql,pageSize,isMultithreading);
        return SpringUtil.getBean(DBPageExtract.class).extractByPage(clazz,sql,countSql,pageSize,isMultithreading);
    }
    /**
     * 分页抽取
@ -52,7 +51,7 @@ public class DBExtract<T> {
     */
    public List<Object> extractByPage(Class<T> clazz,String sql,String countSql,Boolean isMultithreading)throws  Exception{
        int pageSize=10000;
        return dbPageExtract.extractByPage(clazz,sql,countSql,pageSize,isMultithreading);
        return SpringUtil.getBean(DBPageExtract.class).extractByPage(clazz,sql,countSql,pageSize,isMultithreading);
    }
    /**
     * 分页抽取
@ -64,6 +63,6 @@ public class DBExtract<T> {
        int pageSize=10000;
        Boolean isMultithreading=false;
        String countSql="";
        return dbPageExtract.extractByPage(clazz,sql,countSql,pageSize,isMultithreading);
        return SpringUtil.getBean(DBPageExtract.class).extractByPage(clazz,sql,countSql,pageSize,isMultithreading);
    }
}

+ 1 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBPageExtract.java

@ -25,6 +25,7 @@ import java.util.concurrent.Future;
public class DBPageExtract<T> {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private  List<T> returnList=new ArrayList<T>();
    public synchronized void addData( List<T> dataList) {

+ 187 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/mycache/CachePool.java

@ -0,0 +1,187 @@
package com.yihu.wlyy.statistics.etl.mycache;
import com.yihu.wlyy.statistics.dao.SignPatientLabelInfoDao;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.job.business.Constant;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.util.SpringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.19.
 */
@Component
public class CachePool {
    /**
     * 到达量的缓存  key 是时间yyyy-MM-dd
     */
    private static Map<String,CacheModel> arriveSignFamilyExpenseStatus1Map=new HashMap<String,CacheModel>();
    /**
     * 分组标签的缓存 key 是患者code
     */
    private static Map<String,String> patientGroup=new HashMap<String,String>();
    /**
     * 健康标签的缓存 key 是患者code
     */
    private static Map<String,String> healthGroup=new HashMap<String,String>();
    /**
     * 疾病标签的缓存 key 是患者code
     */
    private static Map<String,List<String>> diseaseGroup=new HashMap<String,List<String>>();
    /**
     * 某天的签约的已扣费的到达量
     * @param date
     * @return
     * @throws Exception
     */
    public synchronized CacheModel getSignFamilysWithExpenseStatus1ByDate(String date) throws Exception{
        CacheModel model= arriveSignFamilyExpenseStatus1Map.get(date);
        if(model==null){
            model=new CacheModel();
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient from wlyy_sign_family a where status in(1,2) and a.type =2  and expenses_status=1 and a.expenses_time< '"+date+ Constant.quota_date_last+"'" ;
            String sqlCount="select count(id) from wlyy_sign_family a where  status in(1,2) and a.type =2  and expenses_status=1 and a.expenses_time< '"+date+ Constant.quota_date_last+"'";
            //抽取數據 分页抽取
            List<SignFamily> signFamiliesTemp= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            model.setSql(sql);
            model.setSignFamilies(signFamiliesTemp);
            arriveSignFamilyExpenseStatus1Map.put(date,model);
            return model;
        }else{
            return model;
        }
    }
    /**
     * 查询某人的分组标签
     * @param patientCode
     * @return
     * @throws Exception
     */
    public String getPatientGroup(String patientCode){
        String code=null;
        try{
            if(patientGroup.size()==0){
                initPatientGroup();
            }
            code= patientGroup.get(patientCode);
            if(StringUtils.isEmpty(code)){
                code="0";
            }
        }catch (Exception e){
            e.printStackTrace();
            return code;
        }
        return code;
    }
    private synchronized void initPatientGroup() throws  Exception{
        if(patientGroup.size()==0) {
            String sql="select patient,label from wlyy_sign_patient_label_info where label_type='1' and status=1";
            String countSql="select count(id) from wlyy_sign_patient_label_info where label_type='1' and status=1";
            List<SignPatientLabelInfo> signPatientLabelInfoList = SpringUtil.getBean(DBExtract.class).extractByPage(SignPatientLabelInfo.class,sql,countSql,true);
            for (SignPatientLabelInfo signPatientLabelInfo : signPatientLabelInfoList) {
                patientGroup.put(signPatientLabelInfo.getPatient(), signPatientLabelInfo.getLabel());
            }
        }
    }
    /**
     * 查询某人的健康标签
     * @param patientCode
     * @return
     * @throws Exception
     */
    public  String getHealthGroup(String patientCode){
        String code="0";
        try{
            if(healthGroup.size()==0){
                initHealthGroup();
            }
             code= healthGroup.get(patientCode);
        }catch (Exception e){
            e.printStackTrace();
            return code;
        }
        return code;
    }
    private synchronized void initHealthGroup()  throws  Exception{
        if(healthGroup.size()==0){
            String sql="select patient,label from wlyy_sign_patient_label_info where label_type='2' and status=1";
            String countSql="select count(id) from wlyy_sign_patient_label_info where label_type='2' and status=1";
            List<SignPatientLabelInfo> signPatientLabelInfoList = SpringUtil.getBean(DBExtract.class).extractByPage(SignPatientLabelInfo.class,sql,countSql,true);
            for(SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
                healthGroup.put(signPatientLabelInfo.getPatient(),signPatientLabelInfo.getLabel());
            }
        }
    }
    /**
     * 查询某人的疾病标签
     * @param patientCode
     * @return
     * @throws Exception
     */
    public  List<String> getDiseaseGroup(String patientCode) {
        try{
            if(diseaseGroup.size()==0){
                initDiseaseGroup();
            }
            List<String> code= diseaseGroup.get(patientCode);
            return code;
        }catch (Exception e){
            return null;
        }
    }
    private synchronized void initDiseaseGroup()  throws  Exception{
        if(diseaseGroup.size()==0){
            String sql="select patient,label from wlyy_sign_patient_label_info where label_type='3' and status=1";
            String countSql="select count(id) from wlyy_sign_patient_label_info where label_type='3' and status=1";
            List<SignPatientLabelInfo> signPatientLabelInfoList = SpringUtil.getBean(DBExtract.class).extractByPage(SignPatientLabelInfo.class,sql,countSql,true);
            for(SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
                if(diseaseGroup.containsKey(signPatientLabelInfo.getPatient())){
                    List<String> code= diseaseGroup.get(signPatientLabelInfo.getPatient());
                    code.add(signPatientLabelInfo.getLabel());
                    diseaseGroup.put(signPatientLabelInfo.getPatient(),code);
                }else{
                    List<String> code=new ArrayList<>();
                    code.add(signPatientLabelInfo.getLabel());
                    diseaseGroup.put(signPatientLabelInfo.getPatient(),code);
                }
            }
        }
    }
    public static void cleanAllCache() {
        arriveSignFamilyExpenseStatus1Map.clear();
        patientGroup.clear();;
        diseaseGroup.clear();
        healthGroup.clear();
    }
    public static Map<String, CacheModel> getArriveSignFamilyExpenseStatus1Map() {
        return arriveSignFamilyExpenseStatus1Map;
    }
    public static Map<String, String> getPatientGroup() {
        return patientGroup;
    }
    public static Map<String, String> getHealthGroup() {
        return healthGroup;
    }
    public static Map<String, List<String>> getDiseaseGroup() {
        return diseaseGroup;
    }
}

+ 2 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/Level1Role.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.statistics.etl.role;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -14,7 +15,7 @@ import java.util.Map;
 * 1级维度 机构等级分组
 */
@Component
@Transactional
@Scope("prototype")
public class Level1Role {
    /**

+ 7 - 3
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/Level2Role.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.statistics.etl.role;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -13,8 +14,9 @@ import java.util.Map;
 * Created by Administrator on 2016.10.11.
 * 二级维度 的公共的统计算法
 */
@Component
@Transactional
@Scope("prototype")
public class Level2Role {
    public List<Map<String, Map<String, List<ETLModel>>>> elt(List<Map<String, List<ETLModel>>> data) throws  Exception{
        List<Map<String, Map<String, List<ETLModel>>>> returnMapsList=new ArrayList<Map<String, Map<String, List<ETLModel>>>>();
@ -57,9 +59,11 @@ public class Level2Role {
                //如果list不存在 新建一个
                if(etlModels==null){
                    etlModels=new ArrayList<>();
                    etlModels.add(eltModel);
                    childrens.put(sexKey,etlModels);
                }else{
                    etlModels.add(eltModel);
                }
                etlModels.add(eltModel);
                childrens.put(sexKey,etlModels);
            }
            tjMap.put(oneData.getKey(),childrens);
        }

+ 12 - 13
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/RedisStorage.java

@ -26,7 +26,6 @@ import java.util.*;
 */
@Component
@Scope("prototype")
@Transactional
public class RedisStorage {
    private Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
@ -593,9 +592,9 @@ public class RedisStorage {
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
@ -648,9 +647,9 @@ public class RedisStorage {
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
@ -723,9 +722,9 @@ public class RedisStorage {
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
@ -753,9 +752,9 @@ public class RedisStorage {
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));

+ 3 - 17
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignExpenseStatusJob.java

@ -1,42 +1,27 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.role.Level2Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.job.WlyyQuotaResult;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Calendar;
@ -112,8 +97,9 @@ public class AllSignExpenseStatusJob implements Job{
            List<SignFamily> signFamilies_2= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
            //抽取的语句
            sql="select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.apply_date< '"+date+ Constant.quota_date_last+"'";
            signFamilies_2.addAll(signFamilies_1);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies_1, SignDataFilter.level2Expenses,sql,date);
            FilterModel etlModels= signDataFilter.filter(signFamilies_2, SignDataFilter.level2Expenses,sql,date);
            //统计数据
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());

+ 1 - 8
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignJob.java

@ -1,20 +1,14 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.job.WlyyQuotaResult;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.Job;
@ -23,7 +17,6 @@ import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

+ 102 - 141
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java

@ -8,6 +8,7 @@ import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.*;
import com.yihu.wlyy.statistics.etl.storage.RedisStorage;
import com.yihu.wlyy.statistics.model.consult.ConsultTeam;
@ -47,8 +48,6 @@ import java.util.*;
@Component
@Scope("prototype")
public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
@ -58,16 +57,6 @@ public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private Level3Role level3Role;
    @Autowired
    private RedisStorage redisStorage;
    @Autowired
    private JdbcTemplate jdbcTemplate ;
    @Autowired
    private ConsultDataFilter consultDataFilter;
    @Autowired
    private HealthGuideDataFilter healthGuideDataFilter;
@ -121,7 +110,8 @@ public class CurrentDayAllQuotaJob implements Job {
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //清空缓存
            CachePool.cleanAllCache();
            //计算指标
            computequota();
        }catch (Exception e){
@ -138,24 +128,29 @@ public class CurrentDayAllQuotaJob implements Job {
        quartzJobLog.setJobStartTime(new Date());
        allContent=new StringBuffer();
        //找出今天的签约信息 yesterday,now
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        //抽取數據
        List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
        computequota_1(sql,signFamilies); //统计今天的签约
        //找出需要扣除的数据
        String deleteDql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
        //抽取數據
        List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteDql);
        computequota_1(sql,signFamilies,deleteSignFamilies); //统计今天的签约
        computequota_2(); //统计今天的解约
        computequota_3(); //统计今天的健康咨询量
        computequota_4(); //统计今天的随访量
        computequota_5(); //统计今天的健康指导
        computequota_6(sql,signFamilies); //统计今天的签约患者性别
        computequota_7(sql,signFamilies);//统计今天的签约患者分组
        computequota_8(sql,signFamilies);//统计今天的签约患者年龄
        computequota_6(sql,signFamilies,deleteSignFamilies); //统计今天的签约患者性别
        computequota_7(sql,signFamilies,deleteSignFamilies);//统计今天的签约患者分组
        computequota_8(sql,signFamilies,deleteSignFamilies);//统计今天的签约患者年龄
        computequota_9();//统计今天的待签约
        computequota_10();//统计今天的改签
        computequota_12(sql,signFamilies);//统计今天的签约下按年龄分组后再
        computequota_13(sql,signFamilies);//统计今天的签约量
        computequota_14(sql,signFamilies);//统计今天的签约数的扣费钱情况
        computequota_15(sql,signFamilies);//统计今天的健康分布统计
        computequota_16(sql,signFamilies);//统计今天的签约费用统计
        computequota_12(sql,signFamilies,deleteSignFamilies);//统计今天的签约下按年龄分组后再
        computequota_13(sql,signFamilies,deleteSignFamilies);//统计今天的签约量
        computequota_16_1(sql,signFamilies,deleteSignFamilies);//统计今天的签约数的扣费钱 1
        computequota_15(sql,signFamilies,deleteSignFamilies);//统计今天的健康分布统计
        computequota_16_0(sql,signFamilies,deleteSignFamilies);//统计今天的签约数的未扣费 0
        quartzJobLog.setJobContent(allContent.toString());
        quartzJobLog.setJobName("实时统计");
        quartzJobLog.setJobId("11");
@ -164,59 +159,48 @@ public class CurrentDayAllQuotaJob implements Job {
        quartzJobLogDao.save(quartzJobLog);
    }
    private void computequota_14(String sql,List<SignFamily> signFamilies_1) {
        String quotaId="14";
    private void computequota_16_1(String sql,List<SignFamily> signFamilies_1,List<SignFamily> deleteSignFamilies) {
        String quotaId="16";
        try{
            //找出今天的签约信息
            //String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and expenses_status=1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            //String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and expenses_status=1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            //抽取數據 expensesStatus=1
           // List<SignFamily> signFamilies_1= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            //抽取第二种条件的语句
             sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            List<SignFamily> signFamilies_2= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            //抽取的语句
            sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            for(SignFamily signFamily:deleteSignFamilies){
                signFamily.setExpensesStatus("1");
            }
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_1, SignDataFilter.level2Expenses,sql,null);
            //统计数据
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= level2Role.elt(returnDatas);
            //保存数据
            redisStorage.saveByLevel2(level2Data,null,quotaId,2,4,0);
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,SignDataFilter.level2Expenses,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= SpringUtil.getBean(Level2Role.class).elt(deleteReturnDatas);;
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,deleteLevel2Data,quotaId,1,4,1);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
        }
        allContent.append("-----------14----------");
        allContent.append("-----------16-1----------");
    }
    private void computequota_13(String sql,List<SignFamily> signFamilies) {
    private void computequota_13(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
        //找出今天的签约信息 yesterday,now
        //String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2  and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2  and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        try{
           //抽取數據 分页抽取
           //List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
           //清洗數據
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
           //统计数据
           List<Map<String, List<ETLModel>>>  returnData= levelRole.elt(etlModels.getEtlModelList());
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteDql);
           List<Map<String, List<ETLModel>>>  returnData= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(deleteEtlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnData,deleteReturnDatas,"13");
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnData,deleteReturnDatas,"13");
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -225,39 +209,38 @@ public class CurrentDayAllQuotaJob implements Job {
        allContent.append("-----------13----------");
    }
    private void computequota_16(String sql,List<SignFamily> signFamilies_1) {
    private void computequota_16_0(String sql,List<SignFamily> signFamilies_1,List<SignFamily> deleteSignFamilies) {
        String quotaId="16";
        //找出今天的签约信息
        try{
            //找出今天的签约信息
            //String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and expenses_status=1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
           // String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and expenses_status=1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            //抽取數據 expensesStatus=1
           // List<SignFamily> signFamilies_1= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            //抽取第二种条件的语句
             sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            //抽取第二种条件的语句 找出未缴费的
            sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status =0 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status =0 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            List<SignFamily> signFamilies_2= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            //抽取的语句
            sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_1, SignDataFilter.level2Expenses,sql,null);
             //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_2, SignDataFilter.level2Expenses,sql,null);
            //统计数据
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,SignDataFilter.level2Expenses,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= level2Role.elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= SpringUtil.getBean(Level2Role.class).elt(deleteReturnDatas);;
            //保存数据
            redisStorage.saveByLevel2(level2Data,null,quotaId,2,4,0);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,deleteLevel2Data,quotaId,0,4,0);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
        }
        allContent.append("-----------16----------");
        allContent.append("-----------16-0----------");
    }
    private void computequota_15(String sql,List<SignFamily> signFamilies) {
    private void computequota_15(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
        String quotaId="15";
        //找出今天的签约信息
        //String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
@ -267,21 +250,17 @@ public class CurrentDayAllQuotaJob implements Job {
           //清洗數據
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Health,sql,null);
           //统计数据 一级维度
           List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
           List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= level2Role.elt(returnDatas);
           //扣掉今天退費的
           String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
           //抽取數據
           List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteDql);
           List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
           //清洗數據
           FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,SignDataFilter.level2Health,sql,"now");
           //统计数据
           List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(deleteEtlModels.getEtlModelList());
           List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
           List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= SpringUtil.getBean(Level2Role.class).elt(deleteReturnDatas);;
            //保存数据
            redisStorage.saveByLevel2(patientSexRoleData,deleteLevel2Data,quotaId,4,5,0);
             SpringUtil.getBean(RedisStorage.class).saveByLevel2(patientSexRoleData,deleteLevel2Data,quotaId,4,5,0);
           allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -290,11 +269,11 @@ public class CurrentDayAllQuotaJob implements Job {
        allContent.append("-----------15----------");
    }
    private void computequota_12(String sql,List<SignFamily> signFamilies) throws Exception{
    private void computequota_12(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) throws Exception{
        String quotaId="12";
        //找出今天的签约信息
        //String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        String deleteSql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3  ";
        //String deleteSql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3  ";
        try{
             //抽取數據
@ -302,23 +281,21 @@ public class CurrentDayAllQuotaJob implements Job {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,SignDataFilter.level3Disease,sql,null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= level2Role.elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //统计数据 三级维度
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> returnD=level3Role.elt(patientSexRoleData);
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteSql);
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> returnD= SpringUtil.getBean(Level3Role.class).elt(patientSexRoleData);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,SignDataFilter.level2Age,SignDataFilter.level3Disease,sql,null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(deleteEtlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> deletePatientSexRoleData= level2Role.elt(deleteReturnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> deletePatientSexRoleData= SpringUtil.getBean(Level2Role.class).elt(deleteReturnDatas);
            //统计数据 三级维度
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> deleteReturnD=level3Role.elt(deletePatientSexRoleData);
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> deleteReturnD=SpringUtil.getBean(Level3Role.class).elt(deletePatientSexRoleData);
            //保存数据
            redisStorage.saveByLevel3(returnD,deleteReturnD,quotaId,6,4,2,1,1,1);
             SpringUtil.getBean(RedisStorage.class).saveByLevel3(returnD,deleteReturnD,quotaId,6,4,2,1,1,1);
        }catch (Exception e){
        }
@ -353,22 +330,18 @@ public class CurrentDayAllQuotaJob implements Job {
            rootMap.put(rootKey, groupMapTemp2);
        }
    }
    private void computequota_1(String sql,List<SignFamily> signFamilies) {
    private void computequota_1(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
        try{
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteDql);
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(deleteEtlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,deleteReturnDatas,"1");
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,deleteReturnDatas,"1");
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -388,9 +361,9 @@ public class CurrentDayAllQuotaJob implements Job {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -409,9 +382,9 @@ public class CurrentDayAllQuotaJob implements Job {
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter(consultTeams,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -431,9 +404,9 @@ public class CurrentDayAllQuotaJob implements Job {
            FilterModel etlModels = followUpDataFilter.filter(plans, sql, null);
            // 统计数据
            List<Map<String, List<ETLModel>>> returnDatas = levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -451,9 +424,9 @@ public class CurrentDayAllQuotaJob implements Job {
            //過濾數據
            FilterModel etlModels= healthGuideDataFilter.filter(consultTeams,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -462,7 +435,7 @@ public class CurrentDayAllQuotaJob implements Job {
        allContent.append("-----------5----------");
    }
    private void computequota_6(String sql,List<SignFamily> signFamilies) throws Exception {
    private void computequota_6(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) throws Exception {
        String quotaId="6";
        //找出今天的签约信息
      //  String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
@ -472,21 +445,17 @@ public class CurrentDayAllQuotaJob implements Job {
           //清洗數據
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Sex,sql,null);
           //统计数据 1级维度
           List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
           List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);;
           //扣掉今天退費的
           String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
           //抽取數據
           List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteDql);
           List<Map<String, Map<String, List<ETLModel>>>>  level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);;
           //清洗數據
           FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,SignDataFilter.level2Sex,sql,"now");
           //统计数据
           List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(deleteEtlModels.getEtlModelList());
           List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
           List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= SpringUtil.getBean(Level2Role.class).elt(deleteReturnDatas);;
            //保存数据
            redisStorage.saveByLevel2(level2Data,deleteLevel2Data,quotaId,3,1);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,deleteLevel2Data,quotaId,3,1);
           allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -495,7 +464,7 @@ public class CurrentDayAllQuotaJob implements Job {
        allContent.append("-----------6----------");
    }
    private void computequota_7(String sql,List<SignFamily> signFamilies) {
    private void computequota_7(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
        String quotaId="7";
        try{
          //  String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
@ -504,21 +473,17 @@ public class CurrentDayAllQuotaJob implements Job {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Group,sql,null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteDql);
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,SignDataFilter.level2Group,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(deleteEtlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= SpringUtil.getBean(Level2Role.class).elt(deleteReturnDatas);;
            //保存数据 1 表示:从1开始循环 6表示:循环6次 3表示 2级维度是 3
            redisStorage.saveByLevel2(level2Data,deleteLevel2Data,quotaId,6,3,-1);
             SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,deleteLevel2Data,quotaId,6,3,-1);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -527,7 +492,7 @@ public class CurrentDayAllQuotaJob implements Job {
        allContent.append("----------7-----------");
    }
    private void computequota_8(String sql,List<SignFamily> signFamilies)throws Exception {
    private void computequota_8(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies)throws Exception {
        String quotaId="8";
        try{
            //找出今天的签约信息
@ -537,21 +502,17 @@ public class CurrentDayAllQuotaJob implements Job {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,sql,null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);;
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,deleteDql);
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);;
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(deleteSignFamilies,SignDataFilter.level2Age,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(deleteEtlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= SpringUtil.getBean(Level1Role.class).elt(deleteEtlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= SpringUtil.getBean(Level2Role.class).elt(deleteReturnDatas);;
            //保存数据
            redisStorage.saveByLevel2(level2Data,deleteLevel2Data,quotaId,6,2);
             SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,deleteLevel2Data,quotaId,6,2);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -570,9 +531,9 @@ public class CurrentDayAllQuotaJob implements Job {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -591,9 +552,9 @@ public class CurrentDayAllQuotaJob implements Job {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
           allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();

+ 1 - 7
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/HealthSignJob.java

@ -1,21 +1,16 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.role.Level2Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.Job;
@ -24,7 +19,6 @@ import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

+ 1 - 12
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignAgeGroupDiseaseJob.java

@ -1,34 +1,23 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.*;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.job.WlyyQuotaResult;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.util.IdCardUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.json.JSONArray;
import org.json.JSONObject;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

+ 3 - 17
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignExpenseStatusJob.java

@ -1,42 +1,27 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.role.Level2Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.job.WlyyQuotaResult;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Calendar;
@ -111,10 +96,11 @@ public class SignExpenseStatusJob implements Job{
            String sql=" select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.apply_date< '"+date+ Constant.quota_date_last+"' and (expenses_status !=1 or expenses_status is null)";
            String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.apply_date< '"+date+ Constant.quota_date_last+"'and (expenses_status !=1 or expenses_status is null)  ";
            List<SignFamily> signFamilies_2= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
            signFamilies_2.addAll(signFamilies_1);
            //抽取的语句
            sql="select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.apply_date< '"+date+ Constant.quota_date_last+"'";
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies_1, SignDataFilter.level2Expenses,sql,date);
            FilterModel etlModels= signDataFilter.filter(signFamilies_2, SignDataFilter.level2Expenses,sql,date);
            //统计数据
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());

+ 1 - 2
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignJob.java

@ -1,17 +1,16 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.role.Level2Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.Job;

+ 2 - 24
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/signfamily/SignFamily.java

@ -430,31 +430,9 @@ public class SignFamily extends IdEntity {
	public String toString() {
		return "SignFamily{" +
				"code='" + code + '\'' +
				", lwCode='" + lwCode + '\'' +
				", type=" + type +
				", patient='" + patient + '\'' +
				", openid='" + openid + '\'' +
				", name='" + name + '\'' +
				", idcard='" + idcard + '\'' +
				", ssc='" + ssc + '\'' +
				", mobile='" + mobile + '\'' +
				", emerMobile='" + emerMobile + '\'' +
				", expensesStatus='" + expensesStatus + '\'' +
				", hospital='" + hospital + '\'' +
				", hospitalName='" + hospitalName + '\'' +
				", doctor='" + doctor + '\'' +
				", doctorName='" + doctorName + '\'' +
				", doctorHealth='" + doctorHealth + '\'' +
				", doctorHealthName='" + doctorHealthName + '\'' +
				", begin=" + begin +
				", end=" + end +
				", status=" + status +
				", images='" + images + '\'' +
				", reason='" + reason + '\'' +
				", czrq=" + czrq +
				", teamCode='" + teamCode + '\'' +
				", applyDate=" + applyDate +
				", signType='" + signType + '\'' +
				", familyCode='" + familyCode + '\'' +
				", adminTeamCode=" + adminTeamCode +
				'}';
	}

+ 17 - 2
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java

@ -4,7 +4,8 @@ import com.yihu.wlyy.statistics.dao.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.statistics.dao.QuartzJobConfigDao;
import com.yihu.wlyy.statistics.dao.QuotaDao;
import com.yihu.wlyy.statistics.dao.SignFamilyDao;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.job.business.QuartzHelper;
import com.yihu.wlyy.statistics.job.cache.CacheCleanJob;
import com.yihu.wlyy.statistics.job.check.CheckSignJob;
@ -16,7 +17,6 @@ import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.ClassArrayEditor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@ -392,4 +392,19 @@ public class JobService {
    public void cleanCache() {
        CachePool.cleanAllCache();
    }
    public String seeCache() {
        Map<String, CacheModel> cacheModesCache= CachePool.getArriveSignFamilyExpenseStatus1Map();
        Map<String, String> patientGroupCache=CachePool.getPatientGroup();
        Map<String, String> healthGroupCache=CachePool.getHealthGroup();
        Map<String, List<String>> diseaseGroupCache=CachePool.getDiseaseGroup();
        String returnMessage=" 签约缓存:缓存存在"+cacheModesCache.size()+"天的缓存,";
        for(Map.Entry<String, CacheModel> entry:cacheModesCache.entrySet()){
               returnMessage+=entry.getKey()+",";
        }
        returnMessage+="patientGroupCache"+(patientGroupCache.size()>0?"有缓存":"没有缓存");
        returnMessage+="healthGroupCache"+(healthGroupCache.size()>0?"有缓存":"没有缓存");
        returnMessage+="diseaseGroupCache"+(diseaseGroupCache.size()>0?"有缓存":"没有缓存");
        return returnMessage;
    }
}

+ 88 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/login/LoginLog.java

@ -0,0 +1,88 @@
package com.yihu.wlyy.entity.login;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by Administrator on 2016.10.20.
 */
@Entity
@Table(name = "wlyy_login_log")
public class LoginLog  extends IdEntity {
    private String loginType;//1 短信登录  2 密码登录
    private String userCode;//登录用户主键 患者code或者医生code
    private String userType;//1 患者 2医生
    private Long tokenId;//登录的tokenid
    private String type;//登录成功1 成功 2失败
    private Date createTime;//创建时间
    private String errorMessage;//错误信息
    private String phone;//电话号码
    public String getLoginType() {
        return loginType;
    }
    public void setLoginType(String loginType) {
        this.loginType = loginType;
    }
    public String getUserCode() {
        return userCode;
    }
    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }
    public String getUserType() {
        return userType;
    }
    public void setUserType(String userType) {
        this.userType = userType;
    }
    public Long getTokenId() {
        return tokenId;
    }
    public void setTokenId(Long tokenId) {
        this.tokenId = tokenId;
    }
    public String getErrorMessage() {
        return errorMessage;
    }
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 12 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/login/LoginLogDao.java

@ -0,0 +1,12 @@
package com.yihu.wlyy.repository.login;
import com.yihu.wlyy.entity.login.LoginLog;
import com.yihu.wlyy.entity.message.SMS;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Administrator on 2016.10.20.
 */
public interface LoginLogDao extends PagingAndSortingRepository<LoginLog, Long>, JpaSpecificationExecutor<LoginLog> {
}

+ 8 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/scheduling/DoctorWorkTimeService.java

@ -57,7 +57,14 @@ public class DoctorWorkTimeService extends BaseService {
        result.put("workTime", workTime != null ? new JSONObject(workTime) : "");
        result.put("workWeeks", workWeekList != null ? new JSONArray(workWeekList) : "");
        result.put("doctor", doc != null ? new JSONObject(doc) : "");
        JSONObject docJson = new JSONObject(doc);
        if(docJson.has("password")) {
            docJson.remove("password");
        }
        if(docJson.has("salt")) {
            docJson.remove("salt");
        }
        result.put("doctor", doc != null ? docJson : "");
        return result;
    }

+ 6 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -1325,6 +1325,12 @@ public class FamilyContractService extends BaseService {
        if (p != null) {
            JSONObject pJson = new JSONObject(p);
            if (pJson.has("password")) {
                pJson.remove("password");
            }
            if (pJson.has("salt")) {
                pJson.remove("salt");
            }
            result.put("patient", pJson);
        }

+ 21 - 12
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java

@ -206,7 +206,7 @@ public class StatisticsService extends BaseService {
        if (result != null && result.size() > 0) {
            return (result.get(0).get("amount") != null ? (Long.valueOf(result.get(0).get("amount").toString()) + todayAmount) : todayAmount);
        } else {
            return 0;
            return todayAmount;
        }
    }
@ -256,7 +256,7 @@ public class StatisticsService extends BaseService {
        // 截止日期包含当天,则从redis查询当天统计数据
        if (endDate.compareTo(new SimpleDateFormat("yyyy-MM-dd").format(new Date())) >= 0) {
            String val = redisTemplate.opsForValue().get("quota:16:" + level + ":" + area);
            String val = redisTemplate.opsForValue().get("quota:16:" + level + ":0:" + area);
            if (!StringUtils.isEmpty(val)) {
                JSONObject valJson = new JSONObject(val);
                if (valJson.has("num")) {
@ -270,7 +270,7 @@ public class StatisticsService extends BaseService {
        if (result != null && result.size() > 0) {
            return (result.get(0).get("amount") != null ? (Long.valueOf(result.get(0).get("amount").toString()) + todayAmount) : todayAmount);
        } else {
            return 0;
            return todayAmount;
        }
    }
@ -1855,6 +1855,9 @@ public class StatisticsService extends BaseService {
                        List<Hospital> hospitals = hospitalDao.findByTownCode(town.getCode());
                        for (Hospital hos : hospitals) {
                            if(hos.getCode().length() > 10){
                                continue;
                            }
                            Map<String, Object> obj = new HashMap<>();
                            obj.put("code", hos.getCode());
                            obj.put("name", hos.getName());
@ -1878,6 +1881,9 @@ public class StatisticsService extends BaseService {
                if (hospitals != null && hospitals.size() > 0) {
                    for (Hospital hos : hospitals) {
                        if(hos.getCode().length() > 10){
                            continue;
                        }
                        List<AdminTeam> teams = adminTeamDao.findByOrgCode(hos.getCode());
                        for (AdminTeam team : teams) {
@ -1918,6 +1924,8 @@ public class StatisticsService extends BaseService {
                        PopulationBase peopleNum = peopleNumDao.findByCodeAndYear(map.get("code").toString(), Calendar.getInstance().get(Calendar.YEAR));
                        if (peopleNum != null) {
                            map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getNum() * 100));
                            map.put("taskRate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getTaskNum() * 100));
                            map.put("targetRate",  df.format(peopleNum.getTaskNum() * 1.0000/ peopleNum.getNum() * 100));
                            map.put("num", peopleNum.getNum());
                            map.put("task", peopleNum.getTaskNum());
                        }
@ -1925,11 +1933,12 @@ public class StatisticsService extends BaseService {
                        JSONObject peopleNum = new JSONObject(redisNum);
                        if (peopleNum != null) {
                            map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getInt("num") * 100));
                            map.put("taskRate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getInt("taskNum") * 100));
                            map.put("targetRate", df.format(peopleNum.getInt("taskNum") * 1.0000 / peopleNum.getInt("num") * 100));
                            map.put("num", peopleNum.getInt("num"));
                            map.put("task", peopleNum.getInt("taskNum"));
                        }
                    }
                }
            }
@ -2506,7 +2515,7 @@ public class StatisticsService extends BaseService {
                "     quato_code = '" + index + "' " +
                "   and level1_type = '" + level + "' and del = '1' " +
                "   and quota_date >= '" + startDate + "' " +
                "   and quota_date <= '" + endDate + "' " +
                "   and quota_date <= '" + dateCon + "' " +
                "   and " + areaField + " = '" + area + "' ";
        List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql);
@ -2650,7 +2659,7 @@ public class StatisticsService extends BaseService {
                Map<String, Object> manbing = new HashMap<>();
                manbing.put("code", "2");
                manbing.put("name", "慢病人群");
                manbing.put("name", "慢病人群65岁以下");
                manbing.put("amount", Double.valueOf("0.0"));
                resultList.add(manbing);
@ -2678,11 +2687,11 @@ public class StatisticsService extends BaseService {
                tnbGxy.put("amount", Double.valueOf("0.0"));
                resultList.add(tnb);
//                Map<String, Object> mn65LowGxy = new HashMap<>();
//                mn65LowGxy.put("code", "7");
//                mn65LowGxy.put("name", "慢病人群65岁以上");
//                mn65LowGxy.put("amount", Double.valueOf("0.0"));
//                resultList.add(mn65LowGxy);
                Map<String, Object> mb65UpGxy = new HashMap<>();
                mb65UpGxy.put("code", "7");
                mb65UpGxy.put("name", "慢病人群65岁以上");
                mb65UpGxy.put("amount", Double.valueOf("0.0"));
                resultList.add(mb65UpGxy);
            } else if (index.equals(AGE)) {
                Map<String, Object> map1 = new HashMap<>();
                map1.put("code", "1");
@ -2791,7 +2800,7 @@ public class StatisticsService extends BaseService {
                if (index.equals(GROUP)) {
                    // 分组指标总数算法
                    String code = map.get("code") != null ? String.valueOf(map.get("code")) : "";
                    if (code.equals("0") || code.equals("1") || code.equals("2") || code.equals("3")) {
                    if (code.equals("0") || code.equals("1") || code.equals("2") || code.equals("3") || code.equals("7")) {
                        total += (long) map.get("amount");
                    }
                } else if (index.equals("16")) {

+ 20 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/common/login/LoginLogService.java

@ -0,0 +1,20 @@
package com.yihu.wlyy.service.common.login;
import com.yihu.wlyy.entity.login.LoginLog;
import com.yihu.wlyy.repository.login.LoginLogDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * Created by Administrator on 2016.10.20.
 */
@Service
public class LoginLogService {
    @Autowired
    private LoginLogDao loginLogDao;
    @Transactional
    public void saveLog(LoginLog loginLog){
        loginLogDao.save(loginLog);
    }
}

+ 65 - 13
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/LoginController.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.web.common.account;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.login.LoginLog;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.security.Token;
import com.yihu.wlyy.repository.security.TokenDao;
@ -9,6 +10,7 @@ import com.yihu.wlyy.service.common.account.DoctorService;
import com.yihu.wlyy.service.common.account.PatientService;
import com.yihu.wlyy.service.common.account.RoleService;
import com.yihu.wlyy.service.common.account.TokenService;
import com.yihu.wlyy.service.common.login.LoginLogService;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.MD5;
import com.yihu.wlyy.util.RSAUtils;
@ -66,6 +68,8 @@ public class LoginController extends BaseController {
    @Autowired
    private RoleService roleService;
    @Autowired
    private LoginLogService loginLogService;
    /**
     * 公钥生成并返回接口
@ -138,21 +142,37 @@ public class LoginController extends BaseController {
                         @RequestParam(required = false) String captcha,
                         @RequestParam(required = false) String idcard,
                         @RequestParam(required = false) String password) {
        String errorMessage;
        LoginLog loginLog=new LoginLog();
        loginLog.setCreateTime(new Date());
        loginLog.setPhone(mobile);
        loginLog.setType("2");
        loginLog.setUserType("2");
        try {
            if (StringUtils.isEmpty(getIMEI())) {
                return error(-1, "获取手机IMEI码失败!");
                errorMessage="获取手机IMEI码失败!";
                loginLog.setErrorMessage(errorMessage);
                loginLogService.saveLog(loginLog);
                return error(-1, errorMessage);
            }
            //身份证登录
            if(StringUtils.isNoneEmpty(mobile)&&StringUtils.isNoneEmpty(password)){
                password = RSAUtils.getInstance(doctorService).decryptString(password);
                Doctor doctor=doctorService.findDoctorByMobile(mobile);
                loginLog.setUserCode(doctor.getCode());
                loginLog.setLoginType("2");
                if(doctor==null){
                    return error(-1, "该身份证未注册!");
                    errorMessage="该身份证未注册!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1,errorMessage);
                }
                String loginPassword= MD5.GetMD5Code(password+doctor.getSalt());
                if(loginPassword.equals(doctor.getPassword())){
                    // 用户校验通过,生成token
                    Token token = tokenService.newToken(doctor.getCode(), getIMEI(), 2);
                    loginLog.setTokenId(token.getId());
                    loginLog.setType("1");
                    Map<String, Object> map = new HashMap<>();
                    map.put("id", doctor.getId());
                    map.put("uid", doctor.getCode());
@ -166,30 +186,53 @@ public class LoginController extends BaseController {
                    List<Map<String, String>> roleMap = roleService.getUserRoleAndArea(doctor.getCode());
                    map.put("userRole", roleMap);
                    if("10".equals(doctor.getLevel())&&roleMap.size()==0){
                        return error(-1, "改用户没有管理员权限");
                        errorMessage="改用户没有管理员权限";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);
                    }
                    loginLogService.saveLog(loginLog);
                    return write(200, "登录成功", "data", map);
                }else{
                    return error(-1, "密码错误,登录失败");
                    errorMessage="密码错误,登录失败";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                }
            }
            if(StringUtils.isNoneEmpty(mobile)&&StringUtils.isNoneEmpty(captcha)){
                // 对验证码进行校验
                int res = smsService.check(mobile, 5, captcha);
                switch (res) {
                    case -2:
                        return error(-1, "验证码已过期!");
                    case -1:
                        return error(-1, "请输入正确的验证码!");
                    case 0:
                        return error(-1, "验证码无效!");
                    case -2:{
                        errorMessage="验证码已过期!";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);}
                    case -1:{
                        errorMessage="请输入正确的验证码!";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);}
                    case 0:{
                        errorMessage="验证码无效!";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);}
                }
                Doctor doctor = doctorService.findDoctorByMobile(mobile);
                loginLog.setUserCode(doctor.getCode());
                loginLog.setLoginType("1");
                if (doctor == null) {
                    return error(-1, "该手机号未注册,请确认!");
                     errorMessage="该手机号未注册,请确认!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                } else {
                    // 用户校验通过,生成token
                    Token token = tokenService.newToken(doctor.getCode(), getIMEI(), 2);
                    loginLog.setTokenId(token.getId());
                    loginLog.setType("1");
                    Map<String, Object> map = new HashMap<>();
                    map.put("id", doctor.getId());
                    map.put("uid", doctor.getCode());
@ -203,13 +246,22 @@ public class LoginController extends BaseController {
                    List<Map<String, String>> roleMap = roleService.getUserRoleAndArea(doctor.getCode());
                    map.put("userRole", roleMap);
                    if("10".equals(doctor.getLevel())&&roleMap.size()==0){
                        return error(-1, "改用户没有管理员权限");
                        errorMessage="改用户没有管理员权限";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);
                    }
                    loginLogService.saveLog(loginLog);
                    return write(200, "登录成功", "data", map);
                }
            }
            return error(-1, "登录信息不完整,请重新输入!");
            errorMessage="登录信息不完整,请重新输入!";
            loginLog.setErrorMessage(errorMessage);
            loginLogService.saveLog(loginLog);
            return error(-1,errorMessage);
        } catch (Exception e) {
            loginLog.setErrorMessage(e.getMessage());
            loginLogService.saveLog(loginLog);
            error(e);
            return error(-1, "系统异常,登录失败");
        }

+ 75 - 15
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/account/WechatController.java

@ -2,14 +2,17 @@ package com.yihu.wlyy.web.common.account;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import com.yihu.wlyy.entity.login.LoginLog;
import com.yihu.wlyy.entity.patient.SocialSecurityInfo;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.SocialSecurityInfoDao;
import com.yihu.wlyy.service.app.family.FamilyService;
import com.yihu.wlyy.service.common.login.LoginLogService;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.MD5;
import io.swagger.annotations.Api;
@ -53,6 +56,8 @@ public class WechatController extends WeixinBaseController {
    private PatientDao patientDao;
    @Autowired
    private FamilyService familyService;
    @Autowired
    private LoginLogService loginLogService;
    /**
     * 患者注册-验证手机号
@ -328,18 +333,38 @@ public class WechatController extends WeixinBaseController {
            @RequestParam(required = false) String captcha,
            @RequestParam(required = false) String password,
            String openid) {
        String errorMessage;
        LoginLog loginLog=new LoginLog();
        loginLog.setCreateTime(new Date());
        loginLog.setPhone(mobile);
        loginLog.setType("2");
        loginLog.setUserType("1");
        try {
            //账号登录
            if(StringUtils.isNoneEmpty(mobile)&&StringUtils.isNoneEmpty(password)){
                Patient patient = patientService.findByMobile(mobile);
                loginLog.setUserCode(patient.getCode());
                loginLog.setLoginType("2");
                if (patient == null) {
                    return error(-1, "该手机号暂未注册帐号,请确认后重新输入!");
                    errorMessage="该手机号暂未注册帐号,请确认后重新输入!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                } else if (patient.getStatus() == 0) {
                    return error(-1, "该手机号已被禁止使用!");
                    errorMessage="该手机号已被禁止使用!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1,errorMessage );
                } else if (patient.getStatus() == 2) {
                    return error(-1, "该帐号正在审核中,请确认审核通过后再登录,“如有疑问,拨打400-6677-400转2人工客服”");
                    errorMessage="该帐号正在审核中,请确认审核通过后再登录,“如有疑问,拨打400-6677-400转2人工客服”";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                } else if (StringUtils.isEmpty(openid)) {
                    return error(-1, "无效的OpenID!");
                    errorMessage="无效的OpenID!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1,errorMessage);
                }
                //解密
                password = RSAUtils.getInstance(patientService).decryptString(password);
@ -365,9 +390,15 @@ public class WechatController extends WeixinBaseController {
                        //发送微信模板
                        familyService.sendWXMessage(patient);
                    }
                    loginLog.setLoginType("1");
                    loginLogService.saveLog(loginLog);
                    return write(200, "登录成功", "data", map);
                }else{
                    return error(-1, "密码错误,登录失败");
                    errorMessage="密码错误,登录失败";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                }
            }
            //短信登录
@ -375,22 +406,45 @@ public class WechatController extends WeixinBaseController {
                // 对验证码进行校验
                int res = smsService.check(mobile, 4, captcha);
                switch (res) {
                    case -2:
                        return error(-1, "验证码已过期!");
                    case -1:
                        return error(-1, "请输入正确的验证码!");
                    case 0:
                        return error(-1, "验证码无效!");
                    case -2:{
                        errorMessage="验证码已过期!";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);}
                    case -1:{
                        errorMessage="请输入正确的验证码!";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);}
                    case 0:{
                        errorMessage="验证码无效!";
                        loginLog.setErrorMessage(errorMessage);
                        loginLogService.saveLog(loginLog);
                        return error(-1, errorMessage);}
                }
                Patient patient = patientService.findByMobile(mobile);
                loginLog.setUserCode(patient.getCode());
                loginLog.setLoginType("1");
                if (patient == null) {
                    return error(-1, "该手机号暂未注册帐号,请确认后重新输入!");
                    errorMessage="该手机号暂未注册帐号,请确认后重新输入!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                } else if (patient.getStatus() == 0) {
                    return error(-1, "该手机号已被禁止使用!");
                    errorMessage="该手机号已被禁止使用!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                } else if (patient.getStatus() == 2) {
                    return error(-1, "该帐号正在审核中,请确认审核通过后再登录,“如有疑问,拨打400-6677-400转2人工客服”");
                    errorMessage="该帐号正在审核中,请确认审核通过后再登录,“如有疑问,拨打400-6677-400转2人工客服”";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                } else if (StringUtils.isEmpty(openid)) {
                    return error(-1, "无效的OpenID!");
                    errorMessage="无效的OpenID!";
                    loginLog.setErrorMessage(errorMessage);
                    loginLogService.saveLog(loginLog);
                    return error(-1, errorMessage);
                }
                // 绑定用户手机号和openid
@ -411,10 +465,16 @@ public class WechatController extends WeixinBaseController {
                    //发送微信模板
                    familyService.sendWXMessage(patient);
                }
                loginLog.setType("1");
                loginLogService.saveLog(loginLog);
                return write(200, "登录成功", "data", map);
            }
            return error(-1, "登录失败");
        } catch (Exception e) {
            errorMessage="系统异常,登录失败";
            loginLog.setErrorMessage(errorMessage);
            loginLogService.saveLog(loginLog);
            error(e);
            return error(-1, "系统异常,登录失败");
        }

+ 5 - 0
patient-co-wlyy/src/main/resources/weixin_menu.txt

@ -49,6 +49,11 @@
		   "name":"我的资料",
		   "url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid=appId&redirect_uri=server_url%2fwx%2fhtml%2fgrzx%2fhtml%2fmy-detail.html&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
		},
        {
           "type":"view",
           "name":"我的家庭",
           "url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid=appId&redirect_uri=server_url%2fwx%2fhtml%2fjtgx%2fhtml%2ffamily.html&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
        },
		{
		   "type":"view",
		   "name":"我的设备",