liubing 3 years ago
parent
commit
7ef2eea0f9

+ 2 - 0
business/base-service/src/main/java/com/yihu/jw/order/dao/BusinessOrderDao.java

@ -35,4 +35,6 @@ public interface BusinessOrderDao extends PagingAndSortingRepository<BusinessOrd
    @Query("from BusinessOrderDO w where w.patient = ?1 and w.status=?2  and w.orderCategory =?3")
    List<BusinessOrderDO> selectByPatientAndStatusAndOrderCategory(String patient,Integer status,String orderCategory);
    @Query("from BusinessOrderDO  w where w.status=0 and w.lastPayTime<=?1")
    List<BusinessOrderDO> selectByLastPayTime(Long lastPayTime);
}

+ 2 - 0
common/common-entity/sql记录

@ -1085,3 +1085,5 @@ alter table base.base_life_care_order add column pay_status TINYINT(2) DEFAULT n
-- 2021-07-01 lb
alter table base.base_business_order_refund add column refuse_desc varchar(255) DEFAULT null COMMENT '拒绝退款说明';
ALTER table base.base_business_order_pay add column last_pay_time BIGINT(13) COMMENT '截至支付日期'
ALTER table base.base_business_order_pay add INDEX index_status_last_pay(status,last_pay_time)

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/order/BusinessOrderDO.java

@ -53,6 +53,7 @@ public class BusinessOrderDO extends IntegerIdentityEntity {
    private String ykOrderNo;
    private String ykOrderId;
    private String traceNo;//支付平台的订单号
    private Long lastPayTime;//订单截至支付日期 13位时间戳
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "create_time", nullable = false, length = 0,updatable = false)
@ -293,4 +294,12 @@ public class BusinessOrderDO extends IntegerIdentityEntity {
    public void setTraceNo(String traceNo) {
        this.traceNo = traceNo;
    }
    public Long getLastPayTime() {
        return lastPayTime;
    }
    public void setLastPayTime(Long lastPayTime) {
        this.lastPayTime = lastPayTime;
    }
}

+ 19 - 8
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/platForm/PatientInfoPlatFormEndpoint.java

