ChargeFeeVoController.java 87 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755
  1. package cn.hnthyy.thmz.controller.mz;
  2. import cn.hnthyy.thmz.Utils.*;
  3. import cn.hnthyy.thmz.comment.UserLoginToken;
  4. import cn.hnthyy.thmz.common.Constants;
  5. import cn.hnthyy.thmz.entity.MzException;
  6. import cn.hnthyy.thmz.entity.his.mz.*;
  7. import cn.hnthyy.thmz.entity.his.zd.ZdChequeType;
  8. import cn.hnthyy.thmz.entity.his.zy.ZyZdAuditItem;
  9. import cn.hnthyy.thmz.entity.thmz.FileUpload;
  10. import cn.hnthyy.thmz.entity.thmz.Mzmxsr;
  11. import cn.hnthyy.thmz.entity.thmz.User;
  12. import cn.hnthyy.thmz.enums.FileTypeEnum;
  13. import cn.hnthyy.thmz.enums.PayMarkEnum;
  14. import cn.hnthyy.thmz.enums.YesNoEnum;
  15. import cn.hnthyy.thmz.service.his.RegionService;
  16. import cn.hnthyy.thmz.service.his.mz.*;
  17. import cn.hnthyy.thmz.service.his.zd.ZdChequeTypeService;
  18. import cn.hnthyy.thmz.service.his.zd.ZdUnitCodeService;
  19. import cn.hnthyy.thmz.service.his.zy.ZyZdAuditItemService;
  20. import cn.hnthyy.thmz.service.thmz.ClinicService;
  21. import cn.hnthyy.thmz.service.thmz.FileUploadService;
  22. import cn.hnthyy.thmz.service.thmz.MzmxsrService;
  23. import cn.hnthyy.thmz.service.thmz.UserService;
  24. import cn.hnthyy.thmz.vo.*;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.apache.commons.lang3.time.DateUtils;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.web.bind.annotation.*;
  30. import javax.servlet.http.HttpServletRequest;
  31. import javax.servlet.http.HttpServletResponse;
  32. import java.math.BigDecimal;
  33. import java.math.RoundingMode;
  34. import java.text.ParseException;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. @Slf4j
  38. @RestController
  39. public class ChargeFeeVoController {
  40. @Autowired
  41. private ChargeFeeVoService chargeFeeVoService;
  42. @Autowired
  43. private ZdUnitCodeService zdUnitCodeService;
  44. @Autowired
  45. private MzyZdChargeTypeService mzyZdChargeTypeService;
  46. @Autowired
  47. private ZdChequeTypeService zdChequeTypeService;
  48. @Autowired
  49. private EmployeeService employeeService;
  50. @Autowired
  51. private UserService userService;
  52. @Autowired
  53. private MzBillItemService mzBillItemService;
  54. @Autowired
  55. private MzPatientMiService mzPatientMiService;
  56. @Autowired
  57. private MzmxsrService mzmxsrService;
  58. @Autowired
  59. private MzReceiptSerialService mzReceiptSerialService;
  60. @Autowired
  61. private FileUploadService fileUploadService;
  62. @Autowired
  63. private MzZyReqService mzZyReqService;
  64. @Autowired
  65. private MzZdCommonService mzZdCommonService;
  66. @Autowired
  67. private ZyZdAuditItemService zyZdAuditItemService;
  68. @Autowired
  69. private RegionService regionService;
  70. @Autowired
  71. private ClinicService clinicService;
  72. /**
  73. * 查询日结列表收费清单 未结账
  74. *
  75. * @return
  76. */
  77. @UserLoginToken
  78. @RequestMapping(value = "/getChargeFeeVoUnAccount", method = {RequestMethod.GET, RequestMethod.POST})
  79. public Map<String, Object> getChargeFeeVoUnAccount(HttpServletRequest httpServletRequest) {
  80. Map<String, Object> resultMap = new HashMap<>();
  81. try {
  82. User tokenUser = TokenUtil.getUser(httpServletRequest);
  83. resultMap.put("code", 0);
  84. resultMap.put("message", "查询日结列表收费清单成功");
  85. List<ChargeFeeVo> chargeFeeVos = chargeFeeVoService.queryChargeFeeVoUnAccount(tokenUser.getUserIdCode());
  86. fomartChargeVo(chargeFeeVos, YesNoEnum.NO,YesNoEnum.YES);
  87. resultMap.put("data", chargeFeeVos);
  88. return resultMap;
  89. } catch (MzException e) {
  90. log.error("查询日结列表收费清单失败,错误信息{}", e);
  91. resultMap.put("code", -1);
  92. resultMap.put("message", "查询日结列表收费清单失败");
  93. return resultMap;
  94. } catch (Exception e) {
  95. e.printStackTrace();
  96. log.error("查询日结列表收费清单失败,错误信息{}", e);
  97. resultMap.put("code", -1);
  98. resultMap.put("message", "查询日结列表收费清单失败");
  99. return resultMap;
  100. }
  101. }
  102. /**
  103. *
  104. * @param chargeFeeVos
  105. * @param fitEmpName 是否设置医生名称
  106. * @param fitPatientInfo 是否设置患者信息
  107. */
  108. private void fomartChargeVo(List<ChargeFeeVo> chargeFeeVos, YesNoEnum fitEmpName,YesNoEnum fitPatientInfo) {
  109. if (chargeFeeVos != null && chargeFeeVos.size() > 0) {
  110. List<ZdChequeType> chequeTypes = zdChequeTypeService.queryAllZdChequeType();
  111. Map<String, String> employeeMap = null;
  112. if (YesNoEnum.YES.equals(fitEmpName)) {
  113. Set<String> opIds = chargeFeeVos.stream().filter(u -> StringUtils.isNotBlank(u.getOpId())).map(u -> u.getOpId()).collect(Collectors.toSet());
  114. if (opIds != null) {
  115. List<Employee> employees = employeeService.queryByCodes(new ArrayList<>(opIds));
  116. if (employees != null) {
  117. employeeMap = employees.stream().collect(Collectors.toMap(Employee::getEmployeeCode, Employee::getEmployeeName));
  118. }
  119. }
  120. }
  121. Map<String, String> chequeTypeMap = chequeTypes.stream().collect(Collectors.toMap(ZdChequeType::getCode, ZdChequeType::getName));
  122. Map<String, String> regionMap=null;
  123. StringBuffer sbf =null;
  124. Map<String, MzPatientMi> mzPatientMiMap = null;
  125. if(YesNoEnum.YES.equals(fitPatientInfo)){
  126. regionMap = regionService.queryAll().stream().collect(Collectors.toMap(CodeNameEntity::getCode, CodeNameEntity::getName));
  127. sbf = new StringBuffer();
  128. Set<String> patientIdSet= chargeFeeVos.stream().map(ChargeFeeVo::getPatientId).collect(Collectors.toSet());
  129. List<String> patientIds = new ArrayList<>(patientIdSet);
  130. List<MzPatientMi> mzPatientMis=mzPatientMiService.queryByPatientIds(patientIds);
  131. if (mzPatientMis != null) {
  132. mzPatientMiMap = mzPatientMis.stream().collect(Collectors.toMap(MzPatientMi::getPatientId, mzPatientMi -> mzPatientMi));
  133. }
  134. }
  135. for (ChargeFeeVo co : chargeFeeVos) {
  136. PayMarkEnum payMark = PayMarkEnum.getPayMarkByCode(co.getPayMark());
  137. co.setPayMark(payMark == null ? co.getPayMark() : payMark.name);
  138. if (Constants.BRZZJF_CODE.equalsIgnoreCase(co.getOpId())) {
  139. if (Constants.WX.equalsIgnoreCase(co.getChequeType()) || Constants.BYJZ.equalsIgnoreCase(co.getChequeType())) {
  140. co.setChequeType(Constants.ZZWX);
  141. } else if (Constants.ZFB.equalsIgnoreCase(co.getChequeType())) {
  142. co.setChequeType(Constants.ZZZFB);
  143. }
  144. }
  145. co.setChequeType(chequeTypeMap.get(co.getChequeType()));
  146. if (YesNoEnum.YES.equals(fitEmpName)) {
  147. co.setOpId(employeeMap.get(co.getOpId()));
  148. }
  149. if (mzPatientMiMap != null) {
  150. MzPatientMi mzPatientMi = mzPatientMiMap.get(co.getPatientId());
  151. if(mzPatientMi==null){
  152. continue;
  153. }
  154. mzPatientMi.setFullAddress(regionMap,sbf);
  155. co.setAddress(mzPatientMi.getAddress());
  156. co.setPatientName(mzPatientMi.getName());
  157. }
  158. }
  159. }
  160. }
  161. // private User getUser(HttpServletRequest httpServletRequest) throws MzException {
  162. // String token = TokenUtil.getToken(httpServletRequest);
  163. // if (StringUtils.isBlank(token)) {
  164. // throw new MzException("业务处理失败,用户Token不存在");
  165. // }
  166. // DecodedJWT decodedJWT = TokenUtil.parseJWT(token);
  167. // return (User) JsonUtil.jsontoObject(decodedJWT.getSubject(), User.class);
  168. // }
  169. /**
  170. * 日结汇总的收费清单
  171. *
  172. * @return
  173. */
  174. @UserLoginToken
  175. @RequestMapping(value = "/getChargeFeeVoCollect", method = {RequestMethod.GET, RequestMethod.POST})
  176. public Map<String, Object> getChargeFeeVoCollect(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  177. Map<String, Object> resultMap = new HashMap<>();
  178. try {
  179. if (chargeFeeParamsVo == null) {
  180. resultMap.put("code", -1);
  181. resultMap.put("message", "日结汇总的收费清单失败,参数为空");
  182. return resultMap;
  183. }
  184. if (chargeFeeParamsVo.getBeginDate() == null) {
  185. resultMap.put("code", -1);
  186. resultMap.put("message", "日结汇总的收费清单失败,开始时间为空");
  187. return resultMap;
  188. }
  189. if (chargeFeeParamsVo.getEndDate() == null) {
  190. resultMap.put("code", -1);
  191. resultMap.put("message", "日结汇总的收费清单失败,结束时间为空");
  192. return resultMap;
  193. }
  194. // if (chargeFeeParamsVo.getHisData() == null) {
  195. // chargeFeeParamsVo.setHisData(YesNoEnum.NO);
  196. // }
  197. if (StringUtils.isBlank(chargeFeeParamsVo.getCaseType())) {
  198. chargeFeeParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  199. }
  200. resultMap.put("code", 0);
  201. resultMap.put("message", "日结汇总的收费清单成功");
  202. List<ChargeFeeVo> chargeFeeVos = chargeFeeVoService.queryChargeFeeVoCollect(chargeFeeParamsVo.getCaseType(), chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate());
  203. fomartChargeVo(chargeFeeVos, YesNoEnum.YES,YesNoEnum.YES);
  204. resultMap.put("data", chargeFeeVos);
  205. return resultMap;
  206. } catch (Exception e) {
  207. e.printStackTrace();
  208. log.error("日结汇总的收费清单失败,错误信息{}", e);
  209. resultMap.put("code", -1);
  210. resultMap.put("message", "日结汇总的收费清单失败");
  211. return resultMap;
  212. }
  213. }
  214. /**
  215. * 重打结算单的收费清单
  216. *
  217. * @return
  218. */
  219. @UserLoginToken
  220. @RequestMapping(value = "/getChargeFeeVoReprint", method = {RequestMethod.GET, RequestMethod.POST})
  221. public Map<String, Object> getChargeFeeVoReprint(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  222. Map<String, Object> resultMap = new HashMap<>();
  223. try {
  224. if (chargeFeeParamsVo == null) {
  225. resultMap.put("code", -1);
  226. resultMap.put("message", "重打结算单的收费清单失败,参数为空");
  227. return resultMap;
  228. }
  229. if (StringUtils.isBlank(chargeFeeParamsVo.getCaseType())) {
  230. chargeFeeParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  231. }
  232. if (chargeFeeParamsVo.getDcountDate() == null) {
  233. resultMap.put("code", -1);
  234. resultMap.put("message", "重打结算单的收费清单失败,结算时间为空");
  235. return resultMap;
  236. }
  237. resultMap.put("code", 0);
  238. resultMap.put("message", "重打结算单的收费清单成功");
  239. List<ChargeFeeVo> chargeFeeVos = chargeFeeVoService.queryChargeFeeVoReprint(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getCaseType(), chargeFeeParamsVo.getDcountDate());
  240. fomartChargeVo(chargeFeeVos, YesNoEnum.NO,YesNoEnum.YES);
  241. resultMap.put("data", chargeFeeVos);
  242. return resultMap;
  243. } catch (Exception e) {
  244. e.printStackTrace();
  245. log.error("重打结算单的收费清单失败,错误信息{}", e);
  246. resultMap.put("code", -1);
  247. resultMap.put("message", "重打结算单的收费清单失败");
  248. return resultMap;
  249. }
  250. }
  251. /**
  252. * 日结列表的挂号清单 未结账
  253. *
  254. * @return
  255. */
  256. @UserLoginToken
  257. @RequestMapping(value = "/getReqrecVoUnAccount", method = {RequestMethod.GET, RequestMethod.POST})
  258. public Map<String, Object> getReqrecVoUnAccount(HttpServletRequest httpServletRequest) {
  259. Map<String, Object> resultMap = new HashMap<>();
  260. try {
  261. User tokenUser = TokenUtil.getUser(httpServletRequest);
  262. resultMap.put("code", 0);
  263. resultMap.put("message", "查询日结列表的挂号清单成功");
  264. List<ReqrecVo> reqrecVos = chargeFeeVoService.queryReqrecVoUnAccount(tokenUser.getUserIdCode());
  265. frmartReQrecVo(reqrecVos, YesNoEnum.NO);
  266. resultMap.put("data", reqrecVos);
  267. return resultMap;
  268. } catch (MzException e) {
  269. log.error("查询日结列表的挂号清单失败,错误信息{}", e);
  270. resultMap.put("code", -1);
  271. resultMap.put("message", "查询日结列表的挂号清单失败");
  272. return resultMap;
  273. } catch (Exception e) {
  274. e.printStackTrace();
  275. log.error("查询日结列表的挂号清单失败,错误信息{}", e);
  276. resultMap.put("code", -1);
  277. resultMap.put("message", "查询日结列表的挂号清单失败");
  278. return resultMap;
  279. }
  280. }
  281. private void frmartReQrecVo(List<ReqrecVo> reqrecVos, YesNoEnum fitEmpName) {
  282. if (reqrecVos != null && reqrecVos.size() > 0) {
  283. List<MzyZdChargeType> mzyZdChargeTypes = mzyZdChargeTypeService.queryAllMzyZdChargeType();
  284. Map<String, String> chargeTypeMap = mzyZdChargeTypes.stream().collect(Collectors.toMap(MzyZdChargeType::getCode, MzyZdChargeType::getName));
  285. Map<String, String> employeeMap = null;
  286. if (YesNoEnum.YES.equals(fitEmpName)) {
  287. Set<String> opIds = reqrecVos.stream().filter(u -> StringUtils.isNotBlank(u.getOpId())).map(u -> u.getOpId()).collect(Collectors.toSet());
  288. if (opIds != null) {
  289. List<Employee> employees = employeeService.queryByCodes(new ArrayList<>(opIds));
  290. if (employees != null) {
  291. employeeMap = employees.stream().collect(Collectors.toMap(Employee::getEmployeeCode, Employee::getEmployeeName));
  292. }
  293. }
  294. }
  295. List<ZdChequeType> chequeTypes = zdChequeTypeService.queryAllZdChequeType();
  296. Map<String, String> chequeTypeMap = chequeTypes.stream().collect(Collectors.toMap(ZdChequeType::getCode, ZdChequeType::getName));
  297. for (ReqrecVo ro : reqrecVos) {
  298. ro.setUnitCode(zdUnitCodeService.queryDeptNameByIdInCache(ro.getUnitCode()));
  299. ro.setChargeType(chargeTypeMap.get(ro.getChargeType()));
  300. ro.setCancelMark(YesNoEnum.YES.code.equals(ro.getCancelMark()) ? "退费" : "正常");
  301. if (YesNoEnum.YES.equals(fitEmpName)) {
  302. ro.setOpId(employeeMap.get(ro.getOpId()));
  303. }
  304. if (Constants.BRZZJF_CODE.equalsIgnoreCase(ro.getOpId())) {
  305. if (Constants.WX.equalsIgnoreCase(ro.getPaymode()) || Constants.BYJZ.equalsIgnoreCase(ro.getPaymode())) {
  306. ro.setPaymode(Constants.ZZWX);
  307. } else if (Constants.ZFB.equalsIgnoreCase(ro.getPaymode())) {
  308. ro.setPaymode(Constants.ZZZFB);
  309. }
  310. }
  311. ro.setPaymode(chequeTypeMap.get(ro.getPaymode()));
  312. }
  313. }
  314. }
  315. /**
  316. * 重打日结列表的挂号清单 已结账
  317. *
  318. * @return
  319. */
  320. @UserLoginToken
  321. @RequestMapping(value = "/getReqrecVoReprint", method = {RequestMethod.GET, RequestMethod.POST})
  322. public Map<String, Object> getReqrecVoReprint(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  323. Map<String, Object> resultMap = new HashMap<>();
  324. try {
  325. if (chargeFeeParamsVo == null) {
  326. resultMap.put("code", -1);
  327. resultMap.put("message", "查询重打日结列表的挂号清单失败,参数为空");
  328. return resultMap;
  329. }
  330. if (StringUtils.isBlank(chargeFeeParamsVo.getCaseType())) {
  331. chargeFeeParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  332. }
  333. if (chargeFeeParamsVo.getDcountDate() == null) {
  334. resultMap.put("code", -1);
  335. resultMap.put("message", "查询重打日结列表的挂号清单失败,结算时间为空");
  336. return resultMap;
  337. }
  338. resultMap.put("code", 0);
  339. resultMap.put("message", "查询重打日结列表的挂号清单成功");
  340. List<ReqrecVo> reqrecVos = chargeFeeVoService.queryReqrecVoReprint(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getCaseType(), chargeFeeParamsVo.getDcountDate());
  341. frmartReQrecVo(reqrecVos, YesNoEnum.NO);
  342. resultMap.put("data", reqrecVos);
  343. return resultMap;
  344. } catch (Exception e) {
  345. e.printStackTrace();
  346. log.error("查询重打日结列表的挂号清单失败,错误信息{}", e);
  347. resultMap.put("code", -1);
  348. resultMap.put("message", "查询重打日结列表的挂号清单失败");
  349. return resultMap;
  350. }
  351. }
  352. /**
  353. * 费用汇总挂号清单
  354. *
  355. * @return
  356. */
  357. @UserLoginToken
  358. @RequestMapping(value = "/getReqrecVoCollect", method = {RequestMethod.GET, RequestMethod.POST})
  359. public Map<String, Object> getReqrecVoCollect(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  360. Map<String, Object> resultMap = new HashMap<>();
  361. try {
  362. if (chargeFeeParamsVo == null) {
  363. resultMap.put("code", -1);
  364. resultMap.put("message", "查询费用汇总挂号清单失败,参数为空");
  365. return resultMap;
  366. }
  367. if (chargeFeeParamsVo.getBeginDate() == null) {
  368. resultMap.put("code", -1);
  369. resultMap.put("message", "查询费用汇总挂号清单失败,开始时间为空");
  370. return resultMap;
  371. }
  372. if (chargeFeeParamsVo.getEndDate() == null) {
  373. resultMap.put("code", -1);
  374. resultMap.put("message", "查询费用汇总挂号清单失败,结束时间为空");
  375. return resultMap;
  376. }
  377. // if (chargeFeeParamsVo.getHisData() == null) {
  378. // chargeFeeParamsVo.setHisData(YesNoEnum.NO);
  379. // }
  380. if (StringUtils.isBlank(chargeFeeParamsVo.getCaseType())) {
  381. chargeFeeParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  382. }
  383. resultMap.put("code", 0);
  384. resultMap.put("message", "查询费用汇总挂号清单成功");
  385. List<ReqrecVo> reqrecVos = chargeFeeVoService.queryReqrecVoCollect(chargeFeeParamsVo.getCaseType(), chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate());
  386. frmartReQrecVo(reqrecVos, YesNoEnum.YES);
  387. resultMap.put("data", reqrecVos);
  388. return resultMap;
  389. } catch (Exception e) {
  390. e.printStackTrace();
  391. log.error("查询费用汇总挂号清单失败,错误信息{}", e);
  392. resultMap.put("code", -1);
  393. resultMap.put("message", "查询费用汇总挂号清单失败");
  394. return resultMap;
  395. }
  396. }
  397. /**
  398. * 收费与挂号列表导出
  399. *
  400. * @param opId 报表归属人id
  401. * @param type 类型 1 重打日结收费列表 2 重打日结挂号列表 3 费用汇总收费列表 4 费用汇总挂号列表
  402. * @param dcountDate 第一个日期
  403. * @param dcountDate2 第二个日期
  404. * @param request
  405. * @param response
  406. * @return
  407. */
  408. @RequestMapping(value = "/excelChargeFeeVoReprint", method = {RequestMethod.GET})
  409. public Map<String, Object> excelChargeFeeVoReprint(@RequestParam("opId") String opId, @RequestParam("type") Integer type, @RequestParam("dcountDate") String dcountDate, @RequestParam("dcountDate2") String dcountDate2, HttpServletRequest request, HttpServletResponse response) {
  410. if (type == 1 || type == 2) {
  411. if (StringUtils.isBlank(opId) || StringUtils.isBlank(dcountDate)) {
  412. return null;
  413. }
  414. Date dcountDateD = null;
  415. try {
  416. dcountDateD = DateUtils.parseDate(dcountDate, "yyyy-MM-dd HH:mm:ss:SSS");
  417. } catch (ParseException e) {
  418. log.error("开始时间转换错误:{}", e);
  419. return null;
  420. }
  421. //重打日结收费清单
  422. if (type == 1) {
  423. List<ChargeFeeVo> chargeFeeVos = chargeFeeVoService.queryChargeFeeVoReprint(opId, YesNoEnum.NO.code.toString(), dcountDateD);
  424. fomartChargeVo(chargeFeeVos, YesNoEnum.NO,YesNoEnum.YES);
  425. ExcelUtil.exportExcelForChargeDetail(request, response, chargeFeeVos);
  426. return null;
  427. }
  428. //重打日结挂号清单
  429. List<ReqrecVo> reqrecVos = chargeFeeVoService.queryReqrecVoReprint(opId, YesNoEnum.NO.code.toString(), dcountDateD);
  430. frmartReQrecVo(reqrecVos, YesNoEnum.NO);
  431. ExcelUtil.exportExcelForReqrec(request, response, reqrecVos);
  432. return null;
  433. } else if (type == 3 || type == 4) {
  434. Date dcountDateD = null;
  435. try {
  436. dcountDateD = DateUtils.parseDate(dcountDate, "yyyy-MM-dd HH:mm:ss");
  437. } catch (ParseException e) {
  438. log.error("开始时间转换错误:{}", e);
  439. return null;
  440. }
  441. Date dcountDate2D = null;
  442. try {
  443. dcountDate2D = DateUtils.parseDate(dcountDate2, "yyyy-MM-dd HH:mm:ss");
  444. } catch (ParseException e) {
  445. log.error("开始时间转换错误:{}", e);
  446. return null;
  447. }
  448. if (type == 3) {
  449. List<ChargeFeeVo> chargeFeeVos = chargeFeeVoService.queryChargeFeeVoCollect(YesNoEnum.NO.code.toString(), dcountDateD, dcountDate2D);
  450. fomartChargeVo(chargeFeeVos, YesNoEnum.YES,YesNoEnum.YES);
  451. ExcelUtil.exportExcelForChargeDetail(request, response, chargeFeeVos);
  452. return null;
  453. }
  454. List<ReqrecVo> reqrecVos = chargeFeeVoService.queryReqrecVoCollect(YesNoEnum.NO.code.toString(), dcountDateD, dcountDate2D);
  455. frmartReQrecVo(reqrecVos, YesNoEnum.YES);
  456. ExcelUtil.exportExcelForReqrec(request, response, reqrecVos);
  457. return null;
  458. }
  459. return null;
  460. }
  461. /**
  462. * 费用日结报表
  463. *
  464. * @return
  465. */
  466. @UserLoginToken
  467. @RequestMapping(value = "/getFullChargeUnAccount", method = {RequestMethod.GET, RequestMethod.POST})
  468. public Map<String, Object> getFullChargeUnAccount(HttpServletRequest httpServletRequest) {
  469. Map<String, Object> resultMap = new HashMap<>();
  470. try {
  471. User tokenUser = TokenUtil.getUser(httpServletRequest);
  472. // //数据清洗,将已经做了日结的发票数据清洗,
  473. // chargeFeeVoService.setPayId();
  474. //挂号收入构成表格数据
  475. ReqrecVo reqrecVo = chargeFeeVoService.queryMzReceiptSerialCount(tokenUser.getUserIdCode(), null, null, null).get(0);
  476. reqrecVo.fomartReqrecVo();
  477. resultMap.put("ghsrgcmx", reqrecVo);
  478. MzReceiptSerial mzReceiptSerial = chargeFeeVoService.queryMzReceiptSerial(tokenUser.getUserIdCode(), null, null, null).get(0);
  479. mzReceiptSerial.setGhf(reqrecVo.getHjss());
  480. resultMap.put("mzReceiptSerial", mzReceiptSerial);
  481. ChargeCountVo chargeCountVo = chargeFeeVoService.queryChargeCountVo(tokenUser.getUserIdCode(), null, null, null).get(0);
  482. chargeCountVo.fomartChargeCountVo();
  483. resultMap.put("chargeCountVo", chargeCountVo);
  484. //收费所用票号
  485. List<ReceiptBillVo> sfReceipts = chargeFeeVoService.querySfReceiptBillVoUnAccount(tokenUser.getUserIdCode());
  486. //挂号所用票号
  487. List<ReceiptBillVo> ghReceipts = chargeFeeVoService.queryGhReceiptBillVoUnAccount(tokenUser.getUserIdCode());
  488. sfReceipts.addAll(ghReceipts);
  489. List<ReceiptBillVo> notFpList = new ArrayList<>();
  490. sfReceipts.forEach(s -> {
  491. if (s.getReceiptBill() != null && s.getReceiptBill().length() != 8) {
  492. s.setReceiptBill(null);
  493. }
  494. if (s.getReceiptBill() == null || "00000000".equals(s.getReceiptBill())) {
  495. notFpList.add(s);
  496. }
  497. });
  498. sfReceipts.removeAll(notFpList);
  499. Collections.sort(sfReceipts); // 按发票号排序
  500. List<String> receiptBills = getStrings(sfReceipts);
  501. resultMap.put("receiptBills", receiptBills);
  502. Integer sffps = chargeFeeVoService.countReceipt(tokenUser.getUserIdCode(), PayMarkEnum.CHARGED.code, null);
  503. Integer tpzs = chargeFeeVoService.countReceipt(tokenUser.getUserIdCode(), PayMarkEnum.RETURN_PREMIUM.code, null);
  504. Integer zffps = chargeFeeVoService.countReceipt(tokenUser.getUserIdCode(), PayMarkEnum.CANCELLATION.code, null);
  505. Integer ghfps = chargeFeeVoService.countReqrecReceipt(tokenUser.getUserIdCode(), YesNoEnum.NO.code.toString(), null, null, null);
  506. Integer ghtpzs = chargeFeeVoService.countReqrecReceipt(tokenUser.getUserIdCode(), YesNoEnum.YES.code.toString(), null, null, null);
  507. //收费发票总数
  508. resultMap.put("sffps", sffps + ghfps);
  509. //退费发票张数
  510. resultMap.put("tpzs", tpzs + ghtpzs);
  511. //作废收费发票张数
  512. resultMap.put("zffps", zffps);
  513. //收费作废发票明细
  514. List<ReceiptVo> sfzffpmx = chargeFeeVoService.queryReceiptVo(tokenUser.getUserIdCode(), null);
  515. //退号发票明细
  516. List<ReceiptVo> thzffpmx = chargeFeeVoService.queryThMzReceiptSerial(tokenUser.getUserIdCode(), null);
  517. sfzffpmx.addAll(thzffpmx);
  518. List<ReceiptVo> notFpGhList = new ArrayList<>();
  519. sfzffpmx.forEach(s -> {
  520. if (s.getReceiptBill() != null && s.getReceiptBill().length() != 8) {
  521. s.setReceiptBill(null);
  522. }
  523. if (s.getReceiptBill() == null || "00000000".equals(s.getReceiptBill())) {
  524. notFpGhList.add(s);
  525. }
  526. });
  527. sfzffpmx.removeAll(notFpGhList);
  528. Collections.sort(sfzffpmx); // 按发票号排序
  529. resultMap.put("zffpmx", sfzffpmx);
  530. resultMap.put("zizhufpmx", chargeFeeVoService.queryZiZhuReceiptVo(tokenUser.getUserIdCode(), null));
  531. //医保记账明细
  532. resultMap.put("ybjzmx", chargeFeeVoService.queryMxByChequeType(tokenUser.getUserIdCode(), null,YesNoEnum.YES.code.toString()));
  533. //个人账户明细
  534. resultMap.put("grzhmx", chargeFeeVoService.queryMxByChequeType(tokenUser.getUserIdCode(), null,YesNoEnum.NO.code.toString()));
  535. //门诊补录明细
  536. resultMap.put("mztcblmx", chargeFeeVoService.queryMxByChequeNo(tokenUser.getUserIdCode(), null));
  537. resultMap.put("user", tokenUser);
  538. resultMap.put("code", 0);
  539. resultMap.put("message", "查询费用日结报表成功");
  540. return resultMap;
  541. } catch (MzException e) {
  542. log.error("查询费用日结报表失败,错误信息{}", e);
  543. resultMap.put("code", -1);
  544. resultMap.put("message", "查询费用日结报表失败");
  545. return resultMap;
  546. } catch (Exception e) {
  547. e.printStackTrace();
  548. log.error("查询费用日结报表失败,错误信息{}", e);
  549. resultMap.put("code", -1);
  550. resultMap.put("message", "查询费用日结报表失败");
  551. return resultMap;
  552. }
  553. }
  554. /**
  555. * 重打费用日结报表
  556. *
  557. * @return
  558. */
  559. @UserLoginToken
  560. @RequestMapping(value = "/getFullChargeReprint", method = {RequestMethod.GET, RequestMethod.POST})
  561. public Map<String, Object> getFullChargeReprint(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  562. Map<String, Object> resultMap = new HashMap<>();
  563. try {
  564. if (chargeFeeParamsVo == null) {
  565. resultMap.put("code", -1);
  566. resultMap.put("message", "查询重打费用日结报表失败,参数为空");
  567. return resultMap;
  568. }
  569. if (StringUtils.isBlank(chargeFeeParamsVo.getCaseType())) {
  570. chargeFeeParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  571. }
  572. if (chargeFeeParamsVo.getDcountDate() == null) {
  573. resultMap.put("code", -1);
  574. resultMap.put("message", "查询重打费用日结报表失败,结算时间为空");
  575. return resultMap;
  576. }
  577. //数据清洗,将在老系统日结的数据清洗一次
  578. // chargeFeeVoService.refeshPayManData(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate());
  579. //门诊部日结没有设置收费人id ,需要清洗
  580. chargeFeeVoService.modifyMzService();
  581. User tokenUser = userService.queryUserByUserIdCode(chargeFeeParamsVo.getOpId());
  582. resultMap.put("user", tokenUser);
  583. //挂号收入构成表格数据
  584. ReqrecVo reqrecVo = chargeFeeVoService.queryMzReceiptSerialCount(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate(), null, null).get(0);
  585. reqrecVo.fomartReqrecVo();
  586. resultMap.put("ghsrgcmx", reqrecVo);
  587. MzReceiptSerial mzReceiptSerial = chargeFeeVoService.queryMzReceiptSerial(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate(), null, null).get(0);
  588. mzReceiptSerial.setGhf(reqrecVo.getHjss());
  589. resultMap.put("mzReceiptSerial", mzReceiptSerial);
  590. ChargeCountVo chargeCountVo = chargeFeeVoService.queryChargeCountVo(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate(), null, null).get(0);
  591. chargeCountVo.fomartChargeCountVo();
  592. resultMap.put("chargeCountVo", chargeCountVo);
  593. //收费所用票号
  594. List<ReceiptBillVo> sfReceipts = chargeFeeVoService.querySfReceiptBillVoReprint(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate());
  595. //挂号所用票号
  596. List<ReceiptBillVo> ghReceipts = chargeFeeVoService.queryGhReceiptBillVoReprint(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate());
  597. sfReceipts.addAll(ghReceipts);
  598. List<ReceiptBillVo> notFpList = new ArrayList<>();
  599. sfReceipts.forEach(s -> {
  600. if (s.getReceiptBill() != null && s.getReceiptBill().length() != 8) {
  601. s.setReceiptBill(null);
  602. }
  603. if (s.getReceiptBill() == null || "00000000".equals(s.getReceiptBill())) {
  604. notFpList.add(s);
  605. }
  606. });
  607. sfReceipts.removeAll(notFpList);
  608. Collections.sort(sfReceipts); // 按发票号排序
  609. List<String> receiptBills = getStrings(sfReceipts);
  610. resultMap.put("receiptBills", receiptBills);
  611. //收费发票张数
  612. Integer sffps = chargeFeeVoService.countReceipt(chargeFeeParamsVo.getOpId(), PayMarkEnum.CHARGED.code, chargeFeeParamsVo.getDcountDate());
  613. //退费发票张数
  614. Integer tpzs = chargeFeeVoService.countReceipt(chargeFeeParamsVo.getOpId(), PayMarkEnum.RETURN_PREMIUM.code, chargeFeeParamsVo.getDcountDate());
  615. //作废收费发票张数
  616. Integer zffps = chargeFeeVoService.countReceipt(chargeFeeParamsVo.getOpId(), PayMarkEnum.CANCELLATION.code, chargeFeeParamsVo.getDcountDate());
  617. //挂号发票张数
  618. Integer ghfps = chargeFeeVoService.countReqrecReceipt(chargeFeeParamsVo.getOpId(), YesNoEnum.NO.code.toString(), chargeFeeParamsVo.getDcountDate(), null, null);
  619. //退号发票张数
  620. Integer ghtpzs = chargeFeeVoService.countReqrecReceipt(chargeFeeParamsVo.getOpId(), YesNoEnum.YES.code.toString(), chargeFeeParamsVo.getDcountDate(), null, null);
  621. //收费发票总数
  622. resultMap.put("sffps", sffps + ghfps);
  623. //退费发票张数
  624. resultMap.put("tpzs", tpzs + ghtpzs);
  625. //作废收费发票张数
  626. resultMap.put("zffps", zffps);
  627. //收费作废发票明细
  628. List<ReceiptVo> sfzffpmx = chargeFeeVoService.queryReceiptVo(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate());
  629. //退号发票明细
  630. List<ReceiptVo> thzffpmx = chargeFeeVoService.queryThMzReceiptSerial(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate());
  631. sfzffpmx.addAll(thzffpmx);
  632. List<ReceiptVo> notFpGhList = new ArrayList<>();
  633. sfzffpmx.forEach(s -> {
  634. if (s.getReceiptBill() != null && s.getReceiptBill().length() != 8) {
  635. s.setReceiptBill(null);
  636. }
  637. if (s.getReceiptBill() == null || "00000000".equals(s.getReceiptBill())) {
  638. notFpGhList.add(s);
  639. }
  640. });
  641. sfzffpmx.removeAll(notFpGhList);
  642. Collections.sort(sfzffpmx); // 按发票号排序
  643. resultMap.put("zffpmx", sfzffpmx);
  644. resultMap.put("zizhufpmx", chargeFeeVoService.queryZiZhuReceiptVo(chargeFeeParamsVo.getOpId(), chargeFeeParamsVo.getDcountDate()));
  645. resultMap.put("ybjzmx", chargeFeeVoService.queryMxByChequeType(tokenUser.getUserIdCode(), chargeFeeParamsVo.getDcountDate(),YesNoEnum.YES.code.toString()));
  646. resultMap.put("grzhmx", chargeFeeVoService.queryMxByChequeType(tokenUser.getUserIdCode(), chargeFeeParamsVo.getDcountDate(),YesNoEnum.NO.code.toString()));
  647. //门诊补录明细
  648. resultMap.put("mztcblmx", chargeFeeVoService.queryMxByChequeNo(tokenUser.getUserIdCode(), chargeFeeParamsVo.getDcountDate()));
  649. resultMap.put("code", 0);
  650. resultMap.put("message", "查询重打费用日结报表成功");
  651. return resultMap;
  652. } catch (Exception e) {
  653. e.printStackTrace();
  654. log.error("查询重打费用日结报表失败,错误信息{}", e);
  655. resultMap.put("code", -1);
  656. resultMap.put("message", "查询重打费用日结报表失败");
  657. return resultMap;
  658. }
  659. }
  660. /**
  661. * 费用汇总报表
  662. *
  663. * @return
  664. */
  665. @UserLoginToken
  666. @RequestMapping(value = "/getFullChargeCollect", method = {RequestMethod.GET, RequestMethod.POST})
  667. public Map<String, Object> getFullChargeCollect(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  668. Map<String, Object> resultMap = new HashMap<>();
  669. try {
  670. // User tokenUser = TokenUtil.getUser(httpServletRequest);
  671. if (chargeFeeParamsVo == null) {
  672. resultMap.put("code", -1);
  673. resultMap.put("message", "查询费用汇总报表失败,参数为空");
  674. return resultMap;
  675. }
  676. if (StringUtils.isBlank(chargeFeeParamsVo.getCaseType())) {
  677. chargeFeeParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  678. }
  679. if (chargeFeeParamsVo.getBeginDate() == null || chargeFeeParamsVo.getEndDate() == null) {
  680. resultMap.put("code", -1);
  681. resultMap.put("message", "查询费用汇总报表失败,查询时间为空");
  682. return resultMap;
  683. }
  684. //门诊部日结没有设置收费人id ,需要清洗
  685. chargeFeeVoService.modifyMzService();
  686. //挂号收入构成表格数据
  687. ReqrecVo reqrecVo = chargeFeeVoService.queryMzReceiptSerialCount(null, null, chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate()).get(0);
  688. reqrecVo.fomartReqrecVo();
  689. resultMap.put("ghsrgcmx", reqrecVo);
  690. MzReceiptSerial mzReceiptSerial = chargeFeeVoService.queryMzReceiptSerial(null, null, chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate()).get(0);
  691. mzReceiptSerial.setGhf(reqrecVo.getHjss());
  692. resultMap.put("mzReceiptSerial", mzReceiptSerial);
  693. ChargeCountVo chargeCountVo = chargeFeeVoService.queryChargeCountVo(null, null, chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate()).get(0);
  694. chargeCountVo.fomartChargeCountVo();
  695. resultMap.put("chargeCountVo", chargeCountVo);
  696. List<WorkloadVo> ghWorkloadVos = chargeFeeVoService.queryGhWorkloadVo(chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate(), null, YesNoEnum.YES);
  697. frmartWorkloadVo(ghWorkloadVos);
  698. resultMap.put("ghWorkloadVos", ghWorkloadVos);
  699. List<WorkloadVo> sfWorkloadVos = chargeFeeVoService.querySfWorkloadVo(chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate(), null, YesNoEnum.YES);
  700. frmartWorkloadVo(sfWorkloadVos);
  701. resultMap.put("sfWorkloadVos", sfWorkloadVos);
  702. //resultMap.put("user", tokenUser);
  703. resultMap.put("code", 0);
  704. resultMap.put("message", "查询费用汇总报表成功");
  705. return resultMap;
  706. }
  707. // catch (MzException e) {
  708. // log.error("查询费用汇总报表失败,错误信息{}", e);
  709. // resultMap.put("code", -1);
  710. // resultMap.put("message", "查询费用汇总报表失败");
  711. // return resultMap;
  712. // }
  713. catch (Exception e) {
  714. e.printStackTrace();
  715. log.error("查询费用汇总报表失败,错误信息{}", e);
  716. resultMap.put("code", -1);
  717. resultMap.put("message", "查询费用汇总报表失败");
  718. return resultMap;
  719. }
  720. }
  721. /**
  722. * 收费员挂号与收费工作量统计
  723. *
  724. * @return
  725. */
  726. @UserLoginToken
  727. @RequestMapping(value = "/getCasherWorkCount", method = {RequestMethod.GET, RequestMethod.POST})
  728. public Map<String, Object> getCasherWorkCount(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  729. Map<String, Object> resultMap = new HashMap<>();
  730. try {
  731. if (chargeFeeParamsVo == null) {
  732. resultMap.put("code", -1);
  733. resultMap.put("message", "收费员挂号与收费工作量统计失败,参数为空");
  734. return resultMap;
  735. }
  736. if (StringUtils.isBlank(chargeFeeParamsVo.getOpId())) {
  737. chargeFeeParamsVo.setOpId(null);
  738. }
  739. if (chargeFeeParamsVo.getBeginDate() == null || chargeFeeParamsVo.getEndDate() == null) {
  740. resultMap.put("code", -1);
  741. resultMap.put("message", "收费员挂号与收费工作量统计失败,查询时间为空");
  742. return resultMap;
  743. }
  744. List<WorkloadVo> ghWorkloadVos = chargeFeeVoService.queryGhWorkloadVo(chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate(), chargeFeeParamsVo.getOpId(), null);
  745. frmartWorkloadVo(ghWorkloadVos);
  746. List<WorkloadVo> sfWorkloadVos = chargeFeeVoService.querySfWorkloadVo(chargeFeeParamsVo.getBeginDate(), chargeFeeParamsVo.getEndDate(), chargeFeeParamsVo.getOpId(), null);
  747. frmartWorkloadVo(sfWorkloadVos);
  748. List<Map<String, Object>> resultList = new ArrayList<>();
  749. Map<String, Map<String, Object>> allMap = new HashMap<>();
  750. for (WorkloadVo workloadVo : ghWorkloadVos) {
  751. if (workloadVo.getOpId() == null) {
  752. continue;
  753. }
  754. Map<String, Object> temp = new HashMap<>();
  755. temp.put("opId", workloadVo.getOpId());
  756. temp.put("opName", workloadVo.getOpName());
  757. temp.put("ghCount", workloadVo.getPtCount());
  758. temp.put("ghAmount", workloadVo.getPtAmount());
  759. temp.put("thCount", workloadVo.getThCount());
  760. temp.put("thAmount", workloadVo.getThAmount());
  761. resultList.add(temp);
  762. allMap.put(workloadVo.getOpId(), temp);
  763. }
  764. for (WorkloadVo workloadVo : sfWorkloadVos) {
  765. if (workloadVo.getOpId() == null) {
  766. continue;
  767. }
  768. Map<String, Object> temp = allMap.get(workloadVo.getOpId());
  769. if (temp == null) {
  770. temp = new HashMap<>();
  771. resultList.add(temp);
  772. allMap.put(workloadVo.getOpId(), temp);
  773. temp.put("opId", workloadVo.getOpId());
  774. temp.put("opName", workloadVo.getOpName());
  775. }
  776. temp.put("sfCount", workloadVo.getPtCount());
  777. temp.put("sfAmount", workloadVo.getPtAmount());
  778. temp.put("tfCount", workloadVo.getThCount());
  779. temp.put("tfAmount", workloadVo.getThAmount());
  780. }
  781. resultMap.put("code", 0);
  782. resultMap.put("message", "收费员挂号与收费工作量统计成功");
  783. resultMap.put("data", resultList);
  784. return resultMap;
  785. } catch (Exception e) {
  786. e.printStackTrace();
  787. log.error("收费员挂号与收费工作量统计失败,错误信息{}", e);
  788. resultMap.put("code", -1);
  789. resultMap.put("message", "收费员挂号与收费工作量统计失败");
  790. return resultMap;
  791. }
  792. }
  793. private void frmartWorkloadVo(List<WorkloadVo> workloadVos) {
  794. if (workloadVos != null && workloadVos.size() > 0) {
  795. WorkloadVo totalWorkloadVo = new WorkloadVo();
  796. Map<String, String> employeeMap = null;
  797. Set<String> opIds = workloadVos.stream().filter(u -> StringUtils.isNotBlank(u.getOpId())).map(u -> u.getOpId()).collect(Collectors.toSet());
  798. if (opIds != null) {
  799. List<Employee> employees = employeeService.queryByCodes(new ArrayList<>(opIds));
  800. if (employees != null) {
  801. employeeMap = employees.stream().collect(Collectors.toMap(Employee::getEmployeeCode, Employee::getEmployeeName));
  802. }
  803. }
  804. for (WorkloadVo wo : workloadVos) {
  805. wo.setOpName(employeeMap.get(wo.getOpId()));
  806. if (totalWorkloadVo.getPtCount() == null) {
  807. totalWorkloadVo.setPtCount(wo.getPtCount());
  808. } else {
  809. totalWorkloadVo.setPtCount(totalWorkloadVo.getPtCount() + wo.getPtCount());
  810. }
  811. if (totalWorkloadVo.getThCount() == null) {
  812. totalWorkloadVo.setThCount(wo.getThCount());
  813. } else {
  814. totalWorkloadVo.setThCount(totalWorkloadVo.getThCount() + wo.getThCount());
  815. }
  816. if (totalWorkloadVo.getPtAmount() == null) {
  817. totalWorkloadVo.setPtAmount(wo.getPtAmount());
  818. } else {
  819. totalWorkloadVo.setPtAmount(totalWorkloadVo.getPtAmount().add(wo.getPtAmount()));
  820. }
  821. if (totalWorkloadVo.getThAmount() == null) {
  822. totalWorkloadVo.setThAmount(wo.getThAmount());
  823. } else {
  824. totalWorkloadVo.setThAmount(totalWorkloadVo.getThAmount().add(wo.getThAmount()));
  825. }
  826. if (totalWorkloadVo.getTotalAmount() == null) {
  827. totalWorkloadVo.setTotalAmount(wo.getTotalAmount());
  828. } else {
  829. totalWorkloadVo.setTotalAmount(totalWorkloadVo.getTotalAmount().add(wo.getTotalAmount()));
  830. }
  831. }
  832. workloadVos.add(totalWorkloadVo);
  833. }
  834. }
  835. /**
  836. * 将发票号转成字符串形式
  837. *
  838. * @param sfReceiptBills
  839. * @return
  840. */
  841. private List<String> getStrings(List<ReceiptBillVo> sfReceiptBills) {
  842. List<String> temp = new ArrayList<>();
  843. String lastReceiptBill = null;
  844. String tempBill = null;
  845. for (ReceiptBillVo rb : sfReceiptBills) {
  846. if (StringUtils.isBlank(rb.getReceiptBill())) {
  847. continue;
  848. }
  849. if (lastReceiptBill == null) {
  850. tempBill = rb.getReceiptBill();
  851. lastReceiptBill = rb.getReceiptBill();
  852. } else if (Long.valueOf(lastReceiptBill) + 1 < Long.valueOf(rb.getReceiptBill())) {
  853. temp.add(tempBill + "--" + lastReceiptBill);
  854. tempBill = rb.getReceiptBill();
  855. lastReceiptBill = rb.getReceiptBill();
  856. } else if (Long.valueOf(lastReceiptBill) + 1 == Long.valueOf(rb.getReceiptBill())) {
  857. lastReceiptBill = rb.getReceiptBill();
  858. }
  859. }
  860. if (tempBill != null && lastReceiptBill != null) {
  861. temp.add(tempBill + "--" + lastReceiptBill);
  862. }
  863. return temp;
  864. }
  865. /**
  866. * 日报结算
  867. *
  868. * @return
  869. */
  870. @UserLoginToken
  871. @RequestMapping(value = "/dcountCharge", method = {RequestMethod.GET, RequestMethod.POST})
  872. public Map<String, Object> dcountCharge(HttpServletRequest httpServletRequest) {
  873. Map<String, Object> resultMap = new HashMap<>();
  874. try {
  875. User tokenUser = TokenUtil.getUser(httpServletRequest);
  876. Integer count = chargeFeeVoService.queryCountCanDaily(tokenUser.getUserIdCode());
  877. if (count == null || count == 0) {
  878. resultMap.put("code", -1);
  879. resultMap.put("message", "费用结算失败,无可结算费用");
  880. return resultMap;
  881. }
  882. count = chargeFeeVoService.queryTFWDFPCount(tokenUser.getUserIdCode());
  883. if (count > 0) {
  884. resultMap.put("code", -1);
  885. resultMap.put("message", "存在退费后发票未重打的发票信息,请 处理后再结账!");
  886. return resultMap;
  887. }
  888. Date dcountDate = chargeFeeVoService.dcountCharge(tokenUser.getUserIdCode());
  889. resultMap.put("dcountDate", dcountDate);
  890. //resultMap.put("dcountDate", new Date());
  891. resultMap.put("code", 0);
  892. resultMap.put("message", "费用结算成功");
  893. return resultMap;
  894. } catch (MzException e) {
  895. log.error("费用结算失败,错误信息{}", e);
  896. resultMap.put("code", -1);
  897. resultMap.put("message", "费用结算失败");
  898. return resultMap;
  899. } catch (Exception e) {
  900. e.printStackTrace();
  901. log.error("费用结算失败,错误信息{}", e);
  902. resultMap.put("code", -1);
  903. resultMap.put("message", "费用结算失败");
  904. return resultMap;
  905. }
  906. }
  907. /**
  908. * 查询给定日期内收费员列表
  909. *
  910. * @return
  911. */
  912. @UserLoginToken
  913. @RequestMapping(value = "/getAllOperator", method = {RequestMethod.GET, RequestMethod.POST})
  914. public Map<String, Object> getAllOperator(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  915. Map<String, Object> resultMap = new HashMap<>();
  916. try {
  917. if (chargeFeeParamsVo == null || chargeFeeParamsVo.getBeginDate() == null || chargeFeeParamsVo.getEndDate() == null) {
  918. resultMap.put("code", -1);
  919. resultMap.put("message", "查询给定日期内收费员列表失败,给定时间不能为空");
  920. return resultMap;
  921. }
  922. Date beginDate = chargeFeeParamsVo.getBeginDate();
  923. Date endDate = chargeFeeParamsVo.getEndDate();
  924. List<String> operaotors = chargeFeeVoService.queryAllOperatorFromReceipt(beginDate, endDate);
  925. List<String> ghOperaotors = chargeFeeVoService.queryAllOperatorFromReqrec(beginDate, endDate);
  926. ghOperaotors.forEach(o -> {
  927. if (!operaotors.contains(o)) {
  928. operaotors.add(o);
  929. }
  930. });
  931. List<Employee> employees = employeeService.queryByCodes(operaotors);
  932. resultMap.put("employees", employees);
  933. resultMap.put("code", 0);
  934. resultMap.put("message", "查询给定日期内收费员列表成功");
  935. return resultMap;
  936. } catch (Exception e) {
  937. e.printStackTrace();
  938. log.error("查询给定日期内收费员列表失败,错误信息{}", e);
  939. resultMap.put("code", -1);
  940. resultMap.put("message", "查询给定日期内收费员列表失败");
  941. return resultMap;
  942. }
  943. }
  944. /**
  945. * 查询可以被重打结算列表用户与日期列表
  946. *
  947. * @return
  948. */
  949. @UserLoginToken
  950. @RequestMapping(value = "/getDcountDateList", method = {RequestMethod.GET, RequestMethod.POST})
  951. public Map<String, Object> getDcountDateList(@RequestBody ChargeFeeParamsVo chargeFeeParamsVo) {
  952. Map<String, Object> resultMap = new HashMap<>();
  953. try {
  954. if (chargeFeeParamsVo == null || chargeFeeParamsVo.getBeginDate() == null || chargeFeeParamsVo.getEndDate() == null) {
  955. resultMap.put("code", -1);
  956. resultMap.put("message", "查询可以被重打结算列表用户与日期列表失败,给定时间不能为空");
  957. return resultMap;
  958. }
  959. if (StringUtils.isBlank(chargeFeeParamsVo.getOpId())) {
  960. resultMap.put("code", -1);
  961. resultMap.put("message", "查询可以被重打结算列表用户与日期列表失败,请选择要查询的收费员");
  962. return resultMap;
  963. }
  964. Date beginDate = DateUtil.getFirstSecond(chargeFeeParamsVo.getBeginDate());
  965. Date endDate = DateUtil.getLastSecond(chargeFeeParamsVo.getEndDate());
  966. List<DcountDateListVo> dcountDateListVos = chargeFeeVoService.queryDcountDateList(chargeFeeParamsVo.getOpId(), beginDate, endDate);
  967. resultMap.put("dcountDateListVos", dcountDateListVos);
  968. resultMap.put("code", 0);
  969. resultMap.put("message", "查询可以被重打结算列表用户与日期列表成功");
  970. return resultMap;
  971. } catch (Exception e) {
  972. e.printStackTrace();
  973. log.error("查询可以被重打结算列表用户与日期列表失败,错误信息{}", e);
  974. resultMap.put("code", -1);
  975. resultMap.put("message", "查询可以被重打结算列表用户与日期列表失败");
  976. return resultMap;
  977. }
  978. }
  979. /**
  980. * 查询门诊收费明细
  981. *
  982. * @return
  983. */
  984. @UserLoginToken
  985. @RequestMapping(value = "/getThmzmxsr", method = {RequestMethod.POST})
  986. public Map<String, Object> getThmzmxsr(@RequestBody ThmzmxsrParamsVo thmzmxsrParamsVo) {
  987. Map<String, Object> resultMap = new HashMap<>();
  988. try {
  989. if (thmzmxsrParamsVo == null) {
  990. resultMap.put("code", -1);
  991. resultMap.put("message", "查询日结列表收费清单失败,参数为空");
  992. return resultMap;
  993. }
  994. if (thmzmxsrParamsVo.getBeginDate() == null) {
  995. resultMap.put("code", -1);
  996. resultMap.put("message", "查询门诊收费明细失败,开始时间为空");
  997. return resultMap;
  998. }
  999. if (thmzmxsrParamsVo.getEndDate() == null) {
  1000. resultMap.put("code", -1);
  1001. resultMap.put("message", "查询门诊收费明细失败,结束时间为空");
  1002. return resultMap;
  1003. }
  1004. if (thmzmxsrParamsVo.getPageSize() == null) {
  1005. resultMap.put("code", -1);
  1006. resultMap.put("message", "查询门诊收费明细失败,每页显示数据大小不能为空");
  1007. return resultMap;
  1008. }
  1009. List<MzPatientMi> mzPatientMis = mzPatientMiService.queryByCommonParams(thmzmxsrParamsVo.getCommonParams());
  1010. if (mzPatientMis != null && mzPatientMis.size() > 0) {
  1011. List<String> patientIds = mzPatientMis.stream().filter(m -> StringUtils.isNotBlank(m.getPatientId())).map(m -> m.getPatientId()).collect(Collectors.toList());
  1012. if (patientIds != null && patientIds.size() > 0) {
  1013. thmzmxsrParamsVo.setPatientIds(patientIds);
  1014. }
  1015. }
  1016. if (StringUtils.isBlank(thmzmxsrParamsVo.getCaseType())) {
  1017. thmzmxsrParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  1018. }
  1019. if (StringUtils.isBlank(thmzmxsrParamsVo.getJzSqDept())) {
  1020. thmzmxsrParamsVo.setJzSqDept(null);
  1021. }
  1022. if (StringUtils.isBlank(thmzmxsrParamsVo.getJzSqDoctor())) {
  1023. thmzmxsrParamsVo.setJzSqDoctor(null);
  1024. }
  1025. if (StringUtils.isBlank(thmzmxsrParamsVo.getExecDept())) {
  1026. thmzmxsrParamsVo.setExecDept(null);
  1027. }
  1028. if (StringUtils.isBlank(thmzmxsrParamsVo.getHsm())) {
  1029. thmzmxsrParamsVo.setHsm(null);
  1030. }
  1031. if (StringUtils.isBlank(thmzmxsrParamsVo.getParentCode())) {
  1032. thmzmxsrParamsVo.setParentCode(null);
  1033. }
  1034. if (StringUtils.isBlank(thmzmxsrParamsVo.getXmm())) {
  1035. thmzmxsrParamsVo.setXmm(null);
  1036. }
  1037. resultMap.put("code", 0);
  1038. resultMap.put("message", "查询门诊收费明细成功");
  1039. List<Mzmxsr> mzmxsrs = mzmxsrService.queryMzmxsrWithPage(thmzmxsrParamsVo);
  1040. fomartThmzmxsr(mzmxsrs);
  1041. resultMap.put("data", mzmxsrs);
  1042. Integer total = thmzmxsrParamsVo.getTotal();
  1043. if (total < 0) {
  1044. total = mzmxsrService.queryCountMzmxsr(thmzmxsrParamsVo);
  1045. }
  1046. resultMap.put("total", total);
  1047. BigDecimal amount = thmzmxsrParamsVo.getAmount();
  1048. if (amount == null) {
  1049. amount = mzmxsrService.querySumAmount(thmzmxsrParamsVo);
  1050. }
  1051. resultMap.put("totalAmount", amount == null ? BigDecimal.ZERO : amount.setScale(2, BigDecimal.ROUND_FLOOR));
  1052. return resultMap;
  1053. } catch (Exception e) {
  1054. e.printStackTrace();
  1055. log.error("查询门诊收费明细失败,错误信息{}", e);
  1056. resultMap.put("code", -1);
  1057. resultMap.put("message", "查询门诊收费明细失败");
  1058. return resultMap;
  1059. }
  1060. }
  1061. private void fomartThmzmxsr(List<Mzmxsr> mzmxsrs) {
  1062. Map<String, String> mzBillItemMap = null;
  1063. Map<String, String> employeeMap = null;
  1064. if (mzmxsrs != null && mzmxsrs.size() > 0) {
  1065. List<BillItem> mzBillItems = mzBillItemService.queryZyBillItem();
  1066. if (mzBillItems != null) {
  1067. mzBillItemMap = mzBillItems.stream().collect(Collectors.toMap(BillItem::getCode, BillItem::getName));
  1068. }
  1069. List<Employee> employees = employeeService.queryAll();
  1070. if (employees != null) {
  1071. employeeMap = employees.stream().collect(Collectors.toMap(Employee::getEmployeeCode, Employee::getEmployeeName));
  1072. }
  1073. }
  1074. if (mzmxsrs != null && mzmxsrs.size() > 0) {
  1075. for (Mzmxsr mzmxsr : mzmxsrs) {
  1076. getBigDecimal(mzBillItemMap, employeeMap, mzmxsr);
  1077. }
  1078. }
  1079. }
  1080. private void getBigDecimal(Map<String, String> mzBillItemMap, Map<String, String> employeeMap, Mzmxsr mzmxsr) {
  1081. if (mzBillItemMap != null) {
  1082. mzmxsr.setParentCode(mzBillItemMap.get(mzmxsr.getParentCode()));
  1083. }
  1084. mzmxsr.setJzSqDept(zdUnitCodeService.queryDeptNameByIdInCache(mzmxsr.getJzSqDept()));
  1085. mzmxsr.setExecDept(zdUnitCodeService.queryDeptNameByIdInCache(mzmxsr.getExecDept()));
  1086. String jzSqDoctor = mzmxsr.getJzSqDoctor();
  1087. if (StringUtils.isNotBlank(jzSqDoctor)) {
  1088. jzSqDoctor = jzSqDoctor.trim();
  1089. }
  1090. mzmxsr.setJzSqDoctor(employeeMap.get(jzSqDoctor));
  1091. BigDecimal price = mzmxsr.getPrice();
  1092. if (price == null) {
  1093. price = BigDecimal.ZERO;
  1094. }
  1095. mzmxsr.setPrice(price.setScale(2, BigDecimal.ROUND_FLOOR));
  1096. }
  1097. /**
  1098. * 门诊收入明细导出
  1099. *
  1100. * @param request
  1101. * @param response
  1102. * @return
  1103. */
  1104. @RequestMapping(value = "/excelThmzmxsr", method = {RequestMethod.GET})
  1105. public Map<String, Object> excelThmzmxsr(@RequestParam("commonParams") String commonParams, @RequestParam("caseType") String caseType, @RequestParam("beginDate") String beginDate,
  1106. @RequestParam("endDate") String endDate, @RequestParam("jzSqDept") String jzSqDept, @RequestParam("jzSqDoctor") String jzSqDoctor,
  1107. @RequestParam("execDept") String execDept, @RequestParam("hsm") String hsm,
  1108. @RequestParam("parentCode") String parentCode, @RequestParam("xmm") String xmm, @RequestParam("pageSize") String pageSize, HttpServletRequest request, HttpServletResponse response) {
  1109. if (StringUtils.isBlank(caseType)) {
  1110. caseType = YesNoEnum.NO.code.toString();
  1111. }
  1112. if (StringUtils.isBlank(jzSqDept)) {
  1113. jzSqDept = null;
  1114. }
  1115. if (StringUtils.isBlank(jzSqDoctor)) {
  1116. jzSqDoctor = null;
  1117. }
  1118. if (StringUtils.isBlank(execDept)) {
  1119. execDept = null;
  1120. }
  1121. if (StringUtils.isBlank(hsm)) {
  1122. hsm = null;
  1123. }
  1124. if (StringUtils.isBlank(parentCode)) {
  1125. parentCode = null;
  1126. }
  1127. if (StringUtils.isBlank(xmm)) {
  1128. xmm = null;
  1129. }
  1130. Map<String, Object> resultMap = new HashMap<>();
  1131. ThmzmxsrParamsVo thmzmxsrParamsVo = new ThmzmxsrParamsVo();
  1132. thmzmxsrParamsVo.setCommonParams(commonParams);
  1133. thmzmxsrParamsVo.setCaseType(caseType);
  1134. thmzmxsrParamsVo.setBeginDate(DateUtil.pase(beginDate, "yyyy-MM-dd HH:mm:ss"));
  1135. thmzmxsrParamsVo.setEndDate(DateUtil.pase(endDate, "yyyy-MM-dd HH:mm:ss"));
  1136. thmzmxsrParamsVo.setJzSqDept(jzSqDept);
  1137. thmzmxsrParamsVo.setJzSqDoctor(jzSqDoctor);
  1138. thmzmxsrParamsVo.setExecDept(execDept);
  1139. thmzmxsrParamsVo.setHsm(hsm);
  1140. thmzmxsrParamsVo.setParentCode(parentCode);
  1141. thmzmxsrParamsVo.setXmm(xmm);
  1142. thmzmxsrParamsVo.setOffset(0);
  1143. if (DateTimeUtils.periodDays(DateTimeUtils.date2LocalDate(thmzmxsrParamsVo.getBeginDate()), DateTimeUtils.date2LocalDate(thmzmxsrParamsVo.getEndDate())) > 180) {
  1144. resultMap.put("code", -1);
  1145. resultMap.put("message", "查询门诊收费明细失败,时间跨度不能大于六个月");
  1146. return resultMap;
  1147. }
  1148. Integer total = Integer.valueOf(pageSize);
  1149. if (total < 0) {
  1150. total = mzmxsrService.queryCountMzmxsr(thmzmxsrParamsVo);
  1151. }
  1152. thmzmxsrParamsVo.setPageSize(total);
  1153. List<MzPatientMi> mzPatientMis = mzPatientMiService.queryByCommonParams(commonParams);
  1154. if (mzPatientMis != null && mzPatientMis.size() > 0) {
  1155. List<String> patientIds = mzPatientMis.stream().filter(m -> StringUtils.isNotBlank(m.getPatientId())).map(m -> m.getPatientId()).collect(Collectors.toList());
  1156. if (patientIds != null && patientIds.size() > 0) {
  1157. thmzmxsrParamsVo.setPatientIds(patientIds);
  1158. }
  1159. }
  1160. List<Mzmxsr> mzmxsrs = mzmxsrService.queryMzmxsrWithPage(thmzmxsrParamsVo);
  1161. fomartThmzmxsr(mzmxsrs);
  1162. ExcelUtil.exportExcelForThmzmxsrs(request, response, mzmxsrs);
  1163. return null;
  1164. }
  1165. /**
  1166. * 门诊收入明细导出Excel并入库
  1167. *
  1168. * @param request
  1169. * @param response
  1170. * @return
  1171. */
  1172. // @UserLoginToken
  1173. @RequestMapping(value = "/excelThmzmxsrToFile", method = {RequestMethod.GET})
  1174. public Map<String, Object> excelThmzmxsrToFile(@RequestParam("commonParams") String commonParams, @RequestParam("caseType") String caseType, @RequestParam("beginDate") String beginDate,
  1175. @RequestParam("endDate") String endDate, @RequestParam("jzSqDept") String jzSqDept, @RequestParam("jzSqDoctor") String jzSqDoctor,
  1176. @RequestParam("execDept") String execDept, @RequestParam("hsm") String hsm,
  1177. @RequestParam("parentCode") String parentCode, @RequestParam("xmm") String xmm, @RequestParam("pageSize") String pageSize, HttpServletRequest request, HttpServletResponse response) {
  1178. log.info("创建门诊收入明细表格,开始时间{}结束时间{}", beginDate, endDate);
  1179. if (StringUtils.isBlank(caseType)) {
  1180. caseType = YesNoEnum.NO.code.toString();
  1181. }
  1182. if (StringUtils.isBlank(jzSqDept)) {
  1183. jzSqDept = null;
  1184. }
  1185. if (StringUtils.isBlank(jzSqDoctor)) {
  1186. jzSqDoctor = null;
  1187. }
  1188. if (StringUtils.isBlank(execDept)) {
  1189. execDept = null;
  1190. }
  1191. if (StringUtils.isBlank(hsm)) {
  1192. hsm = null;
  1193. }
  1194. if (StringUtils.isBlank(parentCode)) {
  1195. parentCode = null;
  1196. }
  1197. if (StringUtils.isBlank(xmm)) {
  1198. xmm = null;
  1199. }
  1200. Map<String, Object> resultMap = new HashMap<>();
  1201. ThmzmxsrParamsVo thmzmxsrParamsVo = new ThmzmxsrParamsVo();
  1202. thmzmxsrParamsVo.setCommonParams(commonParams);
  1203. thmzmxsrParamsVo.setCaseType(caseType);
  1204. thmzmxsrParamsVo.setBeginDate(DateUtil.pase(beginDate, "yyyy-MM-dd HH:mm:ss"));
  1205. thmzmxsrParamsVo.setEndDate(DateUtil.pase(endDate, "yyyy-MM-dd HH:mm:ss"));
  1206. thmzmxsrParamsVo.setJzSqDept(jzSqDept);
  1207. thmzmxsrParamsVo.setJzSqDoctor(jzSqDoctor);
  1208. thmzmxsrParamsVo.setExecDept(execDept);
  1209. thmzmxsrParamsVo.setHsm(hsm);
  1210. thmzmxsrParamsVo.setParentCode(parentCode);
  1211. thmzmxsrParamsVo.setXmm(xmm);
  1212. thmzmxsrParamsVo.setOffset(0);
  1213. if (DateTimeUtils.periodDays(DateTimeUtils.date2LocalDate(thmzmxsrParamsVo.getBeginDate()), DateTimeUtils.date2LocalDate(thmzmxsrParamsVo.getEndDate())) > 180) {
  1214. resultMap.put("code", -1);
  1215. resultMap.put("message", "查询门诊收费明细失败,时间跨度不能大于六个月");
  1216. return resultMap;
  1217. }
  1218. Integer total = Integer.valueOf(pageSize);
  1219. if (total < 0) {
  1220. total = mzmxsrService.queryCountMzmxsr(thmzmxsrParamsVo);
  1221. }
  1222. thmzmxsrParamsVo.setPageSize(total);
  1223. List<MzPatientMi> mzPatientMis = mzPatientMiService.queryByCommonParams(commonParams);
  1224. if (mzPatientMis != null && mzPatientMis.size() > 0) {
  1225. List<String> patientIds = mzPatientMis.stream().filter(m -> StringUtils.isNotBlank(m.getPatientId())).map(m -> m.getPatientId()).collect(Collectors.toList());
  1226. if (patientIds != null && patientIds.size() > 0) {
  1227. thmzmxsrParamsVo.setPatientIds(patientIds);
  1228. }
  1229. }
  1230. List<Mzmxsr> mzmxsrs = mzmxsrService.queryMzmxsrWithPage(thmzmxsrParamsVo);
  1231. fomartThmzmxsr(mzmxsrs);
  1232. String fileName = "门诊明细收入" + DateUtil.fomart(thmzmxsrParamsVo.getBeginDate(), "yyyy-MM-dd") + "-" + DateUtil.fomart(thmzmxsrParamsVo.getEndDate(), "yyyy-MM-dd") + ".xls";
  1233. FileUpload fileUpload = fileUploadService.queryByName(fileName);
  1234. if (fileUpload != null) {
  1235. resultMap.put("code", -1);
  1236. resultMap.put("message", "已经存在该报表");
  1237. return resultMap;
  1238. }
  1239. byte[] bytes = ExcelUtil.exportExcelForThmzmxsrs(mzmxsrs);
  1240. FileUpload newFile = new FileUpload(fileName, bytes, "application/vnd.ms-excel");
  1241. User user = userService.queryUserByUserIdCode(Constants.QYZH_CODE);
  1242. newFile.setCreateUser(user.getId());
  1243. newFile.setFileType(Integer.valueOf(FileTypeEnum.EXCEL_REPORT.code));
  1244. newFile.setSquareFile(bytes);
  1245. fileUploadService.saveUploadFile(newFile);
  1246. log.info("创建门诊收入明细表格成功,表格名称{}", fileName);
  1247. resultMap.put("code", 0);
  1248. resultMap.put("message", "数据入库成功,列表已经重新加载,请下载对应的列表");
  1249. return resultMap;
  1250. }
  1251. /**
  1252. * 查询费用不一致接口
  1253. *
  1254. * @return
  1255. */
  1256. @RequestMapping(value = "/getDiff", method = {RequestMethod.GET})
  1257. public Map<String, Object> getDiff(@RequestParam("beginDate") String beginDate, @RequestParam("endDate") String endDate) {
  1258. List<String> mzPatientIds = mzmxsrService.queryAllPatientId(beginDate, endDate);
  1259. if (mzPatientIds != null && mzPatientIds.size() > 0) {
  1260. ThmzmxsrParamsVo thmzmxsrParamsVo = new ThmzmxsrParamsVo();
  1261. thmzmxsrParamsVo.setCaseType(YesNoEnum.NO.code.toString());
  1262. thmzmxsrParamsVo.setBeginDate(DateUtil.pase(beginDate, "yyyy-MM-dd HH:mm:ss"));
  1263. thmzmxsrParamsVo.setEndDate(DateUtil.pase(endDate, "yyyy-MM-dd HH:mm:ss"));
  1264. thmzmxsrParamsVo.setOffset(0);
  1265. for (String str : mzPatientIds) {
  1266. thmzmxsrParamsVo.setPatientIds(Arrays.asList(str));
  1267. BigDecimal amount = mzmxsrService.querySumAmount(thmzmxsrParamsVo).setScale(1, BigDecimal.ROUND_HALF_UP);
  1268. BigDecimal fpAmount = mzReceiptSerialService.querySumByPatientId(beginDate, endDate, str).setScale(1, BigDecimal.ROUND_HALF_UP);
  1269. if (amount.compareTo(fpAmount) != 0) {
  1270. log.info("--------------费用明细统计金额 {},发票金额 {},病人id {}-----------------", amount, fpAmount, str);
  1271. }
  1272. }
  1273. System.out.println("计算结束");
  1274. }
  1275. return null;
  1276. }
  1277. /**
  1278. * 门诊医生 (科室)工作量统计
  1279. * @param beginDate
  1280. * @param endDate
  1281. * @param type 1 门诊医生列表 2 科室列表
  1282. * @return
  1283. */
  1284. @UserLoginToken
  1285. @RequestMapping(value = "/getWorkloadStatistics", method = {RequestMethod.GET})
  1286. public Map<String, Object> getWorkloadStatistics(@RequestParam("beginDate") String beginDate, @RequestParam("endDate") String endDate, @RequestParam("type") Integer type, HttpServletRequest httpServletRequest) {
  1287. Map<String, Object> resultMap = new HashMap<>();
  1288. try {
  1289. if (StringUtils.isBlank(beginDate)) {
  1290. resultMap.put("code", -1);
  1291. resultMap.put("message", "门诊医生 (科室)工作量统计失败,开始时间为空");
  1292. return resultMap;
  1293. }
  1294. if (StringUtils.isBlank(endDate)) {
  1295. resultMap.put("code", -1);
  1296. resultMap.put("message", "门诊医生 (科室)工作量统计失败,结束时间为空");
  1297. return resultMap;
  1298. }
  1299. if (type==null) {
  1300. resultMap.put("code", -1);
  1301. resultMap.put("message", "门诊医生 (科室)工作量统计失败,报表类型为空为空");
  1302. return resultMap;
  1303. }
  1304. User tokenUser = TokenUtil.getUser(httpServletRequest);
  1305. String warnDept=null;
  1306. String doctorCode=null;
  1307. if(type==1){
  1308. doctorCode=tokenUser.getUserIdCode();
  1309. }else {
  1310. Employee employee= employeeService.queryByUserCode(tokenUser.getUserIdCode());
  1311. if(employee!=null){
  1312. warnDept=employee.getDeptCode();
  1313. }
  1314. }
  1315. List<Map<String, Object>> mzList = chargeFeeVoService.queryWorkloadStatistics(beginDate, endDate, doctorCode, warnDept,true);
  1316. List<Map<String, Object>> zyList = mzZyReqService.queryWorkloadStatistics(beginDate, endDate, tokenUser.getUserIdCode(), warnDept,true);
  1317. if (mzList != null && mzList.size() > 0 && zyList != null && zyList.size() > 0) {
  1318. Map<String, Map<String, Object>> tempMap = new HashMap<>();
  1319. for (Map<String, Object> map : mzList) {
  1320. tempMap.put(map.get("doctor_code") + "_" + map.get("charge_date"), map);
  1321. Employee employee=employeeService.queryByUserCode((String) map.get("doctor_code"));
  1322. // 门诊就诊人数
  1323. Map<String, Object> rsMap = clinicService.queryMzVisitRs(beginDate, endDate, (String) map.get("doctor_code"), (String) map.get("charge_date"));
  1324. map.put("patient_num", rsMap.get("patient_num"));
  1325. map.put("avg_fee", (String.valueOf(rsMap.get("patient_num")).equals("0")) ? 0 :
  1326. BigDecimal.valueOf((Double) map.get("je")).divide(new BigDecimal((Long) rsMap.get("patient_num")), RoundingMode.CEILING));
  1327. if(employee!=null){
  1328. map.put("doctor_name",employee.getEmployeeName());
  1329. map.put("codeRs",employee.getCodeRs());
  1330. }
  1331. }
  1332. for (Map<String, Object> map : zyList) {
  1333. String key =map.get("doctor_code") + "_" + map.get("charge_date");
  1334. Map<String, Object> mzMap = tempMap.get(key);
  1335. if(mzMap!=null){
  1336. mzMap.put("zy_req_num",map.get("zy_req_num"));
  1337. mzMap.put("zy_req_ry",map.get("zy_req_ry"));
  1338. mzMap.put("zy_req_ty",map.get("zy_req_ty"));
  1339. }else {
  1340. mzList.add(map);
  1341. Employee employee=employeeService.queryByUserCode((String) map.get("doctor_code"));
  1342. if(employee!=null){
  1343. map.put("doctor_name",employee.getEmployeeName());
  1344. map.put("codeRs",employee.getCodeRs());
  1345. }
  1346. }
  1347. }
  1348. } else {
  1349. if ((mzList == null || mzList.size() == 0) && zyList != null && zyList.size() > 0) {
  1350. mzList = zyList;
  1351. }
  1352. for (Map<String, Object> map : mzList) {
  1353. Employee employee=employeeService.queryByUserCode((String) map.get("doctor_code"));
  1354. // 门诊就诊人数
  1355. Map<String, Object> rsMap = clinicService.queryMzVisitRs(beginDate, endDate, (String) map.get("doctor_code"), (String) map.get("charge_date"));
  1356. map.put("patient_num", rsMap.get("patient_num"));
  1357. map.put("avg_fee", (String.valueOf(rsMap.get("patient_num")).equals("0")) ? 0 :
  1358. BigDecimal.valueOf((Double) map.get("je")).divide(new BigDecimal((Long) rsMap.get("patient_num")), RoundingMode.CEILING));
  1359. if(employee!=null){
  1360. map.put("doctor_name",employee.getEmployeeName());
  1361. map.put("codeRs",employee.getCodeRs());
  1362. }
  1363. }
  1364. }
  1365. resultMap.put("code", 0);
  1366. resultMap.put("message", "门诊医生 (科室)工作量统计成功");
  1367. resultMap.put("data", mzList);
  1368. return resultMap;
  1369. } catch (Exception e) {
  1370. e.printStackTrace();
  1371. log.error("门诊医生 (科室)工作量统计失败,错误信息{}", e);
  1372. resultMap.put("code", -1);
  1373. resultMap.put("message", "门诊医生 (科室)工作量统计失败");
  1374. return resultMap;
  1375. }
  1376. }
  1377. /**
  1378. * 门诊医生 (科室)工作量统计汇总
  1379. * @param beginDate
  1380. * @param endDate
  1381. * @param type 1 门诊医生列表 2 科室列表
  1382. * @return
  1383. */
  1384. @UserLoginToken
  1385. @RequestMapping(value = "/getWorkloadStatisticsTotal", method = {RequestMethod.GET})
  1386. public Map<String, Object> getWorkloadStatisticsTotal(@RequestParam("beginDate") String beginDate, @RequestParam("endDate") String endDate, @RequestParam("type") Integer type, HttpServletRequest httpServletRequest) {
  1387. Map<String, Object> resultMap = new HashMap<>();
  1388. try {
  1389. if (StringUtils.isBlank(beginDate)) {
  1390. resultMap.put("code", -1);
  1391. resultMap.put("message", "门诊医生 (科室)工作量统计汇总失败,开始时间为空");
  1392. return resultMap;
  1393. }
  1394. if (StringUtils.isBlank(endDate)) {
  1395. resultMap.put("code", -1);
  1396. resultMap.put("message", "门诊医生 (科室)工作量统计汇总失败,结束时间为空");
  1397. return resultMap;
  1398. }
  1399. if (type==null) {
  1400. resultMap.put("code", -1);
  1401. resultMap.put("message", "门诊医生 (科室)工作量统计汇总失败,报表类型为空为空");
  1402. return resultMap;
  1403. }
  1404. User tokenUser = TokenUtil.getUser(httpServletRequest);
  1405. String warnDept=null;
  1406. String doctorCode=null;
  1407. if(type==1){
  1408. doctorCode=tokenUser.getUserIdCode();
  1409. }else {
  1410. Employee employee= employeeService.queryByUserCode(tokenUser.getUserIdCode());
  1411. if(employee!=null){
  1412. warnDept=employee.getDeptCode();
  1413. }
  1414. }
  1415. List<Map<String, Object>> mzList = chargeFeeVoService.queryWorkloadStatistics(beginDate, endDate, doctorCode, warnDept,null);
  1416. List<Map<String, Object>> zyList = mzZyReqService.queryWorkloadStatistics(beginDate, endDate, tokenUser.getUserIdCode(), warnDept,null);
  1417. if (mzList != null && mzList.size() > 0 && zyList != null && zyList.size() > 0) {
  1418. Map<String, Map<String, Object>> tempMap = new HashMap<>();
  1419. for (Map<String, Object> map : mzList) {
  1420. tempMap.put((String) map.get("doctor_code"), map);
  1421. Employee employee=employeeService.queryByUserCode((String) map.get("doctor_code"));
  1422. // 门诊就诊人数
  1423. Map<String, Object> rsMap = clinicService.queryMzVisitRs(beginDate, endDate, (String) map.get("doctor_code"), null);
  1424. map.put("patient_num", rsMap.get("patient_num"));
  1425. map.put("avg_fee", (String.valueOf(rsMap.get("patient_num")).equals("0")) ? 0 :
  1426. BigDecimal.valueOf((Double) map.get("je")).divide(new BigDecimal((Long) rsMap.get("patient_num")), RoundingMode.CEILING));
  1427. if(employee!=null){
  1428. map.put("doctor_name",employee.getEmployeeName());
  1429. map.put("codeRs",employee.getCodeRs());
  1430. }
  1431. }
  1432. for (Map<String, Object> map : zyList) {
  1433. String key =(String)map.get("doctor_code");
  1434. Map<String, Object> mzMap = tempMap.get(key);
  1435. if(mzMap!=null){
  1436. mzMap.put("zy_req_num",map.get("zy_req_num"));
  1437. mzMap.put("zy_req_ry",map.get("zy_req_ry"));
  1438. mzMap.put("zy_req_ty",map.get("zy_req_ty"));
  1439. }else {
  1440. mzList.add(map);
  1441. Employee employee=employeeService.queryByUserCode((String) map.get("doctor_code"));
  1442. if(employee!=null){
  1443. map.put("doctor_name",employee.getEmployeeName());
  1444. map.put("codeRs",employee.getCodeRs());
  1445. }
  1446. }
  1447. }
  1448. } else {
  1449. if ((mzList == null || mzList.size() == 0) && zyList != null && zyList.size() > 0) {
  1450. mzList = zyList;
  1451. }
  1452. for (Map<String, Object> map : mzList) {
  1453. Employee employee=employeeService.queryByUserCode((String) map.get("doctor_code"));
  1454. // 门诊就诊人数
  1455. Map<String, Object> rsMap = clinicService.queryMzVisitRs(beginDate, endDate, (String) map.get("doctor_code"), null);
  1456. map.put("patient_num", rsMap.get("patient_num"));
  1457. map.put("avg_fee", (String.valueOf(rsMap.get("patient_num")).equals("0")) ? 0 :
  1458. BigDecimal.valueOf((Double) map.get("je")).divide(new BigDecimal((Long) rsMap.get("patient_num")), RoundingMode.CEILING));
  1459. if(employee!=null){
  1460. map.put("doctor_name",employee.getEmployeeName());
  1461. map.put("codeRs",employee.getCodeRs());
  1462. }
  1463. }
  1464. }
  1465. resultMap.put("code", 0);
  1466. resultMap.put("message", "门诊医生 (科室)工作量统计汇总成功");
  1467. resultMap.put("data", mzList);
  1468. return resultMap;
  1469. } catch (Exception e) {
  1470. e.printStackTrace();
  1471. log.error("门诊医生 (科室)工作量统计汇总失败,错误信息{}", e);
  1472. resultMap.put("code", -1);
  1473. resultMap.put("message", "门诊医生 (科室)工作量统计汇总失败");
  1474. return resultMap;
  1475. }
  1476. }
  1477. /**
  1478. * 门诊医生 (科室)查询住院申请明细
  1479. * @param beginDate
  1480. * @param endDate
  1481. * @param type 1 门诊医生列表 2 科室列表
  1482. * @return
  1483. */
  1484. @UserLoginToken
  1485. @RequestMapping(value = "/getMzZyReqs", method = {RequestMethod.GET})
  1486. public Map<String, Object> getMzZyReqs(@RequestParam("beginDate") String beginDate, @RequestParam("endDate") String endDate, @RequestParam("type") Integer type, HttpServletRequest httpServletRequest) {
  1487. Map<String, Object> resultMap = new HashMap<>();
  1488. try {
  1489. if (StringUtils.isBlank(beginDate)) {
  1490. resultMap.put("code", -1);
  1491. resultMap.put("message", "门诊医生 (科室)查询住院申请明细失败,开始时间为空");
  1492. return resultMap;
  1493. }
  1494. if (StringUtils.isBlank(endDate)) {
  1495. resultMap.put("code", -1);
  1496. resultMap.put("message", "门诊医生 (科室)查询住院申请明细失败,结束时间为空");
  1497. return resultMap;
  1498. }
  1499. if (type==null) {
  1500. resultMap.put("code", -1);
  1501. resultMap.put("message", "门诊医生 (科室)查询住院申请明细失败,报表类型为空为空");
  1502. return resultMap;
  1503. }
  1504. User tokenUser = TokenUtil.getUser(httpServletRequest);
  1505. String warnDept=null;
  1506. String doctorCode=null;
  1507. if(type==1){
  1508. doctorCode=tokenUser.getUserIdCode();
  1509. }else {
  1510. Employee employee= employeeService.queryByUserCode(tokenUser.getUserIdCode());
  1511. if(employee!=null){
  1512. warnDept=employee.getDeptCode();
  1513. }
  1514. }
  1515. List<MzZyReq> mzList = mzZyReqService.queryMzZyReqs(beginDate, endDate, doctorCode, warnDept);
  1516. if(mzList!=null && mzList.size()>0){
  1517. List<CodeNameEntity> admissStatuses=mzZdCommonService.queryAdmissStatus();
  1518. Map<String,String> admissStatusMap = null;
  1519. if(admissStatuses!=null && admissStatuses.size()>0){
  1520. admissStatusMap=admissStatuses.stream().collect(Collectors.toMap(CodeNameEntity::getCode,CodeNameEntity::getName));
  1521. }
  1522. for(MzZyReq mzZyReq:mzList){
  1523. if(StringUtils.isNotBlank(mzZyReq.getDeptCode())){
  1524. mzZyReq.setDeptCode(zdUnitCodeService.queryDeptNameByIdInCache(mzZyReq.getDeptCode()));
  1525. }
  1526. if(StringUtils.isNotBlank(mzZyReq.getReqWard())){
  1527. mzZyReq.setReqWard(zdUnitCodeService.queryDeptNameByIdInCache(mzZyReq.getReqWard()));
  1528. }
  1529. if(StringUtils.isNotBlank(mzZyReq.getDoctorCode())){
  1530. Employee employee= employeeService.queryByUserCode(mzZyReq.getDoctorCode());
  1531. if(employee!=null){
  1532. mzZyReq.setDoctorCode(employee.getEmployeeName());
  1533. }
  1534. }
  1535. if(StringUtils.isNotBlank(mzZyReq.getAdmissStatus()) && admissStatusMap!=null){
  1536. mzZyReq.setAdmissStatus(admissStatusMap.get(mzZyReq.getAdmissStatus()));
  1537. }
  1538. if(StringUtils.isNotBlank(mzZyReq.getReqStatus())){
  1539. mzZyReq.setReqStatus(YesNoEnum.YES.code.toString().equals(mzZyReq.getReqStatus())?"入院":"申请");
  1540. }
  1541. }
  1542. }
  1543. resultMap.put("code", 0);
  1544. resultMap.put("message", "门诊医生 (科室)查询住院申请明细成功");
  1545. resultMap.put("data", mzList);
  1546. return resultMap;
  1547. } catch (Exception e) {
  1548. e.printStackTrace();
  1549. log.error("门诊医生 (科室)查询住院申请明细失败,错误信息{}", e);
  1550. resultMap.put("code", -1);
  1551. resultMap.put("message", "门诊医生 (科室)查询住院申请明细失败");
  1552. return resultMap;
  1553. }
  1554. }
  1555. /**
  1556. * 门诊医生 (科室)绩效统计
  1557. * @param beginDate
  1558. * @param endDate
  1559. * @param type 1 门诊医生列表 2 科室列表
  1560. * @return
  1561. */
  1562. @UserLoginToken
  1563. @RequestMapping(value = "/getDoctorPerformanceStatistics", method = {RequestMethod.GET})
  1564. public Map<String, Object> getDoctorPerformanceStatistics(@RequestParam("beginDate") String beginDate, @RequestParam("endDate") String endDate, @RequestParam("type") Integer type, HttpServletRequest httpServletRequest) {
  1565. Map<String, Object> resultMap = new HashMap<>();
  1566. try {
  1567. if (StringUtils.isBlank(beginDate)) {
  1568. resultMap.put("code", -1);
  1569. resultMap.put("message", "门诊医生 (科室)绩效统计失败,开始时间为空");
  1570. return resultMap;
  1571. }
  1572. if (StringUtils.isBlank(endDate)) {
  1573. resultMap.put("code", -1);
  1574. resultMap.put("message", "门诊医生 (科室)绩效统计失败,结束时间为空");
  1575. return resultMap;
  1576. }
  1577. if (type==null) {
  1578. resultMap.put("code", -1);
  1579. resultMap.put("message", "门诊医生 (科室)绩效统计失败,报表类型为空为空");
  1580. return resultMap;
  1581. }
  1582. User tokenUser = TokenUtil.getUser(httpServletRequest);
  1583. String warnDept=null;
  1584. String doctorCode=null;
  1585. if(type==1){
  1586. doctorCode=tokenUser.getUserIdCode();
  1587. }else {
  1588. Employee employee= employeeService.queryByUserCode(tokenUser.getUserIdCode());
  1589. if(employee!=null){
  1590. warnDept=employee.getDeptCode();
  1591. }
  1592. }
  1593. List<Map<String, Object>> mzList = chargeFeeVoService.queryDoctorPerformanceStatistics(beginDate, endDate, doctorCode, warnDept);
  1594. List<Map<String, Object>> data = new ArrayList<>();
  1595. Map<String,Object> deptMap = new HashMap<>();
  1596. Map<String,Map<String, Object>> doctorMap = new HashMap<>();
  1597. //列名集合
  1598. List<String> title =new ArrayList<>();
  1599. title.add("科室");
  1600. title.add("医生");
  1601. title.add("工号");
  1602. if(mzList!=null && mzList.size()>0){
  1603. deptMap.put("合计",BigDecimal.ZERO);
  1604. for(Map<String, Object> map:mzList){
  1605. String doctorId=(String) map.get("doctor_id");
  1606. Map<String, Object> temp = doctorMap.get(doctorId);
  1607. if(temp==null){
  1608. temp=new HashMap<>();
  1609. doctorMap.put(doctorId,temp);
  1610. data.add(temp);
  1611. temp.put("科室",map.get("warn_dept"));
  1612. Employee employee= employeeService.queryByUserCode(doctorId);
  1613. if(employee!=null){
  1614. temp.put("医生",employee.getEmployeeName());
  1615. //temp.put("doctor_id",doctorId);
  1616. temp.put("工号",employee.getCodeRs());
  1617. temp.put("合计",BigDecimal.ZERO);
  1618. }
  1619. }
  1620. Double sl=(Double)map.get("sl");
  1621. BigDecimal tempAmount =BigDecimal.ZERO;
  1622. if(sl!=null){
  1623. tempAmount = BigDecimal.valueOf(sl);
  1624. }
  1625. String auditCode=(String) map.get("audit_code");
  1626. ZyZdAuditItem zyZdAuditItem=zyZdAuditItemService.queryByCode(auditCode);
  1627. if(zyZdAuditItem!=null){
  1628. BillItem billItem= mzBillItemService.queryZyBillItemByCode(zyZdAuditItem.getParentCode());
  1629. auditCode=billItem==null?"":billItem.getName();
  1630. }else {
  1631. BillItem billItem= mzBillItemService.queryMzBillItemByCode(auditCode);
  1632. auditCode=billItem==null?"":billItem.getName();
  1633. }
  1634. temp.put(auditCode,tempAmount);
  1635. BigDecimal totalAmount = (BigDecimal)temp.get("合计");
  1636. totalAmount=totalAmount.add(tempAmount==null?BigDecimal.ONE:tempAmount);
  1637. temp.put("合计",totalAmount);
  1638. BigDecimal tempDeptAmount= (BigDecimal)deptMap.get(auditCode);
  1639. if(tempDeptAmount==null){
  1640. tempDeptAmount=BigDecimal.ZERO;
  1641. }
  1642. tempDeptAmount=tempDeptAmount.add(tempAmount==null?BigDecimal.ONE:tempAmount);
  1643. deptMap.put(auditCode,tempDeptAmount);
  1644. BigDecimal deptTotalAmount = (BigDecimal)deptMap.get("合计");
  1645. deptTotalAmount=deptTotalAmount.add(tempAmount==null?BigDecimal.ONE:tempAmount);
  1646. deptMap.put("合计",deptTotalAmount);
  1647. if(!title.contains(auditCode)){
  1648. title.add(auditCode);
  1649. }
  1650. }
  1651. }
  1652. title.add("合计");
  1653. //列表数据集
  1654. List<List<Object>> bodyData = new ArrayList<>();
  1655. List<BigDecimal> totalData = new ArrayList<>();
  1656. if(data.size()>0){
  1657. for(Map<String, Object> map :data){
  1658. if(map==null || map.size()==0){
  1659. continue;
  1660. }
  1661. List<Object> tempList = new ArrayList<>();
  1662. bodyData.add(tempList);
  1663. for(String str:title){
  1664. tempList.add(map.get(str));
  1665. }
  1666. }
  1667. for(String str:title){
  1668. BigDecimal totalAmount=(BigDecimal) deptMap.get(str);
  1669. if(totalAmount==null){
  1670. continue;
  1671. }
  1672. totalData.add(totalAmount);
  1673. }
  1674. }
  1675. resultMap.put("code", 0);
  1676. resultMap.put("message", "门诊医生 (科室)绩效统计成功");
  1677. resultMap.put("title", title);
  1678. resultMap.put("bodyData", bodyData);
  1679. resultMap.put("totalData", totalData);
  1680. return resultMap;
  1681. } catch (Exception e) {
  1682. e.printStackTrace();
  1683. log.error("门诊医生 (科室)绩效统计失败,错误信息{}", e);
  1684. resultMap.put("code", -1);
  1685. resultMap.put("message", "门诊医生 (科室)绩效统计失败");
  1686. return resultMap;
  1687. }
  1688. }
  1689. }