Browse Source

Merge branch 'dev' of liubing/wlyy2.0 into dev

liubing 3 years ago
parent
commit
b179522667

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

@ -32,4 +32,7 @@ public interface BusinessOrderDao extends PagingAndSortingRepository<BusinessOrd
    @Query("from BusinessOrderDO w where w.status = ?1 and w.orderCategory <>4")
    List<BusinessOrderDO> selectByStatus(Integer status);
    @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);
}

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

@ -1078,3 +1078,7 @@ CREATE TABLE `base_wx_pay_http_log` (
  KEY `index1` (`order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信支付日志表';
-- 2021-06-30
alter table base.base_door_coach_order add column pay_status TINYINT(2) DEFAULT null COMMENT '0待扣费 1已支付 2已退款';
alter table base.base_life_care_order add column pay_status TINYINT(2) DEFAULT null COMMENT '0待扣费 1已支付 2已退款';

+ 38 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/care/doorCoach/BaseDoorCoachOrderDO.java

@ -36,6 +36,7 @@ public class BaseDoorCoachOrderDO extends UuidIdentityEntityWithOperator {
        //待付款 status==(1 or 2) and payWay为空
        cancel(-1, "已取消"),
        waitForPay(0, "待支付"),
        waitForSend(1, "待(调度员)派单"),
        waitForAccept(2, "待(医生)接单"),
        accept(3, "已接单"),
@ -65,7 +66,6 @@ public class BaseDoorCoachOrderDO extends UuidIdentityEntityWithOperator {
     * 支付方式
     */
    public enum PayWay {
        wechat(1, "微信支付"),
        offLine(2,"线下支付");
@ -217,6 +217,32 @@ public class BaseDoorCoachOrderDO extends UuidIdentityEntityWithOperator {
    }
    /**
     * 支付状态
     */
    public enum payStatus {
        waitForPay(0, "待支付"),
        paid(1, "已支付"),
        Refunded(1, "已退款");
        private Integer type;
        private String desc;
        payStatus(Integer type, String desc) {
            this.type = type;
            this.desc = desc;
        }
        public Integer getType() {
            return type;
        }
        public void setType(Integer type) {
            this.type = type;
        }
    }
    /**
     * 服务编号
     */
@ -565,7 +591,10 @@ public class BaseDoorCoachOrderDO extends UuidIdentityEntityWithOperator {
     */
    private String shortcutType;
    /**
     * 0待扣费 1已扣费 2已退费
     */
    private Integer payStatus;//支付状态
    @Column(name = "number")
    public String getNumber() {
@ -1193,4 +1222,11 @@ public class BaseDoorCoachOrderDO extends UuidIdentityEntityWithOperator {
        this.followupDate = followupDate;
    }
    public Integer getPayStatus() {
        return payStatus;
    }
    public void setPayStatus(Integer payStatus) {
        this.payStatus = payStatus;
    }
}

+ 38 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/lifeCare/LifeCareOrderDO.java

@ -23,6 +23,7 @@ public class LifeCareOrderDO extends UuidIdentityEntityWithOperator {
    public enum Status {
        cancel(-1, "已取消"),
        waitForPay(0, "待支付"),
        waitForAccept(1, "待(医生)接单"),//待服务
        signIn(3, "已签到"),
        complete(2,"已完成");
@ -71,6 +72,31 @@ public class LifeCareOrderDO extends UuidIdentityEntityWithOperator {
    }
    /**
     * 支付状态
     */
    public enum payStatus {
        waitForPay(0, "待支付"),
        paid(1, "已支付"),
        Refunded(1, "已退款");
        private Integer type;
        private String desc;
        payStatus(Integer type, String desc) {
            this.type = type;
            this.desc = desc;
        }
        public Integer getType() {
            return type;
        }
        public void setType(Integer type) {
            this.type = type;
        }
    }
    /**
     * 服务编号
@ -300,6 +326,10 @@ public class LifeCareOrderDO extends UuidIdentityEntityWithOperator {
     * 签到医生姓名
     */
    private String signDoctorName;
    /**
     * 0待扣费 1已扣费 2已退费
     */
    private Integer payStatus;//支付状态
    @Column(name = "number")
    public String getNumber() {
@ -705,4 +735,12 @@ public class LifeCareOrderDO extends UuidIdentityEntityWithOperator {
    public void setConclusionTime(Date conclusionTime) {
        this.conclusionTime = conclusionTime;
    }
    public Integer getPayStatus() {
        return payStatus;
    }
    public void setPayStatus(Integer payStatus) {
        this.payStatus = payStatus;
    }
}

+ 34 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/patient/PayEndpoint.java

@ -110,6 +110,40 @@ public class PayEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "existWaitForPay")
    @ApiOperation(value = "查询患者是否存在未支付订单")
    public ObjEnvelop existWaitForPay(
            @ApiParam(name = "patient", value = "patient", required = true)
            @RequestParam(value = "patient") String patient,
            @ApiParam(name ="orderCategory",value = "订单分类 1招生,2 课程,3 上门辅导托幼) 4 生活照料")
            @RequestParam(value = "orderCategory")String orderCategory) {
        try{
            JSONObject result =  result = payService.existWaitForPay(patient,orderCategory);
            return ObjEnvelop.getSuccess("查询成功",result);
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getPayInfo")
    @ApiOperation(value = "通过工单id获取支付信息")
    public ObjEnvelop getPayInfo(
            @ApiParam(name = "orderId", value = "工单id", required = true)
            @RequestParam String orderId,
            @ApiParam(name ="orderCategory",value = "3 上门辅导托幼 4 生活照料")
            @RequestParam(value = "orderCategory")String orderCategory) {
        try {
            JSONObject result = payService.getPayInfo(orderId,orderCategory);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
            return ObjEnvelop.getSuccess("查询成功",result.getJSONObject(ResponseContant.resultMsg));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping(value = "wxWapPay")
    @ApiOperation(value = "微信wap支付")
    public ObjEnvelop wxWapPay(

+ 12 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/YsDeviceService.java

@ -8,6 +8,7 @@ import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.dao.label.WlyyPatientLabelDao;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.rm.iot.IotRequestMapping;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.utils.encode.Base64;
@ -64,7 +65,11 @@ public class YsDeviceService {
        if (responseBody.getInteger("code")==200){
            assToken = responseBody.getJSONObject("data").getString("accessToken");
            Long expireTime = responseBody.getJSONObject("data").getLong("expiresIn");//token有效期
            redisTemplate.opsForValue().set(YsConfig.redisKey,assToken,expireTime, TimeUnit.MILLISECONDS);
            redisTemplate.opsForValue().set(YsConfig.redisKey,assToken,expireTime, TimeUnit.SECONDS);
//            Long ss= redisTemplate.getExpire(YsConfig.redisKey);
//            System.out.println(expireTime+"---"+ss);
        }else {
            throw new Exception("获取token失败");
        }
@ -88,12 +93,16 @@ public class YsDeviceService {
        String assToken = null;
        if (responseBody.getInteger("code")==200){
            assToken = responseBody.getJSONObject("data").getString("ezOpenAccessToken");
            Long expireTime = responseBody.getJSONObject("data").getLong("expireTime");//token有效期
            Long expireTime = responseBody.getJSONObject("data").getLong("expireTime");//token有效截止日期
            Long nowTime = System.currentTimeMillis();
            expireTime = expireTime-nowTime;
            redisTemplate.opsForValue().set(YsConfig.iotRedisKey,assToken,expireTime, TimeUnit.MILLISECONDS);
            //设备解密密钥
            String secretKey = responseBody.getJSONObject("data").getString("secretKey");
            redisTemplate.opsForValue().set(YsConfig.secretKey,secretKey,expireTime, TimeUnit.MILLISECONDS);
//            Long ss= redisTemplate.getExpire(YsConfig.iotRedisKey);
//            System.out.println(expireTime+"---"+ss);
        }else {
            throw new Exception("获取token失败");
        }

+ 2 - 4
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/DoctorDoorCoachOrderService.java

@ -811,8 +811,7 @@ public class DoctorDoorCoachOrderService {
                " LEFT JOIN base_patient p ON o.patient = p.id ) LEFT JOIN wlyy_consult c on o.id = c.relation_code"+
                applicationSql+" WHERE " +
                "  o.hospital = '{hospital}' and o.type != 3 " +buffer+
                " AND ( o.`status` = {status} OR -100 = {status} ) and  not EXISTS (select id from base_door_coach_order " +
                " tt where tt.id = o.id and tt.`status` BETWEEN 1 and 2 and ISNULL(tt.pay_way) )  " +//自主预约、医生代预约未付款不展示
                " AND ( o.`status` = {status} OR -100 = {status} ) and o.pay_status>0 "+//未付款不展示
                " ORDER BY o.create_time desc " +
                " LIMIT {start},{end};";
@ -830,8 +829,7 @@ public class DoctorDoorCoachOrderService {
                applicationSql +
                " WHERE  " +
                "  o.hospital = '{hospital}' and o.type != 3 " +buffer+
                " AND (o.`status` = {status} or -100 = {status})  not EXISTS (select id from base_door_coach_order " +
                " tt where tt.id = o.id and tt.`status` BETWEEN 1 and 2 and ISNULL(tt.pay_way) )  " ;
                " AND (o.`status` = {status} or -100 = {status})  and o.pay_status>0  " ;
        String finqlCountSql = countSql.replace("{hospital}", hospital)
                .replace("{status}", String.valueOf(status));

+ 130 - 69
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/PatientDoorCoachOrderService.java

@ -14,10 +14,14 @@ import com.yihu.jw.entity.base.im.ConsultTeamDo;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import com.yihu.jw.entity.care.doorCoach.*;
import com.yihu.jw.entity.care.lifeCare.LifeCareFeeDetailDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.entity.order.BusinessOrderDO;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.im.dao.ConsultDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.order.dao.BusinessOrderDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.util.common.IdCardUtil;
@ -97,6 +101,8 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
    private BaseServiceNewsService serviceNewsService;
    @Autowired
    private PayService payService;
    @Autowired
    private BusinessOrderDao businessOrderDao;
    /**
     * 创建上门辅导服务工单
@ -137,7 +143,8 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
        orderDO.setCreateUser(orderDO.getProxyPatient());
        orderDO.setCreateUserName(orderDO.getProxyPatientName());
        orderDO.setOrderInfo("0");
        orderDO.setStatus(1);
        orderDO.setStatus(0);//待付款
        orderDO.setPayStatus(0);//待付款
//        orderDO.setConclusionStatus(1);
        if(StringUtils.isEmpty(orderDO.getPatient())){
@ -158,7 +165,9 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
        //已取消的订单也可以申请
        boolean bool = baseDoorCoachOrderDao.existsByPatientAndStatusIn(orderDO.getPatient(),
                new Integer[]{BaseDoorCoachOrderDO.Status.waitForSend.getType(),
                new Integer[]{
                        BaseDoorCoachOrderDO.Status.waitForPay.getType(),
                        BaseDoorCoachOrderDO.Status.waitForSend.getType(),
                        BaseDoorCoachOrderDO.Status.waitForAccept.getType(),
                        BaseDoorCoachOrderDO.Status.waitForServe.getType(),
                        BaseDoorCoachOrderDO.Status.accept.getType(),
@ -197,6 +206,11 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
    @Transactional
    public JSONObject proxyCreate(String jsonData,String doctorCode) {
        JSONObject result = new JSONObject();
        //医养暂无该功能--屏蔽
        result.put(ResponseContant.resultFlag, ResponseContant.fail);
        result.put(ResponseContant.resultMsg, "暂无该功能");
        return result;
        /*
        JSONObject jsonObjectParam;
        try {
            jsonObjectParam = JSONObject.parseObject(jsonData);
@ -238,7 +252,8 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
        if(StringUtils.isBlank(orderDO.getId())) {
            //已取消的订单也可以申请
            boolean bool = baseDoorCoachOrderDao.existsByPatientAndStatusIn(orderDO.getPatient(),
                    new Integer[]{BaseDoorCoachOrderDO.Status.waitForAccept.getType(),
                    new Integer[]{BaseDoorCoachOrderDO.Status.waitForPay.getType(),
                            BaseDoorCoachOrderDO.Status.waitForAccept.getType(),
                            BaseDoorCoachOrderDO.Status.waitForServe.getType(),
                            BaseDoorCoachOrderDO.Status.accept.getType(),
                            BaseDoorCoachOrderDO.Status.waitForSend.getType()
@ -273,7 +288,8 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
            orderDO.setUpdateUser(orderDO.getProxyPatient());
            orderDO.setUpdateUserName(orderDO.getProxyPatientName());
        }
        orderDO.setStatus(2);
        orderDO.setStatus(0);//待付款
        orderDO.setPayStatus(0);//待付款
        orderDO.setType(3);
        orderDO.setDispatcherResponseTime(new Date());
        this.save(orderDO);
@ -288,19 +304,31 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
        sendWeixinMessage(4,orderDO.getDoctor(),orderDO.getPatient());
        //发起支付订单
        payService.submitOrder(orderDO.getPatient(),"3",orderDO.getId(),orderDO.getTotalFee().doubleValue());
        BusinessOrderDO businessOrderDO =  payService.submitOrder(orderDO.getPatient(),"3",orderDO.getId(),orderDO.getTotalFee().doubleValue());
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        return result;
        */
    }
    //支付完成后开始上门辅导订单
    public JSONObject payOrderAfter(String orderId) {
        JSONObject result = new JSONObject();
        BaseDoorCoachOrderDO orderDO= baseDoorCoachOrderDao.findOne(orderId);
        if (orderDO!=null){
            serviceNewsService.addServiceNews(orderDO.getPatientName(),orderDO.getPatient(),"1",null);
            if (orderDO.getPayWay()!=null){
                if (orderDO.getType()==3){//医生代预约
        try {
            BusinessOrderDO businessOrderDO = businessOrderDao.selectByRelationCode(orderId);
            if (businessOrderDO==null){
                String failMsg = "未查询到该订单";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg, failMsg);
                return result;
            }
            BaseDoorCoachOrderDO orderDO= baseDoorCoachOrderDao.findOne(orderId);
            if (orderDO!=null){
                orderDO.setPayStatus(1);
                orderDO.setPayWay(1);
                orderDO.setPayTime(new Date());
                if (orderDO.getType()== 3){//医生代预约
                    orderDO.setStatus(2);//待接单
                    this.save(orderDO);
                    // 给服务医生发接单消息
                    this.createMessage("服务工单待接单","707",orderDO.getProxyPatient(),orderDO.getProxyPatientName(), orderDO.getId(),orderDO.getDoctor(),orderDO.getDoctorName(), null,"您有新的服务工单,请前往处理");
                    //发送智能助手消息
@ -336,6 +364,8 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
                        BaseDoctorDO transDoctor = doctorDao.findById(orderDO.getDoctor());
                        sendOrderToDoctor(orderDO.getId(),null,"system","系统",transDoctor.getId(),transDoctor.getName(),transDoctor.getJobTitleName());
                    }else {
                        orderDO.setStatus(1);//待派单
                        this.save(orderDO);
                        JSONObject dispatcherJson = queryDispatcherInfoByPatient(orderDO.getHospital());
                        if (dispatcherJson.getInteger("resultFlag")==1){
                            List<Map<String,Object>> dispatcherInfoList = (List<Map<String, Object>>) dispatcherJson.get(ResponseContant.resultMsg);
@ -354,16 +384,36 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
                    result.put(ResponseContant.resultFlag, ResponseContant.success);
                    result.put(ResponseContant.resultMsg, failMsg);
                }
            }else {
                String failMsg = "订单未支付";
            }
            else {
                String failMsg = "工单不存在";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg, failMsg);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        else {
            String failMsg = "工单不存在";
        return result;
    }
    //退款后回调
    public JSONObject refundOrderAfter(String orderId) {
        JSONObject result = new JSONObject();
        try {
            BaseDoorCoachOrderDO orderDO= baseDoorCoachOrderDao.findOne(orderId);
            if (orderDO == null){
                String failMsg = "工单不存在";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg, failMsg);
                return result;
            }
            orderDO.setPayStatus(2);
            this.save(orderDO);
            String failMsg = "success";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg, failMsg);
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
@ -807,57 +857,73 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
            logger.error(failMsg);
            return result;
        }
        if(orderDO.getStatus() > BaseDoorCoachOrderDO.Status.waitForServe.getType()){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "只有医生服务前的工单才可取消:," + orderId;
            result.put(ResponseContant.resultMsg, failMsg);
            logger.error(failMsg);
            return result;
        }
        //触发退款流程,退款失败时无法取消工单
        try {
        }catch (Exception e){
            String failMsg = "退款失败,无法取消工单:," + orderId;
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        orderDO.setCancelType(type);
        orderDO.setCancelTime(new Date());
        orderDO.setCancelReason(reason);
        if(!StringUtils.isEmpty(dispatcher)){
            orderDO.setDoctor(dispatcher);
            orderDO.setDoctorName(dispatcherName);
            orderDO.setDispatcher(dispatcher);
            orderDO.setDispatcherName(dispatcherName);
        }
        //如果是调度员取消,推送IM取消工单json消息,
        if (StringUtils.isNotBlank(dispatcher)){
            if (!consultTeamService.finishConsult(orderDO.getId(),orderDO.getPatient(),dispatcher,2)){
                String failMsg = "咨询结束失败 无法取消工单";
        if(type==2){//v0.5.1 患者仅未支付的订单能取消此时未正式开始工单,未创建咨询
            if(orderDO.getStatus() != BaseDoorCoachOrderDO.Status.waitForPay.getType()){
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg,failMsg);
                String failMsg = "无法取消工单,已支付的工单需要到我的订单中进行申请退款," + orderId;
                result.put(ResponseContant.resultMsg, failMsg);
                logger.error(failMsg);
                return result;
            }
        }
        else {
            if (!consultTeamService.finishConsult(orderDO.getId(),orderDO.getPatient(),orderDO.getPatient(),1)){
                String failMsg = "咨询结束失败 无法取消工单";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg,failMsg);
        }else{//调度员拒单,此时工单已支付抵达调度员
            try {
                if (orderDO.getStatus() > BaseDoorCoachOrderDO.Status.waitForPay.getType()&&1==orderDO.getPayWay()){
                    BusinessOrderDO businessOrderDO = businessOrderDao.selectByRelationCode(orderDO.getId());
                    if (businessOrderDO!=null){
                        if (1 == businessOrderDO.getStatus()){
                            //退款流程
                            payService.orderRefund(businessOrderDO.getOrderNo(),"调度员拒单退款");
                            orderDO.setPayStatus(2);
                        }
                    }
                }
                //如果是调度员取消,推送IM取消工单json消息,
                if (StringUtils.isNotBlank(dispatcher)){
                    if (!consultTeamService.finishConsult(orderDO.getId(),orderDO.getPatient(),dispatcher,2)){
                        String failMsg = "咨询结束失败 无法取消工单";
                        result.put(ResponseContant.resultFlag, ResponseContant.fail);
                        result.put(ResponseContant.resultMsg,failMsg);
                        return result;
                    }
                }
                if(!StringUtils.isEmpty(dispatcher)){
                    orderDO.setDoctor(dispatcher);
                    orderDO.setDoctorName(dispatcherName);
                    orderDO.setDispatcher(dispatcher);
                    orderDO.setDispatcherName(dispatcherName);
                }
                if(type == BaseDoorCoachOrderDO.CancelType.dispatcher.getType()){
                    messageUtil.updateDoorCoachMessage(orderDO,new String[]{"702","703","730"},"732",dispatcher,dispatcher);
                }
                else if(type == BaseDoorCoachOrderDO.CancelType.patient.getType()){                   //居民取消,消息列表也应该不显示
                    messageUtil.updateDoorCoachMessage(orderDO,new String[]{"702","703","730"},"patientCancel",dispatcher,dispatcher);
                }
                ConsultDo consult = consultDao.queryByRelationCode(orderId);
                // 发送微信模板消息,通知居民工单已取消(smyyyqx-上门预约已取消)
                String first = "key1您好,您的上门预约订单已退回,点击查看原因";
                BasePatientDO patient = patientDao.findById(orderDO.getPatient());
                first  = first.replace("key1", null != patient.getName() ? patient.getName() : "");
                JSONObject json = new JSONObject();
                json.put("id", orderDO.getId());
                List<BasePatientWechatDo> basePatientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,patient.getId());
                if (basePatientWechatDos.size()>0){
                    String openId = basePatientWechatDos.get(0).getOpenid();
                    messageUtil.putTemplateWxMessage(wxId,"template_process_feedback","smyyyqx",openId,first,null,null,2,json, DateUtil.dateToChineseDate(new Date()),"上门预约已取消","已取消");
                }
            }catch (Exception e){
                e.printStackTrace();
                String failMsg = "退款失败,无法取消工单:," + orderId;
                result.put(ResponseContant.resultMsg, failMsg);
                return result;
            }
        }
        orderDO.setCancelType(type);
        orderDO.setCancelTime(new Date());
        orderDO.setCancelReason(reason);
        orderDO.setStatus(BaseDoorCoachOrderDO.Status.cancel.getType());
        this.save(orderDO);
        if(type == BaseDoorCoachOrderDO.CancelType.dispatcher.getType()){
            messageUtil.updateDoorCoachMessage(orderDO,new String[]{"702","703","730"},"732",dispatcher,dispatcher);
        }
        else if(type == BaseDoorCoachOrderDO.CancelType.patient.getType()){                   //居民取消,消息列表也应该不显示
            messageUtil.updateDoorCoachMessage(orderDO,new String[]{"702","703","730"},"patientCancel",dispatcher,dispatcher);
        }
        //保存取消记录
        BaseDoorCoachCancelLogDO cancelLogDO = new BaseDoorCoachCancelLogDO();
@ -878,19 +944,7 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
        JSONObject confirmInfoJson = new JSONObject();
        confirmInfoJson.put("confirmInfo",confirmInfo);
        this.orderWithConfirmLogAdd(result,confirmInfo,orderId);
        ConsultDo consult = consultDao.queryByRelationCode(orderId);
        // 发送微信模板消息,通知居民工单已取消(smyyyqx-上门预约已取消)
        String first = "key1您好,您的上门预约订单已退回,点击查看原因";
        BasePatientDO patient = patientDao.findById(orderDO.getPatient());
        first  = first.replace("key1", null != patient.getName() ? patient.getName() : "");
        JSONObject json = new JSONObject();
        json.put("id", orderDO.getId());
        List<BasePatientWechatDo> basePatientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,patient.getId());
        if (basePatientWechatDos.size()>0){
            String openId = basePatientWechatDos.get(0).getOpenid();
            messageUtil.putTemplateWxMessage(wxId,"template_process_feedback","smyyyqx",openId,first,null,null,2,json, DateUtil.dateToChineseDate(new Date()),"上门预约已取消","已取消");
        }
        // 工单状态变更记录
        BaseDoorCoachProcessLogDO processLogDO = new BaseDoorCoachProcessLogDO();
@ -1133,7 +1187,8 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
                return true;
            }
        }
        order.setTotalFee(totalFee);
        this.save(order);
        return false;
    }
@ -1188,6 +1243,7 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        Map<String, Integer> map = new HashMap<>();
        Integer all = 0;
        Integer waitForPay = 0;//待付款
        Integer waitForAccept = 0;//待接单
        Integer waitForServe = 0;//待服务
        Integer served = 0;//已完成
@ -1198,6 +1254,9 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
                case "-1":
                    cancel += Integer.valueOf(tmp.get("num").toString()) ;
                    break;
                case "0":
                    waitForPay += Integer.valueOf(tmp.get("num").toString()) ;
                    break;
                case "1":
                    waitForAccept += Integer.valueOf(tmp.get("num").toString()) ;
                    break;
@ -1223,6 +1282,7 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
        }
        all = waitForAccept+waitForServe+served+cancel;
        map.put("all",all);
        map.put("waitForPay",waitForAccept);
        map.put("waitForAccept",waitForAccept);
        map.put("waitForServe",waitForServe);
        map.put("served",served);
@ -1307,6 +1367,7 @@ public class PatientDoorCoachOrderService extends BaseJpaService<BaseDoorCoachOr
            String statusName = "";
            switch (statustemp){
                case -1:statusName="已取消";break;
                case 0:statusName="待付款";break;
                case 1:statusName="待服务";break;
                case 2:statusName="待服务";break;
                case 3:statusName="待服务";break;

+ 52 - 16
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/lifeCare/LifeCareOrderService.java

@ -16,10 +16,13 @@ import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareCancelLogDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareFeeDetailDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareItemDictDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.entity.order.BusinessOrderDO;
import com.yihu.jw.order.dao.BusinessOrderDao;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
@ -82,6 +85,9 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
    private BaseServiceNewsService serviceNewsService;
    @Autowired
    private PayService payService;
    @Autowired
    private BusinessOrderDao businessOrderDao;
    /**
@ -356,7 +362,8 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        JSONObject result = new JSONObject();
        int total = 0;
        Map<String,Object> res = new HashedMap();
        //状态 待服务 1、已完成 2 、已取消 -1
        //状态 0 待付款 待服务 1、已完成 2 、已取消 -1
        res.put("0",0);
        res.put("1",0);
        res.put("2",0);
        res.put("3",0);
@ -398,13 +405,20 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
            logger.error(failMsg);
            return result;
        }
        if(orderDO.getStatus().equals(LifeCareOrderDO.Status.complete.getType())){
        if(orderDO.getStatus() != LifeCareOrderDO.Status.waitForPay.getType()){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "只有医生服务前的工单才可取消";
            String failMsg = "无法取消工单,已支付的工单需要到我的订单中进行申请退款," + orderId;
            result.put(ResponseContant.resultMsg, failMsg);
            logger.error(failMsg);
            return result;
        }
//        if(orderDO.getStatus().equals(LifeCareOrderDO.Status.complete.getType())){
//            result.put(ResponseContant.resultFlag, ResponseContant.fail);
//            String failMsg = "只有医生服务前的工单才可取消";
//            result.put(ResponseContant.resultMsg, failMsg);
//            logger.error(failMsg);
//            return result;
//        }
        orderDO.setCancelType(type);
        orderDO.setCancelTime(new Date());
        orderDO.setCancelReason(reason);
@ -459,6 +473,8 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        try {
            jsonObjectParam = JSONObject.parseObject(jsonData);
            orderDO = EntityUtils.jsonToEntity(jsonObjectParam.get("order").toString(), LifeCareOrderDO.class);
            //存在未支付的订单不能发起
            Integer type = orderDO.getType();
            if (type==1||type==2){
                //本人或家人代发起
@ -473,6 +489,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
                orderDO.setProxyPatientName(doctorDO.getName());
                orderDO.setProxyPatientPhone(doctorDO.getMobile());
            }
            //todo 代发起时推送待支付模板给患者
        } catch (Exception e) {
            e.printStackTrace();
@ -507,7 +524,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        }
        orderDO.setNumber(orderNoService.getOrderNo(1));
        orderDO.setCreateTime(new Date());
        orderDO.setStatus(1);
        orderDO.setStatus(0);//待付款状态
        this.save(orderDO);
        result.put("orderId",orderDO.getId());
        orderDO.setTotalFee(new BigDecimal(0));
@ -523,27 +540,28 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
    }
    //支付完成后开始上门辅导订单
    //支付完成后开始订单
    public JSONObject payOrderAfter(String orderId) {
        JSONObject result = new JSONObject();
        BusinessOrderDO businessOrderDO = businessOrderDao.selectByRelationCode(orderId);
        if (businessOrderDO==null){
            String failMsg = "未查询到该订单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        LifeCareOrderDO orderDO = lifeCareOrderDao.findOne(orderId);
        if (orderDO!=null) {
            orderDO.setPayStatus(1);
            orderDO.setPayWay(1);
            orderDO.setPayTime(new Date());
            orderDO.setStatus(1);
            this.save(orderDO);
            if(orderDO.getType() == 3){
                serviceNewsService.addServiceNews(orderDO.getProxyPatientName(),orderDO.getProxyPatient(),"4",orderDO.getPatientName());
            }else {
                serviceNewsService.addServiceNews(orderDO.getPatientName(),orderDO.getPatient(),"3",null);
            }
            if (orderDO.getPayWay() != null) {
                if(orderDO.getType() == 3){
                    serviceNewsService.addServiceNews(orderDO.getProxyPatientName(),orderDO.getProxyPatient(),"4",orderDO.getPatientName());
                }else {
                    serviceNewsService.addServiceNews(orderDO.getPatientName(),orderDO.getPatient(),"3",null);
                }
            }else {
                String failMsg = "订单未支付";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg, failMsg);
            }
        }
        else {
            String failMsg = "工单不存在";
@ -555,6 +573,24 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        return result;
    }
    //退款成功后回调
    public JSONObject refundOrderAfter(String orderId) {
        JSONObject result = new JSONObject();
        LifeCareOrderDO orderDO = lifeCareOrderDao.findOne(orderId);
        if (orderDO == null){
            String failMsg = "工单不存在";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        orderDO.setPayStatus(2);
        this.save(orderDO);
        String failMsg = "success";
        result.put(ResponseContant.resultFlag, ResponseContant.fail);
        result.put(ResponseContant.resultMsg, failMsg);
        return result;
    }
    @Transactional(rollbackFor = Exception.class)
    public boolean orderWithPackageItemFeeAdd(JSONObject result, JSONObject jsonObjectParam, LifeCareOrderDO order,String doctorId) {
        List<LifeCareFeeDetailDO> feeDetailDOList = order.getFeeDetailList();

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

@ -284,6 +284,7 @@ public class PayService {
                BaseDoorCoachOrderDO orderDO = baseDoorCoachOrderDao.findOne(orderId);
                if(orderDO.getStatus()==0){
                    orderDO.setStatus(-1);
                    orderDO.setCancelReason("居民取消上门辅导订单");
                    baseDoorCoachOrderDao.save(orderDO);
                }
            }else if("4".equals(type)){
@ -302,6 +303,62 @@ public class PayService {
        return null;
    }
    /**
     * 居民是否存在未支付订单
     * @param patient
     * @param orderCategory
     * @return
     */
    public JSONObject existWaitForPay(String patient,String orderCategory){
        JSONObject result = new JSONObject();
        List<BusinessOrderDO> businessOrderDOs = businessOrderDao.selectByPatientAndStatusAndOrderCategory(patient,0,orderCategory);
        if (businessOrderDOs.size()>0){
            result.put("flag",true);
            result.put("OrderDO",businessOrderDOs.get(0));
        }
        else {
            result.put("flag",false);
            result.put("OrderDO",null);
        }
        return result;
    }
    /**
     * 工单获取支付信息
     * @param orderId
     * @param category
     * @return
     */
    public JSONObject getPayInfo(String orderId,String category){
        JSONObject result = new JSONObject();
        if("3".equals(category)){
            BaseDoorCoachOrderDO orderDO = baseDoorCoachOrderDao.findOne(orderId);
            if (orderDO==null){
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg, "支付工单不存在");
                return result;
            }
        }else if("4".equals(category)){
            LifeCareOrderDO orderDO = lifeCareOrderDao.findOne(orderId);
            if (orderDO==null){
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg, "支付工单不存在");
                return result;
            }
        }
        BusinessOrderDO businessOrderDO = businessOrderDao.selectByRelationCode(orderId);
        if (businessOrderDO==null){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg, "工单未创建支付订单");
            return result;
        }
        JSONObject payInfo = orderInfo(businessOrderDO.getId());
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        result.put(ResponseContant.resultMsg, payInfo);
        return result;
    }
    /**
     * 微信退款
     * @param orderNo

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/third/PatientInfoPlatFormService.java

@ -209,7 +209,7 @@ public class PatientInfoPlatFormService {
                "order by create_time desc  ";
        String countSql = "select count(id) from ("+sql+")A ";
        long count = jdbcTemplate.queryForObject(countSql,long.class);
        sql +=" limit "+page*page+","+pageSize;
        sql +=" limit "+page*pageSize+","+pageSize;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
    }