OrderDetailService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.miyzh.service;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.github.pagehelper.PageHelper;
  5. import com.github.pagehelper.PageInfo;
  6. import com.miyzh.dao.ClinicDao;
  7. import com.miyzh.dao.MedicineStoreDao;
  8. import com.miyzh.dao.OrderDetailDao;
  9. import com.miyzh.entity.*;
  10. import com.miyzh.entity.dto.MedicineReturnDto;
  11. import com.miyzh.entity.dto.MedicineStoreDto;
  12. import com.miyzh.entity.dto.OrderDetailDto;
  13. import com.mysql.cj.util.StringUtils;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.scheduling.annotation.Async;
  18. import org.springframework.stereotype.Service;
  19. import java.time.LocalDateTime;
  20. import java.time.format.DateTimeFormatter;
  21. import java.util.HashMap;
  22. import java.util.List;
  23. import java.util.Map;
  24. import java.util.stream.Collectors;
  25. /**
  26. * 结算明细
  27. */
  28. @Slf4j
  29. @Service
  30. public class OrderDetailService {
  31. @Autowired
  32. private ClinicDao clinicDao;
  33. @Autowired
  34. private OrderDetailDao orderDetailDao;
  35. @Value ("${postApi.orderUrl}")
  36. private String url;
  37. @Value("${postApi.pageSize}")
  38. private int pageSize;
  39. private static final String CLI_MED = "1"; // 西药销售明细(自费门诊)
  40. private static final String CLI_CHI_MED = "2"; // 中药销售明细(自费门诊)
  41. private static final String INS_CLC_MED = "3"; // 西药销售明细(医保门诊)
  42. private static final String INS_CLC_CHI_MED = "4"; // 中药销售明细(医保门诊)
  43. private static final String HOS_MED = "5"; // 西药销售明细(住院)
  44. private static final String HOS_CHI_MED = "6"; // 中药销售明细(住院)
  45. @Async
  46. public void uploadMedicine(List<Clinic> clinicList, String flag) throws InterruptedException, JsonProcessingException {
  47. long startTime = System.currentTimeMillis();
  48. PageInfo<OrderDetailTemp> page = new PageInfo<>();
  49. for(Clinic clinic : clinicList) {
  50. switch (flag) {
  51. case CLI_MED:
  52. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  53. orderDetailDao.listClcMedOrder(clinic.getClinicId());
  54. });
  55. break;
  56. case CLI_CHI_MED:
  57. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  58. orderDetailDao.listClcChinaMedOrder(clinic.getClinicId());
  59. });
  60. break;
  61. case INS_CLC_MED:
  62. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  63. orderDetailDao.listInsClcMedOrder(clinic.getClinicId());
  64. });
  65. break;
  66. case INS_CLC_CHI_MED:
  67. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  68. orderDetailDao.listInsClcChinaMedOrder(clinic.getClinicId());
  69. });
  70. break;
  71. case HOS_MED:
  72. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  73. orderDetailDao.listHosMedOrder(clinic.getClinicId());
  74. });
  75. break;
  76. case HOS_CHI_MED:
  77. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  78. orderDetailDao.listHosChinaMedOrder(clinic.getClinicId());
  79. });
  80. break;
  81. }
  82. if (page.getTotal() == 0) {
  83. continue;
  84. }
  85. Map<String, List<OrderDetailTemp>> map = new HashMap<>();
  86. if (HOS_MED.equals(flag) || HOS_CHI_MED.equals(flag)) {
  87. map = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getVisitCode));
  88. } else {
  89. map = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getStoreOrderNo));
  90. }
  91. for(Map.Entry<String, List<OrderDetailTemp>> msMap:map.entrySet()){
  92. OrderDetailDto orderDetailDto = new OrderDetailDto();
  93. orderDetailDto.setStoreCode(clinic.getStoreCode());
  94. orderDetailDto.setStoreOrderNo(msMap.getValue().get(0).getStoreOrderNo());
  95. if (StringUtils.isNullOrEmpty(msMap.getValue().get(0).getMisNo())) {
  96. orderDetailDto.setMisNo("99999999");
  97. } else {
  98. orderDetailDto.setMisNo(msMap.getValue().get(0).getMisNo());
  99. }
  100. orderDetailDto.setSettledTypeNo(msMap.getValue().get(0).getSettledTypeNo());
  101. orderDetailDto.setSettledTypeName(msMap.getValue().get(0).getSettledTypeName());
  102. orderDetailDto.setSettledstatus(msMap.getValue().get(0).getSettledstatus());
  103. orderDetailDto.setTotalAmt(msMap.getValue().get(0).getTotalAmt());
  104. orderDetailDto.setInsuranceAmt(msMap.getValue().get(0).getInsuranceAmt());
  105. orderDetailDto.setOperater(msMap.getValue().get(0).getOperater());
  106. orderDetailDto.setSaleDate(msMap.getValue().get(0).getSaleDate());
  107. orderDetailDto.setSaleTime(msMap.getValue().get(0).getSaleTime());
  108. orderDetailDto.setBuyMedPerson(msMap.getValue().get(0).getBuyMedPerson());
  109. orderDetailDto.setSex(msMap.getValue().get(0).getSex());
  110. orderDetailDto.setAge(msMap.getValue().get(0).getAge());
  111. orderDetailDto.setIdCard(msMap.getValue().get(0).getIdCard());
  112. orderDetailDto.setCredentialNum(msMap.getValue().get(0).getCredentialNum());
  113. List<OrderDetail> list = msMap.getValue()
  114. .stream()
  115. .map(OrderDetailTemp::temp2OrderDetail)
  116. .collect(Collectors.toList());
  117. orderDetailDto.setOrderDetails(list);
  118. this.upload(orderDetailDto);
  119. }
  120. if (page.getPages() > 1) {
  121. PageInfo<OrderDetailTemp> page1 = new PageInfo<>();
  122. for(int i = 2; i <= page.getPages(); i++) {
  123. switch (flag) {
  124. case CLI_MED:
  125. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  126. orderDetailDao.listClcMedOrder(clinic.getClinicId());
  127. });
  128. break;
  129. case CLI_CHI_MED:
  130. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  131. orderDetailDao.listClcChinaMedOrder(clinic.getClinicId());
  132. });
  133. break;
  134. case INS_CLC_MED:
  135. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  136. orderDetailDao.listInsClcMedOrder(clinic.getClinicId());
  137. });
  138. break;
  139. case INS_CLC_CHI_MED:
  140. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  141. orderDetailDao.listInsClcChinaMedOrder(clinic.getClinicId());
  142. });
  143. break;
  144. case HOS_MED:
  145. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  146. orderDetailDao.listHosMedOrder(clinic.getClinicId());
  147. });
  148. break;
  149. case HOS_CHI_MED:
  150. page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
  151. orderDetailDao.listHosChinaMedOrder(clinic.getClinicId());
  152. });
  153. break;
  154. }
  155. Map<String, List<OrderDetailTemp>> map1 = new HashMap<>();
  156. if (HOS_MED.equals(flag) || HOS_CHI_MED.equals(flag)) {
  157. map1 = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getVisitCode));
  158. } else {
  159. map1 = page.getList().stream().collect(Collectors.groupingBy(OrderDetailTemp::getStoreOrderNo));
  160. }
  161. for(Map.Entry<String, List<OrderDetailTemp>> msMap:map1.entrySet()){
  162. OrderDetailDto orderDetailDto = new OrderDetailDto();
  163. orderDetailDto.setStoreCode(clinic.getStoreCode());
  164. if (HOS_MED.equals(flag) || HOS_CHI_MED.equals(flag)) {
  165. orderDetailDto.setStoreOrderNo(msMap.getValue().get(0).getVisitCode());
  166. } else {
  167. orderDetailDto.setStoreOrderNo(msMap.getValue().get(0).getStoreOrderNo());
  168. }
  169. if (StringUtils.isNullOrEmpty(msMap.getValue().get(0).getMisNo())) {
  170. orderDetailDto.setMisNo("99999999");
  171. } else {
  172. orderDetailDto.setMisNo(msMap.getValue().get(0).getMisNo());
  173. }
  174. orderDetailDto.setSettledTypeNo(msMap.getValue().get(0).getSettledTypeNo());
  175. orderDetailDto.setSettledTypeName(msMap.getValue().get(0).getSettledTypeName());
  176. orderDetailDto.setSettledstatus(msMap.getValue().get(0).getSettledstatus());
  177. orderDetailDto.setTotalAmt(msMap.getValue().get(0).getTotalAmt());
  178. orderDetailDto.setInsuranceAmt(msMap.getValue().get(0).getInsuranceAmt());
  179. orderDetailDto.setOperater(msMap.getValue().get(0).getOperater());
  180. orderDetailDto.setSaleDate(msMap.getValue().get(0).getSaleDate());
  181. orderDetailDto.setSaleTime(msMap.getValue().get(0).getSaleTime());
  182. orderDetailDto.setBuyMedPerson(msMap.getValue().get(0).getBuyMedPerson());
  183. orderDetailDto.setSex(msMap.getValue().get(0).getSex());
  184. orderDetailDto.setAge(msMap.getValue().get(0).getAge());
  185. orderDetailDto.setIdCard(msMap.getValue().get(0).getIdCard());
  186. orderDetailDto.setCredentialNum(msMap.getValue().get(0).getCredentialNum());
  187. List<OrderDetail> list = msMap.getValue()
  188. .stream()
  189. .map(OrderDetailTemp::temp2OrderDetail)
  190. .collect(Collectors.toList());
  191. orderDetailDto.setOrderDetails(list);
  192. this.upload(orderDetailDto);
  193. }
  194. }
  195. }
  196. };
  197. long syncTime = System.currentTimeMillis();
  198. log.info("执行用时--{}", startTime - syncTime);
  199. };
  200. public void upload (Object o) throws JsonProcessingException {
  201. ObjectMapper objectMapper = new ObjectMapper();
  202. String params = objectMapper.writeValueAsString(o);
  203. System.out.println(params);
  204. // System.out.println(objectMapper.writeValueAsString(RestTemplateUtil.postHttp(url, params)));
  205. }
  206. }