YiZhuLuRuServer.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885
  1. package thyyxxk.webserver.service.zhuyuanyisheng;
  2. import com.alibaba.fastjson.JSON;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.jetbrains.annotations.Nullable;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import thyyxxk.webserver.config.exception.BizException;
  11. import thyyxxk.webserver.config.exception.ExceptionEnum;
  12. import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao;
  13. import thyyxxk.webserver.entity.ResultVo;
  14. import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
  15. import thyyxxk.webserver.entity.datamodify.YzActOrder;
  16. import thyyxxk.webserver.entity.yibao.ZyActpatient;
  17. import thyyxxk.webserver.entity.yibao.patient.Patient;
  18. import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
  19. import thyyxxk.webserver.service.PublicServer;
  20. import thyyxxk.webserver.service.yibao.PatientService;
  21. import thyyxxk.webserver.utils.*;
  22. import java.math.BigDecimal;
  23. import java.util.*;
  24. import java.util.stream.Collectors;
  25. import java.util.stream.Stream;
  26. /**
  27. * <p>
  28. * 描述: 医嘱录入
  29. * </p>
  30. *
  31. * @author xc
  32. * @date 2022-01-04 16:59
  33. */
  34. @Service
  35. @Slf4j
  36. public class YiZhuLuRuServer {
  37. private final YiZhuLuRuDao dao;
  38. private final PatientService patientService;
  39. private final PublicServer publicServer;
  40. public YiZhuLuRuServer(YiZhuLuRuDao dao, PatientService service, PublicServer publicServer) {
  41. this.dao = dao;
  42. this.patientService = service;
  43. this.publicServer = publicServer;
  44. }
  45. /**
  46. * 获取患者列表
  47. *
  48. * @param wardCode 根据病区来进行搜索
  49. * @return 返回患者信息
  50. */
  51. public ResultVo<List<ZyActpatient>> huoQuHuanZheLieBiao(String wardCode) {
  52. List<ZyActpatient> list = dao.huoQuHuanZheLieBiao(wardCode);
  53. if (ListUtil.isBlank(list)) {
  54. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
  55. }
  56. list.sort(Comparator.comparingInt(o -> Integer.parseInt(o.getBedNo())));
  57. return ResultVoUtil.success(list);
  58. }
  59. /**
  60. * 获取患者的具体信息
  61. * 同时要计算一些数据信息
  62. *
  63. * @param inpatientNo 住院号
  64. * @return 返回
  65. */
  66. public ResultVo<PatientTemp> huoQuHuanZheXinXi(String inpatientNo) {
  67. ResultVo<Patient> resPpatient = patientService.getPatientInfo(inpatientNo);
  68. if (resPpatient.getCode() != 200) {
  69. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, resPpatient.getMessage());
  70. }
  71. PatientTemp patient = EntityCopy.Copy(resPpatient.getData(), PatientTemp.class);
  72. HuanZheFeiYong feiYong = dao.feiYongXinXi(patient.getInpatientNo(), patient.getAdmissTimes(), patient.getLedgerSn());
  73. if (feiYong != null) {
  74. // 余额
  75. patient.setBalance(feiYong.getBalance());
  76. // 总费用
  77. patient.setTotalCharge(feiYong.getTotalCharge());
  78. // 药品 百分比
  79. patient.setYp(DecimalUtil.getPercent(Double.parseDouble(feiYong.getYp()), Double.parseDouble(feiYong.getTotalCharge())));
  80. // 检验检查 百分比
  81. patient.setJyjc(DecimalUtil.getPercent(Double.parseDouble(feiYong.getJyjc()), Double.parseDouble(feiYong.getTotalCharge())));
  82. // 医保 费用
  83. patient.setChargeYb(feiYong.getChargeYb());
  84. // 医保百分比
  85. patient.setYb(DecimalUtil.getPercent(Double.parseDouble(feiYong.getChargeYb()), Double.parseDouble(feiYong.getTotalCharge())));
  86. }
  87. // 年龄
  88. patient.setAge(DateUtil.calculateAge(patient.getBirthDate()));
  89. patient.setTimesBilled(dao.huoQuHuanZheXinXi(patient.getInpatientNo(), patient.getAdmissTimes()).getTimesBilled());
  90. return ResultVoUtil.success(patient);
  91. }
  92. /**
  93. * 获取医嘱的名称 这里为什么不用 医嘱的code和医嘱号呢,是因为药品编码和项目编码有些一样而医嘱号,又每次只能查询一个
  94. *
  95. * @param inpatientNo 住院号
  96. * @param admissTimes 住院次数
  97. * @param orderName 前端搜索的医嘱名称
  98. * @return 返回医嘱名称去重了
  99. */
  100. public ResultVo<List<GetDropdownBox>> huoQuYiZhuMingCheng(String inpatientNo, Integer admissTimes, String orderName) {
  101. return ResultVoUtil.success(dao.huoQuYiZhuMingZi(inpatientNo, admissTimes, StringUtil.isContainChinese(orderName)));
  102. }
  103. /**
  104. * 获取患者个人的频率
  105. *
  106. * @param patNo 住院号
  107. * @param times 住院次数
  108. * @return 返回自己的医嘱频率
  109. */
  110. public ResultVo<List<GetDropdownBox>> huoQuGeRenPinLv(String patNo, Integer times) {
  111. return ResultVoUtil.success(dao.huoQuGeRenPinLv(patNo, times));
  112. }
  113. /**
  114. * 获取医嘱的数据
  115. * 可以根据,医嘱时间区间,执行频率,医嘱名
  116. *
  117. * @param param 查询条件
  118. * @return 返回分页数据,同时做了树状图,这样会有一个问题,那就是开了套餐的数据查询不出来
  119. */
  120. public ResultVo<IPage<YzActOrder>> huoQuYiZhuShuJu(YiZhuFeiYongChaXunTiaoJian param) {
  121. QueryWrapper<?> qw = new QueryWrapper<>();
  122. qw.eq("inpatient_no", param.getPatNo())
  123. .eq("admiss_times", param.getTimes());
  124. if (StringUtil.notBlank(param.getOrderName())) {
  125. qw.eq("order_name", param.getOrderName());
  126. }
  127. if (StringUtil.notBlank(param.getStartTime())) {
  128. qw.ge("order_time", param.getStartTime())
  129. .le("order_time", param.getEndTime());
  130. }
  131. if (StringUtil.notBlank(param.getFrequCode())) {
  132. qw.eq("frequ_code", param.getFrequCode());
  133. }
  134. List<Integer> zhaungTai = new ArrayList<Integer>() {
  135. private static final long serialVersionUID = 1194053908853933514L;
  136. {
  137. add(1);
  138. add(2);
  139. add(5);
  140. }
  141. };
  142. if (zhaungTai.contains(param.getZhuangTai())) {
  143. qw.eq("status_flag", param.getZhuangTai());
  144. } else if (param.getZhuangTai() == 3) {
  145. qw.in("status_flag", 3, 4);
  146. } else if (param.getZhuangTai() == 6) {
  147. qw.ne("frequ_code", "ONCE")
  148. .isNull("end_time")
  149. .eq("doctor_flag", "1")
  150. .ne("status_flag", "5");
  151. } else if (param.getZhuangTai() == 7) {
  152. qw.eq("doctor_flag", "1")
  153. .ge("status_flag", "2")
  154. .ge("start_time", DateUtil.formatDatetime(DateUtil.addDateMinut(new Date(), -24)));
  155. } else if (param.getZhuangTai() == 8) {
  156. qw.eq("frequ_code", "ONCE");
  157. } else if (param.getZhuangTai() == 9) {
  158. qw.ne("frequ_code", "ONCE");
  159. }
  160. IPage<YzActOrder> page = new Page<>();
  161. if (param.getTotal() == 0) {
  162. page.setTotal(dao.huoQuYiZhuShuJuTotal(qw));
  163. } else {
  164. page.setTotal(param.getTotal());
  165. }
  166. List<YzActOrder> yiZhuList = dao.huoQuYiZhuShuJu(param.getCurrentPage(), param.getPageSize(), qw);
  167. // 还有那些没有被匹配的子级医嘱
  168. Map<BigDecimal, YzActOrder> wuFuJiYiZhu = yiZhuList.stream().collect(
  169. Collectors.toMap(YzActOrder::getActOrderNo, a -> a, (k1, k2) -> k1));
  170. if (ListUtil.isBlank(yiZhuList)) {
  171. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
  172. }
  173. // 做成树状图
  174. Map<BigDecimal, YzActOrder> map = new HashMap<>();
  175. List<YzActOrder> tree = new ArrayList<>();
  176. for (YzActOrder item : yiZhuList) {
  177. if (item.getParentNo() == null) {
  178. tree.add(item);
  179. wuFuJiYiZhu.remove(item.getActOrderNo());
  180. }
  181. map.put(item.getActOrderNo(), item);
  182. EntityStringTrim.beanAttributeValueTrim(item);
  183. if (item.getSerial().equals("00")) {
  184. item.setGroupNoName("医技科室");
  185. item.setSerialName("项目");
  186. } else {
  187. if (item.getSerial().equals("01")) {
  188. item.setSerialName("小包装");
  189. } else if (item.getSerial().equals("99")) {
  190. item.setSerialName("大包装");
  191. }
  192. }
  193. }
  194. for (YzActOrder item : yiZhuList) {
  195. YzActOrder actOrder = map.get(item.getParentNo());
  196. if (actOrder != null) {
  197. wuFuJiYiZhu.remove(item.getActOrderNo());
  198. if (actOrder.getChildren() == null) {
  199. actOrder.setChildren(new ArrayList<>());
  200. }
  201. item.setIsChildren(true);
  202. actOrder.getChildren().add(item);
  203. }
  204. }
  205. if (!wuFuJiYiZhu.isEmpty()) {
  206. tree.addAll(wuFuJiYiZhu.values());
  207. }
  208. // 删除前后空格
  209. EntityStringTrim.beanAttributeValueTrimList(tree);
  210. page.setRecords(tree);
  211. return ResultVoUtil.success(page);
  212. }
  213. /**
  214. * 获取搜索的项目信息,如药品和项目
  215. *
  216. * @param code 拼音首字母,中文,编码来进行搜索
  217. * @return 返回项目信息
  218. */
  219. public ResultVo<List<YiZhuMingChen>> huoQuXiangMu(String code) {
  220. code = StringUtil.isContainChinese(code);
  221. List<YiZhuMingChen> list = dao.yiZhuYaoPing(code, publicServer.getGroupNo());
  222. list.addAll(dao.yiZhuXiangMu(code));
  223. EntityStringTrim.beanAttributeValueTrimList(list);
  224. return ResultVoUtil.success(list);
  225. }
  226. /**
  227. * 获取某一个费用的详细信息
  228. *
  229. * @param code 编码
  230. * @param serial 00-项目 01-小包装的药品 99-大包装
  231. * @return 返回该费用的一些详细信息,以及一些提示信息。
  232. */
  233. public ResultVo<Map<String, Object>> huoQuFeiYongXinXi(String code, String serial) {
  234. Map<String, Object> map = new HashMap<>();
  235. if (serial.trim().equals("00")) {
  236. XinZhenYzActOrder xiangMu = dao.huoQuXiangMu(code);
  237. if (xiangMu != null) {
  238. if (xiangMu.getDelFlag() == 1) {
  239. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该医嘱下的项目,已经被停用了,请联系物价科。");
  240. }
  241. } else {
  242. Integer paiChiYiZhu = dao.shiFouPaiChiYiZhu(code);
  243. switch (paiChiYiZhu) {
  244. case 1:
  245. map.put("paiChiYiZhu", "全排斥医嘱");
  246. break;
  247. case 2:
  248. map.put("paiChiYiZhu", "单组排斥医嘱");
  249. break;
  250. case 3:
  251. map.put("paiChiYiZhu", "多组斥医嘱");
  252. break;
  253. }
  254. }
  255. } else {
  256. YaoPinXinXi yp = dao.huoQuYaoPin(code.trim() + serial.trim());
  257. if (yp == null) {
  258. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "该医嘱下的药品,可能已经被停用了或没有医保码,请联系药剂科。");
  259. }
  260. Integer yiShenDengJi = dao.huoQuYiShenDengJi(TokenUtil.getTokenUserId());
  261. int yiShen = yiShenDengJi == null ? 0 : yiShenDengJi;
  262. if (yp.getYpLevel() > yiShen) {
  263. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "您没有开此药品的权限。");
  264. }
  265. map.put("piShi", dao.piShiGeiYaoFangShi());
  266. List<YaoPingJiLiang> yaoPingJiLiang = new ArrayList<>();
  267. if (StringUtil.notBlank(yp.getWeighUnit())) {
  268. yaoPingJiLiang.add(new YaoPingJiLiang(yp.getWeighUnit(), yp.getWeighUnitName(), yp.getWeight()));
  269. }
  270. if (StringUtil.notBlank(yp.getVolUnit())) {
  271. yaoPingJiLiang.add(new YaoPingJiLiang(yp.getVolUnit(), yp.getVolUnitName(), yp.getVolum()));
  272. }
  273. if (StringUtil.notBlank(yp.getPackUnit())) {
  274. yaoPingJiLiang.add(new YaoPingJiLiang(yp.getPackUnit(), yp.getPackUnitName(), yp.getPackSize()));
  275. }
  276. map.put("yaoPingJiLiang", yaoPingJiLiang);
  277. map.put("data", yp);
  278. }
  279. return ResultVoUtil.success(map);
  280. }
  281. /**
  282. * 获取频率
  283. *
  284. * @param code 五笔,拼音,中文,编码
  285. * @return 返回对应的数据
  286. */
  287. public ResultVo<List<GetDropdownBox>> huoQuZhuYuanPinLv(String code) {
  288. return ResultVoUtil.success(dao.huoQuZhuYuanPinLv(StringUtil.isContainChinese(code)));
  289. }
  290. /**
  291. * 获取给药方式
  292. *
  293. * @param code 五笔,拼音,中文,编码
  294. * @return 返回对应的数据
  295. */
  296. public ResultVo<List<GetDropdownBox>> huoQuGeiYaoFangShi(String code) {
  297. return ResultVoUtil.success(dao.huoQuGeiYaoFangShi(StringUtil.isContainChinese(code)));
  298. }
  299. /**
  300. * 获取执行科室
  301. *
  302. * @param code 五笔,拼音,中文,编码
  303. * @return 返回对应的数据
  304. */
  305. public ResultVo<List<GetDropdownBox>> huoQuZhiXinKeShi(String code) {
  306. return ResultVoUtil.success(dao.huoQuZhiXinKeShi(StringUtil.isContainChinese(code)));
  307. }
  308. /**
  309. * 用来校验数据 以及插入医嘱和插入抗菌药物以及,插入医嘱模板
  310. *
  311. * @param param 数据
  312. * @return 返回提示
  313. */
  314. @Transactional(rollbackFor = Exception.class)
  315. public ResultVo<String> shangChuanYiZhu(XinZhenYiZhu param) {
  316. if (ListUtil.isBlank(param.getList())) {
  317. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请选择数据");
  318. }
  319. Set<String> yaoPingCode = new HashSet<>();
  320. Set<String> xiangMuCode = new HashSet<>();
  321. StringBuilder cuoWuXinXi = new StringBuilder();
  322. Boolean needRule = publicServer.noNeedRule(38);
  323. // 这个是用来做父子组件的 map
  324. Map<BigDecimal, XinZhenYzActOrder> fuYiZhuId = new HashMap<>();
  325. for (XinZhenYzActOrder item : param.getList()) {
  326. if (item.getParentNo() == null) {
  327. fuYiZhuId.put(item.getId(), item);
  328. }
  329. if (item.getSerial().trim().equals("00")) {
  330. xiangMuCode.add(item.getOrderCode().trim());
  331. } else {
  332. yaoPingCode.add(item.getOrderCode().trim() + item.getSerial().trim());
  333. }
  334. }
  335. // 这个是药品的一些信息
  336. Map<String, XinZhenYzActOrder> yaoPingXinXi = new HashMap<>();
  337. Map<String, XinZhenYzActOrder> xiangMuXinXi = new HashMap<>();
  338. // 获取医生开药品的权限
  339. Integer yiShenDengJi = dao.huoQuYiShenDengJi(TokenUtil.getTokenUserId());
  340. if (!yaoPingCode.isEmpty()) {
  341. yaoPingXinXi = dao.huoQuYaoPinXinXi(yaoPingCode).stream().collect(
  342. Collectors.toMap(item -> item.getOrderCode().trim() + item.getSerial().trim(), a -> a, (k1, k2) -> k1));
  343. }
  344. if (!xiangMuCode.isEmpty()) {
  345. xiangMuXinXi = dao.huoQuXiangMuXinXi(xiangMuCode).stream().collect(
  346. Collectors.toMap(item -> item.getOrderCode().trim(), a -> a, (k1, k2) -> k1));
  347. }
  348. // 这个是 抗菌药物的信息
  349. List<YzActRecordKss> kssList = new ArrayList<>();
  350. // 判断一些基本信息错误 以及生成医嘱号
  351. int index = 0;
  352. int listSize = param.getList().size();
  353. for (XinZhenYzActOrder item : param.getList()) {
  354. index++;
  355. if (StringUtil.isBlank(item.getOrderCode())) {
  356. cuoWuXinXi.append(getCuoWuXinXi("项目编码不能为空", listSize, index));
  357. }
  358. if (StringUtil.isBlank(item.getOrderName())) {
  359. cuoWuXinXi.append(getCuoWuXinXi("项目名称不能为空", listSize, index));
  360. }
  361. if (StringUtil.isBlank(item.getExecUnit())) {
  362. cuoWuXinXi.append(getCuoWuXinXi("执行科室不能为空", listSize, index));
  363. } else if (item.getExecUnit().startsWith("8")) {
  364. cuoWuXinXi.append(getCuoWuXinXi("执行科室不能选择为病区", listSize, index));
  365. }
  366. if (!item.getSerial().trim().equals("00")) {
  367. if (StringUtil.isBlank(item.getFrequCode())) {
  368. cuoWuXinXi.append(getCuoWuXinXi("频次不能为空", listSize, index));
  369. }
  370. if (StringUtil.isBlank(item.getDiscription())) {
  371. cuoWuXinXi.append(getCuoWuXinXi("描述不能为空", listSize, index));
  372. }
  373. if (StringUtil.isBlank(item.getDrugSpecification())) {
  374. cuoWuXinXi.append(getCuoWuXinXi("药品规格不能为空", listSize, index));
  375. }
  376. if (StringUtil.isBlank(item.getSupplyCode())) {
  377. cuoWuXinXi.append(getCuoWuXinXi("给药方式不能为空", listSize, index));
  378. }
  379. if (item.getDose() == null || BigUtils.dengYu(item.getDose(), 0)) {
  380. cuoWuXinXi.append(getCuoWuXinXi("一次计量不能为空", listSize, index));
  381. }
  382. if (StringUtil.isBlank(item.getDoseUnit())) {
  383. cuoWuXinXi.append(getCuoWuXinXi("计量单位不能为空", listSize, index));
  384. }
  385. if (StringUtil.isBlank(item.getSerial())) {
  386. cuoWuXinXi.append(getCuoWuXinXi("包装大小不能为空", listSize, index));
  387. }
  388. // 插入模板就不需要 填写时间 这里为什么不要使用 插入医嘱 这个判断就是因为还需要校验数据
  389. if (!param.getChaRuMuBan()) {
  390. if (item.getOrderTime() == null) {
  391. cuoWuXinXi.append(getCuoWuXinXi("医嘱时间不能为空", listSize, index));
  392. } else if (item.getStartTime() == null) {
  393. cuoWuXinXi.append(getCuoWuXinXi("开始时间不能为空", listSize, index));
  394. } else if (DateUtil.shiJianDaXiao(item.getStartTime(), item.getOrderTime(), "<")) {
  395. cuoWuXinXi.append(getCuoWuXinXi("开始时间不能在开医嘱之前", listSize, index));
  396. }
  397. if (item.getEndTime() != null) {
  398. if (item.getFrequCode().trim().equals("ONCE")) {
  399. item.setEndTime(null);
  400. } else {
  401. if (DateUtil.shiJianDaXiao(item.getEndTime(), item.getStartTime(), "<")) {
  402. cuoWuXinXi.append(getCuoWuXinXi("结束时间不能在开始时间之前", listSize, index));
  403. }
  404. }
  405. }
  406. }
  407. }
  408. XinZhenYzActOrder feiYongXinXi = yaoPingXinXi.get(item.getOrderCode().trim() + item.getSerial().trim());
  409. if (feiYongXinXi != null) {
  410. // 跳过 权限判断
  411. if (feiYongXinXi.getYpLevel() > yiShenDengJi && needRule) {
  412. cuoWuXinXi.append(getCuoWuXinXi("您没有开此药品的权限", listSize, index));
  413. }
  414. if (feiYongXinXi.getDelFlag() == 1) {
  415. cuoWuXinXi.append(getCuoWuXinXi("已被物价科停用,请联系物价科。", listSize, index));
  416. }
  417. } else {
  418. feiYongXinXi = xiangMuXinXi.get(item.getOrderCode().trim());
  419. if (feiYongXinXi != null) {
  420. if (feiYongXinXi.getDelFlag() == 1) {
  421. cuoWuXinXi.append(getCuoWuXinXi("已被物价科停用,请联系物价科。", listSize, index));
  422. }
  423. }
  424. // 如果项目和药品全部没有那么就代表这是一个不会产生费用的医嘱
  425. }
  426. if (!item.getSerial().equals("00") && feiYongXinXi != null) {
  427. // 判断抗菌药物
  428. if (param.getChaRuYiZhu()) {
  429. item.setKjywFlag(feiYongXinXi.getKjywFlag());
  430. if (feiYongXinXi.getKjywFlag() == 1) {
  431. if (item.getYyfs() == null) {
  432. cuoWuXinXi.append(getCuoWuXinXi("请填写抗菌药物医嘱附注信息录入。", listSize, index));
  433. } else if (item.getYyfs() == 1 || item.getYyfs() == 2) {
  434. if (item.getSsqk() == null || item.getYyfs() == null) {
  435. cuoWuXinXi.append(getCuoWuXinXi("当用药方式为 1 或 2 时,手术切口和用药时间不能为空。", listSize, index));
  436. }
  437. }
  438. }
  439. }
  440. // 如果药品已经是最小包装规格了就不能带小数点
  441. // 同时计算药品的执行用量 以及 领量
  442. if (StringUtil.notBlank(feiYongXinXi.getDrugWeightUnit()) &&
  443. item.getDoseUnit().trim().equals(feiYongXinXi.getDrugWeightUnit().trim())) {
  444. if (BigUtils.bigXiaoYu(item.getDose(), feiYongXinXi.getDrugWeight())) {
  445. item.setDrugQuan(BigDecimal.valueOf(1));
  446. item.setDrugOcc(BigDecimal.valueOf(1));
  447. } else {
  448. item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugWeight()));
  449. item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugWeight(), 2));
  450. }
  451. } else if (StringUtil.notBlank(feiYongXinXi.getDrugVolUnit()) && item.getDoseUnit().trim().equals(feiYongXinXi.getDrugVolUnit())) {
  452. if (BigUtils.bigXiaoYu(item.getDose(), feiYongXinXi.getDrugVolume())) {
  453. item.setDrugQuan(BigDecimal.valueOf(1));
  454. item.setDrugOcc(BigDecimal.valueOf(1));
  455. } else {
  456. item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugVolume()));
  457. item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugVolume(), 2));
  458. }
  459. } else if (StringUtil.notBlank(feiYongXinXi.getPackUnit()) && item.getDoseUnit().trim().equals(feiYongXinXi.getPackUnit())) {
  460. if (new BigDecimal(item.getDose().intValue()).compareTo(item.getDose()) != 0) {
  461. cuoWuXinXi.append(getCuoWuXinXi("已经是最小单位了请不要带小数点。", listSize, index));
  462. }
  463. item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getPackSize()));
  464. item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getPackSize(), 2));
  465. }
  466. try {
  467. // 这里把查询出来的一些信息 放到item 中 ,这个克隆不会影响已经有值的数据 这样就不用一个个set 了
  468. EntityCopy.Copy(feiYongXinXi, item);
  469. } catch (Exception e) {
  470. e.printStackTrace();
  471. }
  472. } else {
  473. item.setDrugQuan(BigDecimal.valueOf(1));
  474. item.setDrugOcc(BigDecimal.valueOf(1));
  475. }
  476. // 判断是否需要上传
  477. if (param.getChaRuYiZhu()) {
  478. item.setActOrderNo(BigDecimal.valueOf(publicServer.getActOrderNo()));
  479. if (item.getKjywFlag() != null && item.getKjywFlag() == 1) {
  480. YzActRecordKss kss = new YzActRecordKss();
  481. kss.setActOrderNo(item.getActOrderNo());
  482. kss.setChargeCode(item.getOrderCode());
  483. kss.setYyfs(item.getYyfs());
  484. kss.setSsqk(item.getSsqk());
  485. kss.setYysj(item.getYysj());
  486. kssList.add(kss);
  487. }
  488. }
  489. // 判断是不是需要 插入 模板数据
  490. if (param.getChaRuMuBan()) {
  491. item.setActOrderNo(BigDecimal.valueOf(publicServer.getPatternOrderCode()));
  492. }
  493. // 在这里把 父级的医嘱号放进去
  494. if (item.getParentNo() != null && fuYiZhuId.containsKey(item.getParentNo())) {
  495. item.setParentNo(fuYiZhuId.get(item.getParentNo()).getActOrderNo());
  496. }
  497. }
  498. // 提示信息
  499. if (cuoWuXinXi.length() > 0) {
  500. throw new BizException(ExceptionEnum.LOGICAL_HTML_ERROR, cuoWuXinXi.toString());
  501. }
  502. // 执行人
  503. String inputCode = TokenUtil.getTokenUserId();
  504. // 在这里插入医嘱
  505. if (param.getChaRuYiZhu()) {
  506. return chaRuYiZhu(param, kssList, inputCode);
  507. }
  508. if (param.getChaRuMuBan()) {
  509. dao.chaRuMuBanShuJu(param.getList(), param.getPatternCode());
  510. }
  511. return ResultVoUtil.success();
  512. }
  513. @Nullable
  514. @Transactional(rollbackFor = Exception.class)
  515. public ResultVo<String> chaRuYiZhu(XinZhenYiZhu param, List<YzActRecordKss> kssList, String inputCode) {
  516. if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null) {
  517. throw new BizException(ExceptionEnum.LOGICAL_ERROR, "请先选择患者信息");
  518. }
  519. XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
  520. if (huanZheXinXi == null) {
  521. throw new BizException(ExceptionEnum.LOGICAL_ERROR, "没有查询到患者的在院信息。");
  522. }
  523. huanZheXinXi.setInfantFlag(publicServer.getInfantFlag(huanZheXinXi.getInpatientNo()));
  524. publicServer.huanZheJieSuan(param.getInpatientNo(), param.getAdmissTimes());
  525. if (ListUtil.notBlank(kssList)) {
  526. dao.shanChuYuanKuangJunYaoWu(kssList);
  527. dao.chaRuKuangJunYaoWuXinXi(huanZheXinXi.getInpatientNo(), huanZheXinXi.getAdmissTimes(), inputCode, kssList);
  528. }
  529. List<String> content = new ArrayList<>();
  530. String groupNo = publicServer.getGroupNo();
  531. for (XinZhenYzActOrder item : param.getList()) {
  532. if (StringUtil.isBlank(item.getDrugFlag())) {
  533. item.setDrugFlag("o");
  534. }
  535. if (item.getSerial().trim().equals("00")) {
  536. item.setGroupNo("00");
  537. } else if (item.getSerial().trim().equals("01") || item.getSerial().trim().equals("99")) {
  538. item.setGroupNo(groupNo);
  539. }
  540. if (item.getEndTime() != null) {
  541. item.setModifier(inputCode);
  542. }
  543. content.add(String.format("医嘱名:<span style='color:#409eff'>【%s】</span><br>" +
  544. "医嘱时间:<span style='color:#409eff'>【%tF %<tT】</span><br>" +
  545. "患者姓名:<span style='color:#409eff'>【%s】</span><br>" +
  546. "床位:<span style='color:#409eff'>【%s】</span><br>" +
  547. "频次:<span style='color:#409eff'>【%s】</span>",
  548. item.getOrderName(), item.getOrderTime(), huanZheXinXi.getName(), huanZheXinXi.getBedNo(), item.getFrequCode()));
  549. }
  550. dao.chaRuYiZhu(huanZheXinXi.getInpatientNo(), huanZheXinXi.getAdmissTimes(), inputCode, huanZheXinXi.getInfantFlag(),
  551. huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), huanZheXinXi.getReferPhysician(), param.getList());
  552. publicServer.faSongXiaoXi(huanZheXinXi, content, "新增医嘱", inputCode);
  553. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "医嘱保存成功。");
  554. }
  555. /**
  556. * 错误信息提示,如果只有一个 list 那就不需要提示是多少行了
  557. *
  558. * @param message 消息
  559. * @param listSize 当前传入数据的大小
  560. * @param index 当前的数据的下标
  561. * @return 返回提示信息
  562. */
  563. private String getCuoWuXinXi(String message, int listSize, int index) {
  564. if (listSize == 1) {
  565. return message + "<br>";
  566. } else {
  567. return String.format("第【%d】行,%s <br>", index, message);
  568. }
  569. }
  570. /**
  571. * 获取模板的名字
  572. *
  573. * @param code 编码
  574. * @return 返回模板名称 list
  575. */
  576. public ResultVo<IPage<yzOrderPattern>> huoQuYiZhuMuBan(String code, String deptCode, Integer muBanLeiXing,
  577. long currentPage, long total) {
  578. IPage<yzOrderPattern> page = new Page<>();
  579. if (total == 0) {
  580. page.setTotal(dao.huoQuMuBanTotal(StringUtil.isContainChinese(code), TokenUtil.getTokenUserId(), deptCode, muBanLeiXing));
  581. }
  582. page.setRecords(dao.huoQuMuBan(StringUtil.isContainChinese(code), TokenUtil.getTokenUserId(), deptCode, muBanLeiXing, currentPage));
  583. return ResultVoUtil.success(page);
  584. }
  585. public ResultVo<List<YzActOrder>> huoQuMuBanShuJu(String code) {
  586. List<YzActOrder> muBanShuJu = dao.huoQuMuBanShuJu(code);
  587. Map<BigDecimal, YzActOrder> wuFuJi = muBanShuJu.stream().collect(
  588. Collectors.toMap(YzActOrder::getId, a -> a, (k1, k2) -> k1));
  589. Map<BigDecimal, YzActOrder> map = new HashMap<>();
  590. List<YzActOrder> tree = new ArrayList<>();
  591. for (YzActOrder item : muBanShuJu) {
  592. if (item.getParentNo() == null) {
  593. tree.add(item);
  594. wuFuJi.remove(item.getId());
  595. }
  596. map.put(item.getId(), item);
  597. }
  598. for (YzActOrder item : muBanShuJu) {
  599. YzActOrder yzActOrder = map.get(item.getParentNo());
  600. if (yzActOrder != null) {
  601. wuFuJi.remove(item.getId());
  602. item.setIsChildren(true);
  603. if (yzActOrder.getChildren() == null) {
  604. yzActOrder.setChildren(new ArrayList<>());
  605. }
  606. yzActOrder.getChildren().add(item);
  607. }
  608. }
  609. if (!wuFuJi.isEmpty()) {
  610. tree.addAll(wuFuJi.values());
  611. }
  612. return ResultVoUtil.success(tree);
  613. }
  614. @Transactional(rollbackFor = Exception.class)
  615. public ResultVo<String> baoCunMuBan(yzOrderPattern param) {
  616. yzOrderPattern yzOrderPattern;
  617. if (param.getInputType().equals("3")) {
  618. yzOrderPattern = dao.yuanLaiDeMuBanBianMa(param.getPatternName(), TokenUtil.getTokenUserId());
  619. } else {
  620. yzOrderPattern = dao.gongGongMuBan(param.getPatternName());
  621. }
  622. List<Integer> role = publicServer.getRoleCode().getData();
  623. if (param.getInputType().equals("1") && publicServer.noNeedRule(role, 38)) {
  624. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "您没有权限修改和删除全院模板。");
  625. } else if (param.getInputType().equals("2") && publicServer.noNeedRule(role, 38, 11)) {
  626. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "您没有权限修改和删除科室模板。");
  627. }
  628. String patternCode = yzOrderPattern.getPatternCode();
  629. if (StringUtil.notBlank(patternCode) && !param.getQingZhiTiHuan()) {
  630. return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "模板名重复。是否替换:【900】");
  631. }
  632. if (StringUtil.notBlank(patternCode)) {
  633. // 更新的时候先删除模板
  634. dao.shanChuLaoMuBan(patternCode);
  635. param.setPatternCode(patternCode);
  636. } else {
  637. param.setPatternCode(publicServer.getPatternCode());
  638. }
  639. param.setPyCode(PingYinUtils.pyShouZiMuDaXie(param.getPatternName()));
  640. param.setDCode(PingYinUtils.getWBCode(param.getPatternName()));
  641. param.setInputId(TokenUtil.getTokenUserId());
  642. XinZhenYiZhu xinZhenYiZhu = new XinZhenYiZhu();
  643. xinZhenYiZhu.setChaRuMuBan(true);
  644. xinZhenYiZhu.setPatternCode(param.getPatternCode());
  645. xinZhenYiZhu.setList(param.getList());
  646. dao.chaRuMuBan(param);
  647. ResultVo<String> chaRuMuBan = shangChuanYiZhu(xinZhenYiZhu);
  648. if (chaRuMuBan.getCode() != 200) {
  649. throw new BizException(ExceptionEnum.LOGICAL_HTML_ERROR, chaRuMuBan.getMessage());
  650. }
  651. if (StringUtil.notBlank(patternCode)) {
  652. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "已替换原模板。");
  653. }
  654. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "创建模板成功。");
  655. }
  656. /**
  657. * 删除或修改模板
  658. *
  659. * @param patternCode 模板点吗
  660. * @param patternName 模板名称
  661. * @param sortNo 排序号
  662. * @param flag 标志 1-修改 2- 删除 3-收藏和取消收藏
  663. * @return 返回给前端提示
  664. */
  665. public ResultVo<String> muBanCaoZuo(String patternCode, String patternName, String deptCode, Integer sortNo, Integer flag) {
  666. if (StringUtil.isBlank(patternCode)) {
  667. return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "项目编码为空。");
  668. }
  669. yzOrderPattern yzOrderPattern = dao.huoQuMuBanXinXi(patternCode);
  670. if (yzOrderPattern == null) {
  671. return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "没有查询到对应的模板信息。");
  672. }
  673. EntityStringTrim.beanAttributeValueTrim(yzOrderPattern);
  674. String inputId = TokenUtil.getTokenUserId();
  675. List<Integer> role = publicServer.getRoleCode().getData();
  676. // 管理员 和 医务部的无视 规则
  677. if (!role.contains(1) && !role.contains(38) && flag != 3) {
  678. // 只有模板在不等于 自己的时候触发
  679. if (!inputId.equals(yzOrderPattern.getInputId())) {
  680. if (yzOrderPattern.getInputType().equals("2") && !role.contains(11)) {
  681. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该模板为科室模板您没有权限修改或删除,请联系科主任进行修改。");
  682. } else if (yzOrderPattern.getInputType().equals("1")) {
  683. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该模板为全院模板,无法删除或修改。");
  684. }
  685. }
  686. }
  687. if (flag == 1) {
  688. if (StringUtil.isBlank(patternName)) {
  689. return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "模板名称不能为空。");
  690. }
  691. if (patternName.trim().equals(yzOrderPattern.getPatternName().trim()) && sortNo.equals(yzOrderPattern.getSortNo())) {
  692. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "数据没有变化,请勿点击。");
  693. }
  694. dao.genXingMuBan(patternName.trim(), PingYinUtils.pyShouZiMuDaXie(patternName), PingYinUtils.getWBCode(patternName), yzOrderPattern.getPatternCode(), sortNo);
  695. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "修改成功。");
  696. } else if (flag == 2) {
  697. // 删除父模板以及下面的子模板 数据
  698. dao.shanChuMuBan(yzOrderPattern.getPatternCode());
  699. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "删除成功。");
  700. } else if (flag == 3) {
  701. // 收藏模板
  702. String collectCode = dao.chongFuShouCang(inputId, patternCode);
  703. if (collectCode == null) {
  704. dao.chaRuShouCang(publicServer.getPatternCode(), yzOrderPattern.getPatternName() + "(收藏)",
  705. yzOrderPattern.getPyCode(), yzOrderPattern.getDCode(), deptCode, inputId, yzOrderPattern.getPatternCode());
  706. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "收藏成功。");
  707. } else {
  708. dao.shanChuMuBan(yzOrderPattern.getPatternCode());
  709. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "已取消收藏。");
  710. }
  711. }
  712. return ResultVoUtil.success();
  713. }
  714. /**
  715. * 医嘱操作
  716. *
  717. * @param actOrderNo 医嘱号
  718. * @param flag 标志 1-设为紧急 2-撤销 3-停止
  719. * @return 返回提示
  720. */
  721. @Transactional(rollbackFor = Exception.class)
  722. public ResultVo<String> yiZhuChaoZuo(BigDecimal actOrderNo, Integer flag, String content) {
  723. YzActOrder yz = dao.chaXunYiZhuXinXin(actOrderNo);
  724. if (yz == null) {
  725. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有查询到该医嘱可能已经被撤销了");
  726. }
  727. switch (flag) {
  728. case 1:
  729. return sheZhiJinJi(yz);
  730. case 2:
  731. return ceXiaoYiZhu(yz, content);
  732. case 3:
  733. return tingZhiShiJian(yz, content);
  734. }
  735. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "你想干什么?");
  736. }
  737. public ResultVo<String> sheZhiJinJi(YzActOrder yz) {
  738. String emergencyFlag = null;
  739. if (yz.getEmergencyFlag() == null || !yz.getEmergencyFlag().trim().equals("1")) {
  740. emergencyFlag = "1";
  741. }
  742. dao.sheZhiJinJi(yz.getActOrderNo(), emergencyFlag);
  743. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
  744. }
  745. private ResultVo<String> ceXiaoYiZhu(YzActOrder param, String content) {
  746. if (StringUtil.isBlank(content)) {
  747. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请填写撤销原因。");
  748. }
  749. YzActOrder yz = dao.chaXunYiZhuXinXin(param.getActOrderNo());
  750. if (yz == null) {
  751. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有找到对应医嘱的信息。");
  752. }
  753. String userCode = TokenUtil.getTokenUserId();
  754. if (publicServer.noNeedRule(38)) {
  755. if (!yz.getPhysician().trim().equals(userCode)) {
  756. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "不是本人开的医嘱无权撤销。");
  757. }
  758. if (DateUtil.shiJianDaXiao(new Date(), DateUtil.addDateMinut(yz.getStartTime(), 24), ">")) {
  759. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "已经超过24个小时了,无法撤销。");
  760. }
  761. }
  762. if (!yz.getStatusFlag().trim().equals("2")) {
  763. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该医嘱无法被撤销。");
  764. }
  765. // 获取该医嘱下面的项目有没有被执行了,如果被执行了的话就不能撤销了。
  766. publicServer.huoQuGaiYiZhuXiaXiangMu(yz.getActOrderNo());
  767. // 插入撤销的原因
  768. dao.chaRuCheXiaoYuanYin(yz.getActOrderNo(), yz.getInpatientNo(), yz.getAdmissTimes(), content, yz.getOrderCode());
  769. // 删除费用 删除药品的药单 删除医嘱表 删除医技
  770. dao.cheXiaoYiZhu(yz.getActOrderNo());
  771. // 把原来的医嘱插入到 yz_erase_order 这个表
  772. dao.chaRuShanChuBiao(yz.getActOrderNo());
  773. // 更新原来的状态
  774. dao.genXingShanChuBiaoZhi(userCode, yz.getActOrderNo());
  775. log.info("删除医嘱==》数据:{},操作人:{}", JSON.toJSONString(yz), userCode);
  776. publicServer.faSongXiaoXi(dao.huoQuHuanZheXinXi(yz.getInpatientNo(), yz.getAdmissTimes()),
  777. Stream.of(String.format("医嘱名:【%s】,<br>" +
  778. "医嘱号:【%s】,<br>" +
  779. "撤销原因【%s】", yz.getOrderName(), yz.getActOrderNo(), content)).collect(Collectors.toList()),
  780. "撤销医嘱", TokenUtil.getTokenUserId());
  781. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "医嘱撤销成功。");
  782. }
  783. private ResultVo<String> tingZhiShiJian(YzActOrder yz, String content) {
  784. String userCode = TokenUtil.getTokenUserId();
  785. if (StringUtil.isBlank(content)) {
  786. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请选择停止时间。");
  787. }
  788. String LOGICAL_ERROR = tingZhiYiZhuJiaoYan(yz, content);
  789. if (LOGICAL_ERROR != null) return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, LOGICAL_ERROR);
  790. dao.sheZhiTingZhiShiJian(userCode, yz.getActOrderNo(), content);
  791. log.info("停止医嘱==》医嘱号:{},停止时间:{},操作人:{}", yz.getActOrderNo(), content, userCode);
  792. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
  793. }
  794. private String tingZhiYiZhuJiaoYan(YzActOrder yz, String content) {
  795. if (!DateUtil.dateStrIsValid(content, DateUtil.DEFAULT_PATTERN)) {
  796. return "请输入正确的时间格式。";
  797. }
  798. if (yz.getEndTime() != null) {
  799. return "该医嘱已经被停止了,无法修改。";
  800. }
  801. if (DateUtil.shiJianDaXiao(content, DateUtil.formatDatetime(yz.getStartTime()), "<")) {
  802. return "停止时间不能在开始时间前面。";
  803. }
  804. if (yz.getFrequCode().trim().equals("ONCE")) {
  805. return "临时医嘱,无法设置停止时间。";
  806. }
  807. return null;
  808. }
  809. @Transactional(rollbackFor = Exception.class)
  810. public ResultVo<String> piLiangXiuGaiTingZhiShiJian(YiZhuTingZhiShiJian param) {
  811. if (param.getActOrderNoList().size() > 20) {
  812. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "批量操作每次不得大于20条");
  813. }
  814. List<YzActOrder> yiZhuXinXi = dao.yiZhuXinXiJiHe(param.getActOrderNoList());
  815. if (yiZhuXinXi == null) {
  816. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有查询到对应的医嘱信息,您选择的数据可以已经被全部停止或撤销。");
  817. }
  818. StringBuilder cuoWuXinXi = new StringBuilder();
  819. for (YzActOrder yzActOrder : yiZhuXinXi) {
  820. String jiaoYan = tingZhiYiZhuJiaoYan(yzActOrder, param.getEndTime());
  821. if (jiaoYan != null) {
  822. cuoWuXinXi.append("医嘱号:")
  823. .append(yzActOrder.getActOrderNo())
  824. .append("<br>")
  825. .append("医嘱名:")
  826. .append(yzActOrder.getOrderName())
  827. .append("<br>")
  828. .append(jiaoYan)
  829. .append("<br><br>");
  830. }
  831. }
  832. if (cuoWuXinXi.length() > 0) {
  833. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_HTML_ERROR, cuoWuXinXi.toString());
  834. }
  835. dao.piLiangSheZhiTingZhiShiJian(param.getActOrderNoList(), TokenUtil.getTokenUserId(), param.getEndTime());
  836. return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
  837. }
  838. }