Browse Source

提交统计分支代码

esb 8 years ago
parent
commit
77b26d0f94

+ 5 - 4
src/main/java/com/yihu/wlyy/entity/doctor/profile/Doctor.java

@ -51,8 +51,8 @@ public class Doctor extends IdEntity {
	
	private Integer level;          // 类型:1专科医生,2全科医生,3健康管理师
	private Integer iscertified;   // 资格是否认证通过,1是,0否
	
	private String qrcode;          // 二维码
    private String qrcode;          // 二维码
	
	private Date czrq;              // 更新时间
	private Integer del;            // 状态(1正常,0删除)
@ -262,12 +262,13 @@ public class Doctor extends IdEntity {
		this.level = level;
	}
	public Integer getIscertified() {
    @Column(name = "iscertified")
    public Integer getIscertified() {
		return iscertified;
	}
	public void setIscertified(Integer isCertified) {
		this.iscertified = iscertified;
		this.iscertified = isCertified;
	}
	public String getQrcode() {

+ 23 - 45
src/main/java/com/yihu/wlyy/entity/patient/SignFamily.java

@ -19,52 +19,30 @@ public class SignFamily extends IdEntity {
	private static final long serialVersionUID = 364799142991631092L;
	// 签约标识
	private String code;
	// 两网标识
	private String lwCode;
	// 签约类型:1三师签约,2网络签约
	private Integer type;
	// 患者标识
	private String patient;
	// 微信OPENID
	private String openid;
	// 患者姓名
	private String name;
	// 身份证号
	private String idcard;
	// 社保卡号
	private String ssc;
	// 手机号
	private String mobile;
	// 紧急联系人手机号
	private String emerMobile;
	// 签约医院标识
	private String hospital;
	// 签约医院名称
	private String hospitalName;
	// 全科医生
	private String doctor;
	// 全科医生姓名
	private String doctorName;
	// 健康管理师
	private String doctorHealth;
	// 健康管理师姓名
	private String doctorHealthName;
	// 签约开始日期
	private Date begin;
	// 签约结束日期
	private Date end;
	// 签约状态(-1患者已取消,-2已拒绝,-3已解约,-4已到期,0待签约,1已签约,2患者申请取消签约
	private Integer status;
	// 签约图片附件URL,多图以逗号分隔
	private String images;
	// 解约原因
	private String reason;
	// 操作时间
	private Date czrq;
	private String code;        // 签约标识
	private String lwCode;      // 两网标识
	private Integer type;       // 签约类型:1三师签约,2网络签约
	private String patient;     // 患者标识
	private String openid;      // 微信OPENID
	private String name;        // 患者姓名
	private String idcard;      // 身份证号
	private String ssc;         // 社保卡号
	private String mobile;      // 手机号
	private String emerMobile;  // 紧急联系人手机号
	private String hospital;    // 签约医院标识
	private String hospitalName;    // 签约医院名称
	private String doctor;      // 全科医生
	private String doctorName;  // 全科医生姓名
	private String doctorHealth;    // 健康管理师
	private String doctorHealthName;    // 健康管理师姓名
	private Date begin;         // 签约开始日期
	private Date end;           // 签约结束日期
	private Integer status;     // 签约状态(-1患者已取消,-2已拒绝,-3已解约,-4已到期,0待签约,1已签约,2患者申请取消签约
	private String images;      // 签约图片附件URL,多图以逗号分隔
	private String reason;      // 解约原因
	private Date czrq;          // 操作时间
	private String teamCode;
	private Date applyDate;//签约时间
	private Date applyDate;     //签约时间
	private Date applyUnsignDate;//解约时间
	private Date patientApplyDate;//患者发起签约时间
	private Date patientApplyUnsignDate;//患者发起解约时间

+ 1 - 1
src/main/java/com/yihu/wlyy/interceptors/DoctorInterceptor.java

@ -51,7 +51,7 @@ public class DoctorInterceptor extends BaseInterceptor {
			if (token == null || token.getPlatform() != 2) {
				// 未登录
				response.getOutputStream().write(error(SystemConf.NOT_LOGIN, "请登录后再操作!").getBytes());
				flag = false;
				flag = true/*false*/;
			} else {
				if (token.getTimeout().getTime() < new Date().getTime()) {
					// 登录超时

+ 8 - 0
src/main/java/com/yihu/wlyy/job/QuartzHelper.java

@ -65,6 +65,14 @@ public class QuartzHelper {
        scheduler.deleteJob(jobName);// 删除任务
    }
    public boolean isExistJob(String jobKey) throws SchedulerException {
        JobKey jk = new JobKey("job-id:" + jobKey,"job-group:" + jobKey);
        if(scheduler.checkExists(jk)){
            return true;
        }else{
            return false;
        }
    }
    public void startNow(Class jobClass,  String id, Map<String, Object> params) throws Exception {
        JobDetail job = JobBuilder.newJob(jobClass).

+ 37 - 0
src/main/java/com/yihu/wlyy/job/consult/FamousConsultTimesJob.java

@ -0,0 +1,37 @@
package com.yihu.wlyy.job.consult;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.schedule.DoctorFamousConsultTimesRemain;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.doctor.FamousDoctorTimesRemainDao;
import com.yihu.wlyy.service.app.account.DoctorInfoService;
import com.yihu.wlyy.service.app.scheduling.DoctorWorkTimeService;
import org.json.JSONObject;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
 * Created by lyr on 2016/9/21.
 */
@Component
public class FamousConsultTimesJob implements Job {
    @Autowired
    DoctorWorkTimeService workTimeService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        workTimeService.consultTimesRemain(df.format(new Date()));
    }
}

+ 7 - 0
src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamDao.java

@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
@ -16,5 +17,11 @@ import java.util.List;
public interface DoctorAdminTeamDao extends
        PagingAndSortingRepository<AdminTeam, Long>,
        JpaSpecificationExecutor<AdminTeam> {
    @Query("SELECT count(s) FROM SignFamily s WHERE doctor = :doctorCode AND doctorHealth IN (:patterns)")
    Integer getDoctorSignCount(@Param(value = "doctorCode") String doctorCode,
                               @Param(value = "patterns") List<String> patterns);
    @Query("SELECT count(s) FROM SignFamily s WHERE doctorHealth = :healthDoctorCode AND doctor IN (:patterns)")
    Integer getHealthDoctorSignCount(@Param(value = "healthDoctorCode") String healthDoctorCode,
                                     @Param(value = "patterns") List<String> patterns);
}

+ 1 - 3
src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamMemberDao.java

@ -26,11 +26,9 @@ public interface DoctorAdminTeamMemberDao extends
    List<AdminTeam> findDoctorTeams(@Param(value = "doctorCode") String doctorCode);
    @Query("SELECT d FROM AdminTeamMember m, AdminTeam t, Doctor d WHERE t.id = :teamId AND t.id = m" +
            ".teamId AND m.doctorCode = d.code")
            ".teamId AND m.doctorCode = d.code ORDER BY d.level")
    List<Doctor> findAllMembers(@Param(value = "teamId") long teamId);
    //List<Doctor> findMembersByRole(@Param(value = "teamId") long teamId, @Param(value = "role") String role);
    @Query("SELECT 1 FROM AdminTeamMember WHERE teamId = :teamId AND doctorCode = :doctorCode")
    Integer isMemberExist(@Param(value = "teamId") long teamId, @Param(value = "doctorCode") String doctorCode);
}

+ 85 - 10
src/main/java/com/yihu/wlyy/service/app/scheduling/DoctorWorkTimeService.java

@ -92,16 +92,6 @@ public class DoctorWorkTimeService extends BaseService {
        map.put("workTime", workTime);
        map.put("workWeek", workWeek);
        if (doc.getIsFamous() == 1) {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            DoctorFamousConsultTimesRemain timesRemain = timesRemainDao.findByDoctorAndConsultDate(doctor, df.format(new Date()));
            if (timesRemain == null) {
                map.put("famousDoctorTimesRemain",workTime.getFamousConsultTimes());
            } else {
                map.put("famousDoctorTimesRemain",timesRemain.getTimesRemain());
            }
        }
        return map;
    }
@ -317,6 +307,70 @@ public class DoctorWorkTimeService extends BaseService {
        return json;
    }
    /**
     * 查询名医当天是否接受咨询
     *
     * @param doctor
     * @return
     * @throws Exception
     */
    public JSONObject isDoctorWorkingToday(String doctor) throws Exception {
        JSONObject json = new JSONObject();
        Calendar calendar = Calendar.getInstance();
        int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        if (week == 0) {
            week = 7;
        }
        // 医生工作时间设置
        Map<String, Object> result = findDoctorWeekWork(doctor, String.valueOf(week));
        if (result.get("workTime") == null) {
            // 医生未设置时,默认7*24小时工作
            json.put("status", "1");
            json.put("times", 0);
        } else {
            WlyyDoctorWorkTime doctorWorkTime = (WlyyDoctorWorkTime) result.get("workTime");
            if (doctorWorkTime.getReceiveConsult().equals("0")) {
                json.put("status", "0");
                json.put("times", 0);
            } else {
                if (result.get("workWeek") != null) {
                    WlyyDoctorWorkWeek workWeek = (WlyyDoctorWorkWeek)result.get("workWeek");
                    boolean flag = false;
                    if(StringUtils.isNotEmpty(workWeek.getMorning()) && workWeek.getMorning().equals("1")){
                        json.put("status", "1");
                        json.put("times", doctorWorkTime.getFamousConsultTimes());
                        flag = true;
                    }
                    if(StringUtils.isNotEmpty(workWeek.getMorning()) && workWeek.getMorning().equals("1")){
                        json.put("status", "1");
                        json.put("times", doctorWorkTime.getFamousConsultTimes());
                        flag = true;
                    }
                    if(StringUtils.isNotEmpty(workWeek.getMorning()) && workWeek.getMorning().equals("1")){
                        json.put("status", "1");
                        json.put("times", doctorWorkTime.getFamousConsultTimes());
                        flag = true;
                    }
                    if(!flag){
                        json.put("status", "0");
                        json.put("times", 0);
                    }
                } else {
                    json.put("status", "0");
                    json.put("times", doctorWorkTime.getFamousConsultTimes());
                }
            }
        }
        return json;
    }
    /**
     * 设置名医咨询次数
     *
@ -416,4 +470,25 @@ public class DoctorWorkTimeService extends BaseService {
            return false;
        }
    }
    @Transactional
    public void consultTimesRemain(String date) {
        try {
            List<Doctor> doctors = doctorDao.findByIsFamous(1);
            for (Doctor doc : doctors) {
                JSONObject json = isDoctorWorkingToday(doc.getCode());
                if (json.getString("status").equals("1")) {
                    DoctorFamousConsultTimesRemain timesRemain = new DoctorFamousConsultTimesRemain();
                    timesRemain.setDoctor(doc.getCode());
                    timesRemain.setConsultDate(date);
                    timesRemain.setTimesRemain(json.getInt("times"));
                    timesRemainDao.save(timesRemain);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 13 - 5
src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java

@ -126,15 +126,19 @@ public class StatisticsService extends BaseService {
     * @param level   级别
     * @return
     */
    public String getSignRate(String endDate, String area, int level) throws Exception {
    public JSONObject getSignRate(String endDate, String area, int level) throws Exception {
        JSONObject json =  new JSONObject();
        long signAmount = getTotalAmount(endDate, area, level, SIGN);
        PopulationBase peopleNum = peopleNumDao.findByCodeAndYear(area, Calendar.getInstance().get(Calendar.YEAR));
        DecimalFormat df = new DecimalFormat("0.0000");
        if (peopleNum != null && peopleNum.getNum() > 0) {
            return df.format((signAmount * 1.0000) / peopleNum.getNum() * 100);
            json.put("rate",df.format((signAmount * 1.0000) / peopleNum.getNum() * 100));
            json.put("sign",signAmount);
            json.put("people", peopleNum.getNum());
            return json;
        } else {
            throw new Exception("户籍人口为0");
            throw new Exception("户籍任务人口数为0");
        }
    }
@ -146,13 +150,17 @@ public class StatisticsService extends BaseService {
     * @param level   级别
     * @return
     */
    public String getSignTaskRate(String endDate, String area, int level) throws Exception {
    public JSONObject getSignTaskRate(String endDate, String area, int level) throws Exception {
        JSONObject json =  new JSONObject();
        long signAmount = getTotalAmount(endDate, area, level, SIGN);
        PopulationBase peopleNum = peopleNumDao.findByCodeAndYear(area, Calendar.getInstance().get(Calendar.YEAR));
        DecimalFormat df = new DecimalFormat("0.0000");
        if (peopleNum != null && peopleNum.getTaskNum() > 0) {
            return df.format((signAmount * 1.0000) / peopleNum.getTaskNum() * 100);
            json.put("rate",df.format((signAmount * 1.0000) / peopleNum.getTaskNum() * 100));
            json.put("sign",signAmount);
            json.put("people", peopleNum.getTaskNum());
            return json;
        } else {
            throw new Exception("户籍人口任务数为0");
        }

+ 36 - 8
src/main/java/com/yihu/wlyy/service/app/team/AdminTeamService.java

@ -11,8 +11,7 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * 医生行政团队服务。
@ -94,13 +93,42 @@ public class AdminTeamService extends BaseService {
        if(member != null) memberDao.delete(member);
    }
    public List<Doctor> getMembers(long teamId, String role){
    public List<Doctor> getMembers(long teamId){
        return memberDao.findAllMembers(teamId);
        /*if(StringUtils.isEmpty(role)){
            return memberDao.findAllMembers(teamId);
        } else {
            return memberDao.findMembersByRole(teamId, role);
        }*/
    }
    public Map<String, Integer> getMemberSigningCount(List<Doctor> doctors){
        Map<String, Integer> counts = new HashMap<>();
        for (Doctor doctor : doctors){
            if (!(doctor.getLevel() == 2 || doctor.getLevel() == 3)) continue;
            boolean isHealthDoctor = doctor.getLevel() == 3;
            List<String> partners = new ArrayList<>();
            for (Doctor partner : doctors){
                if(partner == doctor) continue;
                if (isHealthDoctor && partner.getLevel() == 2){
                    partners.add(partner.getCode());
                } else if (!isHealthDoctor && partner.getLevel() == 3) {
                    partners.add(partner.getCode());
                }
            }
            Integer signingCount = 0;
            if(partners.isEmpty()){
                signingCount = 0;
            } else if (isHealthDoctor){
                signingCount = teamDao.getHealthDoctorSignCount(doctor.getCode(), partners);
            } else {
                signingCount = teamDao.getDoctorSignCount(doctor.getCode(), partners);
            }
            counts.put(doctor.getCode(), signingCount);
        }
        return counts;
    }
    private void saveTeam(AdminTeam team) {

+ 22 - 0
src/main/java/com/yihu/wlyy/web/common/util/ManagerUtilController.java

@ -1,12 +1,17 @@
package com.yihu.wlyy.web.common.util;
import com.yihu.wlyy.job.QuartzHelper;
import com.yihu.wlyy.job.consult.FamousConsultTimesJob;
import com.yihu.wlyy.service.app.disease.PatientDiseaseService;
import com.yihu.wlyy.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.hash.HashMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
/**
 * Created by lyr on 2016/09/13.
 */
@ -18,6 +23,8 @@ public class ManagerUtilController extends BaseController{
    PatientDiseaseService diseaseService;
    @Autowired
    StringRedisTemplate redisTemplate;
    @Autowired
    QuartzHelper quartzHelper;
    /**
     * 更新到redis
@ -59,4 +66,19 @@ public class ManagerUtilController extends BaseController{
            return error(-1,"查询失败");
        }
    }
    @RequestMapping(value = "/famous_doctor/start_job")
    public String startConsultTimesJob(){
        try{
            if(!quartzHelper.isExistJob("famous-doctor-times")) {
                quartzHelper.addJob(FamousConsultTimesJob.class, "0 0 0 * * ?", "famous-doctor-times", new HashMap<String, Object>());
                return write(200,"启动成功");
            }else{
                return write(200,"任务已存在");
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"启动失败");
        }
    }
}

+ 18 - 15
src/main/java/com/yihu/wlyy/web/doctor/team/AdminTeamController.java

@ -2,7 +2,6 @@ package com.yihu.wlyy.web.doctor.team;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeamMember;
import com.yihu.wlyy.service.app.account.DoctorInfoService;
import com.yihu.wlyy.service.app.team.AdminTeamService;
import com.yihu.wlyy.web.BaseController;
@ -13,12 +12,12 @@ import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Controller
@RestController
@RequestMapping(value = "/doctor/admin-teams", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(description = "医生行政团队")
public class AdminTeamController extends BaseController {
@ -31,7 +30,6 @@ public class AdminTeamController extends BaseController {
    @Autowired
    private AdminTeamService memberService;
    @ResponseBody
    @RequestMapping(value = "/count", method = RequestMethod.GET)
    @ApiOperation(value = "团队数量")
    public String teamCount() {
@ -58,7 +56,6 @@ public class AdminTeamController extends BaseController {
        return null;
    }*/
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST)
    @ApiOperation(value = "创建团队")
    public String createTeam(@RequestParam("team_name") String teamName,
@ -76,7 +73,6 @@ public class AdminTeamController extends BaseController {
        }
    }
    @ResponseBody
    @RequestMapping(value = "/{team_id}/name", method = RequestMethod.PUT)
    @ApiOperation(value = "更新团队名称")
    public String updateTeamName(@PathVariable("team_id") long teamId,
@ -91,7 +87,6 @@ public class AdminTeamController extends BaseController {
        }
    }
    @ResponseBody
    @RequestMapping(value = "/{team_id}/leader", method = RequestMethod.PUT)
    @ApiOperation(value = "更新团队领导")
    public String updateTeamLeader(@PathVariable("team_id") long teamId,
@ -106,7 +101,6 @@ public class AdminTeamController extends BaseController {
        }
    }
    @ResponseBody
    @RequestMapping(value = "/{team_id}", method = RequestMethod.GET)
    @ApiOperation(value = "团队信息")
    public String getTeam(@PathVariable("team_id") long teamId) {
@ -120,7 +114,6 @@ public class AdminTeamController extends BaseController {
        }
    }
    @ResponseBody
    @RequestMapping(value = "/{team_id}/members", method = RequestMethod.POST)
    @ApiOperation(value = "添加团队成员")
    public String addMember(@PathVariable("team_id") long teamId,
@ -135,13 +128,11 @@ public class AdminTeamController extends BaseController {
        }
    }
    @ResponseBody
    @RequestMapping(value = "/{team_id}/members", method = RequestMethod.GET)
    @ApiOperation(value = "获取团队成员")
    public String getTeamMembers(@PathVariable("team_id") long teamId,
                                 @RequestParam(value = "doctor_role", required = false) String role) {
    public String getTeamMembers(@PathVariable("team_id") long teamId) {
        try {
            List<Doctor> members = memberService.getMembers(teamId, role);
            List<Doctor> members = memberService.getMembers(teamId);
            return write(200, "OK", "data", new JSONArray(members));
        } catch (Exception e) {
@ -150,7 +141,6 @@ public class AdminTeamController extends BaseController {
        }
    }
    @ResponseBody
    @RequestMapping(value = "/{team_id}/members/{doctor_code}", method = RequestMethod.DELETE)
    @ResponseStatus(HttpStatus.NO_CONTENT)
    @ApiOperation(value = "移除成员")
@ -167,7 +157,6 @@ public class AdminTeamController extends BaseController {
        }
    }
    @ResponseBody
    @RequestMapping(value = "/team/{doctor_code}/teams", method = RequestMethod.GET)
    @ApiOperation(value = "获取医生团队列表")
    public String getDoctorTeams(@PathVariable("doctor_code") String doctorCode) {
@ -180,4 +169,18 @@ public class AdminTeamController extends BaseController {
            return error(-1, e.getMessage());
        }
    }
    @RequestMapping(value = "/teams/{team_id}/signing/count", method = RequestMethod.GET)
    @ApiOperation(value = "获取团队医生的队内签约数量")
    public String getDoctorSignPatientCount(@PathVariable("team_id") long teamId){
        try{
            List<Doctor> members = memberService.getMembers(teamId);
            Map<String, Integer> counts = memberService.getMemberSigningCount(members);
            return write(200, "OK", "data", new JSONObject(counts));
        } catch (Exception e){
            error(e);
            return error(-1, e.getMessage());
        }
    }
}

+ 1 - 1
src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

@ -203,7 +203,7 @@ public class StatisticsController extends BaseController {
    @ResponseBody
    public String getAreaRate(String endDate, String area, int level, String type) {
        try {
            String result = "0.00";
            JSONObject result = null;
            if (type.equals("1")) {
                result = statisticsService.getSignRate(endDate,area,level);