CaseFrontSheetMainService.java 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342
  1. package thyyxxk.webserver.service.inpatient.casefrontsheet;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.alibaba.fastjson.serializer.SerializerFeature;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.scheduling.annotation.Scheduled;
  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.constants.sidicts.Insutype;
  14. import thyyxxk.webserver.constants.sidicts.MedType;
  15. import thyyxxk.webserver.dao.his.LoginDao;
  16. import thyyxxk.webserver.dao.his.datamodify.YzActOrderModifyVerifyDao;
  17. import thyyxxk.webserver.dao.his.inpatient.TransferInOfExpensesDao;
  18. import thyyxxk.webserver.dao.his.inpatient.casefrontsheet.BasSelectOverviewDao;
  19. import thyyxxk.webserver.dao.his.inpatient.casefrontsheet.CaseFrontSheetDao;
  20. import thyyxxk.webserver.dao.his.inpatient.casefrontsheet.SheetCreatedDao;
  21. import thyyxxk.webserver.entity.ResultVo;
  22. import thyyxxk.webserver.entity.api.forpowersi.drgdip.frontsheetqualitycheck.QualityCheckParams;
  23. import thyyxxk.webserver.entity.casefrontsheet.*;
  24. import thyyxxk.webserver.entity.casefrontsheet.request.*;
  25. import thyyxxk.webserver.entity.casefrontsheet.request.OpCaseFrontsheet;
  26. import thyyxxk.webserver.entity.casefrontsheet.response.BaOpLog;
  27. import thyyxxk.webserver.entity.casefrontsheet.response.LendOutSheet;
  28. import thyyxxk.webserver.entity.casefrontsheet.state.AuditState;
  29. import thyyxxk.webserver.entity.casefrontsheet.state.State;
  30. import thyyxxk.webserver.entity.casefrontsheet.tcmsheet.TcmFrontSheetIcuinfo;
  31. import thyyxxk.webserver.entity.covid.Region;
  32. import thyyxxk.webserver.entity.dictionary.CodeName;
  33. import thyyxxk.webserver.entity.dictionary.HisWjwMatchEntity;
  34. import thyyxxk.webserver.entity.medicalinsurance.inpatient.ZyPatientInfo;
  35. import thyyxxk.webserver.http.drg.DrgWebApi;
  36. import thyyxxk.webserver.service.externalhttp.PowersiSrvc;
  37. import thyyxxk.webserver.service.zhuyuanyisheng.emr.EmrServer;
  38. import thyyxxk.webserver.utils.*;
  39. import javax.validation.constraints.NotBlank;
  40. import java.lang.reflect.Field;
  41. import java.lang.reflect.Method;
  42. import java.util.*;
  43. import java.util.concurrent.ConcurrentHashMap;
  44. import java.util.stream.Collectors;
  45. @Slf4j
  46. @Service
  47. public class CaseFrontSheetMainService {
  48. private static ConcurrentHashMap<String, List<CodeName>> allDictionary;
  49. private final CaseFrontSheetDao dao;
  50. private final SheetCreatedDao createdDao;
  51. private final BasSelectOverviewDao basDao;
  52. private final LoginDao userDao;
  53. private final PowersiSrvc srvc;
  54. private final EmrServer emrService;
  55. private final DrgWebApi drgWebApi;
  56. private final TransferInOfExpensesDao transferInOfExpensesDao;
  57. public CaseFrontSheetMainService(SheetCreatedDao createdDao, CaseFrontSheetDao dao, BasSelectOverviewDao basDao,
  58. LoginDao userDao, PowersiSrvc srvc, EmrServer emrService, DrgWebApi drgWebApi, TransferInOfExpensesDao transferInOfExpensesDao) {
  59. this.dao = dao;
  60. this.createdDao = createdDao;
  61. this.basDao = basDao;
  62. this.userDao = userDao;
  63. this.srvc = srvc;
  64. this.emrService = emrService;
  65. this.drgWebApi = drgWebApi;
  66. this.transferInOfExpensesDao = transferInOfExpensesDao;
  67. if (allDictionary == null) {
  68. allDictionary = new ConcurrentHashMap<>();
  69. }
  70. }
  71. public ResultVo<Map<String, List<CodeName>>> getAllDictionary() {
  72. if (allDictionary.isEmpty()) {
  73. try {
  74. allDictionary.put("getMarriageCode", createdDao.getMarriageCode());
  75. allDictionary.put("getSexCode", createdDao.getSexCode());
  76. allDictionary.put("getAdmissWay", createdDao.getAdmissWay());
  77. allDictionary.put("getBloodType", createdDao.getBloodType());
  78. allDictionary.put("getAnaesthesia", createdDao.getAnaesthesia());
  79. allDictionary.put("getOperateScale", createdDao.getOperateScale());
  80. allDictionary.put("getAdmissStatus", createdDao.getAdmissStatus());
  81. allDictionary.put("getDisAdmissStatus", createdDao.getDisAdmissStatus());
  82. allDictionary.put("getCutHealGrade", createdDao.getCutHealGrade());
  83. allDictionary.put("getDisdiagStatus", createdDao.getDisdiagStatus());
  84. allDictionary.put("getHbsag", createdDao.getHbsag());
  85. allDictionary.put("getDiagConform", createdDao.getDiagConform());
  86. allDictionary.put("getDisdiagType", createdDao.getDisdiagType());
  87. allDictionary.put("getPatientStatus", createdDao.getPatientStatus());
  88. allDictionary.put("getQualityLevel", createdDao.getQualityLevel());
  89. allDictionary.put("getZyDismissWay", createdDao.getZyDismissWay());
  90. allDictionary.put("getTumorLevelT", createdDao.getTumorLevelT());
  91. allDictionary.put("getTumorLevelN", createdDao.getTumorLevelN());
  92. allDictionary.put("getTumorLevelM", createdDao.getTumorLevelM());
  93. allDictionary.put("getTumorLevel", createdDao.getTumorLevel());
  94. allDictionary.put("getRelations", createdDao.getRelations());
  95. List<CodeName> temp = new ArrayList<>();
  96. temp.add(new CodeName());
  97. temp.addAll(createdDao.getStatutoryEpidemic());
  98. allDictionary.put("getStatutoryEpidemic", temp);
  99. allDictionary.put("getClinicalPathwayManagement", createdDao.getClinicalPathwayManagement());
  100. allDictionary.put("getDrgsManagement", createdDao.getDrgsManagement());
  101. allDictionary.put("getCaseClassification", createdDao.getCaseClassification());
  102. allDictionary.put("getOccupation", createdDao.getOccupation());
  103. allDictionary.put("getCountry", createdDao.getCountry());
  104. allDictionary.put("getNation", createdDao.getNation());
  105. allDictionary.put("getPayMethod", createdDao.getPayMethod());
  106. allDictionary.put("getPsnCertType", createdDao.getPsnCertType());
  107. } catch (Exception e) {
  108. log.error("病案字典提取出错", e);
  109. allDictionary.clear();
  110. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, e.getCause().getMessage());
  111. }
  112. }
  113. return ResultVoUtil.success(allDictionary);
  114. }
  115. public ResultVo<String> resetDictionary() {
  116. allDictionary.clear();
  117. return ResultVoUtil.success();
  118. }
  119. @Scheduled(cron = "0 0 3 * * ?")
  120. public void refreshDictionary() {
  121. resetDictionary();
  122. }
  123. public ResultVo<List<CodeName>> getUserWards() {
  124. String code = TokenUtil.getInstance().getTokenUserId();
  125. List<Integer> roles = createdDao.selectUserRoles(code);
  126. List<CodeName> list;
  127. if (roles.contains(7) || roles.contains(1)) {
  128. list = createdDao.getAllWards();
  129. } else {
  130. list = createdDao.getUserWards(code);
  131. }
  132. list.removeIf(Objects::isNull);
  133. return ResultVoUtil.success(list);
  134. }
  135. public ResultVo<List<CodeName>> getAllWards() {
  136. return ResultVoUtil.success(createdDao.getAllWards());
  137. }
  138. public ResultVo<List<SheetOverview>> getPatientOverview(String ward) {
  139. return ResultVoUtil.success(dao.getPatientOverview(ward));
  140. }
  141. public ResultVo<List<SheetOverview>> getOutPatient(DismissedSheetInquiry param) {
  142. param.setEnd(param.getEnd() + " 23:59:59");
  143. if (StringUtil.isBlank(param.getWard())) {
  144. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请选择科室!");
  145. }
  146. return ResultVoUtil.success(dao.getOutPatients(param));
  147. }
  148. /**
  149. * 查询病案首页汇总
  150. *
  151. * @param param 查询的条件
  152. * @return 返回数据
  153. */
  154. public ResultVo<List<SheetOverview>> basOutPatients(DismissedSheetInquiry param) {
  155. if (StringUtil.isBlank(param.getStart()) || StringUtil.isBlank(param.getEnd())) {
  156. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "日期范围不能为空。");
  157. }
  158. param.setStart(param.getStart() + " 00:00:00");
  159. param.setEnd(param.getEnd() + " 23:59:59");
  160. List<SheetOverview> baseList;
  161. List<SheetOverview> seedList;
  162. if (StringUtil.notBlank(param.getBah())) {
  163. baseList = basDao.selectPatientsFromSignedBase(param);
  164. if (Objects.equals(param.getFileStatus(), State.FileStatus.SIGNED)) {
  165. if (baseList.isEmpty()) {
  166. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST,
  167. "没有找到此患者的已归档病案。");
  168. }
  169. if (!Objects.equals(param.getLateFlag(), State.LateFlag.ALL)) {
  170. baseList.removeIf(item -> !Objects.equals(item.getLateFlag(), param.getLateFlag()));
  171. }
  172. return ResultVoUtil.success(baseList);
  173. }
  174. seedList = basDao.selectPatientsForBasByBah(param);
  175. baseList = removeDuplicateData(baseList, seedList);
  176. if (baseList.isEmpty()) {
  177. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST,
  178. "没有找到此患者的未归档病案。");
  179. }
  180. if (!Objects.equals(param.getLateFlag(), State.LateFlag.ALL)) {
  181. baseList.removeIf(item -> !Objects.equals(item.getLateFlag(), param.getLateFlag()));
  182. }
  183. return ResultVoUtil.success(baseList);
  184. }
  185. if (StringUtil.notBlank(param.getWard())) {
  186. baseList = basDao.selectPatientsForBasByWard2(param);
  187. if (param.getFileStatus() == State.FileStatus.UNSIGNED) {
  188. seedList = basDao.selectPatientsForBasByWard(param);
  189. baseList = removeDuplicateData(baseList, seedList);
  190. }
  191. if (!Objects.equals(param.getLateFlag(), State.LateFlag.ALL)) {
  192. baseList.removeIf(item -> !Objects.equals(item.getLateFlag(), param.getLateFlag()));
  193. }
  194. return ResultVoUtil.success(baseList);
  195. }
  196. baseList = basDao.selectPatientsForBasByFileStatus2(param);
  197. if (param.getFileStatus() == State.FileStatus.UNSIGNED) {
  198. seedList = basDao.selectPatientsForBasByFileStatus(param);
  199. baseList = removeDuplicateData(baseList, seedList);
  200. }
  201. if (!Objects.equals(param.getLateFlag(), State.LateFlag.ALL)) {
  202. baseList.removeIf(item -> !Objects.equals(item.getLateFlag(), param.getLateFlag()));
  203. }
  204. return ResultVoUtil.success(baseList);
  205. }
  206. private List<SheetOverview> removeDuplicateData(List<SheetOverview> baseList,
  207. List<SheetOverview> seedList) {
  208. if (baseList.isEmpty()) {
  209. return seedList;
  210. }
  211. if (seedList.isEmpty()) {
  212. return baseList;
  213. }
  214. List<String> keys = new ArrayList<>();
  215. for (SheetOverview overview : baseList) {
  216. String key = overview.getBah().trim() + "-" + overview.getTimes();
  217. keys.add(key);
  218. }
  219. seedList.removeIf(item -> keys.contains(item.getBah().trim() + "-" + item.getTimes()));
  220. baseList.addAll(seedList);
  221. return baseList;
  222. }
  223. public CaseFrontsheetMain getPatientInfo(SheetOverview overview) {
  224. String bah = overview.getBah();
  225. Integer times = overview.getTimes();
  226. StandardAddressMember standardAddressMember = getStandardAddressMember(bah);
  227. CaseFrontsheetMain sheet = dao.selectStoredSheetMain(bah, times);
  228. if (null != sheet) {
  229. sheet.setDisdiagList(getSheetDisDiags(bah, times, State.FileStatus.SIGNED));
  230. sheet.setSurgeryList(getSheetSurgeries(bah, times, State.FileStatus.SIGNED));
  231. sheet.setSupplement(getSheetSupplement(bah, times));
  232. if (null != standardAddressMember) {
  233. sheet.setStandardAddress(standardAddressMember.makeStandardAddress());
  234. sheet.setLivePlaceCombo(standardAddressMember.makeAddressCombo() + sheet.getLivePlace());
  235. }
  236. if (sheet.getAge() == 0 && null == sheet.getAgeDays()) {
  237. sheet.setAgeDays(DateUtil.calculateNewBornAge(sheet.getBirthDate(), sheet.getAdmissDate()));
  238. dao.updateNewBornAge(bah, times, sheet.getAgeDays());
  239. }
  240. if (StringUtil.isBlank(sheet.getMedType())) {
  241. String psnmedtype = dao.selectMedType(sheet.getBah(), sheet.getAdmissTimes());
  242. MedType medType = MedType.get(psnmedtype);
  243. if (null != medType) {
  244. sheet.setMedType(psnmedtype);
  245. sheet.setMedTypeName(medType.getName());
  246. }
  247. }
  248. if (null == sheet.getDismissDate()) {
  249. Date dismissDate = dao.getDismissDateFromYzActOrder("yz_act_order", bah, times);
  250. if (null == dismissDate) {
  251. dismissDate = dao.getDismissDateFromYzActOrder("yz_inact_order", bah, times);
  252. }
  253. sheet.setDismissDate(dismissDate);
  254. Integer days = DateUtil.daysBetween(dismissDate, sheet.getAdmissDate());
  255. sheet.setAdmissDays(0 == days ? "1" : String.valueOf(days));
  256. }
  257. if (StringUtil.isBlank(sheet.getAdmissDays()) || sheet.getAdmissDays().equals("-1")) {
  258. Integer days = DateUtil.daysBetween(sheet.getDismissDate(), sheet.getAdmissDate());
  259. sheet.setAdmissDays(0 == days ? "1" : String.valueOf(days));
  260. }
  261. autoFillPart(sheet);
  262. return sheet;
  263. }
  264. int inHospital = overview.getInOutFlag();
  265. if (inHospital == State.InHospital.NO) {
  266. if (dao.selectActCount(bah, times) > 0) {
  267. inHospital = State.InHospital.YES;
  268. }
  269. }
  270. sheet = dao.getAPatientMi(bah);
  271. if (null == sheet) {
  272. return null;
  273. }
  274. CaseFrontsheetMain sheet1 = inHospital == State.InHospital.YES ?
  275. dao.getZyActPatient("zy_actpatient", "yz_act_order", bah, times) :
  276. dao.getZyActPatient("zy_inactpatient", "yz_inact_order", bah, times);
  277. if (null == sheet1) {
  278. sheet1 = inHospital == State.InHospital.YES ?
  279. dao.getZyActPatient("zy_inactpatient", "yz_inact_order", bah, times) :
  280. dao.getZyActPatient("zy_actpatient", "yz_act_order", bah, times);
  281. }
  282. sheet.setAge(DateUtil.calculateAge(sheet.getBirthDate(), sheet1.getAdmissDate()));
  283. if (null != sheet.getAge() && sheet.getAge() == 0) {
  284. sheet.setAgeDays(DateUtil.calculateNewBornAge(sheet.getBirthDate(), sheet1.getAdmissDate()));
  285. }
  286. if (StringUtil.isBlank(sheet1.getMedType())) {
  287. String injurySerialNo = dao.selectInjurySerialNo(bah, times);
  288. if (StringUtil.notBlank(injurySerialNo)) {
  289. sheet1.setMedType("42");
  290. }
  291. }
  292. sheet1.setMedTypeName(MedType.getName(sheet1.getMedType()));
  293. sheet1.setInsutype(Insutype.getName(sheet1.getInsutype()));
  294. final int hasInfant = dao.getInfant(bah, times);
  295. sheet1.setHasInfant(String.valueOf(hasInfant));
  296. if (null == sheet1.getDismissDate()) {
  297. final Date dismissDate = inHospital == State.InHospital.YES ?
  298. dao.getDismissDateFromYzActOrder("yz_inact_order", bah, times)
  299. : dao.getDismissDateFromYzActOrder("yz_act_order", bah, times);
  300. sheet1.setDismissDate(dismissDate);
  301. }
  302. CaseFrontsheetMain sheet2 = dao.getBatjBa1(bah, times);
  303. if (sheet2 == null && dao.isBatjBa1Exist(bah, times) == 0) {
  304. dao.createBatjBa1(bah, times, sheet.getName(), sheet1.getAdmissDate(),
  305. sheet1.getAdmissDept(), sheet1.getAdmissWard());
  306. log.info("insert batjBa1>>> " + bah + ", " + times);
  307. }
  308. CaseFrontsheetMain sheet3 = inHospital == 1 ? dao.getBatjBa2ForInPatient(bah, times) :
  309. dao.getBatjBa2ForOutPatient(bah, times);
  310. if (sheet3 == null && dao.isBatjBa2Exist(bah, times) == 0) {
  311. dao.createBatjBa2(bah, times);
  312. log.info("insert batjBa2>>> " + bah + ", " + times);
  313. }
  314. FrontSheetUtil.mergeObject(sheet1, sheet);
  315. FrontSheetUtil.mergeObject(sheet2, sheet);
  316. FrontSheetUtil.mergeObject(sheet3, sheet);
  317. Integer days = DateUtil.daysBetween(sheet.getDismissDate(), sheet.getAdmissDate());
  318. sheet.setAdmissDays(0 == days ? "1" : String.valueOf(days));
  319. if (null == sheet.getQualityControlDate()) {
  320. sheet.setQualityControlDate(new Date());
  321. }
  322. sheet.setDisdiagList(getSheetDisDiags(bah, times, State.FileStatus.UNSIGNED));
  323. sheet.setSurgeryList(getSheetSurgeries(bah, times, State.FileStatus.UNSIGNED));
  324. sheet.setSupplement(getSheetSupplement(bah, times));
  325. sheet.setIcuInfoList(getSheetIcuinfos(bah, times));
  326. if (null == standardAddressMember) {
  327. sheet.setLivePlaceCombo(sheet.getLivePlace());
  328. } else {
  329. sheet.setStandardAddress(standardAddressMember.makeStandardAddress());
  330. sheet.setLivePlaceCombo(standardAddressMember.makeAddressCombo() + sheet.getLivePlace());
  331. }
  332. List<CodeName> patCharges = dao.selectPatCharges(bah, times);
  333. for (CodeName item : patCharges) {
  334. String code = String.valueOf(item.getCode().charAt(0)).toUpperCase() +
  335. item.getCode().substring(1);
  336. try {
  337. Method m = sheet.getClass().getMethod("set" + code, String.class);
  338. m.invoke(sheet, item.getName());
  339. } catch (Exception e) {
  340. log.error("反射出错", e);
  341. }
  342. }
  343. sheet.setSurgicalFee(DecimalUtil.add(sheet.getAnesthetizeFee(), sheet.getSurgeryFee()));
  344. autoFillPart(sheet);
  345. return sheet;
  346. }
  347. private List<TcmFrontSheetIcuinfo> getSheetIcuinfos(String bah, Integer times) {
  348. List<TcmFrontSheetIcuinfo> icuinfos = new ArrayList<>();
  349. String icuCode = "1000503";
  350. List<Map<String,Object>> yzActOrderList = dao.selectZkOrderList(bah, times);
  351. List<Map<String,Object>> yzActOrderFilterList = yzActOrderList.stream().filter(e-> icuCode.equals(e.get("old_dept")) || icuCode.equals(e.get("new_dept")) ).collect(Collectors.toList());
  352. List<Map<String,Object>> yzActOrderSortList = yzActOrderFilterList.stream().sorted(Comparator.comparing(e->(Date)e.get("exec_time"))).collect(Collectors.toList());
  353. ZyPatientInfo zyPatientInfo = transferInOfExpensesDao.getPatientHospitalStay(bah);
  354. // StringBuffer inTime = new StringBuffer("");
  355. // StringBuffer outTime = new StringBuffer("");
  356. // yzActOrderList.stream().sorted(Comparator.comparing(e->{
  357. // if (icuCode.equals(e.get("old_dept"))) {
  358. // tcmFrontSheetIcuinfo.setStartTime(DateUtil.parse(e.get("exec_time"),"yyyy-MM-dd HH:mm"));
  359. // }
  360. // })).collect(Collectors.toList());
  361. // for (int i = 0; i < yzActOrderSortList.size(); i++) {
  362. // if(i == 0 && icuCode.equals(yzActOrderSortList.get(i).get("old_dept"))){
  363. // tcmFrontSheetIcuinfo.setStartTime(DateUtil.parse(String.valueOf(zyPatientInfo.getDisDate()),"yyyy-MM-dd HH:mm"));
  364. // tcmFrontSheetIcuinfo.setEndTime(DateUtil.parse(yzActOrderSortList.get(i).get("exec_time"),"yyyy-MM-dd HH:mm"));
  365. // } else {
  366. // if (icuCode.equals(yzActOrderSortList.get(i).get("old_dept"))) {
  367. // tcmFrontSheetIcuinfo.setStartTime(DateUtil.parse(yzActOrderSortList.get(i).get("exec_time"),"yyyy-MM-dd HH:mm"));
  368. // }
  369. // outTime.append(DateUtil.parse(yzActOrderSortList.get(i).get("exec_time"),"yyyy-MM-dd HH:mm"));
  370. // }
  371. // }
  372. List<Date> list = new ArrayList<>();
  373. if(!yzActOrderSortList.isEmpty()) {
  374. if(icuCode.equals(yzActOrderSortList.get(0).get("old_dept"))){
  375. Map<String,String> map = new HashMap<>();
  376. list.add(zyPatientInfo.getAdmissDate());
  377. }
  378. if(icuCode.equals(yzActOrderSortList.get(yzActOrderSortList.size()-1).get("new_dept"))){
  379. Map<String,String> map = new HashMap<>();
  380. list.add(zyPatientInfo.getDisDate());
  381. }
  382. for (int i = 0; i < list.size(); i++) {
  383. TcmFrontSheetIcuinfo tcmFrontSheetIcuinfo = new TcmFrontSheetIcuinfo();
  384. tcmFrontSheetIcuinfo.setIcuName("ICU");
  385. tcmFrontSheetIcuinfo.setStartTime(list.get(i));
  386. if (i+1 < list.size()) {
  387. tcmFrontSheetIcuinfo.setEndTime(list.get(i+1));
  388. }
  389. icuinfos.add(tcmFrontSheetIcuinfo);
  390. i++;
  391. }
  392. }
  393. while (icuinfos.size() < 3) {
  394. icuinfos.add(new TcmFrontSheetIcuinfo());
  395. }
  396. return icuinfos;
  397. }
  398. private void autoFillPart(CaseFrontsheetMain sheet) {
  399. String patNo = sheet.getBah();
  400. int times = sheet.getAdmissTimes();
  401. if (StringUtil.isBlank(sheet.getCaseClassification())) {
  402. String blfxElement = dao.selectBlfxElement(patNo, times);
  403. if (StringUtil.notBlank(blfxElement)) {
  404. JSONObject blfxObj = JSONObject.parseObject(blfxElement);
  405. JSONArray blfxArray = blfxObj.getJSONArray("病例分型");
  406. if (null != blfxArray && !blfxArray.isEmpty()) {
  407. JSONObject blfxItem = blfxArray.getJSONObject(0);
  408. sheet.setCaseClassification(blfxItem.getString("code"));
  409. }
  410. }
  411. }
  412. if (StringUtil.isBlank(sheet.getBacilliculture())) {
  413. int bacillicultureCount = dao.selectBacillicultureCount(patNo, times);
  414. sheet.setBacilliculture(bacillicultureCount > 0 ? "1" : "2");
  415. }
  416. if (StringUtil.isBlank(sheet.getStatutoryEpidemic())) {
  417. List<Map<String, String>> epidemics = dao.selectStatutoryEpidemic(patNo, times);
  418. if (ListUtil.notBlank(epidemics)) {
  419. Map<String, String> epidemic = epidemics.get(0);
  420. if (null != epidemic) {
  421. if (StringUtil.notBlank(epidemic.get("a"))) {
  422. sheet.setStatutoryEpidemic("1");
  423. } else if (StringUtil.notBlank(epidemic.get("b"))) {
  424. sheet.setStatutoryEpidemic("2");
  425. } else if (StringUtil.notBlank(epidemic.get("c"))) {
  426. sheet.setStatutoryEpidemic("3");
  427. }
  428. }
  429. }
  430. }
  431. if (StringUtil.isBlank(sheet.getUseAntibiotic())) {
  432. int antibioticCounts = dao.selectAntibiotics(patNo, times);
  433. sheet.setUseAntibiotic(antibioticCounts > 0 ? "1" : "2");
  434. }
  435. AuditState auditState = dao.selectStates(patNo, times);
  436. if (null == auditState) {
  437. auditState = AuditState.NONE;
  438. }
  439. sheet.setAuditState(auditState);
  440. if (null == sheet.getSupplement().getHadEcmo()) {
  441. sheet.getSupplement().setHadEcmo(2);
  442. }
  443. if (null == sheet.getSupplement().getInfusion()) {
  444. sheet.getSupplement().setInfusion(1);
  445. }
  446. }
  447. private StandardAddressMember getStandardAddressMember(String bah) {
  448. StandardAddressMember member = dao.selectStandardAddressMember(bah);
  449. if (null != member) {
  450. return member;
  451. }
  452. String socialNo = dao.selectSocialNo(bah);
  453. if (null == socialNo || socialNo.trim().length() < 15) {
  454. return null;
  455. }
  456. Integer district;
  457. try {
  458. district = Integer.parseInt(socialNo.substring(0, 6));
  459. } catch (Exception e) {
  460. return null;
  461. }
  462. Region city = dao.selectParentRegion(district);
  463. if (null == city) {
  464. return null;
  465. }
  466. Region province = dao.selectParentRegion(city.getCode());
  467. if (null == province) {
  468. return null;
  469. }
  470. member = new StandardAddressMember();
  471. member.setCityCode(city.getCode());
  472. member.setCityName(city.getName());
  473. member.setDistrictCode(district);
  474. member.setDistrictName(dao.selectRegionName(district));
  475. member.setProvinceCode(province.getCode());
  476. member.setProvinceName(province.getName());
  477. return member;
  478. }
  479. private FrontSheetSupplement getSheetSupplement(String bah, int times) {
  480. FrontSheetSupplement result = dao.getSheetSupplement(bah, times);
  481. if (null == result) {
  482. dao.createSheetSupplement(bah, times);
  483. result = new FrontSheetSupplement();
  484. result.setBah(bah);
  485. result.setTimes(times);
  486. }
  487. fillSeparatedTime(result);
  488. if (StringUtil.notBlank(result.getAdmDiagCode()) && StringUtil.notBlank(result.getAdmDiagName())) {
  489. return result;
  490. }
  491. JSONArray diagList;
  492. JSONObject emrPatientData = emrService.getEmrPatientData(bah, times);
  493. try {
  494. diagList = emrPatientData.getJSONArray("入院诊断");
  495. } catch (Exception e) {
  496. diagList = null;
  497. }
  498. if (null == diagList || diagList.isEmpty()) {
  499. return result;
  500. }
  501. JSONObject diagItem = diagList.getJSONObject(0);
  502. result.setAdmDiagCode(diagItem.getString("code"));
  503. result.setAdmDiagName(diagItem.getString("name"));
  504. return result;
  505. }
  506. private void fillSeparatedTime(FrontSheetSupplement supplement) {
  507. if (null != supplement.getDiagnosisConfirmDate()) {
  508. Integer[] datetimeArr = getSplitDatetime(supplement.getDiagnosisConfirmDate());
  509. supplement.setDiagnosisConfirmYear(datetimeArr[0]);
  510. supplement.setDiagnosisConfirmMonth(datetimeArr[1]);
  511. supplement.setDiagnosisConfirmDay(datetimeArr[2]);
  512. }
  513. if (null != supplement.getStartIcuTime()) {
  514. Integer[] datetimeArr = getSplitDatetime(supplement.getStartIcuTime());
  515. supplement.setStartIcuYear(datetimeArr[0]);
  516. supplement.setStartIcuMonth(datetimeArr[1]);
  517. supplement.setStartIcuDay(datetimeArr[2]);
  518. supplement.setStartIcuHour(datetimeArr[3]);
  519. supplement.setStartIcuMinute(datetimeArr[4]);
  520. }
  521. if (null != supplement.getEndIcuTime()) {
  522. Integer[] datetimeArr = getSplitDatetime(supplement.getEndIcuTime());
  523. supplement.setEndIcuYear(datetimeArr[0]);
  524. supplement.setEndIcuMonth(datetimeArr[1]);
  525. supplement.setEndIcuDay(datetimeArr[2]);
  526. supplement.setEndIcuHour(datetimeArr[3]);
  527. supplement.setEndIcuMinute(datetimeArr[4]);
  528. }
  529. if (null != supplement.getStartEcmoTime()) {
  530. Integer[] datetimeArr = getSplitDatetime(supplement.getStartEcmoTime());
  531. supplement.setStartEcmoYear(datetimeArr[0]);
  532. supplement.setStartEcmoMonth(datetimeArr[1]);
  533. supplement.setStartEcmoDay(datetimeArr[2]);
  534. supplement.setStartEcmoHour(datetimeArr[3]);
  535. supplement.setStartEcmoMinute(datetimeArr[4]);
  536. }
  537. if (null != supplement.getEndEcmoTime()) {
  538. Integer[] datetimeArr = getSplitDatetime(supplement.getEndEcmoTime());
  539. supplement.setEndEcmoYear(datetimeArr[0]);
  540. supplement.setEndEcmoMonth(datetimeArr[1]);
  541. supplement.setEndEcmoDay(datetimeArr[2]);
  542. supplement.setEndEcmoHour(datetimeArr[3]);
  543. supplement.setEndEcmoMinute(datetimeArr[4]);
  544. }
  545. }
  546. private Integer[] getSplitDatetime(Date date) {
  547. String formatted = DateUtil.formatDatetime(date);
  548. String[] dateTime = formatted.split(" ");
  549. String[] dateArr = dateTime[0].split("-");
  550. String[] timeArr = dateTime[1].split(":");
  551. return new Integer[]{
  552. Integer.parseInt(dateArr[0]),
  553. Integer.parseInt(dateArr[1]),
  554. Integer.parseInt(dateArr[2]),
  555. Integer.parseInt(timeArr[0]),
  556. Integer.parseInt(timeArr[1])
  557. };
  558. }
  559. private void combineSeparatedTime(FrontSheetSupplement s) {
  560. Date diagConfirmDate = makeDateBySplitTime(s.getDiagnosisConfirmYear(),
  561. s.getDiagnosisConfirmMonth(), s.getDiagnosisConfirmDay(),
  562. null, null, "入院后确认日期。");
  563. if (null != diagConfirmDate) {
  564. s.setDiagnosisConfirmDate(diagConfirmDate);
  565. }
  566. Date startIcuTime = makeDateBySplitTime(s.getStartIcuYear(), s.getStartIcuMonth(),
  567. s.getStartIcuDay(), s.getStartIcuHour(), s.getStartIcuMinute(), "进入重症监护室时间。");
  568. s.setStartIcuTime(startIcuTime);
  569. Date endIcuTime = makeDateBySplitTime(s.getEndIcuYear(), s.getEndIcuMonth(),
  570. s.getEndIcuDay(), s.getEndIcuHour(), s.getEndIcuMinute(), "转出重症监护室时间。");
  571. s.setEndIcuTime(endIcuTime);
  572. Date startEcmoTime = makeDateBySplitTime(s.getStartEcmoYear(), s.getStartEcmoMonth(),
  573. s.getStartEcmoDay(), s.getStartEcmoHour(), s.getStartEcmoMinute(), "ECMO上机时间。");
  574. s.setStartEcmoTime(startEcmoTime);
  575. Date endEcmoTime = makeDateBySplitTime(s.getEndEcmoYear(), s.getEndEcmoMonth(),
  576. s.getEndEcmoDay(), s.getEndEcmoHour(), s.getEndEcmoMinute(), "ECMO撤机时间。");
  577. s.setEndEcmoTime(endEcmoTime);
  578. }
  579. private Date makeDateBySplitTime(Integer year, Integer month, Integer day,
  580. Integer hour, Integer minute, String tip) {
  581. if (null == year || null == month || null == day) {
  582. return null;
  583. }
  584. if (year > 9999 || year < 1 || month > 12 || month < 1 || day > 31 || day < 1) {
  585. throw new BizException(ExceptionEnum.INTERNAL_SERVER_ERROR, "请填写正确的 " + tip);
  586. }
  587. Calendar calendar = Calendar.getInstance();
  588. if (null == hour || null == minute) {
  589. calendar.set(year, month - 1, day);
  590. return calendar.getTime();
  591. }
  592. if (hour > 23 || hour < 0 || minute > 59 || minute < 0) {
  593. throw new BizException(ExceptionEnum.INTERNAL_SERVER_ERROR, "请填写正确的 " + tip);
  594. }
  595. calendar.set(year, month - 1, day, hour, minute);
  596. return calendar.getTime();
  597. }
  598. private List<CaseFrontsheetDisdiag> getSheetDisDiags(String bah, int times, int status) {
  599. List<CaseFrontsheetDisdiag> disdiags = status == State.FileStatus.SIGNED ?
  600. dao.selectSignedSheetDiags(bah, times) : dao.getDisdiags(bah, times);
  601. if (disdiags.isEmpty()) {
  602. JSONObject emrPatientData = emrService.getEmrPatientData(bah, times);
  603. JSONArray diagList;
  604. try {
  605. diagList = emrPatientData.getJSONArray("出院诊断");
  606. } catch (Exception e) {
  607. diagList = null;
  608. }
  609. if (null != diagList) {
  610. for (int i = 0; i < diagList.size(); i++) {
  611. JSONObject diagItem = diagList.getJSONObject(i);
  612. CaseFrontsheetDisdiag diag = dao.selectDiagInfoByCode(diagItem.getString("code"));
  613. if (null != diag) {
  614. diag.setNo(disdiags.size() + 1);
  615. disdiags.add(diag);
  616. }
  617. }
  618. }
  619. }
  620. while (disdiags.size() < 27) {
  621. disdiags.add(new CaseFrontsheetDisdiag());
  622. }
  623. return disdiags;
  624. }
  625. private List<CaseFrontsheetSurgery> getSheetSurgeries(String bah, int times, int status) {
  626. List<CaseFrontsheetSurgery> surgeries = status == State.FileStatus.SIGNED ?
  627. dao.selectSignedSheetSurgeries(bah, times) : dao.getSurgeries(bah, times);
  628. if (surgeries.isEmpty()) {
  629. JSONArray oprtList = emrService.getPatientSurgery(bah, times);
  630. for (int i = 0; i < oprtList.size(); i++) {
  631. JSONObject oprtItem = oprtList.getJSONObject(i);
  632. JSONObject oprtName;
  633. try {
  634. oprtName = oprtItem.getJSONObject("已行手术");
  635. } catch (Exception e) {
  636. continue;
  637. }
  638. if (null == oprtName) {
  639. continue;
  640. }
  641. JSONArray oprtNameVals = oprtName.getJSONArray("value");
  642. if (null == oprtNameVals) {
  643. continue;
  644. }
  645. String opdate = oprtItem.getJSONObject("手术日期").getString("value");
  646. JSONArray oprtorArr = oprtItem.getJSONObject("术者").getJSONArray("value");
  647. JSONObject oprtor = null == oprtorArr ? new JSONObject() : oprtorArr.getJSONObject(0);
  648. JSONObject assis1 = new JSONObject();
  649. JSONObject firstAssist = oprtItem.getJSONObject("第一助手");
  650. if (null != firstAssist) {
  651. JSONArray assis1Arr = firstAssist.getJSONArray("value");
  652. assis1 = null == assis1Arr ? assis1 : assis1Arr.getJSONObject(0);
  653. }
  654. JSONObject assis2 = new JSONObject();
  655. JSONObject secondAssist = oprtItem.getJSONObject("第二助手");
  656. if (null != secondAssist) {
  657. JSONArray assis2Arr = secondAssist.getJSONArray("value");
  658. assis2 = null == assis2Arr ? assis2 : assis2Arr.getJSONObject(0);
  659. }
  660. JSONObject anstor = new JSONObject();
  661. JSONObject anesDor = oprtItem.getJSONObject("麻醉医生");
  662. if (null != anesDor) {
  663. JSONArray anstorArr = anesDor.getJSONArray("value");
  664. anstor = null == anstorArr ? anstor : anstorArr.getJSONObject(0);
  665. }
  666. for (int j = 0; j < oprtNameVals.size(); j++) {
  667. JSONObject oprtCodeName = oprtNameVals.getJSONObject(j);
  668. CaseFrontsheetSurgery surgery = dao.selectSurgeryByCode(oprtCodeName.getString("code"));
  669. if (null != surgery) {
  670. surgery.setNo(surgeries.size() + 1);
  671. surgery.setDate(DateUtil.parse(opdate));
  672. surgery.setOperator(oprtor.getString("code"));
  673. surgery.setOperatorName(oprtor.getString("name"));
  674. surgery.setAssistantOne(assis1.getString("code"));
  675. surgery.setAssistantOneName(assis1.getString("name"));
  676. surgery.setAssistantTwo(assis2.getString("code"));
  677. surgery.setAssistantTwoName(assis2.getString("name"));
  678. surgery.setAnaesthesiaor(anstor.getString("code"));
  679. surgery.setAnaesthesiaorName(anstor.getString("name"));
  680. surgeries.add(surgery);
  681. }
  682. }
  683. }
  684. }
  685. while (surgeries.size() < 5) {
  686. surgeries.add(new CaseFrontsheetSurgery());
  687. }
  688. return surgeries;
  689. }
  690. private ResultVo<List<CodeName>> saveSheet(CaseFrontsheetMain sheet, String staffId) {
  691. String bah = sheet.getBah();
  692. int times = sheet.getAdmissTimes();
  693. if (StringUtil.notBlank(sheet.getSocialNo())) {
  694. sheet.setSocialNo(sheet.getSocialNo().toUpperCase());
  695. }
  696. combineSeparatedTime(sheet.getSupplement());
  697. dao.updateAPatientMi(sheet);
  698. Integer[] addrs = sheet.getStandardAddress();
  699. if (null != addrs && addrs.length > 0) {
  700. Integer province = addrs[0];
  701. Integer city = addrs.length > 1 ? addrs[1] : null;
  702. Integer district = addrs.length > 2 ? addrs[2] : null;
  703. dao.updateAddressCascader(bah, province, city, district);
  704. }
  705. dao.updateZyActPatient(bah, times, sheet.getAutopsy(), sheet.getDiagConform1(),
  706. sheet.getDiagConform2(), sheet.getDiagConform3(), sheet.getDiagConform4(),
  707. sheet.getDiagConform5(), sheet.getHasSurgery(), sheet.getPathologicDiagStr(),
  708. sheet.getPathologicDiagCode(), sheet.getClinicDiagCode(), sheet.getClinicDiagStr());
  709. dao.updateZyInActPatient(bah, times, sheet.getAutopsy(), sheet.getDiagConform1(), sheet.getDiagConform2(),
  710. sheet.getDiagConform3(), sheet.getDiagConform4(), sheet.getDiagConform5(), sheet.getHasSurgery(),
  711. sheet.getPathologicDiagStr(), sheet.getPathologicDiagCode(), sheet.getClinicDiagCode(), sheet.getClinicDiagStr());
  712. dao.updateBatjBa1(sheet);
  713. dao.updateBatjBa2(sheet);
  714. log.info("{}", sheet.getSupplement());
  715. dao.updateSheetSupplement(sheet.getSupplement());
  716. dao.deleteOldDisdiag(bah, times);
  717. if (!sheet.getDisdiagList().isEmpty()) {
  718. List<CaseFrontsheetDisdiag> diags = sheet.getDisdiagList();
  719. for (int i = 0; i < diags.size(); i++) {
  720. CaseFrontsheetDisdiag item = diags.get(i);
  721. if (StringUtil.isBlank(item.getCode())) {
  722. break;
  723. }
  724. item.setNo(i + 1);
  725. item.setBah(bah);
  726. item.setTimes(times);
  727. dao.writeNewDisdiag(item);
  728. }
  729. }
  730. dao.deleteOldSurgeryRecord(bah, times);
  731. if (!sheet.getSurgeryList().isEmpty()) {
  732. List<CaseFrontsheetSurgery> surgeries = sheet.getSurgeryList();
  733. for (int i = 0; i < surgeries.size(); i++) {
  734. CaseFrontsheetSurgery item = surgeries.get(i);
  735. if (StringUtil.isBlank(item.getCode())) {
  736. break;
  737. }
  738. if (null == item.getDate()) {
  739. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "手术日期不能为空!");
  740. }
  741. item.setNo(i + 1);
  742. item.setBah(bah);
  743. item.setTimes(times);
  744. item.setCut(FilterUtil.filterCut(item.getCutHeal()));
  745. item.setHeal(FilterUtil.filterHeal(item.getCutHeal()));
  746. dao.writeNewZySurgeryRecord(item);
  747. }
  748. }
  749. if (null != staffId) {
  750. dao.writeBaOpLog(1, staffId, bah, times);
  751. }
  752. return ResultVoUtil.success();
  753. }
  754. private ResultVo<List<CodeName>> archiveSheet(CaseFrontsheetMain sheet, String staffId) {
  755. String staff = TokenUtil.getInstance().getTokenUserId();
  756. List<Integer> roles = userDao.getUserRoles(staff);
  757. if (!roles.contains(7) && !roles.contains(1)) {
  758. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "您没有签收首页的权限。");
  759. }
  760. String bah = sheet.getBah();
  761. int times = sheet.getAdmissTimes();
  762. Date firstSignDate = dao.selectFirstSignDate(bah, times);
  763. sheet.setSignDate(null == firstSignDate ? new Date() : firstSignDate);
  764. sheet.setUnsignDate(null);
  765. sheet.setSignStaff(staff);
  766. sheet.setFileStatus(State.FileStatus.SIGNED);
  767. //判断是否已经签收过了
  768. Integer fileStatus = dao.selectFileStatus(sheet.getBah(), sheet.getAdmissTimes());
  769. if (!Objects.equals(fileStatus, State.FileStatus.SIGNED)) {
  770. if (null == sheet.getLateFlag()) {
  771. sheet.setLateFlag(calculateLateState(sheet.getDismissDate()));
  772. }
  773. fillMajorErrorFlags(sheet);
  774. insertSheetData(sheet);
  775. basDao.updateActFileStatus(bah, times, State.FileStatus.SIGNED);
  776. dao.writeBaOpLog(2, staffId, bah, times);
  777. return ResultVoUtil.success();
  778. }
  779. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请勿重复签收。");
  780. }
  781. private void fillMajorErrorFlags(CaseFrontsheetMain sheet) {
  782. List<String> majorErrors = basDao.getMajorErrors(sheet.getBah(), sheet.getAdmissTimes());
  783. if (majorErrors.isEmpty()) {
  784. return;
  785. }
  786. for (String majorError : majorErrors) {
  787. if (majorError.contains("主要诊断填写错误")) {
  788. sheet.setMaindiagInputErr(1);
  789. }
  790. if (majorError.contains("主要诊断编码错误")) {
  791. sheet.setMaindiagCodeErr(1);
  792. }
  793. if (majorError.contains("主要手术填写错误")) {
  794. sheet.setMainsurgInputErr(1);
  795. }
  796. if (majorError.contains("主要手术编码错误")) {
  797. sheet.setMainsurgCodeErr(1);
  798. }
  799. }
  800. }
  801. public void insertSheetData(CaseFrontsheetMain sheet) {
  802. if (null == sheet.getSignStaff()) {
  803. sheet.setSignStaff(dao.selectSignStaff(sheet.getBah(), sheet.getAdmissTimes()));
  804. }
  805. if (StringUtil.notBlank(sheet.getBirthPlace()) &&
  806. StringUtil.isBlank(sheet.getBirthPlaceName())) {
  807. String bpName = dao.getDistrictName(sheet.getBirthPlace());
  808. if (StringUtil.isBlank(bpName)) {
  809. bpName = sheet.getBirthPlace();
  810. }
  811. sheet.setBirthPlaceName(bpName);
  812. }
  813. dao.deleteOldSheet(sheet.getBah(), sheet.getAdmissTimes());
  814. //在t_case_frontsheet_main表中插入 主体的内容
  815. dao.insert(sheet);
  816. //循环插主要的诊断
  817. QueryWrapper<CaseFrontsheetDisdiag> diagWrapper = new QueryWrapper<>();
  818. diagWrapper.eq("bah", sheet.getBah());
  819. diagWrapper.eq("times", sheet.getAdmissTimes());
  820. createdDao.delete(diagWrapper);
  821. for (CaseFrontsheetDisdiag caseFrontsheetDisdiag : sheet.getDisdiagList()) {
  822. caseFrontsheetDisdiag.setBah(sheet.getBah());
  823. caseFrontsheetDisdiag.setTimes(sheet.getAdmissTimes());
  824. if (caseFrontsheetDisdiag.getNo() != null) {
  825. createdDao.insert(caseFrontsheetDisdiag);
  826. }
  827. }
  828. //循环插入做过的手术
  829. QueryWrapper<CaseFrontsheetSurgery> surgeryWrapper = new QueryWrapper<>();
  830. surgeryWrapper.eq("bah", sheet.getBah());
  831. surgeryWrapper.eq("times", sheet.getAdmissTimes());
  832. basDao.delete(surgeryWrapper);
  833. for (CaseFrontsheetSurgery caseFrontsheetSurgery : sheet.getSurgeryList()) {
  834. caseFrontsheetSurgery.setBah(sheet.getBah());
  835. caseFrontsheetSurgery.setTimes(sheet.getAdmissTimes());
  836. if (caseFrontsheetSurgery.getNo() != null) {
  837. basDao.insert(caseFrontsheetSurgery);
  838. }
  839. }
  840. }
  841. @Transactional(rollbackFor = Exception.class)
  842. public synchronized ResultVo<String> unArchiveSheet(OpCaseFrontsheet param) {
  843. CaseFrontsheetMain sheet = param.getSheet();
  844. if (sheet.getFileStatus() == State.FileStatus.UNSIGNED) {
  845. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未签收的病案首页无需解除签收!");
  846. }
  847. dao.updateSignStateToUnsigned(sheet.getBah(), sheet.getAdmissTimes());
  848. log.info("解除签收状态, 操作员:{} >>> 住院号:{}, 住院次数:{}",
  849. param.getStaffId(), sheet.getBah(), sheet.getAdmissTimes());
  850. dao.writeBaOpLog(param.getOpType(), param.getStaffId(), sheet.getBah(), sheet.getAdmissTimes());
  851. log.info("写入病案操作日志, 操作员:{} >>> 住院号:{}, 住院次数:{}, 操作编码:{}",
  852. param.getStaffId(), sheet.getBah(), sheet.getAdmissTimes(), param.getOpType());
  853. return ResultVoUtil.success("已成功解除签收。");
  854. }
  855. private JSONObject powersiQualityCheck(CaseFrontsheetMain sheet) {
  856. JSONObject obj = new JSONObject();
  857. obj.put("functionId", "100138");
  858. JSONObject baseinfo = new JSONObject();
  859. baseinfo.put("name", sheet.getName());
  860. baseinfo.put("age", sheet.getAge());
  861. baseinfo.put("sex_id", sheet.getSex());
  862. Integer agedays = sheet.getAgeDays();
  863. baseinfo.put("nwb_age", agedays);
  864. baseinfo.put("out_hosp_id", FilterUtil.filterDismissWay(sheet.getZyDismissWay()));
  865. baseinfo.put("is_autopsy_id", sheet.getAutopsy());
  866. JSONObject inputParam = new JSONObject();
  867. inputParam.put("baseInfo", baseinfo);
  868. JSONArray hsptzdDagnsInfo = new JSONArray();
  869. for (CaseFrontsheetDisdiag diag : sheet.getDisdiagList()) {
  870. if (null == diag.getNo()) {
  871. break;
  872. }
  873. JSONObject itm = new JSONObject();
  874. itm.put("icd_code", diag.getCode());
  875. itm.put("dagns_type", diag.getNo() == 1 ? 1 : 2);
  876. itm.put("disease_name", diag.getName());
  877. itm.put("order", diag.getNo());
  878. hsptzdDagnsInfo.add(itm);
  879. }
  880. inputParam.put("hsptzdDagnsInfo", hsptzdDagnsInfo);
  881. JSONArray hsptzdOprtInfo = new JSONArray();
  882. for (CaseFrontsheetSurgery surgery : sheet.getSurgeryList()) {
  883. if (null == surgery.getNo()) {
  884. break;
  885. }
  886. JSONObject itm = new JSONObject();
  887. itm.put("oprt_code", surgery.getCode());
  888. itm.put("oprt_name", surgery.getName());
  889. itm.put("oprt_type", surgery.getNo() == 1 ? 1 : 2);
  890. itm.put("order", surgery.getNo());
  891. hsptzdOprtInfo.add(itm);
  892. }
  893. inputParam.put("hsptzdOprtInfo", hsptzdOprtInfo);
  894. obj.put("inputParam", inputParam);
  895. try {
  896. JSONObject result = srvc.setlQualityControl(obj);
  897. log.info("\n病案质控接口:\n参数:{}\n结果:{}", obj, result);
  898. return result;
  899. } catch (Exception e) {
  900. log.error("创智诊断校验访问失败:http://172.16.32.183:8917/mmg-transceiver/interfaceFactory/call");
  901. return null;
  902. }
  903. }
  904. public ResultVo<Map<String, List<CodeName>>> printVerification(OpCaseFrontsheet param) {
  905. CaseFrontsheetMain sheet = param.getSheet();
  906. Integer status = dao.selectFileStatus(sheet.getBah(), sheet.getAdmissTimes());
  907. if (null != status && status == State.FileStatus.SIGNED) {
  908. List<Integer> roles = dao.getUserRoles(param.getStaffId());
  909. if (roles.contains(60)) {
  910. return ResultVoUtil.success();
  911. }
  912. if (!roles.contains(7)) {
  913. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "已最终归档病案首页无法进行此操作!");
  914. }
  915. }
  916. sheet.setIsDoctorPrint(true);
  917. sheet.setAddressMember(getStandardAddress(sheet.getStandardAddress()));
  918. ResultVo<List<CodeName>> save = saveSheet(sheet, TokenUtil.getInstance().getTokenUserId());
  919. if (!Objects.equals(save.getCode(), ExceptionEnum.SUCCESS.getCode())) {
  920. Map<String, List<CodeName>> map = new HashMap<>();
  921. map.put("force", save.getData());
  922. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "校验未通过。", map);
  923. }
  924. Map<String, List<CodeName>> warnings = beginAnalyzeSheet(sheet);
  925. if (warnings.get("force").isEmpty()) {
  926. if (warnings.get("advice").isEmpty()) {
  927. return ResultVoUtil.success();
  928. }
  929. }
  930. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "校验未通过。", warnings);
  931. }
  932. public ResultVo<List<CodeName>> saveVerify(OpCaseFrontsheet info) {
  933. CaseFrontsheetMain sheet = info.getSheet();
  934. Integer status = dao.selectFileStatus(sheet.getBah(), sheet.getAdmissTimes());
  935. if (null != status && status == State.FileStatus.SIGNED) {
  936. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "已签收的病案首页无法保存,如需保存,请联系病案室对此病案解除签收。");
  937. }
  938. sheet.setAddressMember(getStandardAddress(sheet.getStandardAddress()));
  939. sheet.getSurgeryList().forEach(item -> {
  940. if (StringUtil.notBlank(item.getCode())) {
  941. item.setType(dao.selectOperationType(item.getCode()));
  942. }
  943. });
  944. if (info.getOpType() == 2) {
  945. return archiveSheet(sheet, info.getStaffId());
  946. }
  947. List<CodeName> message = VerifyCaseFrontSheet.getInstance().saveVerify(sheet);
  948. if (message.isEmpty()) {
  949. if (!sheet.getDisdiagList().isEmpty()) {
  950. sheet.setMainDisdiagStatus(sheet.getDisdiagList().get(0).getDismissStatus());
  951. }
  952. return saveSheet(sheet, info.getStaffId());
  953. }
  954. return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "校验未通过。", message);
  955. }
  956. private Map<String, List<CodeName>> beginAnalyzeSheet(CaseFrontsheetMain sheet) {
  957. sheet.getSurgeryList().forEach(item -> {
  958. if (StringUtil.notBlank(item.getCode())) {
  959. item.setType(dao.selectOperationType(item.getCode()));
  960. }
  961. });
  962. List<CodeName> force = VerifyCaseFrontSheet.getInstance().printVerify(sheet);
  963. CaseFrontsheetDisdiag disdiag = sheet.getDisdiagList().get(0);
  964. List<CodeName> advice = VerifyCaseFrontSheet
  965. .getInstance()
  966. .adviseVerification(sheet.getSocialNo(), sheet.getBirthDate(), disdiag.getCode() , sheet.getAge() , sheet.getMarriage());
  967. setlQualityControlPass(sheet, advice);
  968. surgeryChargesVerify(sheet, advice);
  969. JSONObject powersi = powersiQualityCheck(sheet);
  970. if (null != powersi) {
  971. JSONObject responseEntity = powersi.getJSONObject("responseEntity");
  972. if (null != responseEntity) {
  973. JSONArray retarr = responseEntity.getJSONArray("newSettleMemInfo");
  974. if (null != retarr && !retarr.isEmpty()) {
  975. for (int i = 0; i < retarr.size(); i++) {
  976. advice.add(new CodeName("", retarr.getJSONObject(i).getString("result_msg")));
  977. }
  978. }
  979. }
  980. }
  981. Map<String, List<CodeName>> map = new HashMap<>();
  982. map.put("force", force);
  983. map.put("advice", advice);
  984. return map;
  985. }
  986. public ResultVo<Map<String, List<CodeName>>> sheetVerification(SheetOverview view) {
  987. if (StringUtil.isBlank(view.getBah()) || null == view.getTimes() || null == view.getInOutFlag()) {
  988. return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "住院号、住院次数、在院状态不能为空。");
  989. }
  990. CaseFrontsheetMain sheet = getPatientInfo(view);
  991. if (null == sheet) {
  992. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有查询到病案数据。");
  993. }
  994. Map<String, List<CodeName>> warnings = beginAnalyzeSheet(sheet);
  995. List<CodeName> forces = warnings.get("force");
  996. if (view.getInOutFlag() == 1) {
  997. forces.removeIf(item -> Objects.equals(item.getCode(), "dismissDate"));
  998. forces.removeIf(item -> Objects.equals(item.getCode(), "pathologicDiagCode"));
  999. }
  1000. return ResultVoUtil.success(warnings);
  1001. }
  1002. public ResultVo<List<YiBaoDisdiag>> getYbDiags(String bah, int times) {
  1003. List<YiBaoDisdiag> diags = dao.getYbDiags(bah, times);
  1004. return ResultVoUtil.success(diags);
  1005. }
  1006. @Transactional
  1007. public ResultVo<String> saveYbDiags(SaveYbDiag param) {
  1008. dao.deleteOldYbDiag(param.getBah(), param.getTimes());
  1009. List<String> diagCodes = new ArrayList<>();
  1010. for (int i = 0; i < param.getYbDiags().size(); i++) {
  1011. YiBaoDisdiag diag = param.getYbDiags().get(i);
  1012. if (StringUtil.isBlank(diag.getCode())) {
  1013. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "【诊断序号:" + diag.getNo() + "】诊断编码不能为空!");
  1014. }
  1015. if (StringUtil.isBlank(diag.getName())) {
  1016. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "【诊断序号:" + diag.getNo() + "】诊断名称不能为空!");
  1017. }
  1018. if (StringUtil.isBlank(diag.getCyzg())) {
  1019. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "【诊断序号:" + diag.getNo() + "】出院转归不能为空!");
  1020. }
  1021. if (null == diag.getSiDiagType()) {
  1022. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "【诊断序号:" + diag.getNo() + "】诊断类别不能为空!");
  1023. }
  1024. if (diagCodes.contains(diag.getCode())) {
  1025. return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "【诊断编码:" + diag.getCode() + "】请勿填入重复的诊断!");
  1026. }
  1027. diagCodes.add(diag.getCode());
  1028. diag.setNo(i + 1);
  1029. diag.setBah(param.getBah());
  1030. diag.setTimes(param.getTimes());
  1031. dao.insertNewYbDiag(diag);
  1032. }
  1033. return ResultVoUtil.success();
  1034. }
  1035. public ResultVo<List<SheetOverview>> advanceSearch(AdvanceSearch param) {
  1036. return ResultVoUtil.success(dao.advanceSearch(param));
  1037. }
  1038. public ResultVo<String> fetchSsfz(String code, String bah, Integer times) {
  1039. DisefamilyGrade disefamilyGrade = dao.selectDisefamilyGrade(code);
  1040. if (null == disefamilyGrade) {
  1041. return ResultVoUtil.success("无对照的病种。");
  1042. }
  1043. boolean hasModified = dao.selectModified(bah, times) > 0;
  1044. List<String> surgeries = hasModified ? dao.selectPatientSurgeryCodes(bah, times, "batj_ba4_modify")
  1045. : dao.selectPatientSurgeryCodes(bah, times, "batj_ba4");
  1046. if (ListUtil.isBlank(surgeries)) {
  1047. return ResultVoUtil.success("有对照的非手术分值:" + disefamilyGrade.getNoneOprnGrade());
  1048. }
  1049. List<OprnDisefamilyGrade> oprnGrades = dao.selectOperationDisefamilies(disefamilyGrade.getDisefamilyCode());
  1050. int ssfz = 0;
  1051. for (OprnDisefamilyGrade oprn : oprnGrades) {
  1052. if (surgeries.contains(oprn.getOprnCode())) {
  1053. if (oprn.getOprnGrade() > ssfz) {
  1054. ssfz = oprn.getOprnGrade();
  1055. }
  1056. }
  1057. }
  1058. if (ssfz != 0) {
  1059. return ResultVoUtil.success("有对照的手术分值:" + ssfz);
  1060. }
  1061. return ResultVoUtil.success("有对照的非手术分值:" + disefamilyGrade.getNoneOprnGrade());
  1062. }
  1063. private Integer calculateLateState(Date dismissDate) {
  1064. long days = (System.currentTimeMillis() - dismissDate.getTime()) / 1000 / (3600 * 24);
  1065. return (int) days > 6 ? State.LateFlag.LATE : State.LateFlag.NOT_LATE;
  1066. }
  1067. public void increaseDiagWeight(String code) {
  1068. dao.increaseDiagWeight(code);
  1069. }
  1070. public ResultVo<CodeName> selectSiDiagByBaDiag(String code) {
  1071. CodeName result = dao.selectSiDiagByBaDiag(code);
  1072. if (null == result) {
  1073. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有查询到此诊断的医保对照诊断。");
  1074. }
  1075. return ResultVoUtil.success(result);
  1076. }
  1077. private StandardAddressMember getStandardAddress(Integer[] addrs) {
  1078. if (null == addrs || addrs.length < 3) {
  1079. return null;
  1080. }
  1081. return dao.selectStandardAddressMember2(addrs[0], addrs[1], addrs[2]);
  1082. }
  1083. private void setlQualityControlPass(CaseFrontsheetMain sheet, List<CodeName> messages) {
  1084. String patNo = sheet.getBah();
  1085. int times = sheet.getAdmissTimes();
  1086. String admdvs = dao.selectSetlInsuplcAdmdvs(patNo, times);
  1087. if (StringUtil.notBlank(admdvs) && admdvs.startsWith("43")) {
  1088. Integer qualityPassed = dao.qualityPass(patNo, times);
  1089. if (null == qualityPassed || qualityPassed != 1) {
  1090. messages.add(new CodeName("", "此患者医保结算清单质控未通过!"));
  1091. }
  1092. }
  1093. }
  1094. private void surgeryChargesVerify(CaseFrontsheetMain sheet, List<CodeName> messages) {
  1095. List<CaseFrontsheetSurgery> surgeries = sheet.getSurgeryList();
  1096. if (null != surgeries && !surgeries.isEmpty()) {
  1097. List<HisWjwMatchEntity> surgeryChargeCode = dao.selectSurgeryChargeCode(surgeries);
  1098. for (HisWjwMatchEntity entity : surgeryChargeCode) {
  1099. if (StringUtil.notBlank(entity.getWjwCode())) {
  1100. entity.setChargeCode(entity.getWjwCode().split("\\^"));
  1101. entity.setChargeName(entity.getWjwName().split("\\^"));
  1102. Integer chargeSumamt = dao.selectChargeSumamt(sheet.getBah(), sheet.getAdmissTimes(), entity.getChargeCode());
  1103. if (null == chargeSumamt || chargeSumamt < 1) {
  1104. String charges = entity.getWjwName().replaceAll("\\^", ",");
  1105. messages.add(new CodeName("surgeryTable", "患者有手术【" + entity.getName() +
  1106. "】,但没有找到对应的收费项目【" + charges + "】。"));
  1107. }
  1108. }
  1109. }
  1110. }
  1111. }
  1112. public ResultVo<String> frontsheetQualityCheck(CaseFrontsheetMain sheet) {
  1113. List<CodeName> anstWays = dao.selectZdAnstWays();
  1114. Map<String, CodeName> anstWaysMap = new HashMap<>();
  1115. for (CodeName item : anstWays) {
  1116. anstWaysMap.put(item.getCode(), item);
  1117. }
  1118. List<CodeName> countries = dao.selectZdCountries();
  1119. Map<String, CodeName> countriesMap = new HashMap<>();
  1120. for (CodeName item : countries) {
  1121. countriesMap.put(item.getCode(), item);
  1122. }
  1123. List<CodeName> nations = dao.selectZdNations();
  1124. Map<String, CodeName> nationsMap = new HashMap<>();
  1125. for (CodeName item : nations) {
  1126. nationsMap.put(item.getCode(), item);
  1127. }
  1128. QualityCheckParams params = new QualityCheckParams();
  1129. params.setBaseInfo(FrontSheetUtil.fillBaseInfoFromSheet(sheet, countriesMap, nationsMap));
  1130. params.setDiseInfoList(FrontSheetUtil.fillDiseInfoFromSheet(sheet.getDisdiagList()));
  1131. params.setOprtInfoList(FrontSheetUtil.fillOprtInfoFromSheet(sheet.getSurgeryList(), anstWaysMap));
  1132. JSONObject jsonParams = JSONObject.parseObject(JSON.toJSONString(params, SerializerFeature.WriteNullStringAsEmpty));
  1133. return drgWebApi.frontsheetQualityCheck(jsonParams);
  1134. }
  1135. public ResultVo<String> isMedinsSetl(String patNo, Integer times) {
  1136. String admdvs = dao.selectSetlInsuplcAdmdvs(patNo, times);
  1137. if (StringUtil.isBlank(admdvs)) {
  1138. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "自费及工伤患者无需进行医保结算单质控。");
  1139. }
  1140. if (!admdvs.startsWith("43")) {
  1141. return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "跨省异地患者无需进行医保结算单质控。");
  1142. }
  1143. return ResultVoUtil.success();
  1144. }
  1145. public String markDuplicate(MarkStateRequest request) {
  1146. Integer fileStatus = dao.selectFileStatus(request.getBah(), request.getTimes());
  1147. if (null == fileStatus || fileStatus == State.FileStatus.UNSIGNED) {
  1148. return "未签收的病案不可标记复印。";
  1149. }
  1150. if (StringUtil.isBlank(request.getVisitStaff())) {
  1151. return "请填写来访人员。";
  1152. }
  1153. request.setOpStaff(TokenUtil.getInstance().getTokenUserId());
  1154. int insert = dao.executeDuplicate(request);
  1155. if (insert == 0) {
  1156. return "操作失败,无法向数据库插入记录。";
  1157. }
  1158. return "OK";
  1159. }
  1160. public String markClosedown(MarkStateRequest request) {
  1161. Integer fileStatus = dao.selectFileStatus(request.getBah(), request.getTimes());
  1162. if (null == fileStatus || fileStatus == State.FileStatus.UNSIGNED) {
  1163. return "未签收的病案不可标记封存。";
  1164. }
  1165. if (StringUtil.isBlank(request.getVisitStaff())) {
  1166. return "请填写来访人员。";
  1167. }
  1168. request.setOpStaff(TokenUtil.getInstance().getTokenUserId());
  1169. int insert = dao.executeClosedown(request);
  1170. if (insert == 0) {
  1171. return "操作失败,无法向数据库插入记录。";
  1172. }
  1173. return "OK";
  1174. }
  1175. public MarkStateRequest getMarkStateDetail(String bah, int times, String type) {
  1176. if (type.equals("DUPLICATE")) {
  1177. return dao.selectExistRequest(bah, times);
  1178. }
  1179. return dao.selectExistRequest2(bah, times);
  1180. }
  1181. public Map<String, List<SheetOverview>> signedByDateCount(String signDate) {
  1182. String start = signDate + " 00:00:00.000";
  1183. String end = signDate + " 23:59:59.999";
  1184. List<SheetOverview> list = dao.signedListByDate(start, end);
  1185. Map<String, List<SheetOverview>> map = new HashMap<>();
  1186. for (SheetOverview overview : list) {
  1187. String key = overview.getSignStaff() + "-" + overview.getSignStaffName();
  1188. if (map.containsKey(key)) {
  1189. map.get(key).add(overview);
  1190. } else {
  1191. List<SheetOverview> tempList = new ArrayList<>();
  1192. tempList.add(overview);
  1193. map.put(key, tempList);
  1194. }
  1195. }
  1196. return map;
  1197. }
  1198. public List<SheetOverview> getSheetsForAutoSign() {
  1199. return dao.selectSheetsForAutoSign();
  1200. }
  1201. public String printVerifyForAutoSign(CaseFrontsheetMain sheet) {
  1202. Integer status = dao.selectFileStatus(sheet.getBah(), sheet.getAdmissTimes());
  1203. if (null != status && status == State.FileStatus.SIGNED) {
  1204. return "OK";
  1205. }
  1206. sheet.setAddressMember(getStandardAddress(sheet.getStandardAddress()));
  1207. ResultVo<List<CodeName>> save = saveSheet(sheet, null);
  1208. if (!Objects.equals(save.getCode(), ExceptionEnum.SUCCESS.getCode())) {
  1209. return "校验未通过。";
  1210. }
  1211. Map<String, List<CodeName>> warnings = beginAnalyzeSheet(sheet);
  1212. if (warnings.get("force").isEmpty()) {
  1213. return "OK";
  1214. }
  1215. return "校验未通过。";
  1216. }
  1217. public void autoSign(CaseFrontsheetMain sheet) {
  1218. String bah = sheet.getBah();
  1219. int times = sheet.getAdmissTimes();
  1220. insertSheetData(sheet);
  1221. basDao.updateActFileStatus(bah, times, State.FileStatus.SIGNED);
  1222. }
  1223. public List<SheetOverview> getSimpleSheetForLendOut(String bah) {
  1224. return dao.getSimpleSheetForLendOut(bah);
  1225. }
  1226. public String doLendOut(LendOutRequest request) {
  1227. if (StringUtil.isBlank(request.getLendStaff())) {
  1228. return "借阅人不能为空。";
  1229. }
  1230. if (StringUtil.isBlank(request.getRemark())) {
  1231. return "备注不能为空。";
  1232. }
  1233. if (null == request.getList() || request.getList().isEmpty()) {
  1234. return "借阅病案不能为空。";
  1235. }
  1236. request.setOpStaff(TokenUtil.getInstance().getTokenUserId());
  1237. int insert = dao.insertLendOutInfo(request);
  1238. if (insert == 0) {
  1239. return "借阅记录失败。";
  1240. }
  1241. return "OK";
  1242. }
  1243. public List<LendOutSheet> getLendOutSheets() {
  1244. return dao.selectLendOutSheets();
  1245. }
  1246. public String returnLendOutSheet(Integer id) {
  1247. int update = dao.returnSheet(id);
  1248. if (update == 0) {
  1249. return "归还失败,请稍后重试。";
  1250. }
  1251. return "OK";
  1252. }
  1253. public LendOutRequest getLendOutDetail(String bah, int times) {
  1254. return dao.selectExistLendOut(bah, times);
  1255. }
  1256. public List<BaOpLog> getBaOpLogs(String bah, Integer times) {
  1257. return basDao.getBaOpLogs(bah, times);
  1258. }
  1259. }