AgreementDataService.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. package com.ydtech.modules.largescreen.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
  5. import com.ydtech.modules.largescreen.dao.AgreementDataMapper;
  6. import com.ydtech.modules.largescreen.dao.InvInsuranceCompanySettlementsMapper;
  7. import com.ydtech.modules.largescreen.model.*;
  8. import com.ydtech.modules.largescreen.model.query.*;
  9. import com.ydtech.modules.largescreen.service.IAgreementDataService;
  10. import com.ydtech.utils.idgen.IdGenerate;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import org.springframework.web.bind.annotation.RequestBody;
  15. import java.time.LocalDate;
  16. import java.time.LocalDateTime;
  17. import java.time.YearMonth;
  18. import java.time.format.DateTimeFormatter;
  19. import java.time.temporal.ChronoUnit;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. @Service
  23. public class AgreementDataService implements IAgreementDataService {
  24. @Autowired
  25. AgreementDataMapper agreementDataMapper;
  26. @Autowired
  27. InvInsuranceCompanySettlementsService invInsuranceCompanySettlementsService;
  28. @Override
  29. public List<AgreementData> getCompanySumData(DataQuery dataQuery) {
  30. return agreementDataMapper.getCompanySumData(dataQuery);
  31. }
  32. @Override
  33. public List<OrderStatusData> getOrderStatusData(DataQuery dataQuery) {
  34. List<OrderStatusData> orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery);
  35. List<OrderStatusData> newOrderStatusData = new ArrayList<>();
  36. orderStatusData.forEach(item -> {
  37. InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.matchKey(item.getOrderStatusCode());
  38. if (insOrderStatusEnum != null) {
  39. item.setOrderStatusName(insOrderStatusEnum.getDesc());
  40. newOrderStatusData.add(item);
  41. }
  42. });
  43. return newOrderStatusData;
  44. }
  45. @Override
  46. public List<CompanyData> getCompanyOrderStatusData(DataQuery dataQuery) {
  47. //获取有协议的保险公司
  48. List<CompanyData> companys = agreementDataMapper.getCompanys();
  49. companys.forEach(item->{
  50. dataQuery.setCompanyId(item.getCompanyId());
  51. List<OrderStatusData> orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery);
  52. List<OrderStatusData> newOrderStatusData = new ArrayList<>();
  53. orderStatusData.forEach(item1 -> {
  54. InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.matchKey(item1.getOrderStatusCode());
  55. if (insOrderStatusEnum != null) {
  56. item1.setOrderStatusName(insOrderStatusEnum.getDesc());
  57. newOrderStatusData.add(item1);
  58. }
  59. });
  60. item.setOrderStatusData(newOrderStatusData);
  61. });
  62. return companys;
  63. }
  64. @Override
  65. public List<MapData> getMapData(DataQuery dataQuery) {
  66. return agreementDataMapper.getMapData(dataQuery);
  67. }
  68. @Override
  69. public Integer getOrderNumber(DataQuery dataQuery) {
  70. return agreementDataMapper.getOrderNumber(dataQuery);
  71. }
  72. /**
  73. * 获取一周内的数据
  74. * @return
  75. */
  76. @Override
  77. public List<OrderStatusData> getWeekData() {
  78. //获取一周内的起始日期
  79. List<String> weekDate = this.getWeekDate();
  80. List<OrderStatusData> resultList = new ArrayList<>();
  81. weekDate.forEach(date -> {
  82. DataQuery dataQuery = new DataQuery();
  83. dataQuery.setStartDate(date + " 00:00:00");
  84. dataQuery.setEndDate(date + " 23:59:59");
  85. dataQuery.setOrderStatus("3");
  86. List<OrderStatusData> orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery);
  87. if(orderStatusData.isEmpty()){
  88. OrderStatusData orderStatusData1 = new OrderStatusData();
  89. orderStatusData1.setOrderStatusName("已完成");
  90. orderStatusData1.setOrderStatusCode("3");
  91. orderStatusData1.setDate(date);
  92. orderStatusData.add(orderStatusData1);
  93. }else{
  94. orderStatusData.get(0).setDate(date);
  95. }
  96. resultList.addAll(orderStatusData);
  97. });
  98. return resultList;
  99. }
  100. @Override
  101. public List<OrderStatusData> getMonthData() {
  102. List<String> monthDate = this.getMonthDate();
  103. List<OrderStatusData> resultList = new ArrayList<>();
  104. monthDate.forEach(date -> {
  105. DataQuery dataQuery = new DataQuery();
  106. dataQuery.setStartDate(date + " 00:00:00");
  107. dataQuery.setEndDate(date + " 23:59:59");
  108. dataQuery.setOrderStatus("3");
  109. List<OrderStatusData> orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery);
  110. if(orderStatusData.isEmpty()){
  111. OrderStatusData orderStatusData1 = new OrderStatusData();
  112. orderStatusData1.setOrderStatusName("已完成");
  113. orderStatusData1.setOrderStatusCode("3");
  114. orderStatusData1.setDate(date);
  115. orderStatusData.add(orderStatusData1);
  116. }else{
  117. orderStatusData.get(0).setDate(date);
  118. }
  119. resultList.addAll(orderStatusData);
  120. });
  121. return resultList;
  122. }
  123. @Override
  124. public List<OrderStatusData> getYearData() {
  125. List<String> yearDate = this.getYearDate();
  126. List<OrderStatusData> resultList = new ArrayList<>();
  127. yearDate.forEach(date -> {
  128. DataQuery dataQuery = new DataQuery();
  129. dataQuery.setStartDate(date + "-01 00:00:00");
  130. YearMonth yearMonth = YearMonth.parse(date, DateTimeFormatter.ofPattern("yyyy-MM"));
  131. dataQuery.setEndDate(date + "-" + yearMonth.lengthOfMonth() +" 23:59:59");
  132. dataQuery.setOrderStatus("3");
  133. List<OrderStatusData> orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery);
  134. if(orderStatusData.isEmpty()){
  135. OrderStatusData orderStatusData1 = new OrderStatusData();
  136. orderStatusData1.setOrderStatusName("已完成");
  137. orderStatusData1.setOrderStatusCode("3");
  138. orderStatusData1.setDate(date);
  139. orderStatusData.add(orderStatusData1);
  140. }else{
  141. orderStatusData.get(0).setDate(date);
  142. orderStatusData.get(0).setOrderStatusName(date);
  143. }
  144. resultList.addAll(orderStatusData);
  145. });
  146. return resultList;
  147. }
  148. @Override
  149. public List<CompanyData> getCompanys() {
  150. List<CompanyData> companys = agreementDataMapper.getCompanys();
  151. // List<Agreement> agreements = agreementDataMapper.getAgreements();
  152. // companys.forEach(companyData -> {
  153. // List<Agreement> agreements1 = new ArrayList<>();
  154. // agreements.forEach(agreement -> {
  155. // if(agreement.getCompanyId().equals(companyData.getCompanyId())){
  156. // agreements1.add(agreement);
  157. // }
  158. // });
  159. // companyData.setAgreementList(agreements1);
  160. // });
  161. return companys;
  162. }
  163. @Override
  164. public List<CompanyInfoData> getCompanyDataById(CompanyQuery companyQuery) {
  165. return agreementDataMapper.getCompanyDataById(companyQuery);
  166. }
  167. //获取一周内的日期
  168. public static List<String> getWeekDate(){
  169. List<String> list = new ArrayList<>();
  170. //获取一周内的起始日期
  171. // 获取当前日期
  172. LocalDate currentDate = LocalDate.now();
  173. // 获取前一周的起始日期
  174. LocalDate oneWeekAgo = currentDate.minusWeeks(1);
  175. // 包括今天 去除1天
  176. oneWeekAgo = oneWeekAgo.plusDays(1);
  177. // 输出前一周每天的起始日期
  178. for (int i = 0; i < 6; i++) {
  179. // 获取每天的起始日期时间
  180. LocalDateTime startOfDay = oneWeekAgo.atStartOfDay();
  181. list.add(startOfDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  182. oneWeekAgo = oneWeekAgo.plusDays(1);
  183. }
  184. list.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  185. return list;
  186. }
  187. //获取一个月内的日期
  188. public static List<String> getMonthDate(){
  189. List<String> list = new ArrayList<>();
  190. //获取一周内的起始日期
  191. //获取当前日期
  192. LocalDate currentDate = LocalDate.now();
  193. // 获取前一周的起始日期
  194. LocalDate oneWeekAgo = currentDate.minusMonths(1);
  195. // 包括今天 去除1天
  196. oneWeekAgo = oneWeekAgo.plusDays(1);
  197. // 输出前一周每天的起始日期
  198. int len = Integer.parseInt(String.valueOf(ChronoUnit.DAYS.between(oneWeekAgo, currentDate)));
  199. for (int i = 0; i < len; i++) {
  200. // 获取每天的起始日期时间
  201. LocalDateTime startOfDay = oneWeekAgo.atStartOfDay();
  202. list.add(startOfDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  203. oneWeekAgo = oneWeekAgo.plusDays(1);
  204. }
  205. list.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  206. return list;
  207. }
  208. //获取一年内的日期
  209. public static List<String> getYearDate(){
  210. List<String> list = new ArrayList<>();
  211. //获取一周内的起始日期
  212. //获取当前日期
  213. LocalDate currentDate = LocalDate.now();
  214. // 获取前一周的起始日期
  215. LocalDate oneWeekAgo = currentDate.minusYears(1);
  216. // 包括今天 去除1天
  217. oneWeekAgo = oneWeekAgo.plusDays(1);
  218. // 输出前一周每天的起始日期
  219. int len = Integer.parseInt(String.valueOf(ChronoUnit.MONTHS.between(oneWeekAgo, currentDate)));
  220. for (int i = 0; i < len; i++) {
  221. // 获取每天的起始日期时间
  222. oneWeekAgo = oneWeekAgo.plusMonths(1);
  223. LocalDateTime startOfDay = oneWeekAgo.atStartOfDay();
  224. list.add(startOfDay.format(DateTimeFormatter.ofPattern("yyyy-MM")));
  225. }
  226. list.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM")));
  227. return list;
  228. }
  229. public List<InsuranceCompanyBusinessSituation> insuranceCompanyBusinessSituation(InsuranceCompanyBusinessSituationQuery insuranceCompanyBusinessSituationQuery) {
  230. LocalDateTime currentDateTime = LocalDateTime.now();
  231. String dateFormat = "yyyy-dd-MM";
  232. DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);
  233. if(insuranceCompanyBusinessSituationQuery.getSignStartTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignStartTime())){
  234. insuranceCompanyBusinessSituationQuery.setSignStartTime(currentDateTime.format(formatter) + " 00:00:00");
  235. }
  236. if(insuranceCompanyBusinessSituationQuery.getSignEndTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignEndTime())){
  237. insuranceCompanyBusinessSituationQuery.setSignEndTime(currentDateTime.format(formatter) + " 23:59:59");
  238. }
  239. return agreementDataMapper.insuranceCompanyBusinessSituation(insuranceCompanyBusinessSituationQuery);
  240. }
  241. @Override
  242. public List<InsuranceCompanyBusinessSituation> channelBusinessSituation(InsuranceCompanyBusinessSituationQuery insuranceCompanyBusinessSituationQuery) {
  243. LocalDateTime currentDateTime = LocalDateTime.now();
  244. String dateFormat = "yyyy-dd-MM";
  245. DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);
  246. if(insuranceCompanyBusinessSituationQuery.getSignStartTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignStartTime())){
  247. insuranceCompanyBusinessSituationQuery.setSignStartTime(currentDateTime.format(formatter) + " 00:00:00");
  248. }
  249. if(insuranceCompanyBusinessSituationQuery.getSignEndTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignEndTime())){
  250. insuranceCompanyBusinessSituationQuery.setSignEndTime(currentDateTime.format(formatter) + " 23:59:59");
  251. }
  252. return agreementDataMapper.channelBusinessSituation(insuranceCompanyBusinessSituationQuery);
  253. }
  254. @Override
  255. public List<ChannelSettlements> channelSettlement(ChannelSettlementsQuery channelSettlementsQuery) {
  256. List<ChannelSettlements> channelSettlements = agreementDataMapper.channelSettlement(channelSettlementsQuery);
  257. return channelSettlements;
  258. }
  259. @Override
  260. @Transactional
  261. public List<InvInsuranceCompanySettlements> insuranceCompanySettlement(InvInsuranceCompanySettlementsQuery invInsuranceCompanySettlementsQuery) {
  262. if(invInsuranceCompanySettlementsQuery.getDate() == null || invInsuranceCompanySettlementsQuery.getDate() == ""){
  263. invInsuranceCompanySettlementsQuery.setDate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM")));
  264. }
  265. YearMonth yearMonth = YearMonth.parse(invInsuranceCompanySettlementsQuery.getDate());
  266. LocalDate lastDayOfMonth = yearMonth.atEndOfMonth();
  267. invInsuranceCompanySettlementsQuery.setStartTime(invInsuranceCompanySettlementsQuery.getDate() + "-01");
  268. invInsuranceCompanySettlementsQuery.setEndTime(lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  269. List<InvInsuranceCompanySettlements> totalReceivableAmount = agreementDataMapper.getTotalReceivableAmount(invInsuranceCompanySettlementsQuery);
  270. InvInsuranceCompanySettlements invInsuranceCompanySettlements = new InvInsuranceCompanySettlements();
  271. invInsuranceCompanySettlements.setDate(invInsuranceCompanySettlementsQuery.getDate());
  272. invInsuranceCompanySettlements.setInsuranceId(invInsuranceCompanySettlementsQuery.getInsuranceId());
  273. invInsuranceCompanySettlements.setInsuranceDept(invInsuranceCompanySettlementsQuery.getInsuranceDept());
  274. List<InvInsuranceCompanySettlements> exist = invInsuranceCompanySettlementsService.isExist(invInsuranceCompanySettlements);
  275. //将总数放到invInsuranceCompanySettlements 表中
  276. totalReceivableAmount.forEach(amount->{
  277. amount.setDate(invInsuranceCompanySettlementsQuery.getDate());
  278. long count = exist.stream().filter(x -> x.getInsuranceId().equals(amount.getInsuranceId()) && x.getInsuranceDept().equals(amount.getInsuranceDept()) && x.getDate().equals(amount.getDate())).count();
  279. if(count > 0){
  280. InvInsuranceCompanySettlements invInsuranceCompanySettlement = exist.stream().filter(x -> x.getInsuranceId().equals(amount.getInsuranceId()) && x.getInsuranceDept().equals(amount.getInsuranceDept()) && x.getDate().equals(amount.getDate())).findFirst().get();
  281. invInsuranceCompanySettlement.setAmountReceivable(amount.getAmountReceivable());
  282. invInsuranceCompanySettlementsService.updateById(invInsuranceCompanySettlement);
  283. }else{
  284. amount.setId(IdGenerate.nextId());
  285. invInsuranceCompanySettlementsService.save(amount);
  286. }
  287. });
  288. //从 invInsuranceCompanySettlements 中查询数据
  289. LambdaQueryWrapper<InvInsuranceCompanySettlements> queryWrapper = new LambdaQueryWrapper<InvInsuranceCompanySettlements>();
  290. if(invInsuranceCompanySettlementsQuery.getInsuranceId() != null && invInsuranceCompanySettlementsQuery.getInsuranceId() != ""){
  291. queryWrapper.eq(InvInsuranceCompanySettlements::getInsuranceId,invInsuranceCompanySettlementsQuery.getInsuranceId());
  292. }
  293. if(invInsuranceCompanySettlementsQuery.getInsuranceDept() != null && invInsuranceCompanySettlementsQuery.getInsuranceDept() != ""){
  294. queryWrapper.eq(InvInsuranceCompanySettlements::getInsuranceDept,invInsuranceCompanySettlementsQuery.getInsuranceDept());
  295. }
  296. if(invInsuranceCompanySettlementsQuery.getDate() != null && invInsuranceCompanySettlementsQuery.getDate() != ""){
  297. queryWrapper.eq(InvInsuranceCompanySettlements::getDate,invInsuranceCompanySettlementsQuery.getDate());
  298. }
  299. List<InvInsuranceCompanySettlements> list = invInsuranceCompanySettlementsService.list(queryWrapper);
  300. return list;
  301. }
  302. @Override
  303. public boolean updateInsuranceCompanySettlement(InvInsuranceCompanySettlements invInsuranceCompanySettlements) {
  304. invInsuranceCompanySettlements.setAmountsOutstanding(invInsuranceCompanySettlements.getReconciliationOfAmountsDue().subtract(invInsuranceCompanySettlements.getAmountReceived()));
  305. return invInsuranceCompanySettlementsService.updateById(invInsuranceCompanySettlements);
  306. }
  307. }