Browse Source

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

wangzhinan 1 year ago
parent
commit
60d8056172
40 changed files with 1599 additions and 163 deletions
  1. 3 0
      business/base-service/src/main/java/com/yihu/jw/area/dao/BaseCityDao.java
  2. 4 0
      business/base-service/src/main/java/com/yihu/jw/area/dao/BaseProvinceDao.java
  3. 5 0
      business/base-service/src/main/java/com/yihu/jw/area/dao/BaseStreetDao.java
  4. 10 0
      business/base-service/src/main/java/com/yihu/jw/area/dao/BaseTownDao.java
  5. 3 2
      business/base-service/src/main/java/com/yihu/jw/order/dao/ConsultOrderDao.java
  6. 49 1
      common/common-entity/sql/2023.sql
  7. 121 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/servicePackage/ServiceItemPlanDO.java
  8. 10 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/servicePackage/ServicePackageSignRecordDO.java
  9. 64 16
      common/common-entity/src/main/java/com/yihu/jw/entity/door/WlyyDoorServiceOrderDO.java
  10. 4 4
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/qvo/ParamQvo.java
  11. 6 0
      common/common-util/pom.xml
  12. 57 0
      common/common-util/src/main/java/com/yihu/jw/util/cron/CronUtils.java
  13. 0 9
      starter/swagger-starter/pom.xml
  14. 2 4
      starter/swagger-starter/src/main/java/com/yihu/jw/SwaggerConfig.java
  15. 15 9
      svr/svr-base/src/main/java/com/yihu/jw/base/service/servicePackage/ServicePackageService.java
  16. 227 0
      svr/svr-cloud-care/cron.MD
  17. 5 1
      svr/svr-cloud-care/pom.xml
  18. 3 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/sign/ServiceItemConfigDao.java
  19. 20 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/sign/ServiceItemPlanDao.java
  20. 2 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/DoctorMessageEndpoint.java
  21. 26 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/sign/SignEndpoint.java
  22. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/DictService.java
  23. 5 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/DoctorMessageService.java
  24. 160 12
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java
  25. 5 0
      svr/svr-cloud-care/src/main/resources/application.yml
  26. 107 2
      svr/svr-cloud-device/src/main/resources/application.yml
  27. 17 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/sign/ServicePackageSignRecordDao.java
  28. 6 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/consult/FinishConsultJob.java
  29. 50 39
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/order/CancelPayOrderJob.java
  30. 43 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java
  31. 5 1
      svr/svr-cloud-job/src/main/resources/application.yml
  32. 46 0
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/common/CommonItemController.java
  33. 3 13
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/consult/service/ConsultTeamService.java
  34. 100 0
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/district/controller/DistrictController.java
  35. 249 0
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/district/service/DistrictService.java
  36. 28 4
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/controller/DoorOrderController.java
  37. 26 0
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/dao/ServiceItemPlanDao.java
  38. 2 0
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/dao/WlyyDoorServiceOrderDao.java
  39. 36 4
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/service/DoorOrderService.java
  40. 74 41
      svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/service/WlyyDoorServiceOrderService.java

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

@ -1,5 +1,6 @@
package com.yihu.jw.area.dao;
import com.tencentcloudapi.ecm.v20190719.models.City;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
@ -31,4 +32,6 @@ public interface BaseCityDao extends PagingAndSortingRepository<BaseCityDO, Inte
    @Query("select a from BaseCityDO a where a.province = ?1 order by id")
    Iterable<BaseCityDO> findByProvince(String province);
    @Query("select p from BaseCityDO p where p.name = ?1")
    BaseCityDO findByName(String name);
}

+ 4 - 0
business/base-service/src/main/java/com/yihu/jw/area/dao/BaseProvinceDao.java

@ -20,4 +20,8 @@ import org.springframework.data.repository.query.Param;
public interface BaseProvinceDao extends PagingAndSortingRepository<BaseProvinceDO, Integer>, JpaSpecificationExecutor<BaseProvinceDO> {
    @Query("select name from BaseProvinceDO where code =:code")
    String getNameByCode(@Param("code") String code);
    @Query("select p from BaseProvinceDO p where p.name = ?1")
    BaseProvinceDO findByName(String name);
}

+ 5 - 0
business/base-service/src/main/java/com/yihu/jw/area/dao/BaseStreetDao.java

@ -1,6 +1,7 @@
package com.yihu.jw.area.dao;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.yihu.jw.entity.base.area.BaseStreetDO;
@ -22,4 +23,8 @@ import java.util.List;
public interface BaseStreetDao extends PagingAndSortingRepository<BaseStreetDO, Integer>, JpaSpecificationExecutor<BaseStreetDO>  {
    List<BaseStreetDO> findByTown(String town);
    @Query("select p from BaseStreetDO p where p.name = ?1")
    BaseStreetDO findByName(String name);
}

+ 10 - 0
business/base-service/src/main/java/com/yihu/jw/area/dao/BaseTownDao.java

@ -30,4 +30,14 @@ public interface BaseTownDao extends PagingAndSortingRepository<BaseTownDO, Inte
    @Query("select a from BaseTownDO a where a.city = ?1 order by id")
    List<BaseTownDO> findByCityCode(String city);
    @Query("select a from BaseTownDO a where a.city = ?1 order by id")
    Iterable<BaseTownDO> findByCity(String province);
    @Query("select p from BaseTownDO p where p.name = ?1")
    BaseTownDO findByName(String name);
    @Query("select p from BaseTownDO p where p.name = ?1 and p.city = ?2")
    BaseTownDO findByNameAndCity(String name,String city);
}

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

