Browse Source

云照护修改

LAPTOP-KB9HII50\70708 1 year ago
parent
commit
7ff1737ef3

+ 125 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/sign/SignEndpoint.java

@ -4,11 +4,12 @@ import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.aop.RedisLock;
import com.yihu.jw.care.dao.sign.ArchiveDao;
import com.yihu.jw.care.dao.sign.CapacityAssessmentRecordDao;
import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao;
import com.yihu.jw.care.service.sign.ArchiveService;
import com.yihu.jw.care.service.sign.CapacityAssessmentRecordService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.entity.care.archive.ArchiveDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
@ -17,6 +18,7 @@ import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.entity.ServiceException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -45,10 +47,130 @@ public class SignEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private CapacityAssessmentRecordService capacityAssessmentRecordService;
    @Autowired
    private CapacityAssessmentRecordDao capacityAssessmentRecordDao;
    private ServicePackageSignRecordDao servicePackageSignRecordDao;
    @Autowired
    private ServicePackageService servicePackageService;
    @PostMapping(value = "allocationDoctor")
    @ObserverRequired
    @ApiOperation(value = "分配服务者")
    public Envelop allocationDoctor (
            @ApiParam(name = "jsonData", value = "json数组", required = true)
            @RequestParam(value = "jsonData",required = true) String jsonData) {
        try{
            servicePackageService.allocationDoctor(jsonData);
            return Envelop.getSuccess("操作成功");
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @PostMapping(value = "check")
    @ObserverRequired
    @ApiOperation(value = "签约审核")
    public Envelop check (
            @ApiParam(name = "id", value = "申请id", required = true)
            @RequestParam(value = "id",required = true) String id,
            @ApiParam(name = "status", value = "1同意 2拒绝", required = true)
            @RequestParam(value = "status",required = true) String status,
            @ApiParam(name = "refuseType", value = "拒绝原因", required = false)
            @RequestParam(value = "refuseType",required = false) String refuseType,
            @ApiParam(name = "refuseReason", value = "拒绝说明", required = false)
            @RequestParam(value = "refuseReason",required = false) String refuseReason) {
        try{
            servicePackageService.check(id,getUID(),status, refuseType, refuseReason);
            return Envelop.getSuccess("操作成功");
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @GetMapping(value = "signNumPage")
    @ApiOperation(value = "签约人数列表")
    public PageEnvelop signNumPage (
            @ApiParam(name = "name", value = "居民姓名", required = false)
            @RequestParam(value = "name",required = false) String name,
            @ApiParam(name = "doctorId", value = "医生code", required = false)
            @RequestParam(value = "doctorId",required = false) String doctorId,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) {
        try{
            return servicePackageService.signNumPage(doctorId,name, page, size);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "signTopNum")
    @ApiOperation(value = "签约管理-签约各状态数")
    public ObjEnvelop signTopNum(
            @ApiParam(name = "doctorId", value = "医生id", required = true)
            @RequestParam String doctorId) {
        try{
            return ObjEnvelop.getSuccess("查询成功",servicePackageService.signTopNum(doctorId));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "doctorSignTopNum")
    @ApiOperation(value = "签约管理-获取签约人数/签约服务包数")
    public ObjEnvelop doctorSignTopNum(
            @ApiParam(name = "doctorId", value = "医生id", required = true)
            @RequestParam String doctorId) {
        try{
            int doctorSignTotal = servicePackageService.doctorSignTotal(doctorId);
            int doctorSignServerPackageTotal = servicePackageService.doctorSignServerPackageTotal(doctorId);
            JSONObject json = new JSONObject();
            json.put("signTotal",doctorSignTotal);
            json.put("packageTotal",doctorSignServerPackageTotal);
            return ObjEnvelop.getSuccess("查询成功",json);
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping(value = "revokeSign")
    @ObserverRequired
    @ApiOperation(value = "撤销签约")
    public Envelop revokeSign(
            @ApiParam(name = "id", value = "签约记录id", required = true)
            @RequestParam String id) {
        try{
            ServicePackageSignRecordDO signRecordDO = servicePackageSignRecordDao.findOne(id);
            if(signRecordDO.getStatus()==0||signRecordDO.getStatus()==2){
                signRecordDO.setStatus(-3);
                BasePatientDO patientDO = patientDao.findById(getUID());
                if(patientDO!=null){
                    signRecordDO.setRevoker(patientDO.getId());
                    signRecordDO.setRevokerName(patientDO.getName());
                }
                signRecordDO.setRevokeTime(DateUtil.getStringDate());
                servicePackageSignRecordDao.save(signRecordDO);
                return Envelop.getSuccess("查询成功");
            }else {
                return Envelop.getError("只有待审核和待支付才能撤销");
            }
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @GetMapping(value = "signInfo")
    @ApiOperation(value = "根据签约记录获取签约详情")
    public ObjEnvelop signInfo(
            @ApiParam(name = "id", value = "签约记录id", required = true)
            @RequestParam String id,
            @ApiParam(name = "type", value = "1返回分配情况  0不返回", required = false)
            @RequestParam(required = false) String type) {
        try{
            return ObjEnvelop.getSuccess("查询成功",servicePackageService.signInfo(id,type));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "signPage")
    @ApiOperation(value = "获取签约记录分页")
@ -59,7 +181,7 @@ public class SignEndpoint extends EnvelopRestEndpoint {
            @RequestParam(value = "doctorId",required = false) String doctorId,
            @ApiParam(name = "patientId", value = "居民id", required = false)
            @RequestParam(value = "patientId",required = false) String patientId,
            @ApiParam(name = "status", value = "状态 不传全部 0待审核 1已签约 2待支付 3已拒绝 -1已过期 -2已失效 -3已撤销", required = false)
            @ApiParam(name = "status", value = "状态 不传全部 0待审核 1已签约 2待支付 -4已拒绝 -1已过期 -2已失效 -3已撤销", required = false)
            @RequestParam(value = "status",required = false) String status,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,

+ 250 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java

@ -1,6 +1,7 @@
package com.yihu.jw.care.service.sign;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.dao.apply.PatientBedApplyDao;
import com.yihu.jw.care.dao.label.WlyyPatientLabelDao;
@ -8,6 +9,7 @@ import com.yihu.jw.care.dao.sign.*;
import com.yihu.jw.care.service.common.DictService;
import com.yihu.jw.care.service.device.DeviceService;
import com.yihu.jw.care.util.ConstantUtil;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.org.BaseOrgDO;
@ -86,13 +88,201 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
    private DeviceService deviceService;
    @Autowired
    private BasePatientHelperDao patientHelperDao;
    @Autowired
    private MessageUtil messageUtil;
    //分配服务者
    public void allocationDoctor(String jsonData) throws Exception{
        List<ServicePackageRecordDO> recordDOList = new ArrayList<>();
        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Map.class);
        List<Map<String, String>> list = objectMapper.readValue(jsonData, javaType);
        for (Map<String, String> map:list){
            ServicePackageRecordDO recordDO = new ServicePackageRecordDO();
            String signId = map.get("signId");
            String servicePackageId = map.get("servicePackageId");
            String patient = map.get("patient");
            String packageItemId = map.get("packageItemId");
            String type = map.get("type");
            String doctor = map.get("doctor");
            String doctorName = map.get("doctorName");
            String id = map.get("recordId");
            if(StringUtils.isNotBlank(id)&&!"null".equals(id)){
                recordDO.setCreateTime(new Date());
            }
            recordDO.setPatient(patient);
            recordDO.setSignId(signId);
            recordDO.setServicePackageId(servicePackageId);
            recordDO.setPackageItemId(packageItemId);
            recordDO.setDoctor(doctor);
            recordDO.setDoctorName(doctorName);
            recordDO.setType(type);
            recordDOList.add(recordDO);
        }
        servicePackageRecordDao.save(recordDOList);
    }
    /**
     * 签约审核
     * @param id 申请记录id
     * @param uid
     * @param status 1同意 2拒绝
     * @param refuseType 拒绝原因
     * @param refuseReason 拒绝说明
     */
    public void check(String id,String uid,String status,String refuseType,String refuseReason){
        ServicePackageSignRecordDO signRecordDO = servicePackageSignRecordDao.findOne(id);
        BaseDoctorDO doctorDO = doctorDao.findById(uid);
        signRecordDO.setCheckTime(DateUtil.getStringDate());
        if(doctorDO!=null){
            signRecordDO.setCheckDoctor(doctorDO.getId());
            signRecordDO.setCheckDoctorName(doctorDO.getName());
        }
        if("2".equals(status)){
            signRecordDO.setStatus(-4);
            signRecordDO.setRefuseType(refuseType);
            signRecordDO.setRefuseReason(refuseReason);
        }else {
            signRecordDO.setStatus(2);
            ServicePackageDO servicePackageDO = servicePackageDao.findOne(signRecordDO.getServicePackageId());
            //判断支付金额
            if(new BigDecimal(0).compareTo(servicePackageDO.getPrice())==0){
                //不需要支付
                signRecordDO.setStatus(1);//已签约
                //设置到期时间
                setSignDate(servicePackageDO,signRecordDO);
            }else{
                signRecordDO.setPayTime((3*24*60)+"");//3天 单位分钟
            }
        }
        servicePackageSignRecordDao.save(signRecordDO);
    }
    /**
     * 签约人数列表
     * status 状态 0待审核 1已签约 2待支付 3已拒绝 -1已过期 -2已失效 -3已撤销
     */
    public PageEnvelop signNumPage(String doctorId,String name,Integer page,Integer size){
        String sql = "SELECT DISTINCT ar.level_conclusion,di2.dict_value levelConclusionName,p.id" +
                ",p.`name`,p.sex,p.mobile,p.idcard,p.birthday,p.openid,p.photo ";
        String countSql = "select count(distinct p.id) ";
        String filter = " from base_patient p  " +
                " inner JOIN base_service_package_sign_record r on p.id = r.patient and r.status=1 " +
                " LEFT JOIN base_capacity_assessment_record ar on ar.patient = p.id and ar.assessment_time>= '" + DateUtil.getNowYear() + "-01-01' " +
                " LEFT JOIN wlyy_hospital_sys_dict di2 on di2.dict_name = 'level_conclusion' and di2.dict_code=ar.level_conclusion " +
                " where 1=1 ";
        if(StringUtils.isNotBlank(doctorId)){
            filter += " and r.check_doctor = '"+doctorId+"' ";
        }
        if(StringUtils.isNotBlank(name)){
            filter += " and p.name like '%"+name+"%' ";
        }
        String oderBy = " order by r.id desc limit "+(page-1)*size+","+size;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filter+oderBy);
        String packageSql = "SELECT r.id,r.end_time,r.type,p.`name`,p.num from base_service_package_sign_record r,base_service_package p " +
                "WHERE r.patient =? and r.`status`=1 and r.service_package_id=p.id ";
        for (Map<String,Object> map:list){
            String id = map.get("id")+"";
            String idcard = map.get("idcard")+"";
            String birthday = map.get("birthday")+"";
            map.put("age", IdCardUtil.getAgeByBirthdayStrOrIdcard(idcard,birthday));
            List<Map<String,Object>> packageList = jdbcTemplate.queryForList(packageSql,new Object[]{id});
            map.put("packageList",packageList);
        }
        long count = jdbcTemplate.queryForObject(countSql+filter+oderBy,Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,size,count);
    }
    /**
     * 获取签约总人数
     * @param doctorId
     * @return
     */
    public int doctorSignTotal(String doctorId){
        String sql = "SELECT COUNT(distinct sr.patient) from base_service_package_sign_record sr " +
                "WHERE sr.status=1 and sr.check_doctor = '"+doctorId+"' ";
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    //签约服务包数
    public int doctorSignServerPackageTotal(String doctorId){
        String sql = "SELECT COUNT(sr.service_package_id) from base_service_package_sign_record sr " +
                "WHERE sr.status=1 and sr.check_doctor = '"+doctorId+"' ";
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    /**
     * 签约详情
     * @param id
     * @param type 1返回分配情况  0不返回
     * @return
     * @throws Exception
     */
    public JSONObject signInfo(String id,String type){
        JSONObject json = new JSONObject();
        ServicePackageSignRecordDO signRecordDO = servicePackageSignRecordDao.findOne(id);
        ServicePackageDO servicePackageDO = servicePackageDao.findOne(signRecordDO.getServicePackageId());
        List<ServicePackageItemDO> itemDOList = null;
        if("1".equals(type)){
            String sql = "SELECT i.*,r.id recordId,r.doctor,r.doctor_name,r.type serverType from base_service_package_item i " +
                    "LEFT JOIN base_service_package_record r on r.sign_id='"+id+"' and r.package_item_id=i.id " +
                    "WHERE i.service_package_id ='"+servicePackageDO.getId()+"' and i.del='1' ";
            itemDOList = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(ServicePackageItemDO.class));
        }else {
            itemDOList = servicePackageItemDao.findByServicePackageId(signRecordDO.getServicePackageId());
        }
        servicePackageDO.setPackageItemDOList(itemDOList);
        json.put("signRecordDO",signRecordDO);
        json.put("servicePackageDO",servicePackageDO);
        return json;
    }
    //签约各状态数 状态新- 0待审核 1已签约 2待支付 -4已拒绝 -1已过期 -2已失效 -3已撤销
    public JSONObject signTopNum(String doctorId){
        JSONObject result = new JSONObject();
        int total = 0;
        int auditNum = 0;//待审核
        int payNum = 0;//待支付
        int signNum = 0;//已签约
        int expiredNum = 0;//已到期
        String sql = "SELECT COUNT(sr.id) num,status  from base_service_package_sign_record sr " +
                "WHERE sr.status=1 and sr.check_doctor = '"+doctorId+"' group by status";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map :list){
            String status = map.get("status")+"";
            int num = Integer.parseInt(map.get("num")+"");
            total += num;
            if("0".equals(status)){
                auditNum = num;
                continue;
            }
            if("2".equals(status)){
                payNum = num;
                continue;
            }
            if("1".equals(status)){
                signNum = num;
                continue;
            }
            if("-1".equals(status)){
                expiredNum = num;
            }
        }
        result.put("total",total);
        result.put("auditNum",auditNum);
        result.put("payNum",payNum);
        result.put("signNum",signNum);
        result.put("expiredNum",expiredNum);
        return result;
    }
    /**
     * 签约记录
     * status 状态 0待审核 1已签约 2待支付 3已拒绝 -1已过期 -2已失效 -3已撤销
     */
    public PageEnvelop signPage(String patientId,String doctorId,String name,String status,Integer page,Integer size){
        String sql = "SELECT DISTINCT if(ar.id=null,'0','1') isCapacityAssessment,r.id,r.`status`,di.dict_value statusName" +
        String sql = "SELECT DISTINCT ar.level_conclusion,di2.dict_value levelConclusionName,r.id,r.`status`,di.dict_value statusName" +
                ",r.patient,p.`name`,p.sex,p.mobile,p.idcard,p.birthday,p.openid " +
                ",p.photo,r.create_time createTime,r.type,sp.`name` packageName,sp.num,sp.org_name orgName";
        String countSql = "select count(distinct r.id) ";
@ -100,7 +290,8 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                " inner JOIN base_patient p on p.id = r.patient " +
                " LEFT JOIN base_service_package sp on r.service_package_id=sp.id " +
                " LEFT JOIN wlyy_hospital_sys_dict di on di.dict_name = 'sign_status' and di.dict_code=r.status " +
                " LEFT JOIN base_capacity_assessment_record ar on ar.patient = r.patient and ar.assessment_time>= '" + DateUtil.getNowYear() + "-01-01'" +
                " LEFT JOIN base_capacity_assessment_record ar on ar.patient = r.patient and ar.assessment_time>= '" + DateUtil.getNowYear() + "-01-01' " +
                " LEFT JOIN wlyy_hospital_sys_dict di2 on di2.dict_name = 'level_conclusion' and di2.dict_code=ar.level_conclusion " +
                " where 1=1 ";
        if(StringUtils.isNotBlank(patientId)){
            filter += " and r.patient = '"+patientId+"' ";
@ -166,6 +357,8 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                if(new BigDecimal(0).compareTo(servicePackageDO.getPrice())==0){
                    //不需要支付
                    signRecordDO.setStatus(1);//已签约
                    //设置到期时间
                    setSignDate(servicePackageDO,signRecordDO);
                }else{
                    signRecordDO.setPayTime("10");//10分钟
                }
@ -196,6 +389,61 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        }
    }
    //设置签约的服务期限
    public void setSignDate(ServicePackageDO servicePackageDO,ServicePackageSignRecordDO signRecordDO){
        if("1".equals(servicePackageDO.getServerTimeType())){
            //固定期限
            String serverTime = servicePackageDO.getServerTime();
            if(StringUtils.isNotBlank(serverTime)&&!"*".equals(serverTime)){
                Calendar cal = Calendar.getInstance();
                int year = 0;
                int month = 0;
                String sTime[] = serverTime.split("\\*");
                if(sTime.length==1){
                    year = Integer.parseInt(sTime[0]);
                    cal.add(Calendar.YEAR,year);
                }else {
                    if(!"".equals(sTime[0])){
                        year = Integer.parseInt(sTime[0]);
                        cal.add(Calendar.YEAR,year);
                    }
                    month = Integer.parseInt(sTime[1]);
                    cal.add(Calendar.MONTH,month);
                }
                signRecordDO.setEndTime(cal.getTime());
            }
        }
        signRecordDO.setStartTime(new Date());
        sendMessage(servicePackageDO,signRecordDO);
    }
    //给分配者发送消息
    private void sendMessage(ServicePackageDO servicePackageDO,ServicePackageSignRecordDO signRecordDO){
        try {
            String sql = "SELECT DISTINCT d.id,d.name from base_doctor_role r,base_doctor_hospital h,base_doctor d " +
                    " WHERE r.role_code = 'dispatcher' and r.del='1' and r.doctor_code=h.doctor_code  " +
                    "and h.del='1' and r.doctor_code=d.id and h.org_code='"+servicePackageDO.getOrgCode()+"'";
            String content = "居民签约了服务包,请及时处理";
            List<Map<String,Object>> doctorList = jdbcTemplate.queryForList(sql);
            for (Map<String,Object> map:doctorList){
                messageUtil.createMessage("服务项调度","980","system","服务项调度通知助手",signRecordDO.getId(),
                        map.get("id")+"",map.get("name")+"",signRecordDO.getName()+content);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        String s1 = "*1";
        String s2 = "2*";
        String ss[] = s1.split("\\*");
        String ss2[] = s2.split("\\*");
        System.out.println(ss.length);
        System.out.println(ss2.length);
    }
    //服务包列表
    public PageEnvelop servicePackagePage(Integer page,Integer size){
        String sql = "SELECT id,name,type,price,org_name orgName,server_time_type serverTimeType,serverTime,isCheck,feeAfter ";

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/MessageUtil.java

@ -388,7 +388,7 @@ public class MessageUtil {
        return messageDO;
    }
    public void createMessage(String title,String type,String sender,String senderName,String relationCode,String Receiver,String ReceiverName,String idCard,String msg){
    public void createMessage(String title,String type,String sender,String senderName,String relationCode,String Receiver,String ReceiverName,String msg){
        SystemMessageDO messageDO = new SystemMessageDO();
        messageDO.setTitle(title);
        messageDO.setType(type);//401为资质申请审核