YiZhuLuRuServer.java 43 KB

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