package com.ydtech.modules.largescreen.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.constants.enums.dict.InsOrderStatusEnum; import com.ydtech.modules.largescreen.dao.AgreementDataMapper; import com.ydtech.modules.largescreen.dao.InvInsuranceCompanySettlementsMapper; import com.ydtech.modules.largescreen.model.*; import com.ydtech.modules.largescreen.model.query.*; import com.ydtech.modules.largescreen.service.IAgreementDataService; import com.ydtech.utils.idgen.IdGenerate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; @Service public class AgreementDataService implements IAgreementDataService { @Autowired AgreementDataMapper agreementDataMapper; @Autowired InvInsuranceCompanySettlementsService invInsuranceCompanySettlementsService; @Override public List getCompanySumData(DataQuery dataQuery) { return agreementDataMapper.getCompanySumData(dataQuery); } @Override public List getOrderStatusData(DataQuery dataQuery) { List orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery); List newOrderStatusData = new ArrayList<>(); orderStatusData.forEach(item -> { InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.matchKey(item.getOrderStatusCode()); if (insOrderStatusEnum != null) { item.setOrderStatusName(insOrderStatusEnum.getDesc()); newOrderStatusData.add(item); } }); return newOrderStatusData; } @Override public List getCompanyOrderStatusData(DataQuery dataQuery) { //获取有协议的保险公司 List companys = agreementDataMapper.getCompanys(); companys.forEach(item->{ dataQuery.setCompanyId(item.getCompanyId()); List orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery); List newOrderStatusData = new ArrayList<>(); orderStatusData.forEach(item1 -> { InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.matchKey(item1.getOrderStatusCode()); if (insOrderStatusEnum != null) { item1.setOrderStatusName(insOrderStatusEnum.getDesc()); newOrderStatusData.add(item1); } }); item.setOrderStatusData(newOrderStatusData); }); return companys; } @Override public List getMapData(DataQuery dataQuery) { return agreementDataMapper.getMapData(dataQuery); } @Override public Integer getOrderNumber(DataQuery dataQuery) { return agreementDataMapper.getOrderNumber(dataQuery); } /** * 获取一周内的数据 * @return */ @Override public List getWeekData() { //获取一周内的起始日期 List weekDate = this.getWeekDate(); List resultList = new ArrayList<>(); weekDate.forEach(date -> { DataQuery dataQuery = new DataQuery(); dataQuery.setStartDate(date + " 00:00:00"); dataQuery.setEndDate(date + " 23:59:59"); dataQuery.setOrderStatus("3"); List orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery); if(orderStatusData.isEmpty()){ OrderStatusData orderStatusData1 = new OrderStatusData(); orderStatusData1.setOrderStatusName("已完成"); orderStatusData1.setOrderStatusCode("3"); orderStatusData1.setDate(date); orderStatusData.add(orderStatusData1); }else{ orderStatusData.get(0).setDate(date); } resultList.addAll(orderStatusData); }); return resultList; } @Override public List getMonthData() { List monthDate = this.getMonthDate(); List resultList = new ArrayList<>(); monthDate.forEach(date -> { DataQuery dataQuery = new DataQuery(); dataQuery.setStartDate(date + " 00:00:00"); dataQuery.setEndDate(date + " 23:59:59"); dataQuery.setOrderStatus("3"); List orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery); if(orderStatusData.isEmpty()){ OrderStatusData orderStatusData1 = new OrderStatusData(); orderStatusData1.setOrderStatusName("已完成"); orderStatusData1.setOrderStatusCode("3"); orderStatusData1.setDate(date); orderStatusData.add(orderStatusData1); }else{ orderStatusData.get(0).setDate(date); } resultList.addAll(orderStatusData); }); return resultList; } @Override public List getYearData() { List yearDate = this.getYearDate(); List resultList = new ArrayList<>(); yearDate.forEach(date -> { DataQuery dataQuery = new DataQuery(); dataQuery.setStartDate(date + "-01 00:00:00"); YearMonth yearMonth = YearMonth.parse(date, DateTimeFormatter.ofPattern("yyyy-MM")); dataQuery.setEndDate(date + "-" + yearMonth.lengthOfMonth() +" 23:59:59"); dataQuery.setOrderStatus("3"); List orderStatusData = agreementDataMapper.getOrderStatusData(dataQuery); if(orderStatusData.isEmpty()){ OrderStatusData orderStatusData1 = new OrderStatusData(); orderStatusData1.setOrderStatusName("已完成"); orderStatusData1.setOrderStatusCode("3"); orderStatusData1.setDate(date); orderStatusData.add(orderStatusData1); }else{ orderStatusData.get(0).setDate(date); orderStatusData.get(0).setOrderStatusName(date); } resultList.addAll(orderStatusData); }); return resultList; } @Override public List getCompanys() { List companys = agreementDataMapper.getCompanys(); // List agreements = agreementDataMapper.getAgreements(); // companys.forEach(companyData -> { // List agreements1 = new ArrayList<>(); // agreements.forEach(agreement -> { // if(agreement.getCompanyId().equals(companyData.getCompanyId())){ // agreements1.add(agreement); // } // }); // companyData.setAgreementList(agreements1); // }); return companys; } @Override public List getCompanyDataById(CompanyQuery companyQuery) { return agreementDataMapper.getCompanyDataById(companyQuery); } //获取一周内的日期 public static List getWeekDate(){ List list = new ArrayList<>(); //获取一周内的起始日期 // 获取当前日期 LocalDate currentDate = LocalDate.now(); // 获取前一周的起始日期 LocalDate oneWeekAgo = currentDate.minusWeeks(1); // 包括今天 去除1天 oneWeekAgo = oneWeekAgo.plusDays(1); // 输出前一周每天的起始日期 for (int i = 0; i < 6; i++) { // 获取每天的起始日期时间 LocalDateTime startOfDay = oneWeekAgo.atStartOfDay(); list.add(startOfDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); oneWeekAgo = oneWeekAgo.plusDays(1); } list.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); return list; } //获取一个月内的日期 public static List getMonthDate(){ List list = new ArrayList<>(); //获取一周内的起始日期 //获取当前日期 LocalDate currentDate = LocalDate.now(); // 获取前一周的起始日期 LocalDate oneWeekAgo = currentDate.minusMonths(1); // 包括今天 去除1天 oneWeekAgo = oneWeekAgo.plusDays(1); // 输出前一周每天的起始日期 int len = Integer.parseInt(String.valueOf(ChronoUnit.DAYS.between(oneWeekAgo, currentDate))); for (int i = 0; i < len; i++) { // 获取每天的起始日期时间 LocalDateTime startOfDay = oneWeekAgo.atStartOfDay(); list.add(startOfDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); oneWeekAgo = oneWeekAgo.plusDays(1); } list.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); return list; } //获取一年内的日期 public static List getYearDate(){ List list = new ArrayList<>(); //获取一周内的起始日期 //获取当前日期 LocalDate currentDate = LocalDate.now(); // 获取前一周的起始日期 LocalDate oneWeekAgo = currentDate.minusYears(1); // 包括今天 去除1天 oneWeekAgo = oneWeekAgo.plusDays(1); // 输出前一周每天的起始日期 int len = Integer.parseInt(String.valueOf(ChronoUnit.MONTHS.between(oneWeekAgo, currentDate))); for (int i = 0; i < len; i++) { // 获取每天的起始日期时间 oneWeekAgo = oneWeekAgo.plusMonths(1); LocalDateTime startOfDay = oneWeekAgo.atStartOfDay(); list.add(startOfDay.format(DateTimeFormatter.ofPattern("yyyy-MM"))); } list.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM"))); return list; } public List insuranceCompanyBusinessSituation(InsuranceCompanyBusinessSituationQuery insuranceCompanyBusinessSituationQuery) { LocalDateTime currentDateTime = LocalDateTime.now(); String dateFormat = "yyyy-dd-MM"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); if(insuranceCompanyBusinessSituationQuery.getSignStartTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignStartTime())){ insuranceCompanyBusinessSituationQuery.setSignStartTime(currentDateTime.format(formatter) + " 00:00:00"); } if(insuranceCompanyBusinessSituationQuery.getSignEndTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignEndTime())){ insuranceCompanyBusinessSituationQuery.setSignEndTime(currentDateTime.format(formatter) + " 23:59:59"); } return agreementDataMapper.insuranceCompanyBusinessSituation(insuranceCompanyBusinessSituationQuery); } @Override public List channelBusinessSituation(InsuranceCompanyBusinessSituationQuery insuranceCompanyBusinessSituationQuery) { LocalDateTime currentDateTime = LocalDateTime.now(); String dateFormat = "yyyy-dd-MM"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); if(insuranceCompanyBusinessSituationQuery.getSignStartTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignStartTime())){ insuranceCompanyBusinessSituationQuery.setSignStartTime(currentDateTime.format(formatter) + " 00:00:00"); } if(insuranceCompanyBusinessSituationQuery.getSignEndTime() == null || "".equals(insuranceCompanyBusinessSituationQuery.getSignEndTime())){ insuranceCompanyBusinessSituationQuery.setSignEndTime(currentDateTime.format(formatter) + " 23:59:59"); } return agreementDataMapper.channelBusinessSituation(insuranceCompanyBusinessSituationQuery); } @Override public List channelSettlement(ChannelSettlementsQuery channelSettlementsQuery) { List channelSettlements = agreementDataMapper.channelSettlement(channelSettlementsQuery); return channelSettlements; } @Override @Transactional public List insuranceCompanySettlement(InvInsuranceCompanySettlementsQuery invInsuranceCompanySettlementsQuery) { if(invInsuranceCompanySettlementsQuery.getDate() == null || invInsuranceCompanySettlementsQuery.getDate() == ""){ invInsuranceCompanySettlementsQuery.setDate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM"))); } YearMonth yearMonth = YearMonth.parse(invInsuranceCompanySettlementsQuery.getDate()); LocalDate lastDayOfMonth = yearMonth.atEndOfMonth(); invInsuranceCompanySettlementsQuery.setStartTime(invInsuranceCompanySettlementsQuery.getDate() + "-01"); invInsuranceCompanySettlementsQuery.setEndTime(lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); List totalReceivableAmount = agreementDataMapper.getTotalReceivableAmount(invInsuranceCompanySettlementsQuery); InvInsuranceCompanySettlements invInsuranceCompanySettlements = new InvInsuranceCompanySettlements(); invInsuranceCompanySettlements.setDate(invInsuranceCompanySettlementsQuery.getDate()); invInsuranceCompanySettlements.setInsuranceId(invInsuranceCompanySettlementsQuery.getInsuranceId()); invInsuranceCompanySettlements.setInsuranceDept(invInsuranceCompanySettlementsQuery.getInsuranceDept()); List exist = invInsuranceCompanySettlementsService.isExist(invInsuranceCompanySettlements); //将总数放到invInsuranceCompanySettlements 表中 totalReceivableAmount.forEach(amount->{ amount.setDate(invInsuranceCompanySettlementsQuery.getDate()); long count = exist.stream().filter(x -> x.getInsuranceId().equals(amount.getInsuranceId()) && x.getInsuranceDept().equals(amount.getInsuranceDept()) && x.getDate().equals(amount.getDate())).count(); if(count > 0){ InvInsuranceCompanySettlements invInsuranceCompanySettlement = exist.stream().filter(x -> x.getInsuranceId().equals(amount.getInsuranceId()) && x.getInsuranceDept().equals(amount.getInsuranceDept()) && x.getDate().equals(amount.getDate())).findFirst().get(); invInsuranceCompanySettlement.setAmountReceivable(amount.getAmountReceivable()); invInsuranceCompanySettlementsService.updateById(invInsuranceCompanySettlement); }else{ amount.setId(IdGenerate.nextId()); invInsuranceCompanySettlementsService.save(amount); } }); //从 invInsuranceCompanySettlements 中查询数据 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); if(invInsuranceCompanySettlementsQuery.getInsuranceId() != null && invInsuranceCompanySettlementsQuery.getInsuranceId() != ""){ queryWrapper.eq(InvInsuranceCompanySettlements::getInsuranceId,invInsuranceCompanySettlementsQuery.getInsuranceId()); } if(invInsuranceCompanySettlementsQuery.getInsuranceDept() != null && invInsuranceCompanySettlementsQuery.getInsuranceDept() != ""){ queryWrapper.eq(InvInsuranceCompanySettlements::getInsuranceDept,invInsuranceCompanySettlementsQuery.getInsuranceDept()); } if(invInsuranceCompanySettlementsQuery.getDate() != null && invInsuranceCompanySettlementsQuery.getDate() != ""){ queryWrapper.eq(InvInsuranceCompanySettlements::getDate,invInsuranceCompanySettlementsQuery.getDate()); } List list = invInsuranceCompanySettlementsService.list(queryWrapper); return list; } @Override public boolean updateInsuranceCompanySettlement(InvInsuranceCompanySettlements invInsuranceCompanySettlements) { invInsuranceCompanySettlements.setAmountsOutstanding(invInsuranceCompanySettlements.getReconciliationOfAmountsDue().subtract(invInsuranceCompanySettlements.getAmountReceived())); return invInsuranceCompanySettlementsService.updateById(invInsuranceCompanySettlements); } }