huliguo
2025-05-09 bf2f1ffb99634b8350539b28bd9d1f20b30a5aa1
src/main/java/com/cl/service/impl/DataServiceImpl.java
New file
@@ -0,0 +1,313 @@
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<DataMapper, DataEntity> implements DataService {
    private final DataMapper dataMapper;
    public DataServiceImpl(DataMapper dataMapper) {
        this.dataMapper = dataMapper;
    }
    @Override
    public ScreenVO screen(Integer county) {
        ScreenVO screenVO = new ScreenVO();
        DataEntity data =dataMapper.screen(county);
        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<DataVO> pageList(IPage<DataEntity> page, List<Integer> county, String name) {
        return dataMapper.pageList(page,county,name);
    }
    @Override
    public void delete(Integer id) {
        LambdaQueryWrapper<DataEntity> 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<DataEntity> 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<DataEntity> 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<Integer> 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 "同比持平";
        }
    }
}