@ -2,6 +2,7 @@ package com.yihu.jw.order.dao;
import com.yihu.jw.entity.base.im.ConsultDo;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
@ -11,8 +12,8 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 */
public interface ConsultOrderDao extends PagingAndSortingRepository<ConsultDo, String>, JpaSpecificationExecutor<ConsultDo> {
	
//	@Query("from ConsultDo a where a.relationCode = ?1")
//	ConsultDo findByRelationCode(String outpatientid);
	@Query("from ConsultDo a where a.relationCode = ?1")
	ConsultDo findByRelationCode(String outpatientid);
//	// 查询患者咨询记录
//	Page<Object> findByPatient(String patient, String title, String id, PageRequest pageRequest);

+ 49 - 1
common/common-entity/sql/2023.sql

@ -127,6 +127,7 @@ CREATE TABLE `base_followup_template` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `base`.`base_service_package_sign_record`
ADD COLUMN `lost_reason` varchar(400) NULL COMMENT '失效原因',
ADD COLUMN `address` varchar(200) NULL COMMENT '详细地址',
ADD COLUMN `price` decimal(10,2) NULL COMMENT '价格',
ADD COLUMN `payment_time` datetime NULL COMMENT '付款时间',
@ -166,6 +167,13 @@ WHERE s.id =r.sign_id;
UPDATE base_service_package_item set leased_code = 'system' WHERE leased_code is null and service_package_id = 'system';
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('109827', NULL, 'plan_start_type', '0', '签约后生效', NULL, '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划开始时间类型');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('109828', NULL, 'plan_start_type', '1', '签约后1天', NULL, '2', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划开始时间类型');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('109829', NULL, 'plan_start_type', '2', '签约后2天', NULL, '3', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划开始时间类型');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_start_type3', NULL, 'plan_start_type', '3', '签约后3天', NULL, '4', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_start_type4', NULL, 'plan_start_type', '7', '签约后1周', NULL, '5', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_start_type5', NULL, 'plan_start_type', '30', '签约后30天', NULL, '6', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('sign_status1', NULL, 'sign_status', '0', '待审核', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '签约状态');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('sign_status0', NULL, 'sign_status', '1', '已签约', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '签约状态');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('sign_status2', NULL, 'sign_status', '2', '待支付', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '签约状态');
@ -179,6 +187,34 @@ INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('sign_refuse_type4', NULL, 'sign_refuse_type', '3', '签约用户已满', NULL, '3', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '签约拒绝原因');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('wxPayNotify', NULL, 'notifyUrl', 'wxpay', 'https://zhyzh.gongshu.gov.cn/cloudCare/pay/open/wxPayNotify', '微信支付回调', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '回调地址');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('cloudPayNotify', NULL, 'notifyUrl', 'cloudWxPay', 'https://zhyzh.gongshu.gov.cn/cloudCare/pay/open/cloudPayNotify', '云照护支付回调', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '回调地址');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('sms_captcha_white1', NULL, 'sms_captcha_white', '13559485270', 'ysj', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '短信验证码白名单');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_frequency1', NULL, 'plan_frequency', '0 0 10 ? * *', '每天10点执行', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划执行频次');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_frequency2', NULL, 'plan_frequency', '0 0 10,14 ? * *', '每天10点,14点执行', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划执行频次');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_frequency3', NULL, 'plan_frequency', '0 0 0/2 ? * *', '每两小时执行一次', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划执行频次');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_frequency4', NULL, 'plan_frequency', '0 0 10 1/3 * ?', '每3天10点执行', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划执行频次');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('plan_frequency5', NULL, 'plan_frequency', '0 0 10 1 * ?', '每月1号10点执行', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '计划执行频次');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('doctor_sign_status1', NULL, 'doctor_sign_status', '0', '待审核', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '居民签约状态');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('doctor_sign_status2', NULL, 'doctor_sign_status', '2', '待支付', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '居民签约状态');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('doctor_sign_status3', NULL, 'doctor_sign_status', '1', '已签约', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '居民签约状态');
INSERT INTO `base`.`wlyy_hospital_sys_dict` (`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('doctor_sign_status4', NULL, 'doctor_sign_status', '-1', '已过期', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '居民签约状态');
CREATE TABLE `base_service_item_plan` (
    `id` varchar(50) NOT NULL,
    `patient` varchar(50) DEFAULT NULL COMMENT '居民id',
    `status` varchar(4) DEFAULT NULL COMMENT '状态0未完成 1已完成',
    `plan_time` varchar(50) DEFAULT NULL COMMENT '计划时间',
    `complete_time` varchar(50) DEFAULT NULL COMMENT '完成时间',
    `sign_id` varchar(50) DEFAULT NULL COMMENT '签约id',
    `service_pack_id` varchar(50) DEFAULT NULL COMMENT '服务包id',
    `service_item_id` varchar(50) DEFAULT NULL COMMENT '服务项id',
    `item_config_id` varchar(50) DEFAULT NULL COMMENT '服务项配置id',
    `name` varchar(50) DEFAULT NULL COMMENT '服务项名称',
    `relation_code` varchar(50) DEFAULT NULL COMMENT '关联业务id',
    `relation_type` varchar(4) DEFAULT NULL COMMENT '关联业务类型 doorService上门服务',
    `create_time` datetime DEFAULT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务项执行计划';
===========================20231024上门服务开始====================================
@ -190,9 +226,21 @@ ALTER TABLE `base`.`wlyy_door_order_item`
    ADD COLUMN `order_id` varchar(50) NULL COMMENT '订单id' AFTER `create_time`;
ALTER TABLE `base`.`base_service_package_item`
    ADD COLUMN `assign_status` varchar(10) NULL COMMENT '是否分配服务者【1是0否】' AFTER `template_code`,
ADD COLUMN `assign_status` varchar(10) NULL COMMENT '是否分配服务者【1是0否】' AFTER `template_code`,
ADD COLUMN `server_user_id` varchar(50) NULL COMMENT '服务者id' AFTER `assign_status`,
ADD COLUMN `server_user_name` varchar(50) NULL COMMENT '服务者name' AFTER `server_user_id`,
ADD COLUMN `server_user_type` varchar(10) NULL COMMENT '服务者类型' AFTER `server_user_name`;
ALTER TABLE `base`.`wlyy_door_service_order`
ADD COLUMN `sign_id` varchar(50) NULL COMMENT '签约id' AFTER `package_id`;
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000001', NULL, 'PROFESSIONAL_STATE', '0', '国家机关、党群组织、企业、事业单位负责人', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000002', NULL, 'PROFESSIONAL_STATE', '1', '专业技术人员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000003', NULL, 'PROFESSIONAL_STATE', '2', '办事人员和有关人员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000004', NULL, 'PROFESSIONAL_STATE', '3', '商业、服务业人员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000005', NULL, 'PROFESSIONAL_STATE', '4', '农、林、牧、渔、水利业生产人员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000006', NULL, 'PROFESSIONAL_STATE', '5', '生产、运输设备操作人员及有关人员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000007', NULL, 'PROFESSIONAL_STATE', '6', '军人', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `base`.`wlyy_hospital_sys_dict`(`id`, `saas_id`, `dict_name`, `dict_code`, `dict_value`, `py_code`, `sort`, `hospital`, `create_time`, `create_user`, `create_user_name`, `update_time`, `update_user`, `update_user_name`, `img_url`, `model_name`) VALUES ('1000000008', NULL, 'PROFESSIONAL_STATE', '7', '不便分类的其他从业人员', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
===========================20231024上门服务结束====================================

+ 121 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/servicePackage/ServiceItemPlanDO.java

@ -0,0 +1,121 @@
package com.yihu.jw.entity.base.servicePackage;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 服务项执行计划
 * Created by yeshijie on 2023/10/28.
 */
@Entity
@Table(name = "base_service_item_plan")
public class ServiceItemPlanDO extends UuidIdentityEntityWithCreateTime {
    private String patient;//居民id
    private String status;//状态0未完成 1已完成
    private String planTime;//计划时间
    private String completeTime;//完成时间
    private String signId;//签约id
    private String servicePackId;//服务包id
    private String serviceItemId;//服务项id
    private String itemConfigId;//服务项配置id
    private String name;//服务项名称
    private String relationCode;//关联业务id
    private String relationType;//关联业务类型 doorService上门服务
    @Column(name = "patient")
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    @Column(name = "status")
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @Column(name = "sign_id")
    public String getSignId() {
        return signId;
    }
    public void setSignId(String signId) {
        this.signId = signId;
    }
    @Column(name = "service_pack_id")
    public String getServicePackId() {
        return servicePackId;
    }
    public void setServicePackId(String servicePackId) {
        this.servicePackId = servicePackId;
    }
    @Column(name = "service_item_id")
    public String getServiceItemId() {
        return serviceItemId;
    }
    public void setServiceItemId(String serviceItemId) {
        this.serviceItemId = serviceItemId;
    }
    @Column(name = "item_config_id")
    public String getItemConfigId() {
        return itemConfigId;
    }
    public void setItemConfigId(String itemConfigId) {
        this.itemConfigId = itemConfigId;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "relation_code")
    public String getRelationCode() {
        return relationCode;
    }
    public void setRelationCode(String relationCode) {
        this.relationCode = relationCode;
    }
    @Column(name = "relation_type")
    public String getRelationType() {
        return relationType;
    }
    public void setRelationType(String relationType) {
        this.relationType = relationType;
    }
    public String getPlanTime() {
        return planTime;
    }
    @Column(name = "plan_time")
    public void setPlanTime(String planTime) {
        this.planTime = planTime;
    }
    public String getCompleteTime() {
        return completeTime;
    }
    @Column(name = "complete_time")
    public void setCompleteTime(String completeTime) {
        this.completeTime = completeTime;
    }
}

+ 10 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/servicePackage/ServicePackageSignRecordDO.java

@ -49,6 +49,7 @@ public class ServicePackageSignRecordDO extends UuidIdentityEntityWithCreateTime
    private Integer payWay;//付款方式:1-微信支付,2-线下支付(居民自己向医院支付,具体怎么支付由医院来定)
    private Date updateTime;//更新时间
    private String lostReason;//失效原因
    private String checkDoctor;//审核人code
    private String checkDoctorName;//审核人姓名
    private String checkTime;//审核时间
@ -378,4 +379,13 @@ public class ServicePackageSignRecordDO extends UuidIdentityEntityWithCreateTime
    public void setAddress(String address) {
        this.address = address;
    }
    @Column(name = "lost_reason")
    public String getLostReason() {
        return lostReason;
    }
    public void setLostReason(String lostReason) {
        this.lostReason = lostReason;
    }
}

+ 64 - 16
common/common-entity/src/main/java/com/yihu/jw/entity/door/WlyyDoorServiceOrderDO.java

@ -3,7 +3,6 @@ package com.yihu.jw.entity.door;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntityWithOperator;
import com.yihu.jw.entity.followup.Followup;
import com.yihu.jw.entity.hospital.prescription.WlyyPrescriptionDO;
import javax.persistence.Column;
import javax.persistence.Entity;
@ -19,14 +18,12 @@ import java.util.Map;
 * 上门服务工单实体
 *
 * @author Administrator on  2019年03月19日
 *
 */
@Entity
@Table(name = "wlyy_door_service_order")
public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    /**
     * 工单状态
     */
@ -38,7 +35,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
        accept(3, "已接单"),
        waitForServe(4, "待服务"),
        waitForCommnet(5, "待评价"),
        complete(6,"已完成");
        complete(6, "已完成");
        private Integer type;
        private String desc;
@ -64,7 +61,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public enum PayWay {
        wechat(1, "微信支付"),
        offLine(2,"线下支付");
        offLine(2, "线下支付");
        private Integer type;
        private String desc;
@ -90,7 +87,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public enum CancelType {
        dispatcher(1, "调度员取消"),
        patient(2,"居民取消"),
        patient(2, "居民取消"),
        doctor(3, "医生取消");
        private Integer type;
@ -117,7 +114,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public enum ExamPaperUploadWay {
        photo(1, "拍照补录"),
        interfaceData(2,"接口数据");
        interfaceData(2, "接口数据");
        private Integer type;
        private String desc;
@ -143,7 +140,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public enum DoctorSignWay {
        locate(1, "定位"),
        sacn(2,"扫码");
        sacn(2, "扫码");
        private Integer type;
        private String desc;
@ -169,7 +166,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public enum IsPatientConfirm {
        no(0, "未确认"),
        yes(1,"已确认");
        yes(1, "已确认");
        private Integer type;
        private String desc;
@ -195,7 +192,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public enum IsTransOtherOrg {
        no(0, "不转"),
        yes(1,"已转");
        yes(1, "已转");
        private Integer type;
        private String desc;
@ -218,6 +215,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    private String packageId;//服务包的id
    private String feeAfter;//服务后收费标识(1是0否)
    private String signId;//签约id
    /**
     * 服务编号
@ -594,6 +592,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public void setPrescriptionDOList(List<WlyyDoorPrescriptionDO> prescriptionDOList) {
        this.prescriptionDOList = prescriptionDOList;
    }
    @Transient
    public List<WlyyDoorPrescriptionDO> getAfterPrescriptionList() {
        return afterPrescriptionList;
@ -604,15 +603,11 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    }
    @Column(name = "number")
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
@ -621,6 +616,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getProxyPatient() {
        return proxyPatient;
    }
    public void setProxyPatient(String proxyPatient) {
        this.proxyPatient = proxyPatient;
    }
@ -629,6 +625,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getProxyPatientName() {
        return proxyPatientName;
    }
    public void setProxyPatientName(String proxyPatientName) {
        this.proxyPatientName = proxyPatientName;
    }
@ -637,6 +634,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getProxyPatientPhone() {
        return proxyPatientPhone;
    }
    public void setProxyPatientPhone(String proxyPatientPhone) {
        this.proxyPatientPhone = proxyPatientPhone;
    }
@ -645,6 +643,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
@ -653,6 +652,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPatientName() {
        return patientName;
    }
    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }
@ -661,6 +661,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPatientPhone() {
        return patientPhone;
    }
    public void setPatientPhone(String patientPhone) {
        this.patientPhone = patientPhone;
    }
@ -669,6 +670,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPatientRelation() {
        return patientRelation;
    }
    public void setPatientRelation(String patientRelation) {
        this.patientRelation = patientRelation;
    }
@ -677,6 +679,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getDispatcher() {
        return dispatcher;
    }
    public void setDispatcher(String dispatcher) {
        this.dispatcher = dispatcher;
    }
@ -685,6 +688,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getDispatcherName() {
        return dispatcherName;
    }
    public void setDispatcherName(String dispatcherName) {
        this.dispatcherName = dispatcherName;
    }
@ -693,6 +697,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPatientExpectedServeTime() {
        return patientExpectedServeTime;
    }
    public void setPatientExpectedServeTime(String patientExpectedServeTime) {
        this.patientExpectedServeTime = patientExpectedServeTime;
    }
@ -701,6 +706,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getServeDesc() {
        return serveDesc;
    }
    public void setServeDesc(String serveDesc) {
        this.serveDesc = serveDesc;
    }
@ -709,6 +715,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getServeTown() {
        return serveTown;
    }
    public void setServeTown(String serveTown) {
        this.serveTown = serveTown;
    }
@ -717,6 +724,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getServeAddress() {
        return serveAddress;
    }
    public void setServeAddress(String serveAddress) {
        this.serveAddress = serveAddress;
    }
@ -725,6 +733,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getServeLat() {
        return serveLat;
    }
    public void setServeLat(String serveLat) {
        this.serveLat = serveLat;
    }
@ -733,6 +742,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getServeLon() {
        return serveLon;
    }
    public void setServeLon(String serveLon) {
        this.serveLon = serveLon;
    }
@ -741,6 +751,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
@ -749,6 +760,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getIsPatientConfirm() {
        return isPatientConfirm;
    }
    public void setIsPatientConfirm(Integer isPatientConfirm) {
        this.isPatientConfirm = isPatientConfirm;
    }
@ -757,6 +769,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Date getPatientConfirmTime() {
        return patientConfirmTime;
    }
    public void setPatientConfirmTime(Date patientConfirmTime) {
        this.patientConfirmTime = patientConfirmTime;
    }
@ -765,6 +778,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getIsTransOtherOrg() {
        return isTransOtherOrg;
    }
    public void setIsTransOtherOrg(Integer isTransOtherOrg) {
        this.isTransOtherOrg = isTransOtherOrg;
    }
@ -791,6 +805,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getTransedDispatcher() {
        return transedDispatcher;
    }
    public void setTransedDispatcher(String transedDispatcher) {
        this.transedDispatcher = transedDispatcher;
    }
@ -799,6 +814,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getTransedDispatcherName() {
        return transedDispatcherName;
    }
    public void setTransedDispatcherName(String transedDispatcherName) {
        this.transedDispatcherName = transedDispatcherName;
    }
@ -807,16 +823,17 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public BigDecimal getTotalFee() {
        return totalFee;
    }
    public void setTotalFee(BigDecimal totalFee) {
        this.totalFee = totalFee;
    }
    @Column(name = "doctor")
    public String getDoctor() {
        return doctor;
    }
    public void setDoctor(String doctor) {
        this.doctor = doctor;
    }
@ -825,6 +842,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getDoctorName() {
        return doctorName;
    }
    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }
@ -833,6 +851,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getDoctorType() {
        return doctorType;
    }
    public void setDoctorType(String doctorType) {
        this.doctorType = doctorType;
    }
@ -841,6 +860,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getDoctorArrivingTime() {
        return doctorArrivingTime;
    }
    public void setDoctorArrivingTime(String doctorArrivingTime) {
        this.doctorArrivingTime = doctorArrivingTime;
    }
@ -849,6 +869,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Date getDoctorSignTime() {
        return doctorSignTime;
    }
    public void setDoctorSignTime(Date doctorSignTime) {
        this.doctorSignTime = doctorSignTime;
    }
@ -857,6 +878,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getDoctorSignWay() {
        return doctorSignWay;
    }
    public void setDoctorSignWay(Integer doctorSignWay) {
        this.doctorSignWay = doctorSignWay;
    }
@ -865,6 +887,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getDoctorSignLocation() {
        return doctorSignLocation;
    }
    public void setDoctorSignLocation(String doctorSignLocation) {
        this.doctorSignLocation = doctorSignLocation;
    }
@ -873,6 +896,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getDoctorSignImg() {
        return doctorSignImg;
    }
    public void setDoctorSignImg(String doctorSignImg) {
        this.doctorSignImg = doctorSignImg;
    }
@ -881,6 +905,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getPatientConfirmFinishWay() {
        return patientConfirmFinishWay;
    }
    public void setPatientConfirmFinishWay(Integer patientConfirmFinishWay) {
        this.patientConfirmFinishWay = patientConfirmFinishWay;
    }
@ -889,6 +914,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPatientConfirmFinishImg() {
        return patientConfirmFinishImg;
    }
    public void setPatientConfirmFinishImg(String patientConfirmFinishImg) {
        this.patientConfirmFinishImg = patientConfirmFinishImg;
    }
@ -897,6 +923,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Date getPatientConfirmFinishTime() {
        return patientConfirmFinishTime;
    }
    public void setPatientConfirmFinishTime(Date patientConfirmFinishTime) {
        this.patientConfirmFinishTime = patientConfirmFinishTime;
    }
@ -905,6 +932,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPresentImgs() {
        return presentImgs;
    }
    public void setPresentImgs(String presentImgs) {
        this.presentImgs = presentImgs;
    }
@ -913,6 +941,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getExamPaperStatus() {
        return examPaperStatus;
    }
    public void setExamPaperStatus(Integer examPaperStatus) {
        this.examPaperStatus = examPaperStatus;
    }
@ -921,6 +950,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getExamPaperImgs() {
        return examPaperImgs;
    }
    public void setExamPaperImgs(String examPaperImgs) {
        this.examPaperImgs = examPaperImgs;
    }
@ -929,6 +959,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Date getExamPaperUploadTime() {
        return examPaperUploadTime;
    }
    public void setExamPaperUploadTime(Date examPaperUploadTime) {
        this.examPaperUploadTime = examPaperUploadTime;
    }
@ -937,6 +968,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getExamPaperUploadWay() {
        return examPaperUploadWay;
    }
    public void setExamPaperUploadWay(Integer examPaperUploadWay) {
        this.examPaperUploadWay = examPaperUploadWay;
    }
@ -945,6 +977,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
@ -954,6 +987,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Date getCompleteTime() {
        return completeTime;
    }
    public void setCompleteTime(Date completeTime) {
        this.completeTime = completeTime;
    }
@ -962,6 +996,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getCancelType() {
        return cancelType;
    }
    public void setCancelType(Integer cancelType) {
        this.cancelType = cancelType;
    }
@ -970,6 +1005,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getCancelReason() {
        return cancelReason;
    }
    public void setCancelReason(String cancelReason) {
        this.cancelReason = cancelReason;
    }
@ -979,6 +1015,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Date getCancelTime() {
        return cancelTime;
    }
    public void setCancelTime(Date cancelTime) {
        this.cancelTime = cancelTime;
    }
@ -987,6 +1024,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Integer getPayWay() {
        return payWay;
    }
    public void setPayWay(Integer payWay) {
        this.payWay = payWay;
    }
@ -995,6 +1033,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public String getPayNumber() {
        return payNumber;
    }
    public void setPayNumber(String payNumber) {
        this.payNumber = payNumber;
    }
@ -1003,6 +1042,7 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public Date getPayTime() {
        return payTime;
    }
    public void setPayTime(Date payTime) {
        this.payTime = payTime;
    }
@ -1286,4 +1326,12 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public void setFeeAfter(String feeAfter) {
        this.feeAfter = feeAfter;
    }
    public String getSignId() {
        return signId;
    }
    public void setSignId(String signId) {
        this.signId = signId;
    }
}

+ 4 - 4
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/qvo/ParamQvo.java

@ -22,10 +22,10 @@ public class ParamQvo {
    private String dictItemId;//字典服务项id
    private String configureIf;//是否是配置
    private String pageIf;//是否分页
    private int page = 1;//是否分页
    private int pageSize = 20;//数量
    private String configureIf;//是否是配置 1是0否
    private String pageIf;//是否分页 1是0否
    private int page = 1;//第几页
    private int pageSize = 20;//分页大小
    private String loginUserCode;//登录人的code

+ 6 - 0
common/common-util/pom.xml

@ -102,5 +102,11 @@
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </dependency>
        <!-- cron解析 依赖这个包 -->
        <dependency>
            <groupId>com.cronutils</groupId>
            <artifactId>cron-utils</artifactId>
            <version>9.1.6</version>
        </dependency>
    </dependencies>
</project>

+ 57 - 0
common/common-util/src/main/java/com/yihu/jw/util/cron/CronUtils.java

@ -0,0 +1,57 @@
package com.yihu.jw.util.cron;
import com.cronutils.model.Cron;
import com.cronutils.model.CronType;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
 * cron表达式工具类
 * Created by yeshijie on 2023/10/28.
 */
public class CronUtils {
    /**
     * 根据cron表达式解析最近几次的执行时间
     * @param cronStr
     * @param num
     * @return
     */
    public static List<String> getExecutionTimeByNum(String cronStr, Integer num, LocalDateTime localDateTime) {
        CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.SPRING));
        Cron cron = parser.parse(cronStr);
        ExecutionTime time = ExecutionTime.forCron(cron);
        ZonedDateTime now;
        if(localDateTime == null){
            now = ZonedDateTime.now();
        }else {
            now = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
        }
        ZonedDateTime next = getNext(time, now);
        List<ZonedDateTime> timeList = new ArrayList<>(num);
        timeList.add(next);
        for (int i = 1; i < num; i++) {
            next = getNext(time, next);
            timeList.add(next);
        }
        DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        List<String> resultList = new ArrayList<>(num);
        for (ZonedDateTime item : timeList) {
            String result = item.format(format);
            resultList.add(result);
        }
        return resultList;
    }
    private static ZonedDateTime getNext(ExecutionTime time, ZonedDateTime current) {
        return time.nextExecution(current).get();
    }
}

+ 0 - 9
starter/swagger-starter/pom.xml

@ -12,11 +12,6 @@
    <artifactId>swagger-starter</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
@ -42,10 +37,6 @@
            <artifactId>swagger2markup</artifactId>
            <version>${version.swagger2markup}</version>
        </dependency>
    </dependencies>
</project>

+ 2 - 4
starter/swagger-starter/src/main/java/com/yihu/jw/SwaggerConfig.java

@ -1,7 +1,6 @@
package com.yihu.jw;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
//import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
@ -22,10 +21,9 @@ import java.util.List;
import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;
@EnableKnife4j
@EnableSwagger2
@Configuration
//@EnableSwaggerBootstrapUI
@EnableSwaggerBootstrapUI
public class SwaggerConfig {
    public static final String API_VERSION = "v1.0";

+ 15 - 9
svr/svr-base/src/main/java/com/yihu/jw/base/service/servicePackage/ServicePackageService.java

@ -88,20 +88,26 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                servicePackageDO.setUpdateUserName(userDO.getName());
            }
            servicePackageDO= servicePackageDao.save(servicePackageDO);
            servicePackageItemDao.deleteByServicePackageId(servicePackageDO.getId());
        }
        List<ServicePackageItemDO> itemDOs = new ArrayList<>();
        for (ServicePackageItemDO itemDO:itemDOList){
            itemDO.setServicePackageId(servicePackageDO.getId());
            itemDO.setCreateTime(DateUtil.getStringDate());
            SystemDictEntryDO systemDictEntryDO = systemDictEntryDao.findByDictCodeAndCode("service_item",itemDO.getCode());
            if (systemDictEntryDO!=null){
                if (StringUtils.isNotBlank(systemDictEntryDO.getRemark())){//服务项所属专题不为空
                    itemDO.setTopicItem(systemDictEntryDO.getRemark());
            ServicePackageItemDO itemDO1 = new ServicePackageItemDO();
            if(StringUtils.isNotBlank(itemDO.getId())){
                itemDO1 = servicePackageItemDao.findOne(itemDO.getId());
            }else {
                itemDO1 = itemDO;
                itemDO1.setCreateTime(DateUtil.getStringDate());
                SystemDictEntryDO systemDictEntryDO = systemDictEntryDao.findByDictCodeAndCode("service_item",itemDO.getCode());
                if (systemDictEntryDO!=null){
                    if (StringUtils.isNotBlank(systemDictEntryDO.getRemark())){//服务项所属专题不为空
                        itemDO1.setTopicItem(systemDictEntryDO.getRemark());
                    }
                }
            }
            itemDOs.add(itemDO);
            itemDO1.setDictId(itemDO.getId());
            itemDO1.setServicePackageId(servicePackageDO.getId());
            itemDOs.add(itemDO1);
        }
        servicePackageItemDao.save(itemDOs);

+ 227 - 0
svr/svr-cloud-care/cron.MD

@ -0,0 +1,227 @@
文章目录
cron表达式介绍
cron有如下两种语法格式
cron表达式标准结构
cron表达式各个字段的含义
cron每个域特殊字符含义
cron常用表达式例子
Java通过时间生成cron表达式
cron表达式介绍
cron表达式是由若干数字、空格、符号按一定的规则,组成一组字符串,从而表达时间的信息。与正则表达式类似,都是一个字符串表示一些信息。
cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义。
cron有如下两种语法格式
Seconds Minutes Hours DayofMonth Month DayofWeek Year
Seconds Minutes Hours DayofMonth Month DayofWeek
cron表达式标准结构
corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份
cron表达式各个字段的含义
字段
允许值
允许的特殊字符
秒(Seconds)
0~59的整数
, - * / 四个字符
分(Minutes)
0~59的整数
, - * / 四个字符
小时(Hours)
0~23的整数
, - * / 四个字符
日期(DayofMonth)
1~31的整数(但是你需要考虑你月的天数)
,- * ? / L W C 八个字符
月份(Month)
1~12的整数或者 JAN-DEC
, - * / 四个字符
星期(DayofWeek)
1~7的整数或者 SUN-SAT (1=SUN)
, - * ? / L C # 八个字符
年(可选,留空)(Year)
1970~2099
, - * / 四个字符
cron每个域特殊字符含义
特殊字符
含义
*
表示匹配该域的任意值。假如在Minutes域使用*, 即表示每分钟都会触发事件
?
只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样
-
表示范围。例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次
/
表示起始时间开始触发,然后每隔固定时间触发一次。例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次
,
表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次
L
表示最后,只能出现在DayofWeek和DayofMonth域。如果在DayofWeek域使用5L,意味着在最后的一个星期四触发
W
表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份
LW
这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五
#
用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三
cron常用表达式例子
cron表达式
说明
0 0 2 1 * ? *
表示在每月的1日的凌晨2点调整任务
0 15 10 ? * MON-FRI
表示周一到周五每天上午10:15执行作业
0 15 10 ? 6L 2002-2006
表示2002-2006年的每个月的最后一个星期五上午10:15执行作
0 0 10,14,16 * * ?
每天上午10点,下午2点,4点
0 0/30 9-17 * * ?
朝九晚五工作时间内每半小时
0 0 12 ? * WED
表示每个星期三中午12点
0 0 12 * * ?
每天中午12点触发
0 15 10 ? * *
每天上午10:15触发
0 15 10 * * ?
每天上午10:15触发
0 15 10 * * ? *
每天上午10:15触发
0 15 10 * * ? 2005
2005年的每天上午10:15触发
0 * 14 * * ?
在每天下午2点到下午2:59期间的每1分钟触发
0 0/5 14 * * ?
在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ?
在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0-5 14 * * ?
在每天下午2点到下午2:05期间的每1分钟触发
0 10,44 14 ? 3 WED
每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI
周一至周五的上午10:15触发
0 15 10 15 * ?
每月15日上午10:15触发
0 15 10 L * ?
每月最后一日的上午10:15触发
0 15 10 ? * 6L
每月的最后一个星期五上午10:15触发
0 15 10 ? * 6L 2002-2005
2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3
每月的第三个星期五上午10:15触发
注意:
(1)有些子表达式能包含一些范围或列表
例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”
“*”字符代表所有可能的值
因此,“”在子表达式(月)里表示每个月的含义,“”在子表达式(天(星期))表示星期的每一天
“/”字符用来指定数值的增量
例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样
“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
“L” 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写
但是它在两个子表达式里的含义是不同的。
在天(月)子表达式中,“L”表示一个月的最后一天
在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT
如果在“L”前有具体的内容,它就具有其他的含义了
例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五
注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题
-----------------------------------

+ 5 - 1
svr/svr-cloud-care/pom.xml

@ -291,8 +291,12 @@
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>svr-cloud-care</finalName>
        <plugins>

+ 3 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/sign/ServiceItemConfigDao.java

@ -15,4 +15,7 @@ public interface ServiceItemConfigDao extends JpaRepository<ServiceItemConfig, S
    @Query("from ServiceItemConfig w where w.packageId =?1 ")
    List<ServiceItemConfig> findByPackageId(String packageId);
    @Query("from ServiceItemConfig w where w.serverItemId =?1 ")
    List<ServiceItemConfig> findByServerItemId(String serverItemId);
}

+ 20 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/sign/ServiceItemPlanDao.java

@ -0,0 +1,20 @@
package com.yihu.jw.care.dao.sign;
import com.yihu.jw.entity.base.servicePackage.ServiceItemPlanDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
 * Created by yeshijie on 2023/10/28.
 */
public interface ServiceItemPlanDao extends JpaRepository<ServiceItemPlanDO, String>, JpaSpecificationExecutor<ServiceItemPlanDO> {
    @Query("from ServiceItemPlanDO w where w.signId =?1 ")
    List<ServiceItemPlanDO> findBySignId(String signId);
    @Query(value = "select * from base_service_item_plan w where w.sign_id =?1 and w.service_item_id=?2 order by w.plan_time desc",nativeQuery = true)
    List<ServiceItemPlanDO> findBySignIdAndServiceItemId(String signId,String serviceItemId);
}

+ 2 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/DoctorMessageEndpoint.java

@ -31,6 +31,8 @@ public class DoctorMessageEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private PermissionService permissionService;
    @GetMapping(value = "messages")
    @ApiOperation("应用消息")
    public ObjEnvelop messages(@ApiParam(name = "type", value = "消息类型 10床位申请,11安全监护,12紧急救助," +

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

@ -51,6 +51,32 @@ public class SignEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private ServicePackageService servicePackageService;
    @GetMapping(value = "planDetail")
    @ApiOperation(value = "养护计划详情")
    public ObjEnvelop planDetail(
            @ApiParam(name = "signId", value = "签约id", required = true)
            @RequestParam String signId,
            @ApiParam(name = "serviceItemId", value = "服务项id", required = true)
            @RequestParam String serviceItemId) {
        try{
            return ObjEnvelop.getSuccess("查询成功",servicePackageService.planDetail(signId,serviceItemId));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "conservePlan")
    @ApiOperation(value = "养护计划")
    public ObjEnvelop conservePlan(
            @ApiParam(name = "signId", value = "签约id", required = true)
            @RequestParam String signId) {
        try{
            return ObjEnvelop.getSuccess("查询成功",servicePackageService.conservePlan(signId));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "mySign")
    @ApiOperation(value = "我的签约服务")
    public ObjEnvelop mySign(

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/DictService.java

@ -69,7 +69,7 @@ public class DictService {
                " t.create_time as \"createTime\""+
                " from wlyy_hospital_sys_dict t where 1=1 ";
        if (StringUtils.isNoneBlank(name)){
            sql+=" and t.dict_name like '%"+name+"%'";
            sql+=" and t.dict_name = '"+name+"'";
        }
        if (StringUtils.isNoneBlank(modelName)){
            sql+=" and t.model_name like '%"+modelName+"%'";

+ 5 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/DoctorMessageService.java

@ -74,6 +74,11 @@ public class DoctorMessageService {
    @Autowired
    private BasePatientDao basePatientDao;
    public void systemMessagePage(){
    }
    /**
     *
     * @param doctor

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

@ -1,5 +1,6 @@
package com.yihu.jw.care.service.sign;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -23,10 +24,10 @@ import com.yihu.jw.entity.order.BusinessOrderDO;
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.patient.service.BasePatientMedicardCardService;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.cron.CronUtils;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.entity.ServiceException;
import com.yihu.jw.utils.StringUtil;
@ -41,6 +42,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -75,7 +77,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
    @Autowired
    private ArchiveDao archiveDao;
    @Autowired
    private BasePatientMedicardCardService basePatientMedicardCardService;
    private ServiceItemPlanDao serviceItemPlanDao;
    @Autowired
    private PayService payService;
    @Autowired
@ -203,6 +205,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        }
        BaseDoctorDO doctorDO = doctorDao.findById(uid);
        signRecordDO.setCheckTime(DateUtil.getStringDate());
        signRecordDO.setUpdateTime(new Date());
        if(doctorDO!=null){
            signRecordDO.setCheckDoctor(doctorDO.getId());
            signRecordDO.setCheckDoctorName(doctorDO.getName());
@ -222,6 +225,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                setSignDate(servicePackageDO,signRecordDO);
            }else{
                signRecordDO.setPayTime((3*24*60)+"");//3天 单位分钟
                payService.submitOrder(signRecordDO.getPatient(),"4",signRecordDO.getId(),signRecordDO.getPrice().doubleValue());
            }
        }
@ -239,7 +243,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                " LEFT JOIN wlyy_hospital_sys_dict di2 on di2.dict_name = 'level_conclusion' and di2.dict_code=ar.level_conclusion " +
                " where p.id = '"+patient+"' limit 1";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filter);
        String packageSql = "SELECT r.id,DATE_FORMAT(r.end_time,'%Y-%m-%d %H:%i:%S') endTime,r.type,p.`name`,p.num,p.org_name orgName " +
        String packageSql = "SELECT r.id,p.id packageId,DATE_FORMAT(r.end_time,'%Y-%m-%d %H:%i:%S') endTime,r.type,p.`name`,p.num,p.org_name orgName " +
                "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){
@ -264,19 +268,20 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                ",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 " +
                " inner JOIN base_service_package_sign_record r on p.id = r.patient and r.status=1" +
                " LEFT JOIN base_service_package_record pr on pr.sign_id = r.id " +
                " 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+"' ";
            filter += " and (r.check_doctor = '"+doctorId+"' or (pr.doctor='"+doctorId+"' and pr.type='2'))";
        }
        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,DATE_FORMAT(r.end_time,'%Y-%m-%d %H:%i:%S') endTime,r.type,p.`name`,p.num,p.org_name orgName " +
        String packageSql = "SELECT r.id,r.service_package_id servicePackageId,DATE_FORMAT(r.end_time,'%Y-%m-%d %H:%i:%S') endTime,r.type,p.`name`,p.num,p.org_name orgName " +
                "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){
@ -298,14 +303,16 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
     */
    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+"' ";
                "LEFT JOIN base_service_package_record r on r.sign_id = sr.id " +
                "WHERE sr.status=1 and (sr.check_doctor = '"+doctorId+"' or (r.doctor='"+doctorId+"' and r.type='2'))";
        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+"' ";
        String sql = "SELECT COUNT(distinct sr.service_package_id) from base_service_package_sign_record sr " +
                "LEFT JOIN base_service_package_record r on r.sign_id = sr.id " +
                "WHERE sr.status=1 and (sr.check_doctor = '"+doctorId+"' or (r.doctor='"+doctorId+"' and r.type='2'))";
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
@ -319,6 +326,19 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
    public JSONObject signInfo(String id,String type){
        JSONObject json = new JSONObject();
        ServicePackageSignRecordDO signRecordDO = servicePackageSignRecordDao.findOne(id);
        if(signRecordDO == null){
            return null;
        }
        if(2==signRecordDO.getStatus()){
            //判断是否支付过期
            String overTime = DateUtil.getNextMinute(DateUtil.dateToStrLong(signRecordDO.getUpdateTime()),Integer.parseInt(signRecordDO.getPayTime()));
            long over = DateUtil.compareDate(DateUtil.YYYY_MM_DD_HH_MM_SS,DateUtil.getStringDate(),overTime);
            if(over>=0){
                signRecordDO.setStatus(-2);
                signRecordDO.setLostReason("超时未支付,系统自动关闭申请");
                servicePackageSignRecordDao.save(signRecordDO);
            }
        }
        ServicePackageDO servicePackageDO = servicePackageDao.findOne(signRecordDO.getServicePackageId());
        List<ServicePackageItemDO> itemDOList = null;
        if("1".equals(type)){
@ -344,7 +364,8 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        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";
                "LEFT JOIN base_service_package_record r on r.sign_id = sr.id " +
                "WHERE (sr.check_doctor = '"+doctorId+"' or (r.doctor='"+doctorId+"' and r.type='2')) group by status";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map :list){
            String status = map.get("status")+"";
@ -382,11 +403,14 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
    public PageEnvelop signPage(String patientId,String doctorId,String name,String status,Integer page,Integer size){
        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,r.service_package_id servicePackageId " +
                ",p.photo,DATE_FORMAT(r.create_time,'%Y-%m-%d %H:%i:%S') createTime,r.type,sp.`name` packageName,sp.num,sp.org_name orgName";
                ",p.photo,DATE_FORMAT(r.create_time,'%Y-%m-%d %H:%i:%S') createTime,r.type,sp.`name` packageName,sp.num,sp.org_name orgName" +
                ",DATE_FORMAT(r.update_time,'%Y-%m-%d %H:%i:%S') updateTime,r.pay_time payTime,r.lost_reason lostReason" +
                ",r.refuse_type refuseType,r.check_doctor checkDoctor ";
        String countSql = "select count(distinct r.id) ";
        String filter = " from base_service_package_sign_record r " +
                " 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 base_service_package_record pr on pr.sign_id = r.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 wlyy_hospital_sys_dict di2 on di2.dict_name = 'level_conclusion' and di2.dict_code=ar.level_conclusion " +
@ -395,7 +419,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
            filter += " and r.patient = '"+patientId+"' ";
        }
        if(StringUtils.isNotBlank(doctorId)){
            filter += " and r.check_doctor = '"+doctorId+"' ";
            filter += " and (r.check_doctor = '"+doctorId+"' or (pr.doctor='"+doctorId+"' and pr.type='2'))";
        }
        if(StringUtils.isNotBlank(status)){
            filter += " and r.status = "+status+" ";
@ -406,9 +430,23 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        String oderBy = " order by r.create_time desc limit "+(page-1)*size+","+size;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filter+oderBy);
        for (Map<String,Object> map:list){
            String id = map.get("id")+"";
            String sta = map.get("status")+"";
            String payTime = map.get("payTime")+"";
            String updateTime = map.get("updateTime")+"";
            String idcard = map.get("idcard")+"";
            String birthday = map.get("birthday")+"";
            map.put("age", IdCardUtil.getAgeByBirthdayStrOrIdcard(idcard,birthday));
            if("2".equals(sta)){
                //判断是否支付过期
                String overTime = DateUtil.getNextMinute(updateTime,Integer.parseInt(payTime));
                long over = DateUtil.compareDate(DateUtil.YYYY_MM_DD_HH_MM_SS,DateUtil.getStringDate(),overTime);
                if(over>=0){
                    jdbcTemplate.execute("UPDATE base_service_package_sign_record set `status`=-2,lost_reason='超时未支付,系统自动关闭申请' where id='"+id+"'");
                    map.put("status","-2");
                    map.put("lostReason","超时未支付,系统自动关闭申请");
                }
            }
        }
        long count = jdbcTemplate.queryForObject(countSql+filter,Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,size,count);
@ -457,6 +495,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
                    //不需要支付
                    signRecordDO.setStatus(1);//已签约
                    //设置到期时间
                    servicePackageSignRecordDao.save(signRecordDO);
                    setSignDate(servicePackageDO,signRecordDO);
                }else{
                    signRecordDO.setPayTime("10");//10分钟
@ -520,6 +559,115 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        signRecordDO.setStartTime(new Date());
        sendMessage(servicePackageDO,signRecordDO);
        addPlans(signRecordDO.getId(),signRecordDO.getPatient(),signRecordDO.getServicePackageId());
    }
    //养护计划详情
    public JSONObject planDetail(String signId,String serviceItemId){
        JSONObject result = new JSONObject();
        List<ServiceItemConfig> configList = serviceItemConfigDao.findByServerItemId(serviceItemId);
        if(configList.size()>0){
            result.put("itemConfig",configList.get(0));
        }else {
            result.put("itemConfig",null);
        }
        List<ServiceItemPlanDO> planDOList = serviceItemPlanDao.findBySignIdAndServiceItemId(signId,serviceItemId);
        result.put("planDOList",planDOList);
        return result;
    }
    //养护计划
    public JSONArray conservePlan(String signId){
        JSONArray ja = new JSONArray();
        List<ServiceItemPlanDO> planDOList = serviceItemPlanDao.findBySignId(signId);
        Map<String,List<ServiceItemPlanDO>> planListMap = planDOList.stream().collect(Collectors.groupingBy(ServiceItemPlanDO::getRelationType));
        for (String key:planListMap.keySet()){
            List<ServiceItemPlanDO> planDOS = planListMap.get(key);
            JSONObject json = new JSONObject();
            json.put("signId",signId);
            json.put("serviceItemId",planDOS.get(0).getServiceItemId());
            json.put("code",key);
            json.put("name",planDOS.get(0).getName());
            String completeTime = "";
            String planTime = "";
            int total = planDOS.size();
            int complete = 0;
            for (ServiceItemPlanDO planDO:planDOS){
                if("1".equals(planDO.getStatus())){
                    complete++;
                    if(completeTime.compareTo(planDO.getCompleteTime())<0){
                        completeTime = planDO.getCompleteTime();
                    }
                }else {
                    if("".equals(planTime)){
                        planTime = planDO.getPlanTime();
                    }else if(planTime.compareTo(planDO.getPlanTime())>0){
                        planTime = planDO.getPlanTime();
                    }
                }
            }
            json.put("total",total);
            json.put("complete",complete);
            json.put("completeTime",completeTime);
            json.put("planTime",planTime);
            ja.add(json);
        }
        return ja;
    }
    public static void main(String[] args) {
        String ss = "";
        String time1 = "2023-10-28";
        String time2 = "2023-10-29";
        String time3 = "2023-10-30";
        System.out.println(ss.compareTo(time1));
        System.out.println(time2.compareTo(time1));
        System.out.println(time2.compareTo(time2));
        System.out.println(time2.compareTo(time3));
    }
    //添加项目执行计划
    public void addPlans(String signId,String patient,String packageId){
        try {
            String sql = "SELECT i.name,i.code,c.* from base_service_package_item i,base_service_item_config c " +
                    "WHERE i.service_package_id='"+packageId+"' and i.id = c.server_item_id ";
            List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
            List<ServiceItemPlanDO> planDOList = new ArrayList<>();
            for (Map<String,Object> map:list){
                String name = map.get("name")+"";
                String id = map.get("id")+"";
                String code = map.get("code")+"";
                String template_code = map.get("template_code")+"";
                String server_item_id = map.get("server_item_id")+"";
                String plan_start_time_type = map.get("plan_start_time_type")+"";//计划开始时间类型
                String server_count = map.get("server_count")+"";//服务次数
                String frequency_code = map.get("frequency_code")+"";//频次
                List<String> timeList = new ArrayList<>();
                if(StringUtils.isBlank(template_code)||"null".equals(template_code)){
                    LocalDateTime localDateTime = LocalDateTime.now();
                    int addNum = Integer.parseInt(plan_start_time_type);
                    localDateTime = localDateTime.plusDays(addNum);
                    timeList = CronUtils.getExecutionTimeByNum(frequency_code,Integer.parseInt(server_count),localDateTime);
                }
                for (String time :timeList){
                    ServiceItemPlanDO planDO = new ServiceItemPlanDO();
                    planDO.setPlanTime(time);
                    planDO.setPatient(patient);
                    planDO.setName(name);
                    planDO.setStatus("0");
                    planDO.setServicePackId(packageId);
                    planDO.setServiceItemId(server_item_id);
                    planDO.setItemConfigId(id);
                    planDO.setRelationType(code);
                    planDO.setSignId(signId);
                    planDOList.add(planDO);
                }
            }
            serviceItemPlanDao.save(planDOList);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //给分配者发送消息

+ 5 - 0
svr/svr-cloud-care/src/main/resources/application.yml

@ -81,6 +81,11 @@ tencent:
  secretId: AKIDa1C6k7D2astd6JGvKRJvFJ6dsrZ1C5h2
  secretKey: 7xWpsd7KGC3f16vUq0ucARRAcnhKfjX4
swagger:
  basic:
    enable: true
    username: jw
    password: Zjxl2023*
---
spring:
  profiles: jwdev

+ 107 - 2
svr/svr-cloud-device/src/main/resources/application.yml

@ -70,7 +70,11 @@ fast-dfs:
configDefault: # 默认配置
  saasId: xmjkzl_saasId
swagger:
  basic:
    enable: true
    username: jw
    password: Zjxl2023*
---
spring:
  profiles: jwdev
@ -372,4 +376,105 @@ baiduApi:
  url: http://api.map.baidu.com/
cloudCare:
  url: http://127.0.0.1:10301/
  url: http://127.0.0.1:10301/
---
spring:
  profiles: hzkxtest
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://172.26.0.16/base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
    username: wlyy
    password: 4D^tK%!4
  #  elasticsearch:
  #    cluster-name: jkzl #集群名 默认elasticsearch
  #    cluster-nodes: 172.26.0.115:9300,172.26.0.115:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
  #    client-transport-sniff: false
  #    jest:
  #      uris: http://172.26.0.112:9200,http://172.26.0.112:9200
  #      connection-timeout: 60000 # Connection timeout in milliseconds.
  #      multi-threaded: true # Enable connection requests from multiple execution threads.
  activemq:
    broker-url: tcp://172.26.0.116:61616
    user: admin
    password: admin
  redis:
    host: 172.26.0.16 # Redis server host.
    port: 6380 # Redis server port.
    password: Kb6wKDQP1W4
fastDFS:
  fastdfs_file_url: http://172.26.0.16:8888/
fast-dfs:
  tracker-server: 172.26.0.16:22122 #服务器地址
# 短信验证码发送的客户端标识,居民端
sms:
  clientId: EwC0iRSrcP
myFamily:
  qrCodeFailurTime: 2
# mq 是否获取his数据,flag代表获取演示数据,false代表获取his真实数据
demo:
  flag: true
#支付支付
pay:
  flag: true
hospital:
  url: https://wx.xmzsh.com
  mqUser: JKZL
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
wechat:
  appId: wxd03f859efdf0873d
  appSecret: 2935b54b53a957d9516c920a544f2537
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  id: ijk  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
im:
  im_list_get: http://172.26.0.17:3000/
  data_base_name: im_internet_hospital
es:
  pwflag: 1 # 1需要密码,2不需要密码
  index:
    Statistics: hlw_quota_test
    FollowUp: wlyy_followup
  type:
    Statistics: hlw_quota_test
    FollowUpContent: wlyy_followup_content
  host:  http://172.26.0.55:9000
  tHost: 172.26.0.55:9300
  clusterName: jkzl
  securityUser: lion:jkzlehr
  user: lion
  password: jkzlehr
# 上传文件临时路径配置
FileTempPath:
  upload_temp_path : /var/local/temp
  image_path : /var/local/upload/images
  voice_path : /var/local/upload/voice
  chat_file_path : /var/local/upload/chat
#文件服务器上传配置 0本地,1.I健康,2.内网调用
testPattern:
  sign: 0
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
wlyy:
  url: http://ehr.yihu.com/wlyy/
qywx:
  url: 2
  id: 1
express:
  sf_url: http://mrds-admin-ci.sit.sf-express.com:45478
  sf_code: HD000001
  sf_check_word: AAAABBBBCCCCDDDD
baiduApi:
  AK: 0vjnCSReegE7A47a941ohjv9a07ONiMC
  url: http://api.map.baidu.com/
cloudCare:
  url: http://172.26.0.17:10301/

+ 17 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/sign/ServicePackageSignRecordDao.java

@ -0,0 +1,17 @@
package com.yihu.jw.care.dao.sign;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
/**
 *
 * @author yeshijie on 2018/8/17.
 */
public interface ServicePackageSignRecordDao extends JpaRepository<ServicePackageSignRecordDO, String>, JpaSpecificationExecutor<ServicePackageSignRecordDO> {
    List<ServicePackageSignRecordDO> findByStatusAndPatient(Integer status, String patient);
}

+ 6 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/consult/FinishConsultJob.java

@ -1,6 +1,7 @@
package com.yihu.jw.care.job.consult;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.care.util.http.HttpUtils;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -49,10 +50,15 @@ public class FinishConsultJob implements Job {
    private BaseDoctorDao doctorDao;
    @Autowired
    private ConsultDao consultDao;
    @Autowired
    private ServicePackageService servicePackageService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        try{
            //签约超时未审核
            servicePackageService.unCheck();
            //在线咨询
            logger.info("FinishConsultJob start.....");
            StringBuffer sql = new StringBuffer();

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

@ -3,6 +3,7 @@ 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.care.service.sign.ServicePackageService;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.entity.order.BusinessOrderDO;
@ -32,50 +33,60 @@ public class CancelPayOrderJob implements Job {
    private BaseDoorCoachOrderDao baseDoorCoachOrderDao;
    @Autowired
    private LifeCareOrderDao lifeCareOrderDao;
    @Autowired
    private ServicePackageService servicePackageService;
    @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<>();
        try {
            //签约超时未支付
            servicePackageService.unPay();
            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);
        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());
            logger.info("CANCEL_PAY_ORDER_OVERTIME_JOB end 订单支付超时JOb结束----"+needFinishs.size());
        }catch (Exception e){
            e.printStackTrace();
        }
        businessOrderDao.save(needFinishs);
        baseDoorCoachOrderDao.save(doorCoachOrderDOS);
        lifeCareOrderDao.save(lifeCareOrderDOS);
        logger.info("CANCEL_PAY_ORDER_OVERTIME_JOB end 订单支付超时JOb结束----"+needFinishs.size());
    }
}

+ 43 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java

@ -0,0 +1,43 @@
package com.yihu.jw.care.service.sign;
import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
/**
 * 服务包处理
 * Created by yeshijie on 2023/10/30.
 */
@Service
public class ServicePackageService {
    @Autowired
    private JdbcTemplate jdbcTemslate;
    @Autowired
    private ServicePackageSignRecordDao servicePackageSignRecordDao;
//    场景1:服务包签约审核,用户申请服务后,超过7天未审核;
//    场景2:服务包签约审核,用户申请签约审核通过后,超时未发起支付(3天);
//    场景3:服务包无需签约审核,超时未支付(10分钟);
    public void unPay(){
        try {
            String sql = "UPDATE base_service_package_sign_record set `status`=-2,lost_reason='超时未支付,系统自动关闭申请' " +
                    "where status=2 and TIMESTAMPDIFF(MINUTE, update_time, NOW())>=pay_time";
            jdbcTemslate.execute(sql);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public void unCheck(){
        try {
            String sql = "UPDATE base_service_package_sign_record set `status`=-2,lost_reason='超时未审核,系统自动关闭申请' " +
                    "where status=0 and TIMESTAMPDIFF(DAY, update_time, NOW())>=7";
            jdbcTemslate.execute(sql);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 5 - 1
svr/svr-cloud-job/src/main/resources/application.yml

@ -71,7 +71,11 @@ FileTempPath:
  image_path : /var/local/upload/images
  voice_path : /var/local/upload/voice
  chat_file_path : /var/local/upload/chat
swagger:
  basic:
    enable: true
    username: jw
    password: Zjxl2023*
---
spring:
  profiles: jwtest

+ 46 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/common/CommonItemController.java

@ -0,0 +1,46 @@
package com.yihu.jw.hospital.module.common;
import com.yihu.jw.hospital.module.door.service.DoorOrderService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by yeshijie on 2023/11/3.
 */
@RestController
@RequestMapping(value = "/common/item", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "通用项目接口")
public class CommonItemController extends EnvelopRestEndpoint {
    @Autowired
    private DoorOrderService doorOrderService;
    @ApiOperation("查询字典-通用字典接口")
    @GetMapping(value= "getServiceItem")
    public Envelop getServiceItem(@ApiParam(name = "name", value = "name", required = false)
                               @RequestParam(value = "name", required = false)String name,
                            @ApiParam(name = "signId", value = "signId", required = true)
                               @RequestParam(value = "signId", required = true)String signId,
                            @ApiParam(name = "type", value = "type", required = true)
                               @RequestParam(value = "type", required = true)String type,
                            @ApiParam(name = "page", value = "page", required = true)
                               @RequestParam(value = "page", required = true) Integer page,
                            @ApiParam(name = "size", value = "pageSize", required = true)
                               @RequestParam(value = "size", required = true)Integer size){
        try {
            return doorOrderService.getServiceItem(signId,name,type,page,size);
        }catch (Exception e){
            e.printStackTrace();
            return Envelop.getError("查询是吧",-1);
        }
    }
}

+ 3 - 13
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/consult/service/ConsultTeamService.java

@ -6,27 +6,17 @@ import com.yihu.jw.entity.base.im.ConsultDo;
import com.yihu.jw.entity.base.im.ConsultTeamDo;
import com.yihu.jw.entity.base.im.ConsultTeamLogDo;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.door.WlyyDoorPrescriptionDO;
import com.yihu.jw.entity.door.WlyyDoorServiceOrderDO;
import com.yihu.jw.entity.hospital.prescription.WlyyPrescriptionDO;
import com.yihu.jw.entity.wechat.WechatTemplateConfig;
import com.yihu.jw.hospital.HospitalDao;
import com.yihu.jw.hospital.module.door.dao.WlyyDoorServiceOrderDao;
import com.yihu.jw.hospital.module.door.service.WlyyDoorServiceOrderService;
import com.yihu.jw.hospital.module.wx.dao.WechatTemplateConfigDao;
import com.yihu.jw.hospital.prescription.dao.PrescriptionDao;
import com.yihu.jw.hospital.prescription.dao.PrescriptionDiagnosisDao;
import com.yihu.jw.hospital.prescription.dao.PrescriptionExpressageDao;
import com.yihu.jw.hospital.prescription.dao.PrescriptionInfoDao;
import com.yihu.jw.hospital.prescription.service.PrescriptionLogService;
import com.yihu.jw.hospital.task.PushMsgTask;
import com.yihu.jw.hospital.utils.WeiXinAccessTokenUtils;
import com.yihu.jw.hospital.utils.WeiXinOpenIdUtils;
import com.yihu.jw.im.dao.ConsultTeamDoctorDao;
import com.yihu.jw.im.dao.ConsultTeamLogDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.message.dao.MessageDao;
import com.yihu.jw.message.service.MessageService;
import com.yihu.jw.order.dao.ConsultTeamOrderDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.service.BasePatientService;
@ -78,8 +68,6 @@ public class ConsultTeamService extends ConsultService {
    private PrescriptionDao prescriptionDao;
    @Autowired
    private BasePatientDao patientDao;
@ -3359,7 +3347,9 @@ public class ConsultTeamService extends ConsultService {
            return null;
        }
        //这是id
        ConsultDo consult = consultDao.queryByIdAndType(code, type);
//        ConsultDo consult = consultDao.queryByIdAndType(code, type);
        ConsultDo consult = consultDao.findByRelationCode(code);
        if (null == consult) {
            result.put("data", "");

+ 100 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/district/controller/DistrictController.java

@ -0,0 +1,100 @@
package com.yihu.jw.hospital.module.district.controller;
import com.yihu.jw.hospital.module.district.service.DistrictService;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
 * 省市区三级地址控制类
 *
 * @author George
 */
@Controller
@RequestMapping(value = "common", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class DistrictController extends EnvelopRestEndpoint {
    @Autowired
    private DistrictService districtService;
    @Autowired
    HttpServletRequest request;
    /**
     * 获取人群分类
     */
    @RequestMapping(value = "getProfessionalDict", method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("职业状态字典")
    public String getProfessionalDict() {
        try {
            // 获取医生下的患者
            return write(200, "获取成功!", "data", districtService.getProfessionalDict());
        } catch (Exception e) {
            return error(-1, "获取字典信息失败!");
        }
    }
    @RequestMapping(value = "getNationDict",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("获取民族信息列表")
    public String getNationDict(){
        try {
            // 获取医生下的患者
            return write(200, "获取成功!", "data",districtService.getNationDict());
        } catch (Exception e) {
            return error(-1, "获取字典信息失败!");
        }
    }
    /**
     * 省市一二三级查询接口
     *
     * @param type 1一级目录,2二级目录,3三级目录,4街道目录
     * @param code 省或市标识
     * @return
     */
    @RequestMapping(value = "district")
    @ResponseBody
    public String district(int type, String code) {
        try {
            List<?> list = districtService.findByType(type, code);
            return write(200, "查询成功!", "list", list);
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败!");
        }
    }
    /**
     * 省市一二三级查询接口(包含权限控制)
     *
     * @param type 1一级目录,2二级目录,3三级目录,4街道目录
     * @param code 省或市标识
     * @return
     */
    @RequestMapping(value = "districtAuthority")
    @ResponseBody
    public String districtAuthority(int type, String code) {
        try {
            List<Map<String, String>> roleMap = (List<Map<String, String>>) request.getSession().getAttribute("roleMap");
            List<?> list = districtService.findByType(type, code, roleMap);
            return write(200, "查询成功!", "list", list);
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败!");
        }
    }
}

+ 249 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/district/service/DistrictService.java

@ -0,0 +1,249 @@
package com.yihu.jw.hospital.module.district.service;
import com.yihu.jw.area.dao.BaseCityDao;
import com.yihu.jw.area.dao.BaseProvinceDao;
import com.yihu.jw.area.dao.BaseStreetDao;
import com.yihu.jw.area.dao.BaseTownDao;
import com.yihu.jw.entity.base.area.BaseCityDO;
import com.yihu.jw.entity.base.area.BaseProvinceDO;
import com.yihu.jw.entity.base.area.BaseStreetDO;
import com.yihu.jw.entity.base.area.BaseTownDO;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
 * 省市区三级业务处理类
 *
 * @author George
 */
@Service
public class DistrictService extends EnvelopRestEndpoint {
    @Autowired
    private BaseProvinceDao provinceDao;
    @Autowired
    private BaseCityDao cityDao;
    @Autowired
    private BaseTownDao townDao;
    @Autowired
    private BaseStreetDao streetDao;
    @Autowired
    JdbcTemplate jdbcTemplate;
    /**
     * 查询省市区三级目录
     *
     * @param type 1一级目录,2二级目录,3三级目录,4街道目录
     * @param code 目录标识
     * @return
     */
    public List<?> findByType(int type, String code) {
        switch (type) {
            case 1:
                return findProvince();
            case 2:
                return findCity(code);
            case 3:
                return findTown(code);
            case 4:
                return findStreet(code);
        }
        return null;
    }
    /**
     * 查询省市区三级目录
     *
     * @param type 1一级目录,2二级目录,3三级目录,4街道目录
     * @param code 目录标识
     * @return
     */
    public List<?> findByType(int type, String code, List<Map<String, String>> roleMap) {
        switch (type) {
            case 1:
                return findProvince();
            case 2:
                return findCity(code);
            case 3:
                return findTown(code, roleMap);
            case 4:
                return findStreet(code);
        }
        return null;
    }
    /**
     * 查询所有的省份信息
     *
     * @return
     */
    public List<BaseProvinceDO> findProvince() {
        List<BaseProvinceDO> list = new ArrayList<BaseProvinceDO>();
        Iterable<BaseProvinceDO> iterable = provinceDao.findAll(new Sort(Direction.ASC, "id"));
        if (iterable != null) {
            Iterator<BaseProvinceDO> it = iterable.iterator();
            while (it != null && it.hasNext()) {
                list.add(it.next());
            }
        }
        return list;
    }
    /**
     * 查询省份下的城市信息
     *
     * @param province 省编码
     * @return
     */
    public List<BaseCityDO> findCity(String province) {
        List<BaseCityDO> list = new ArrayList<BaseCityDO>();
        Iterable<BaseCityDO> iterable = cityDao.findByProvince(province);
        if (iterable != null) {
            Iterator<BaseCityDO> it = iterable.iterator();
            while (it != null && it.hasNext()) {
                list.add(it.next());
            }
        }
        return list;
    }
    /**
     * 查询城市下的区县信息
     *
     * @param city 城市编码
     * @return
     */
    public List<BaseTownDO> findTown(String city) {
        List<BaseTownDO> list = new ArrayList<BaseTownDO>();
        Iterable<BaseTownDO> iterable = townDao.findByCity(city);
        if (iterable != null) {
            Iterator<BaseTownDO> it = iterable.iterator();
            while (it != null && it.hasNext()) {
                list.add(it.next());
            }
        }
        return list;
    }
    /**
     * 查询城市下的区县信息(包含权限控制)
     *
     * @param city 城市编码
     * @return
     */
    public List<BaseTownDO> findTown(String city, List<Map<String, String>> roleMap) {
        List<BaseTownDO> list = new ArrayList<BaseTownDO>();
        Iterable<BaseTownDO> iterable = townDao.findByCity(city);
        if (iterable != null) {
            String areaString = "";
            Boolean cityFlag = false;
            for (Map<String, String> map : roleMap) {
                String code = map.get("code");
                if ("350200".equals(code)) {
                    cityFlag = true;
                    break;
                } else if (code.length() == 6) {
                    areaString += map.get("areas") + ",";
                }
            }
            Iterator<BaseTownDO> it = iterable.iterator();
            while (it != null && it.hasNext()) {
                BaseTownDO town = it.next();
                String townCode = town.getCode();
                if (cityFlag) {
                    list.add(town);
                } else {
                    if (areaString.indexOf(townCode) >= 0) {
                        list.add(town);
                    }
                }
            }
        }
        return list;
    }
    /**
     * 查询城市下的街道信息
     *
     * @param town 区县编码
     * @return
     */
    public List<BaseStreetDO> findStreet(String town) {
        List<BaseStreetDO> list = new ArrayList<BaseStreetDO>();
        Iterable<BaseStreetDO> iterable = streetDao.findByTown(town);
        if (iterable != null) {
            Iterator<BaseStreetDO> it = iterable.iterator();
            while (it != null && it.hasNext()) {
                list.add(it.next());
            }
        }
        return list;
    }
//    /**
//     * 查询城市下的街道信息
//     *
//     * @param street 街道编码
//     * @return
//     */
//    public List<Country> findCountry(String street) {
//        List<Country> list = new ArrayList<Country>();
//        Iterable<Country> iterable = countryDao.findByStreet(street);
//        if (iterable != null) {
//            Iterator<Country> it = iterable.iterator();
//            while (it != null && it.hasNext()) {
//                list.add(it.next());
//            }
//        }
//        return list;
//    }
    public BaseProvinceDO findProvinceByName(String name) {
        return provinceDao.findByName(name);
    }
    public BaseCityDO findCityByName(String name) {
        return cityDao.findByName(name);
    }
    public BaseTownDO finTownByName(String name) {
        return townDao.findByName(name);
    }
    public BaseTownDO finTownByNameAndCity(String name, String city) {
        return townDao.findByNameAndCity(name, city);
    }
    public BaseStreetDO findStreetByName(String name) {
        return streetDao.findByName(name);
    }
    public List<Map<String, Object>> getProfessionalDict() {
        String sql = "SELECT t.dict_code 'code',t.dict_value `value` FROM `base`.`wlyy_hospital_sys_dict`  t WHERE t.dict_name='PROFESSIONAL_STATE'";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
    public List<Map<String, Object>> getNationDict() {
        String sql = "SELECT t.NATION_CODE,t.NATION_NAME FROM zy_nation_dict t ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
}

+ 28 - 4
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/controller/DoorOrderController.java

@ -1,7 +1,6 @@
package com.yihu.jw.hospital.module.door.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.door.WlyyDoorConclusionDO;
import com.yihu.jw.entity.door.WlyyDoorServiceOrderDO;
@ -35,7 +34,9 @@ import java.io.IOException;
import java.io.OutputStream;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by wxw on 2019/3/15.
@ -75,6 +76,25 @@ public class DoorOrderController extends EnvelopRestEndpoint {
//    private HospitalService hospitalService;
    /**
     * 修改工单状态
     * 也将开方状态设置成0
     */
    @PostMapping(value = "updateOrderStatusAndTime")
    @ApiOperation(value = " 修改工单状态")
    public Envelop updateOrderInfo(
            @ApiParam(name = "orderId", value = "orderId", required = true) @RequestParam String orderId,
            @ApiParam(name = "status", value = "status", required = false) @RequestParam String status,
            @ApiParam(name = "doctorArrivingTime", value = "doctorArrivingTime", required = false) @RequestParam String doctorArrivingTime
    ) {
        try {
            wlyyDoorServiceOrderService.updateOrderStatusAndTime(orderId, status, doctorArrivingTime);
            return success("修改成功!");
        } catch (Exception e) {
            return failed(e.getMessage());
        }
    }
    /**
     * 获取登录医生的信息
     */
@ -1027,7 +1047,6 @@ public class DoorOrderController extends EnvelopRestEndpoint {
    @GetMapping(value = "orderIsCancel")
    @ApiOperation(value = "查看消息时判断工单是否取消")
    public Envelop orderIsCancel(
            @ApiParam(name = "messageId", value = "消息id", required = true) @RequestParam String messageId) {
        try {
@ -1055,6 +1074,7 @@ public class DoorOrderController extends EnvelopRestEndpoint {
//        }
//    }
    @PostMapping(value = "cancelConclusion")
    @ResponseBody
    @ApiOperation("取消登记服务小结")
@ -1063,6 +1083,7 @@ public class DoorOrderController extends EnvelopRestEndpoint {
            wlyyDoorServiceOrderService.cancelConclusion(orderId);
            return success("取消成功");
        } catch (Exception e) {
            e.printStackTrace();
            return failed(e.getMessage());
        }
    }
@ -1408,10 +1429,13 @@ public class DoorOrderController extends EnvelopRestEndpoint {
                doorServiceOrderDO.getIsPatientConfirm();//当前状态
                Integer success = doorOrderService.sendInformedConsent(orderId, doorServiceOrderDO.getServeDesc(), doctor);
                wlyyDoorServiceOrderService.orderMsgTask(orderId);
                //微信模板消息-这边暂时没
//                wlyyDoorServiceOrderService.orderMsgTask(orderId);
                if (success == 1) {
                    System.out.println("推送知情同意书成功");
                    return success("知情同意书推送成功", doorServiceOrderDO);
                } else {
                    System.out.println("推送知情同意书失败");
                    return failed("知情同意书推送失败");
                }
            } else {

+ 26 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/dao/ServiceItemPlanDao.java

@ -0,0 +1,26 @@
package com.yihu.jw.hospital.module.door.dao;
import com.yihu.jw.entity.base.servicePackage.ServiceItemPlanDO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.Date;
import java.util.List;
/**
 * Created by yeshijie on 2023/10/28.
 */
public interface ServiceItemPlanDao extends JpaRepository<ServiceItemPlanDO, String>, JpaSpecificationExecutor<ServiceItemPlanDO> {
    @Query("from ServiceItemPlanDO w where w.signId =?1 ")
    List<ServiceItemPlanDO> findBySignId(String signId);
    @Query(value = "select * from base_service_item_plan w where w.sign_id =?1 and w.service_item_id=?2 order by w.plan_time desc", nativeQuery = true)
    List<ServiceItemPlanDO> findBySignIdAndServiceItemId(String signId, String serviceItemId);
    @Modifying
    @Query(value ="UPDATE  base_service_item_plan SET status='1' ,complete_time=?3 WHERE status='0' AND sign_id=?1 AND service_pack_id=?2 ORDER BY plan_time DESC LIMIT 1", nativeQuery = true)
    void updateState(String signId, String packageId, Date date);
}

+ 2 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/dao/WlyyDoorServiceOrderDao.java

@ -7,6 +7,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.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@ -29,6 +30,7 @@ public interface WlyyDoorServiceOrderDao extends JpaRepository<WlyyDoorServiceOr
    boolean existsByPatientAndStatusIn(String patient, Integer[] status);
    @Modifying
    @Query("update WlyyDoorServiceOrderDO o set o.conclusionStatus = 1 where o.id = ?1")
    void updateConclusionStatus(String orderId);

+ 36 - 4
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/service/DoorOrderService.java

@ -8,6 +8,7 @@ import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.im.ConsultDo;
import com.yihu.jw.entity.base.im.ConsultTeamDo;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSubItemDO;
import com.yihu.jw.entity.base.system.SystemDictDO;
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
import com.yihu.jw.entity.door.*;
@ -21,6 +22,7 @@ import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.order.dao.ConsultTeamOrderDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.service.BasePatientService;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
@ -132,6 +134,8 @@ public class DoorOrderService {
    @Autowired
    BasePatientDao basePatientDao;
    @Autowired
    ServiceItemPlanDao serviceItemPlanDao;
//    @Autowired
//    private SignFamilyDao signFamilyDao;
@ -140,6 +144,25 @@ public class DoorOrderService {
//    @Autowired
//    private DmJobService dmJobService;
    /**
     * 服务项查询
     * @param signId 签约id
     * @param type doorService 上门服务
     */
    public PageEnvelop getServiceItem(String signId, String name, String type, Integer page, Integer size){
        String sql = "SELECT si.* ";
        String countSql = "select count(si.id) ";
        String filter = " from base_service_package_sign_record r,base_service_package_item i,base_service_package_sub_item si,base_service_package_item_relational ir " +
                "WHERE r.id = '"+signId+"' and i.service_package_id=r.service_package_id and i.`code`='"+type+"' and si.status='1' " +
                " and i.id = ir.item_id and ir.sub_item_id= si.id ";
        if(StringUtils.isNotBlank(name)){
            filter += " and si.name like '%"+name+"%' ";
        }
        String oderBy = " order by si.sort limit "+(page-1)*size+","+size;
        List<ServicePackageSubItemDO> list = jdbcTemplate.query(sql+filter+oderBy,new BeanPropertyRowMapper<>(ServicePackageSubItemDO.class));
        long count = jdbcTemplate.queryForObject(countSql+filter,Long.class);
        return PageEnvelop.getSuccessListWithPage("",list,page,size,count);
    }
    public Map<String, String> getNumGroupByStatusTeam(String doctor, Integer type) {
        String sql = "SELECT a.status, COUNT(DISTINCT a.id) as num FROM wlyy_door_service_order a ";
@ -580,7 +603,7 @@ public class DoorOrderService {
            return null;
        }
        doorServiceOrderDao.save(doorServiceOrder);
        //删除407的消息
        systemMessageDao.orderMessageDel(doorServiceOrder.getDoctor(), orderId);
        if (doorServiceOrder.getType() == null || doorServiceOrder.getType() != 3) {
@ -595,11 +618,11 @@ public class DoorOrderService {
            // 发送IM消息通知患者医生已接单
            String noticeContent = "我已接受您的服务工单预约," + doorServiceOrder.getDoctorName() + "医生正在为您服务!";
            wlyyDoorServiceOrderService.qucikSendIM(doorServiceOrder.getId(), doorServiceOrder.getDispatcher(), "智能助手", "1", noticeContent);
            wlyyDoorServiceOrderService.qucikSendIM(doorServiceOrder.getId(), doorServiceOrder.getDoctor(), "智能助手", "1", noticeContent);
            // 发送居民上门服务简要信息
            JSONObject orderInfoContent = wlyyDoorServiceOrderService.queryOrderCardInfo(doorServiceOrder);
            orderInfoContent.put("re_msg_type", 0);
            wlyyDoorServiceOrderService.qucikSendIM(doorServiceOrder.getId(), doorServiceOrder.getDispatcher(), "智能助手", "2101", orderInfoContent.toJSONString());
            wlyyDoorServiceOrderService.qucikSendIM(doorServiceOrder.getId(), doorServiceOrder.getDoctor(), "智能助手", "2101", orderInfoContent.toJSONString());
        }
        return doorServiceOrder;
    }
@ -610,6 +633,7 @@ public class DoorOrderService {
     * @param orderId
     */
    public void acceptOrder(String orderId, String jobCode, String jobCodeName, int hospitalLevel) throws Exception {
        //接单和发送消息
        WlyyDoorServiceOrderDO doorServiceOrder = acceptOrder1(orderId, jobCode, jobCodeName, hospitalLevel);
        if (doorServiceOrder == null) {
            return;
@ -641,7 +665,7 @@ public class DoorOrderService {
            logger.error(e.getMessage());
        }
        //  待接单消息设为已操作, 434 医生接单-- 王五接受了服务工单12345678
        //  待接单消息设为已操作, 434 医生接单-- 王五接受了服务工单12345678 ----407在上门已经删除了,这快代码其实没啥用
        List<SystemMessageDO> messages = systemMessageDao.queryByRelationCodeAndTypeIn(orderId, new String[]{"403", "407"});
        if (CollectionUtils.isEmpty(messages)) {
            logger.error("当前工单没有医生待接单消息!orderId:" + orderId);
@ -1343,6 +1367,14 @@ public class DoorOrderService {
//        BigDecimal cashPrice = this.calculateCash(String.valueOf(map.get("cashPrice")), orderId, level, times);
//        one.setTotalFee(cashPrice);
        doorServiceOrderDao.save(one);
        //
        String signId = one.getSignId();//签约id
        String packageId = one.getPackageId();//服务包id
        Date date = new Date();
        //更新计划状态为完成
        serviceItemPlanDao.updateState(signId, packageId, date);
        WlyyDoorServiceOrderDO doorServiceOrderDO = this.getDoorServiceOrderById(orderId, level);
        // 发送微信通知  待付款

+ 74 - 41
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/service/WlyyDoorServiceOrderService.java

@ -211,15 +211,14 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
            return result;
        }
        //资质处理 .医生填写资质信息后,生成一个已通过审核的资质
        try {
            if (jsonObjectParam.get("doorServiceApplication") != null) {
                //创建审核
                doorServiceApplicationService.create("2", jsonObjectParam.get("doorServiceApplication").toString(), doctorCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        /**
         * 资质处理 .医生填写资质信息后,生成一个已通过审核的资质
         * 云照护没用资质审核模块
         */
//        if (jsonObjectParam.get("doorServiceApplication") != null) {
//            //创建审核
//            doorServiceApplicationService.create("2", jsonObjectParam.get("doorServiceApplication").toString(), doctorCode);
//        }
        WlyyDoorServiceOrderDO orderDO = null;
@ -290,8 +289,8 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
            orderDO.setUpdateUser(orderDO.getProxyPatient());
            orderDO.setUpdateUserName(orderDO.getProxyPatientName());
        }
        orderDO.setStatus(2);
        orderDO.setType(3);
        orderDO.setStatus(2);//2-待(医生)接单
        orderDO.setType(3);//3医生代预约
        orderDO.setDispatcherResponseTime(new Date());
        this.save(orderDO);
        result.put("orderId", orderDO.getId());
@ -300,21 +299,24 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
            return result;
        }
        if ("1".equals(orderDO.getShortcutType())) {
//            //快捷的当前医生直接接单
//            try {
//                Doctor doctor = doctorDao.findByCode(orderDO.getDoctor());
//                Hospital hospital = hospitalDao.findByCode(doctor.getHospital());
//                doorOrderService.acceptOrder1(orderDO.getId(), doctor.getJob(), doctor.getJobName(), hospital.getLevel());
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
        } else {
            // 给服务医生发接单消息
            this.createMessage(orderDO.getId(), orderDO.getProxyPatient(), orderDO.getDoctor(), 407, "服务工单待接单", "您有新的服务工单,请前往处理");
            //发送智能助手消息
            sendWeixinMessage(4, orderDO.getDoctor(), orderDO.getPatient());
        }
//        if ("1".equals(orderDO.getShortcutType())) {
////            //快捷的当前医生直接接单
////            try {
////                Doctor doctor = doctorDao.findByCode(orderDO.getDoctor());
////                Hospital hospital = hospitalDao.findByCode(doctor.getHospital());
////                doorOrderService.acceptOrder1(orderDO.getId(), doctor.getJob(), doctor.getJobName(), hospital.getLevel());
////            } catch (Exception e) {
////                e.printStackTrace();
////            }
//        } else {
//            // 给服务医生发接单消息
//            this.createMessage(orderDO.getId(), orderDO.getProxyPatient(), orderDO.getDoctor(), 407, "服务工单待接单", "您有新的服务工单,请前往处理");
//            //发送智能助手消息
//            sendWeixinMessage(4, orderDO.getDoctor(), orderDO.getPatient());
//        }
        //待预约走调度平台的模式
        result = submitDoorOrderAndSendMsg(orderDO, "5", jsonObjectParam);
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        return result;
@ -493,7 +495,8 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
                    }
                    wlyyDoorFeeDetailService.delete(idStrSet.toArray());
                    totalFee = orderDO.getTotalFee().subtract(totalSubFee);
//                    orderDO.setTotalFee(totalFee);
                    orderDO.setTotalFee(totalFee);
                    wlyyDoorServiceOrderDao.save(orderDO);//保存总费用
                }
            }
            wlyyDoorDoctorService.delete(idStrSet.toArray());
@ -641,9 +644,9 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
                "	1 = 1 \n" +
                "	AND t.`code` = 'dispatcher' \n";
        if (StringUtils.isNotBlank(hospitalCode)) {
            sql += " AND a.org_code = '" + hospitalCode + "' \n";
        }
//        if (StringUtils.isNotBlank(hospitalCode)) {
//            sql += " AND a.org_code = '" + hospitalCode + "' \n";
//        }
        List<Map<String, Object>> dispatcherInfoList = jdbcTemplate.queryForList(sql);
        return dispatcherInfoList;
@ -868,16 +871,20 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
            JSONObject orderInfoContent = this.queryOrderCardInfo(orderDO);
            orderInfoContent.put("re_msg_type", 0);//居民预约
            int flagCount = qucikSendIM(orderDO.getId(), "system", "智能助手", "2101", orderInfoContent.toJSONString());
            //模拟一,重试3次
            int tryCount = 3;
            int flagCount = 0;
            for (int i = 0; i < tryCount; i++) {
                //发送消息
                flagCount = qucikSendIM(orderDO.getId(), "system", "智能助手", "2101", orderInfoContent.toJSONString());
                if (flagCount == 1) {
                    break;
                }
            }
//            int tryCount = 3;
//            int flagCount = 0;
//            for (int i = 0; i < tryCount; i++) {
//                //发送消息
//                flagCount = qucikSendIM(orderDO.getId(), "system", "智能助手", "2101", orderInfoContent.toJSONString());
//                if (flagCount == 1) {
//                    break;
//                }
//            }
//            //模式2,睡眠1秒钟
//            Thread.sleep(1000);
@ -2377,7 +2384,8 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
        // 派单时,把医生拉入会话,作为其中一个成员,医生拒单时,退出会话
        ConsultDo consult = consultDao.queryByRelationCode(orderId);
        String sessionId = doorServiceOrderDO.getPatient() + "_" + consult.getId() + "_" + doorServiceOrderDO.getNumber() + "_" + consult.getType();
        imUtill.updateParticipant(sessionId, doctor, null);
        String response = imUtill.updateParticipant(sessionId, doctor, null);
        System.out.println("给医生加入群聊==>" + response);
        // 调度员处理完该单(新增预约的,或者是拒单重新派单的)
        List<SystemMessageDO> messages = systemMessageDao.queryByRelationCodeAndTypeIn(orderId, new String[]{"402", "404", "430", "435"});
@ -2628,6 +2636,22 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
     * @return
     */
    public int qucikSendIM(String orderId, String sendId, String sendName, String contentType, String content) throws Exception {
        int tryAgain = 3;
        int flag = 0;
        for (int i = 0; i < tryAgain; i++) {
            flag = sendMsg(orderId, sendId, sendName, contentType, content);
            if (flag == 1) {
                break;
            } else {
                System.out.println("开始重试发送");
            }
        }
        return flag;
    }
    public int sendMsg(String orderId, String sendId, String sendName, String contentType, String content) throws Exception {
        int result = -1;
        ConsultDo consult = consultDao.queryByRelationCode(orderId);
        if (null == consult) {
@ -2661,6 +2685,7 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
        return result;
    }
    /**
     * 判断消息订单是否已被取消
     *
@ -2669,7 +2694,7 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
     */
    public JSONObject orderIsCancel(String messageId) {
        JSONObject result = new JSONObject();
        String sql = "SELECT m.* FROM `wlyy_message` m LEFT JOIN wlyy_door_service_order o on m.relation_code=o.id " +
        String sql = "SELECT m.* FROM `base_system_message` m LEFT JOIN wlyy_door_service_order o on m.relation_code=o.id " +
                "where  o.status = -1 and m.id='" + messageId + "'";
        List<Map<String, Object>> messageList = jdbcTemplate.queryForList(sql);
        if (messageList.size() == 0) {
@ -2688,6 +2713,7 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
     *
     * @param orderId
     */
    @Transactional
    public void cancelConclusion(String orderId) {
        wlyyDoorServiceOrderDao.updateConclusionStatus(orderId);
    }
@ -2698,6 +2724,7 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
     * @param orderId
     * @param isPatientConfirm
     */
    @Transactional
    public void updateIsPatientConfirm(String orderId, Integer isPatientConfirm) {
        WlyyDoorServiceOrderDO wlyyDoorServiceOrder = wlyyDoorServiceOrderDao.findOne(orderId);
        wlyyDoorServiceOrder.setIsPatientConfirm(isPatientConfirm);
@ -2758,6 +2785,7 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
     * @param positionStatus
     * @param position
     */
    @Transactional
    public void updateDoctorStatus(String doctor, Integer positionStatus, String position) {
        BaseDoctorDO doctor1 = doctorDao.findById(doctor);
        //先注释-需要在补字段
@ -3076,4 +3104,9 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
        return list;
    }
    public void updateOrderStatusAndTime(String orderId, String status, String doctorArrivingTime) {
        String sql = " update wlyy_door_service_order o set o.prescription_status = 0,o.status ='" + status + "' ,o.doctor_arriving_time='" + doctorArrivingTime + "'  where o.id = '" + orderId + "' ";
        jdbcTemplate.execute(sql);
    }
}