@ -62,7 +62,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    private BaseController baseController = new BaseController();
    @GetMapping(value = "findOrgLocations")
    @ApiParam("查找机构坐标")
    @ApiOperation("查找机构坐标")
    public ListEnvelop findOrgLocations(){
        try {
            return ListEnvelop.getSuccess("查询成功",baseServiceNewsService.findOrgLocations());
@ -72,7 +72,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "findPatinetLocations")
    @ApiParam("查找所有居民坐标")
    @ApiOperation("查找所有居民坐标")
    public ListEnvelop findPatinetLocations(){
        try {
            return ListEnvelop.getSuccess("查询成功",baseServiceNewsService.findPatinetLocations());
@ -82,7 +82,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "findPatinetByName")
    @ApiParam("获取居民详情页")
    @ApiOperation("获取居民详情页")
    public ListEnvelop findPatinetByName(@ApiParam(name="name",value = "居民姓名",required = true)
                                @RequestParam(value = "name")String  name){
        try {
@ -93,7 +93,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "findNews")
    @ApiParam("获取居民详情页")
    @ApiOperation("获取居民详情页")
    public ListEnvelop findNews(@ApiParam(name="size",value = "页面大小",required = true)
                                     @RequestParam(value = "size")Integer size){
        try {
@ -104,7 +104,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getPatientInfo")
    @ApiParam("获取居民详情页")
    @ApiOperation("获取居民详情页")
    public ObjEnvelop getPatientInfo(@ApiParam(name="patient",value = "居民id",required = true)
                                     @RequestParam(value = "patient")String patient,
                                     @ApiParam(name="patientType",value="患者类型 1老人 2 新生儿")
@ -117,7 +117,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getPatientEvent")
    @ApiParam("获取就诊事件")
    @ApiOperation("获取就诊事件")
    public ObjEnvelop getPatientEvent(@ApiParam(name="patient",value = "居民id",required = true)
                                     @RequestParam(value = "patient")String patient,
                                     @ApiParam(name="patientType",value="患者类型 1老人 2 新生儿")
@ -134,7 +134,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getServiceOrder")
    @ApiParam("获取服务工单列表")
    @ApiOperation("获取服务工单列表")
    public ObjEnvelop getServiceOrder(@ApiParam(name="patient",value = "居民id",required = true)
                                     @RequestParam(value = "patient")String patient,
                                     @ApiParam(name="patientType",value="患者类型 1老人 2 新生儿")
@ -151,7 +151,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getHealthIndexInfo")
    @ApiParam("获取居民体征信息")
    @ApiOperation("获取居民体征信息")
    public String getHealthIndexInfo(@ApiParam(name="patient",value="患者代码",defaultValue = "eb0b478fbe9245428ecf63cd7517206f")
                                             @RequestParam(value="patient",required = true) String patient,
                                      @ApiParam(name="type",value="指标类型",defaultValue = "1")
@ -169,6 +169,17 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "getPatientMonitoringInfo")
    @ApiOperation("获取居民安监护信息")
    public String getHealthIndexInfo(@ApiParam(name="patient",value="患者代码",defaultValue = "808080eb7917a3be017918a979380055")
                                     @RequestParam(value="patient",required = true) String patient){
        try {
            return baseController.write (200,"查询成功","data",patientInfoPlatFormService.getPatientMonitoringInfo(patient));
        }catch (Exception e){
            return baseController.errorResult(e);
        }
    }
    @GetMapping("getDoorCoachByOrderId")
    @ApiOperation(value = "根据工单id获取相应的工单,如果为空,则获取该患者当前最新一条的工单")
    public ObjEnvelop getByOrderId(

+ 6 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/pay/PayService.java

@ -699,16 +699,20 @@ public class PayService {
                relateName = "服务";
                break;
        }
        Date date = new Date();
        Long lastPayTime = date.getTime()+60*30;
        businessOrderDO.setDescription(desc);
        businessOrderDO.setRelationCode(relationCode);
        businessOrderDO.setRelationName(relateName);
        businessOrderDO.setCreateTime(new Date());
        businessOrderDO.setUpdateTime(new Date());
        businessOrderDO.setCreateTime(date);
        businessOrderDO.setUpdateTime(date);
        businessOrderDO.setStatus(0);
        businessOrderDO.setOrderNo(getOrderNo());
        businessOrderDO.setUploadStatus(0);
        businessOrderDO.setPayType(1);
        businessOrderDO.setPayPrice(Double.valueOf(price));
        businessOrderDO.setLastPayTime(lastPayTime);
        businessOrderService.save(businessOrderDO);
        return businessOrderDO;
    }

+ 55 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/doorCoach/BaseDoorCoachOrderDao.java

@ -0,0 +1,55 @@
package com.yihu.jw.care.dao.doorCoach;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
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.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
 * 
 * 上门辅导服务工单 数据库访问层
 * 
 * @version 
 * <pre>
 * Author	Version		Date		Changes
 * Administrator 	1.0  		2019年03月20日 	Created
 *
 * </pre>
 * @since 1.
 */
public interface BaseDoorCoachOrderDao extends PagingAndSortingRepository<BaseDoorCoachOrderDO, String>, JpaSpecificationExecutor<BaseDoorCoachOrderDO>  {
    boolean existsByPatientAndStatusNot(String patient, int status);
    boolean existsByPatientAndStatusIn(String patient, Integer[] status);
    @Modifying
    @Transactional
    @Query("update BaseDoorCoachOrderDO o set o.conclusionStatus = 1 where o.id = ?1")
    void updateConclusionStatus(String orderId);
    @Query("select o from BaseDoorCoachOrderDO o where o.doctor = ?1 and o.status in (2,3)")
    List<BaseDoorCoachOrderDO> getNotFinishOrderByDoctor(String doctor);
    @Modifying
    @Transactional
    @Query("update BaseDoorCoachOrderDO o set o.prescriptionStatus = 1,o.status = 4, o.prescriptionCode = ?2, o.prescriptionTime = ?3 where o.id = ?1")
    void updatePrescriptionById(String orderId, String prescriptionCode, Date prescriptionTime);
    @Query("select o from BaseDoorCoachOrderDO o where o.prescriptionCode like ?1 and o.status <> -1 ")
    List<BaseDoorCoachOrderDO> findByPrescriptionCode(String prescriptionCode);
    @Query("select o from BaseDoorCoachOrderDO o where o.relationCode = ?1 order by o.createTime desc")
    List<BaseDoorCoachOrderDO> findByRelationCode(String relationCode);
    @Query("select o from BaseDoorCoachOrderDO o where o.doctor = ?1 and o.status in (1,2,3,4,5)")
    List<BaseDoorCoachOrderDO> getUnFinishOrderByDoctor(String doctor);
    List<BaseDoorCoachOrderDO> queryByStatusIn(Integer[] status);
}

+ 13 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/lifeCare/LifeCareOrderDao.java

@ -0,0 +1,13 @@
package com.yihu.jw.care.dao.lifeCare;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2021/3/26.
 */
public interface LifeCareOrderDao extends PagingAndSortingRepository<LifeCareOrderDO, String>, JpaSpecificationExecutor<LifeCareOrderDO> {
    boolean existsByPatientAndStatusIn(String patient, Integer[] status);
}

+ 10 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/event/ApplicationEvent.java

@ -4,6 +4,7 @@ import com.yihu.jw.care.job.QuartzHelper;
import com.yihu.jw.care.job.consult.FinishConsultJob;
import com.yihu.jw.care.job.message.DoctorSendUnreadJob;
import com.yihu.jw.care.job.message.PatientSendUnreadJob;
import com.yihu.jw.care.job.order.CancelPayOrderJob;
import com.yihu.jw.care.util.SystemConf;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -54,6 +55,15 @@ public class ApplicationEvent implements ApplicationListener<ContextRefreshedEve
                logger.info("PATIENT_SEND_UNREAD_MES_JOB exist");
            }
            //#取消订单支付超时的订单,每3分钟执行一次
            if (!quartzHelper.isExistJob("CANCEL_PAY_ORDER_OVERTIME_JOB")) {
                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("CANCEL_PAY_ORDER_OVERTIME_JOB");
                quartzHelper.addJob(CancelPayOrderJob.class, trigger, "CANCEL_PAY_ORDER_OVERTIME_JOB", new HashMap<String, Object>());
                logger.info("CANCEL_PAY_ORDER_OVERTIME_JOB success");
            } else {
                logger.info("CANCEL_PAY_ORDER_OVERTIME_JOB exist");
            }
        } catch (Exception e) {
            logger.info(" job start failed");
        }

+ 81 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/order/CancelPayOrderJob.java

@ -0,0 +1,81 @@
package com.yihu.jw.care.job.order;
import com.yihu.jw.care.dao.doorCoach.BaseDoorCoachOrderDao;
import com.yihu.jw.care.dao.lifeCare.LifeCareOrderDao;
import com.yihu.jw.care.job.consult.FinishConsultJob;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.entity.order.BusinessOrderDO;
import com.yihu.jw.order.dao.BusinessOrderDao;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by Bing on 2021/7/2.
 */
@DisallowConcurrentExecution//解决执行频率和间隔时间的问题。到了执行时间点前一任务还在执行中,不会执行下一次任务,直至该次任务完成
public class CancelPayOrderJob implements Job {
    private static Logger logger = LoggerFactory.getLogger(FinishConsultJob.class);
    @Autowired
    private BusinessOrderDao businessOrderDao;
    @Autowired
    private BaseDoorCoachOrderDao baseDoorCoachOrderDao;
    @Autowired
    private LifeCareOrderDao lifeCareOrderDao;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        Long nowTime = System.currentTimeMillis();
        logger.info("CANCEL_PAY_ORDER_OVERTIME_JOB start 订单支付超时JOb开始----截至支付时间:"+nowTime);
        List<BusinessOrderDO> needFinishs= businessOrderDao.selectByLastPayTime(nowTime);
        List<BaseDoorCoachOrderDO> doorCoachOrderDOS = new ArrayList<>();
        List<LifeCareOrderDO> lifeCareOrderDOS = new ArrayList<>();
        for (BusinessOrderDO businessOrderDO:needFinishs) {
           businessOrderDO.setStatus(2);
           String type = businessOrderDO.getOrderCategory();
           String orderId = businessOrderDO.getRelationCode();
           switch (type){
               case "3":
                   BaseDoorCoachOrderDO doorOrderDO = baseDoorCoachOrderDao.findOne(orderId);
                   if (doorOrderDO!=null){
                       if(doorOrderDO.getStatus()==0){
                           doorOrderDO.setStatus(-1);
                           doorOrderDO.setCancelReason("支付超时");
                           doorOrderDO.setCancelTime(new Date());
                           doorCoachOrderDOS.add(doorOrderDO);
                       }
                   }
                   break;
               case "4":
                   LifeCareOrderDO lifeOrderDO = lifeCareOrderDao.findOne(orderId);
                   if (lifeOrderDO!=null){
                       if(lifeOrderDO.getStatus()==0){
                           lifeOrderDO.setStatus(-1);
                           lifeOrderDO.setCancelReason("支付超时");
                           lifeOrderDO.setCancelTime(new Date());
                           lifeCareOrderDOS.add(lifeOrderDO);
                       }
                   }
                   break;
           }
           businessOrderDO.setStatus(2);
           businessOrderDO.setUpdateTime(new Date());
        }
        businessOrderDao.save(needFinishs);
        baseDoorCoachOrderDao.save(doorCoachOrderDOS);
        lifeCareOrderDao.save(lifeCareOrderDOS);
        logger.info("CANCEL_PAY_ORDER_OVERTIME_JOB end 订单支付超时JOb结束----"+needFinishs.size());
    }
}

+ 4 - 1
svr/svr-cloud-job/src/main/resources/system.properties

@ -6,4 +6,7 @@ finish_consult_job=0 59 * * * ?
DOCTOR_SEND_UNREAD_MES_JOB=0 0 9 * * ?
#每天的早上9:00,给所有居民发送未读消息微信模板
PATIENT_SEND_UNREAD_MES_JOB=0 0 9 * * ?
PATIENT_SEND_UNREAD_MES_JOB=0 0 9 * * ?
#取消订单支付超时的订单,每3分钟执行一次
CANCEL_PAY_ORDER_OVERTIME_JOB=0 0/3 * * * ?