package com.huaxu.service.impl; import com.huaxu.dao.RevenueMapper; import com.huaxu.dto.*; import com.huaxu.entity.MonthRevenueEntity; import com.huaxu.entity.MonthSellwaterEntity; import com.huaxu.model.LoginUser; import com.huaxu.quartz.entity.QuartzEntity; import com.huaxu.quartz.job.SyncMeterCountJob; import com.huaxu.quartz.service.JobAndTriggerService; import com.huaxu.service.RevenueService; import com.huaxu.util.UserUtil; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.util.*; /** * @description * @author yjy * @data 2021-2-24 */ @Service @Log4j2 public class RevenueServiceImpl implements RevenueService, InitializingBean { @Resource private RevenueMapper revenueMapper; @Autowired private JobAndTriggerService jobAndTriggerService; @Autowired private RestTemplate restTemplate; @Value("${http_pool.meterRequesturl}") private String meterRequestUrl; @Override public void afterPropertiesSet() throws Exception { saveQrtzTask("0 0 1 * * ? ","同步水表数量","smsWaterSyncMeterCountJob", SyncMeterCountJob.class.getName()); } public void saveQrtzTask(String cron, String jobGroup ,String jobName,String JobClassName) { // 1,查询需要批量推送的配置项目并构建定时任务 // 2,若对应定时任务不存在则创建 QuartzEntity entity = new QuartzEntity(); entity.setJobGroup(jobGroup); entity.setJobName(jobName); entity.setDescription(jobName); //jobAndTriggerService.deleteJob(entity); boolean exists = jobAndTriggerService.isExists(entity); if(!exists){ entity.setCronExpression(cron); entity.setJobClassName(JobClassName); jobAndTriggerService.save(entity); } } /** * 查询本月售水信息 * @return */ @Override public List selectMonthSell(Integer companyOrgId) { MonthSellwaterDto monthSellwaterDto=new MonthSellwaterDto(); monthSellwaterDto.setCompanyOrgId(companyOrgId); LoginUser loginUser = UserUtil.getCurrentUser(); monthSellwaterDto.setTenantId(loginUser.getTenantId()); monthSellwaterDto.setProgramItems(loginUser.getProgramItemList()); monthSellwaterDto.setUserType(loginUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 monthSellwaterDto.setPermissonType(loginUser.getPermissonType()); List monthSell=revenueMapper.selectMonthSell(monthSellwaterDto); List result=new ArrayList<>(); Double othersUsage=null; if(monthSell.size()>4){ for(int i=0;i selectMonthSellTotal(Integer companyOrgId) { MonthSellwaterDto monthSellwaterDto=new MonthSellwaterDto(); monthSellwaterDto.setCompanyOrgId(companyOrgId); LoginUser loginUser = UserUtil.getCurrentUser(); monthSellwaterDto.setTenantId(loginUser.getTenantId()); monthSellwaterDto.setProgramItems(loginUser.getProgramItemList()); monthSellwaterDto.setUserType(loginUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 monthSellwaterDto.setPermissonType(loginUser.getPermissonType()); return revenueMapper.selectMonthSellTotal(monthSellwaterDto); } /** * 查询月营收情况 * * @param companyOrgId * @return */ @Override public List selectMonthRevenue(Integer companyOrgId,Integer months) { MonthRevenueDto monthRevenueDto=new MonthRevenueDto(); monthRevenueDto.setCompanyOrgId(companyOrgId); monthRevenueDto.setMonths(months); LoginUser loginUser = UserUtil.getCurrentUser(); monthRevenueDto.setTenantId(loginUser.getTenantId()); monthRevenueDto.setProgramItems(loginUser.getProgramItemList()); monthRevenueDto.setUserType(loginUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 monthRevenueDto.setPermissonType(loginUser.getPermissonType()); return revenueMapper.selectMonthRevenue(monthRevenueDto); } /** * 查询本月各分公司的营收情况 * * @return */ @Override public List selectCompanyRevenue() { MonthRevenueDto monthRevenueDto=new MonthRevenueDto(); LoginUser loginUser = UserUtil.getCurrentUser(); monthRevenueDto.setTenantId(loginUser.getTenantId()); monthRevenueDto.setProgramItems(loginUser.getProgramItemList()); monthRevenueDto.setUserType(loginUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 monthRevenueDto.setPermissonType(loginUser.getPermissonType()); return revenueMapper.selectCompanyRevenue(monthRevenueDto); } /** * wangbo * 查询前N个月的售水数据 * @param companyOrgId * @param months * @return */ @Override public List selectOverviewRevenue(Integer companyOrgId,Integer months) { MonthRevenueDto monthRevenueDto=new MonthRevenueDto(); monthRevenueDto.setCompanyOrgId(companyOrgId); monthRevenueDto.setMonths(months); LoginUser loginUser = UserUtil.getCurrentUser(); monthRevenueDto.setTenantId(loginUser.getTenantId()); monthRevenueDto.setProgramItems(loginUser.getProgramItemList()); monthRevenueDto.setUserType(loginUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 monthRevenueDto.setPermissonType(loginUser.getPermissonType()); return revenueMapper.selectOverviewRevenue(monthRevenueDto); } /** * wangbo * 查询售水信息-按时间段 * @param companyOrgId * @param startDate * @param endDate * @return */ @Override public List selectRevenueByDate(Integer companyOrgId,String startDate,String endDate) { MonthRevenueDto monthRevenueDto=new MonthRevenueDto(); monthRevenueDto.setCompanyOrgId(companyOrgId); monthRevenueDto.setStartDate(startDate); monthRevenueDto.setEndDate(endDate); LoginUser loginUser = UserUtil.getCurrentUser(); monthRevenueDto.setTenantId(loginUser.getTenantId()); monthRevenueDto.setProgramItems(loginUser.getProgramItemList()); monthRevenueDto.setUserType(loginUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 monthRevenueDto.setPermissonType(loginUser.getPermissonType()); return revenueMapper.selectRevenueByDate(monthRevenueDto); } /** * 查询是否当月有营收数据 * @return */ @Override public Integer isExistThisMonthRevenue(String tenantId) { return revenueMapper.isExistThisMonthRevenue(tenantId); } /** * 插入营收数据 * @return */ @Override public Integer insert(MonthRevenueEntity monthRevenueEntity) { return revenueMapper.insert(monthRevenueEntity); } /** * 修改营收数据 * @return */ @Override public Integer update(MonthRevenueEntity monthRevenueEntity) { return revenueMapper.update(monthRevenueEntity); } /** * 查询该租户一级公司id * @return */ @Override public Integer selectCompanyIdByTenant(String tenantId) { return revenueMapper.selectCompanyIdByTenant(tenantId); } @Override public void syncMeterCount() { MeterCountDto meterCountDto = restTemplate.getForObject(meterRequestUrl, MeterCountDto.class); if(meterCountDto.getStatus()==0){ for (MonthRevenueEntity monthRevenueEntity : meterCountDto.getData()) { //查询当月是否有数据 有就更新 没有就插入 Integer count =revenueMapper.isExistThisMonthRevenue(monthRevenueEntity.getTenantId()); if(count==0){ Calendar thisMonthFirstDateCal = Calendar.getInstance(); thisMonthFirstDateCal.set(Calendar.DAY_OF_MONTH, 1); monthRevenueEntity.setCollectDate(thisMonthFirstDateCal.getTime()); monthRevenueEntity.setCompanyOrgId(revenueMapper.selectCompanyIdByTenant(monthRevenueEntity.getTenantId())); revenueMapper.insert(monthRevenueEntity); }else{ revenueMapper.update(monthRevenueEntity); } } } } /** * 插入售水数据 * @return */ @Override public Integer insertSellWater(MonthSellwaterEntity monthSellwaterEntity) { return revenueMapper.insertSellWater(monthSellwaterEntity); } /** * 修改售水数据 * @return */ @Override public Integer updateSellWater(MonthSellwaterEntity monthSellwaterEntity) { return revenueMapper.updateSellWater(monthSellwaterEntity); } /** * 修改营业数据 * @return */ @Override public Integer updateRevenue(MonthRevenueEntity monthRevenueEntity) { return revenueMapper.updateRevenue(monthRevenueEntity); } /** * 查询月营收情况 * @param monthRevenueDto 营业信息查询条件 * @return */ @Override public List selectList(MonthRevenueDto monthRevenueDto){ return revenueMapper.selectList(monthRevenueDto); } /** * 查询某月是否有营收数据 * @return */ @Override public Integer isExistMonthRevenue(Integer companyOrgId,String collectDateString,Integer id) { return revenueMapper.isExistMonthRevenue(companyOrgId,collectDateString,id); } }