package com.imed.costaccount.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.imed.costaccount.common.exception.CostException; import com.imed.costaccount.common.util.BeanUtil; import com.imed.costaccount.common.util.JsonUtil; import com.imed.costaccount.common.util.PageUtils; import com.imed.costaccount.constants.NumberConstant; import com.imed.costaccount.mapper.CostIncomeFileMapper; import com.imed.costaccount.mapper.CostIncomeGroupMapper; import com.imed.costaccount.model.CostIncomeFile; import com.imed.costaccount.model.CostIncomeGroup; import com.imed.costaccount.model.User; import com.imed.costaccount.model.vo.CostIncomeFileVO; import com.imed.costaccount.model.vo.IncomeErrorMessage; import com.imed.costaccount.service.CostIncomeFileService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Service("costIncomeFileService") public class CostIncomeFileServiceImpl extends ServiceImpl implements CostIncomeFileService { @Autowired private CostIncomeGroupMapper costIncomeGroupMapper; /** * 保存文件上传记录 * @param list 文件数据 * @param user 当前用户 * @param file 上传文件 * @param hospId 医院Id * @param incomeErrorMessageList 错误信息 * @param uploadFile 文件路径 * @return */ @Override public CostIncomeFile saveCostIncomeFile(List> list, User user, MultipartFile file, Long hospId, List incomeErrorMessageList, String uploadFile,Integer fileType) { CostIncomeFile costIncomeFile = new CostIncomeFile(); String substring = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."))+System.currentTimeMillis()+".xsl"; costIncomeFile.setFileName(substring); costIncomeFile.setFileUrl(uploadFile); costIncomeFile.setTotalAmount(list.size()); if (!CollectionUtils.isEmpty(incomeErrorMessageList)) { costIncomeFile.setSuccessAmount(NumberConstant.ZERO); costIncomeFile.setErrorList(JSON.toJSONString(incomeErrorMessageList)); }else { costIncomeFile.setSuccessAmount(list.size()); } if (NumberConstant.ONE.equals(fileType)){ costIncomeFile.setFileType("成本分摊参数值"); }else if (NumberConstant.TWO.equals(fileType)){ costIncomeFile.setFileType("收入数据"); }else if (NumberConstant.THREE.equals(fileType)){ costIncomeFile.setFileType("成本数据"); }else { costIncomeFile.setFileType(file.getContentType()); } costIncomeFile.setHospId(hospId); costIncomeFile.setUserName(user.getName()); costIncomeFile.setUserId(user.getId()); costIncomeFile.setCreateTime(System.currentTimeMillis()); this.save(costIncomeFile); return costIncomeFile; } /** * 分页查询查询记录数据 * * @param current * @param pageSize * @param name * @param hospId * @return */ @Override public PageUtils queryList(Integer current, Integer pageSize, String name, Long hospId) { Page costIncomeFilePage = new Page<>(current, pageSize); Page page = this.page(costIncomeFilePage, new QueryWrapper().lambda() .eq(CostIncomeFile::getHospId, hospId).like(StrUtil.isNotBlank(name), CostIncomeFile::getFileName, name).orderByDesc(CostIncomeFile::getCreateTime)); List records = page.getRecords(); List costIncomeFileVOList = BeanUtil.convertList(records, CostIncomeFileVO.class); costIncomeFileVOList.forEach(i->{ String errorList = i.getErrorList(); if (StrUtil.isNotBlank(errorList)){ i.setErrStatus(NumberConstant.ONE); } i.setDateTime(DateUtil.format(DateUtil.date(i.getCreateTime()),"yyyy-MM-dd")); }); PageUtils pageUtils = new PageUtils(page); pageUtils.setList(costIncomeFileVOList); return pageUtils; } /** * 撤销导入 * * @param id * @param hospId */ @Override @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public void deleteImport(Long id, Long hospId) { CostIncomeFile costIncomeFile = this.getById(id); if (Objects.isNull(costIncomeFile)){ throw new CostException(500,"文件记录不存在"); } // 根据文件的Id 和 医院Id获取数据 List costIncomeGroupList = costIncomeGroupMapper.selectList(new QueryWrapper().lambda() .eq(CostIncomeGroup::getHospId, hospId).eq(CostIncomeGroup::getFileId, id)); if (CollectionUtils.isEmpty(costIncomeGroupList)){ throw new CostException(410,"数据已撤销"); } List list = costIncomeGroupList.stream().map(CostIncomeGroup::getId).collect(Collectors.toList()); costIncomeGroupMapper.deleteBatchIds(list); } /** * 错误详情 * * @param id * @param hospId * @return */ @Override public List getErrorList(Long id, Long hospId) { CostIncomeFile costIncomeFile = this.getById(id); if (Objects.isNull(costIncomeFile)){ throw new CostException(500,"文件记录不存在"); } String errorList = costIncomeFile.getErrorList(); if (StrUtil.isBlank(errorList)){ return null; } List incomeErrorMessageList = JsonUtil.toList(errorList, IncomeErrorMessage.class); return incomeErrorMessageList; } }