package com.cl.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cl.common.constant.DelFlagConstant; import com.cl.common.context.BaseContext; import com.cl.common.exception.data.DataException; import com.cl.mapper.DataMapper; import com.cl.pojo.dto.AddDataDTO; import com.cl.pojo.entity.DataEntity; import com.cl.pojo.vo.DataDetailVO; import com.cl.pojo.vo.DataRateVO; import com.cl.pojo.vo.DataVO; import com.cl.pojo.vo.EditDataDTO; import com.cl.pojo.vo.screen.*; import com.cl.service.DataService; import io.swagger.models.auth.In; import net.bytebuddy.asm.Advice; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.text.DecimalFormat; import java.time.LocalDateTime; import java.util.Collections; import java.util.Date; import java.util.List; @Service public class DataServiceImpl extends ServiceImpl implements DataService { private final DataMapper dataMapper; public DataServiceImpl(DataMapper dataMapper) { this.dataMapper = dataMapper; } @Override public ScreenVO screen(Integer county,Integer year) { LocalDateTime createTime = LocalDateTime.of(year, 12, 31, 23, 59, 59); ScreenVO screenVO = new ScreenVO(); DataEntity data =dataMapper.screen(county,createTime); if (null== data) { return screenVO; } screenVO.setAssistiveDeviceTotal(data.getAssistiveDeviceTotal()); screenVO.setCreateTime(data.getCreateTime()); screenVO.setTechnicalTraining(data.getTechnicalTraining()); screenVO.setHomeAllowance(data.getHomeAllowance()); screenVO.setEducationSubsidy(data.getEducationSubsidy()); CertificateVO certificateVO = new CertificateVO(); BeanUtils.copyProperties(data,certificateVO); screenVO.setCertificateVO(certificateVO); WorkerVO workerVO = new WorkerVO(); BeanUtils.copyProperties(data,workerVO); screenVO.setWorkerVO(workerVO); DrillVO drillVO = new DrillVO(); BeanUtils.copyProperties(data,drillVO); screenVO.setDrillVO(drillVO); SalvationVO salvationVO = new SalvationVO(); BeanUtils.copyProperties(data,salvationVO); screenVO.setSalvationVO(salvationVO); DifficultyVO difficultyVO = new DifficultyVO(); BeanUtils.copyProperties(data,difficultyVO); screenVO.setDifficultyVO(difficultyVO); AssistiveDeviceVO assistiveDeviceVO = new AssistiveDeviceVO(); BeanUtils.copyProperties(data,assistiveDeviceVO); screenVO.setAssistiveDeviceVO(assistiveDeviceVO); AssistiveDeviceTypeVO assistiveDeviceTypeVO = new AssistiveDeviceTypeVO(); BeanUtils.copyProperties(data,assistiveDeviceTypeVO); screenVO.setAssistiveDeviceTypeVO(assistiveDeviceTypeVO); AssistiveDeviceGradeVO assistiveDeviceGradeVO = new AssistiveDeviceGradeVO(); BeanUtils.copyProperties(data,assistiveDeviceGradeVO); screenVO.setAssistiveDeviceGradeVO(assistiveDeviceGradeVO); StatutoryCertificateVO statutoryCertificateVO = new StatutoryCertificateVO(); BeanUtils.copyProperties(data,statutoryCertificateVO); screenVO.setStatutoryCertificateVO(statutoryCertificateVO); EmployedVO employedVO = new EmployedVO(); BeanUtils.copyProperties(data,employedVO); screenVO.setEmployedVO(employedVO); HighSchoolVO highSchoolVO = new HighSchoolVO(); BeanUtils.copyProperties(data,highSchoolVO); screenVO.setHighSchoolVO(highSchoolVO); EducationVO educationVO = new EducationVO(); BeanUtils.copyProperties(data,educationVO); screenVO.setEducationVO(educationVO); RightDownVO rightDownVO = new RightDownVO(); BeanUtils.copyProperties(data,rightDownVO); screenVO.setRightDownVO(rightDownVO); return screenVO; } @Override public void add(AddDataDTO addDataDTO) { DataEntity dataEntity = new DataEntity(); BeanUtils.copyProperties(addDataDTO,dataEntity); dataEntity.setCreateTime(LocalDateTime.now()); dataEntity.setCreateBy(BaseContext.getCurrentUser().getId()); int insert = dataMapper.insert(dataEntity); if (insert != 1) { throw new DataException("保存数据失败"); } } @Override public IPage pageList(IPage page, List county, String name) { return dataMapper.pageList(page,county,name); } @Override public void delete(Integer id) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DataEntity::getId,id); queryWrapper.eq(DataEntity::getDelFlag, DelFlagConstant.UNDELETE); DataEntity dataEntity = dataMapper.selectOne(queryWrapper); if (dataEntity == null) { throw new DataException("删除数据失败,数据不存在"); } dataEntity.setDelFlag(DelFlagConstant.DELETE); dataEntity.setUpdateTime(LocalDateTime.now()); dataEntity.setUpdateBy(BaseContext.getCurrentUser().getId()); int i = dataMapper.updateById(dataEntity); if (i != 1) { throw new DataException("删除失败"); } } @Override public void edit(EditDataDTO editDataDTO) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DataEntity::getId,editDataDTO.getId()); queryWrapper.eq(DataEntity::getDelFlag, DelFlagConstant.UNDELETE); DataEntity data = dataMapper.selectOne(queryWrapper); if (data == null) { throw new DataException("修改数据失败,数据id不存在"); } DataEntity dataEntity = new DataEntity(); BeanUtils.copyProperties(editDataDTO,dataEntity); dataEntity.setUpdateTime(LocalDateTime.now()); dataEntity.setUpdateBy(BaseContext.getCurrentUser().getId()); int i = dataMapper.updateById(dataEntity); if (i != 1) { throw new DataException("修改失败"); } } @Override public DataDetailVO detail(Integer id) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(DataEntity::getId,id); queryWrapper.eq(DataEntity::getDelFlag, DelFlagConstant.UNDELETE); DataEntity dataEntity = dataMapper.selectOne(queryWrapper); if (dataEntity == null) { throw new DataException("该条数据不存在"); } DataDetailVO dataDetailVO = new DataDetailVO(); //当前数据 EditDataDTO data=new EditDataDTO(); BeanUtils.copyProperties(dataEntity,data); dataDetailVO.setData(data); //当前数据的前一条数据 EditDataDTO beforeData=new EditDataDTO(); DataEntity beforeDataEntity= dataMapper.beforeOne(id); if (beforeDataEntity != null) { BeanUtils.copyProperties(beforeDataEntity,beforeData); } dataDetailVO.setBeforeData(beforeData); //计算比率 DataRateVO dataRateVO = getRateVO(data,beforeData); dataDetailVO.setRateVO(dataRateVO); return dataDetailVO; } @Override public DataDetailVO addDetail(Integer county) { DataDetailVO dataDetailVO = new DataDetailVO(); //通过区县获取上一次数据 DataEntity dataEntity = dataMapper.getAddDetail(county); EditDataDTO editDataDTO=new EditDataDTO(); BeanUtils.copyProperties(dataEntity,editDataDTO); dataDetailVO.setBeforeData(editDataDTO); return dataDetailVO; } @Override public List getYearList(Integer county) { return dataMapper.getYearList( county); } @Override public Integer getAssistiveDeviceTotal(Integer county, Integer year) { LocalDateTime createTime = LocalDateTime.of(year, 12, 31, 23, 59, 59); return dataMapper.getAssistiveDeviceTotal(county,createTime); } private DataRateVO getRateVO(EditDataDTO data, EditDataDTO beforeData) { if (beforeData == null || beforeData.equals(new EditDataDTO())) { return null; } DataRateVO dataRateVO = new DataRateVO(); //计算每个字段 dataRateVO.setCertificateEyesight(calcRate(data.getCertificateEyesight(),beforeData.getCertificateEyesight())); dataRateVO.setCertificateIntellect(calcRate(data.getCertificateIntellect(),beforeData.getCertificateIntellect())); dataRateVO.setCertificateLimb(calcRate(data.getCertificateLimb(),beforeData.getCertificateLimb())); dataRateVO.setCertificateSpeech(calcRate(data.getCertificateSpeech(), beforeData.getCertificateSpeech())); dataRateVO.setCertificateHearing(calcRate(data.getCertificateHearing(), beforeData.getCertificateHearing())); dataRateVO.setCertificateSpirit(calcRate(data.getCertificateSpirit(), beforeData.getCertificateSpirit())); dataRateVO.setCertificateMultiple(calcRate(data.getCertificateMultiple(), beforeData.getCertificateMultiple())); dataRateVO.setWorkerCity(calcRate(data.getWorkerCity(), beforeData.getWorkerCity())); dataRateVO.setWorkerAssociation(calcRate(data.getWorkerAssociation(), beforeData.getWorkerAssociation())); dataRateVO.setWorkerServiceCorps(calcRate(data.getWorkerServiceCorps(), beforeData.getWorkerServiceCorps())); dataRateVO.setWorkerCounty(calcRate(data.getWorkerCounty(), beforeData.getWorkerCounty())); dataRateVO.setWorkerTownship(calcRate(data.getWorkerTownship(), beforeData.getWorkerTownship())); dataRateVO.setWorkerVillage(calcRate(data.getWorkerVillage(), beforeData.getWorkerVillage())); dataRateVO.setDrillAutism(calcRate(data.getDrillAutism(), beforeData.getDrillAutism())); dataRateVO.setDrillIntellect(calcRate(data.getDrillIntellect(), beforeData.getDrillIntellect())); dataRateVO.setDrillLimb(calcRate(data.getDrillLimb(), beforeData.getDrillLimb())); dataRateVO.setDrillSpeech(calcRate(data.getDrillSpeech(), beforeData.getDrillSpeech())); dataRateVO.setDrillHearing(calcRate(data.getDrillHearing(), beforeData.getDrillHearing())); dataRateVO.setDrillSpirit(calcRate(data.getDrillSpirit(), beforeData.getDrillSpirit())); dataRateVO.setSalvationBeforeSeven(calcRate(data.getSalvationBeforeSeven(), beforeData.getSalvationBeforeSeven())); dataRateVO.setSalvationAfterSeven(calcRate(data.getSalvationAfterSeven(), beforeData.getSalvationAfterSeven())); dataRateVO.setSalvationAutism(calcRate(data.getSalvationAutism(), beforeData.getSalvationAutism())); dataRateVO.setSalvationIntellect(calcRate(data.getSalvationIntellect(), beforeData.getSalvationIntellect())); dataRateVO.setSalvationLimb(calcRate(data.getSalvationLimb(), beforeData.getSalvationLimb())); dataRateVO.setSalvationSpeech(calcRate(data.getSalvationSpeech(), beforeData.getSalvationSpeech())); dataRateVO.setDifficultyMedication(calcRate(data.getDifficultyMedication(), beforeData.getDifficultyMedication())); dataRateVO.setDifficultyHospitalisation(calcRate(data.getDifficultyHospitalisation(), beforeData.getDifficultyHospitalisation())); dataRateVO.setAssistiveDeviceTotal(calcRate(data.getAssistiveDeviceTotal(), beforeData.getAssistiveDeviceTotal())); dataRateVO.setAssistiveDeviceOne(calcRate(data.getAssistiveDeviceOne(), beforeData.getAssistiveDeviceOne())); dataRateVO.setAssistiveDeviceTwo(calcRate(data.getAssistiveDeviceTwo(), beforeData.getAssistiveDeviceTwo())); dataRateVO.setAssistiveDeviceThree(calcRate(data.getAssistiveDeviceThree(), beforeData.getAssistiveDeviceThree())); dataRateVO.setAssistiveDeviceOther(calcRate(data.getAssistiveDeviceOther(), beforeData.getAssistiveDeviceOther())); dataRateVO.setAssistiveDeviceTypeOne(calcRate(data.getAssistiveDeviceTypeOne(), beforeData.getAssistiveDeviceTypeOne())); dataRateVO.setAssistiveDeviceTypeTwo(calcRate(data.getAssistiveDeviceTypeTwo(), beforeData.getAssistiveDeviceTypeTwo())); dataRateVO.setAssistiveDeviceTypeThree(calcRate(data.getAssistiveDeviceTypeThree(), beforeData.getAssistiveDeviceTypeThree())); dataRateVO.setAssistiveDeviceTypeFour(calcRate(data.getAssistiveDeviceTypeFour(), beforeData.getAssistiveDeviceTypeFour())); dataRateVO.setAssistiveDeviceGradeOne(calcRate(data.getAssistiveDeviceGradeOne(), beforeData.getAssistiveDeviceGradeOne())); dataRateVO.setAssistiveDeviceGradeTwo(calcRate(data.getAssistiveDeviceGradeTwo(), beforeData.getAssistiveDeviceGradeTwo())); dataRateVO.setAssistiveDeviceGradeThree(calcRate(data.getAssistiveDeviceGradeThree(), beforeData.getAssistiveDeviceGradeThree())); dataRateVO.setAssistiveDeviceGradeFour(calcRate(data.getAssistiveDeviceGradeFour(), beforeData.getAssistiveDeviceGradeFour())); dataRateVO.setTechnicalTraining(calcRate(data.getTechnicalTraining(), beforeData.getTechnicalTraining())); dataRateVO.setHomeAllowance(calcRate(data.getHomeAllowance(), beforeData.getHomeAllowance())); dataRateVO.setStatutoryCertificateEyesight(calcRate(data.getStatutoryCertificateEyesight(), beforeData.getStatutoryCertificateEyesight())); dataRateVO.setStatutoryCertificateIntellect(calcRate(data.getStatutoryCertificateIntellect(), beforeData.getStatutoryCertificateIntellect())); dataRateVO.setStatutoryCertificateLimb(calcRate(data.getStatutoryCertificateLimb(), beforeData.getStatutoryCertificateLimb())); dataRateVO.setStatutoryCertificateSpeech(calcRate(data.getStatutoryCertificateSpeech(), beforeData.getStatutoryCertificateSpeech())); dataRateVO.setStatutoryCertificateHearing(calcRate(data.getStatutoryCertificateHearing(), beforeData.getStatutoryCertificateHearing())); dataRateVO.setEmployedEmployment(calcRate(data.getEmployedEmployment(), beforeData.getEmployedEmployment())); dataRateVO.setEmployedConcentrated(calcRate(data.getEmployedConcentrated(), beforeData.getEmployedConcentrated())); dataRateVO.setEmployedPublicWelfare(calcRate(data.getEmployedPublicWelfare(), beforeData.getEmployedPublicWelfare())); dataRateVO.setEmployedAuxiliary(calcRate(data.getEmployedAuxiliary(), beforeData.getEmployedAuxiliary())); dataRateVO.setEmployedIndividual(calcRate(data.getEmployedIndividual(), beforeData.getEmployedIndividual())); dataRateVO.setHighSchoolEmployment(calcRate(data.getHighSchoolEmployment(), beforeData.getHighSchoolEmployment())); dataRateVO.setHighSchoolIndividual(calcRate(data.getHighSchoolIndividual(), beforeData.getHighSchoolIndividual())); dataRateVO.setHighSchoolFlexible(calcRate(data.getHighSchoolFlexible(), beforeData.getHighSchoolFlexible())); dataRateVO.setEducationOne(calcRate(data.getEducationOne(), beforeData.getEducationOne())); dataRateVO.setEducationTwo(calcRate(data.getEducationTwo(), beforeData.getEducationTwo())); dataRateVO.setEducationThree(calcRate(data.getEducationThree(), beforeData.getEducationThree())); dataRateVO.setEducationFour(calcRate(data.getEducationFour(), beforeData.getEducationFour())); dataRateVO.setEducationFive(calcRate(data.getEducationFive(), beforeData.getEducationFive())); dataRateVO.setEducationSix(calcRate(data.getEducationSix(), beforeData.getEducationSix())); dataRateVO.setEducationSeven(calcRate(data.getEducationSeven(), beforeData.getEducationSeven())); dataRateVO.setEducationEight(calcRate(data.getEducationEight(), beforeData.getEducationEight())); dataRateVO.setEducationNine(calcRate(data.getEducationNine(), beforeData.getEducationNine())); dataRateVO.setEducationSubsidy(calcRate(data.getEducationSubsidy(), beforeData.getEducationSubsidy())); dataRateVO.setActivityFrequency(calcRate(data.getActivityFrequency(), beforeData.getActivityFrequency())); dataRateVO.setEducationNumber(calcRate(data.getEducationNumber(), beforeData.getEducationNumber())); dataRateVO.setMatter(calcRate(data.getMatter(), beforeData.getMatter())); dataRateVO.setDoctorApprecitation(calcRate(data.getDoctorApprecitation(), beforeData.getDoctorApprecitation())); dataRateVO.setRemould(calcRate(data.getRemould(), beforeData.getRemould())); dataRateVO.setInterviewsOffice(calcRate(data.getInterviewsOffice(), beforeData.getInterviewsOffice())); dataRateVO.setInterviewsPhone(calcRate(data.getInterviewsPhone(), beforeData.getInterviewsPhone())); dataRateVO.setInterviewsSuperior(calcRate(data.getInterviewsSuperior(), beforeData.getInterviewsSuperior())); dataRateVO.setInterviewsHotline(calcRate(data.getInterviewsHotline(), beforeData.getInterviewsHotline())); return dataRateVO; } private String calcRate(Integer currentValue, Integer previousValue) { //去年的数据为0的情况 if (previousValue == 0){ return currentValue == 0 ? "同比持平" : "无同比数据"; } // 计算变化率 double changeRate = (currentValue - previousValue) * 100.0 / previousValue; // 格式化输出(保留两位小数,带正负号) DecimalFormat df = new DecimalFormat("0.00"); String absoluteValue = df.format(Math.abs(changeRate)); if (changeRate > 0) { return "同比增加" + absoluteValue + "%"; } else if (changeRate < 0) { return "同比减少" + absoluteValue + "%"; } else { return "同比持平"; } } }