package com.gkhy.hazmat.system.service.impl; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.hazmat.common.api.CommonPage; import com.gkhy.hazmat.common.constant.UserConstant; import com.gkhy.hazmat.common.domain.entity.SysUser; import com.gkhy.hazmat.common.enums.HazmatKindEnum; import com.gkhy.hazmat.common.enums.HazmatPackageEnum; import com.gkhy.hazmat.common.enums.UserTypeEnum; import com.gkhy.hazmat.common.excel.HazmatBasicExcelData; import com.gkhy.hazmat.common.excel.HazmatBasicExcelDataListener; import com.gkhy.hazmat.common.exception.ApiException; import com.gkhy.hazmat.common.utils.PageUtils; import com.gkhy.hazmat.common.utils.SecurityUtils; import com.gkhy.hazmat.common.utils.StringUtils; import com.gkhy.hazmat.system.domain.HzHazmatBasic; import com.gkhy.hazmat.system.domain.vo.HzSecientificVo; import com.gkhy.hazmat.system.mapper.HzHazmatBasicMapper; import com.gkhy.hazmat.system.mapper.HzSecientificMapper; import com.gkhy.hazmat.system.service.HzHazmatBasicService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** *

* 危化品基础数据表 服务实现类 *

* * @author kzy * @since 2024-08-05 14:41:40 */ @Service public class HzHazmatBasicServiceImpl extends ServiceImpl implements HzHazmatBasicService { @Autowired private HzSecientificMapper secientificMapper; @Override public CommonPage selectHazmatBasicList(HzHazmatBasic hazmatBasic) { SysUser currentUser = SecurityUtils.getLoginUser().getUser(); if (!currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) { hazmatBasic.setCompanyId(currentUser.getCompanyId()); } PageUtils.startPage(); List basicList = baseMapper.selectHazmatBasicList(hazmatBasic); return CommonPage.restPage(basicList); } @Override public HzHazmatBasic selectHazmatBasicById(Long hazmatBasicId) { HzHazmatBasic hazmatBasic = baseMapper.selectById(hazmatBasicId); SysUser currentUser = SecurityUtils.getLoginUser().getUser(); if (currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) { return hazmatBasic; } else if (!hazmatBasic.getCompanyId().equals(currentUser.getCompanyId())) { throw new ApiException("无权限查看其它企业数据"); } return hazmatBasic; } @Override public int insertHazmatBasic(HzHazmatBasic hazmatBasic) { SysUser currentUser = SecurityUtils.getLoginUser().getUser(); hazmatBasic.setCreateBy(currentUser.getUsername()); hazmatBasic.setCompanyId(currentUser.getCompanyId()); if (!checkProductSnUnique(hazmatBasic)) { throw new ApiException("产品编号已存在"); } checkUserAllowed(null,currentUser); HzSecientificVo hzSecientificVo = secientificMapper.selectBySecientificName(hazmatBasic.getName()); hazmatBasic.setPeculiarityType(hzSecientificVo!=null? hzSecientificVo.getPeculiarityType() : null); hazmatBasic.setPeculiarityNumber(hzSecientificVo!=null? hzSecientificVo.getPeculiarityNumber() : 0); hazmatBasic.setSecientificId(hzSecientificVo!=null? hzSecientificVo.getId() : null); int row = baseMapper.insert(hazmatBasic); if (row < 1) { throw new ApiException("新增危化品基础信息失败"); } return row; } @Override public int updateHazmatBasic(HzHazmatBasic hazmatBasic) { if (!checkProductSnUnique(hazmatBasic)) { throw new ApiException("产品编号已存在"); } SysUser currentUser = SecurityUtils.getLoginUser().getUser(); checkUserAllowed(hazmatBasic,currentUser); hazmatBasic.setUpdateBy(currentUser.getUsername()); HzSecientificVo hzSecientificVo = secientificMapper.selectBySecientificName(hazmatBasic.getName()); hazmatBasic.setPeculiarityType(hzSecientificVo!=null? hzSecientificVo.getPeculiarityType() : null); hazmatBasic.setPeculiarityNumber(hzSecientificVo!=null? hzSecientificVo.getPeculiarityNumber() : 0); hazmatBasic.setSecientificId(hzSecientificVo!=null? hzSecientificVo.getId() : null); int row=baseMapper.updateById(hazmatBasic); if(row<1){ throw new ApiException("更新危化品基础信息失败"); } return row; } public void checkUserAllowed(HzHazmatBasic hazmatBasic,SysUser user) { if (user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) { throw new ApiException("管理员不能操作"); } if(hazmatBasic!=null){ if(!Objects.equals(user.getCompanyId(), hazmatBasic.getCompanyId())){ throw new ApiException("无权限操作其他企业数据"); } } } @Override public int deleteHazmatBasicById(Long hazmatBasicId) { HzHazmatBasic hazmatBasic=baseMapper.selectById(hazmatBasicId); if(hazmatBasic==null){ throw new ApiException("危化品基础信息不存在"); } SysUser currentUser = SecurityUtils.getLoginUser().getUser(); checkUserAllowed(hazmatBasic,currentUser); baseMapper.deleteHazmatBasicById(hazmatBasicId); return 0; } @Override public boolean checkProductSnUnique(HzHazmatBasic hazmatBasic) { Long hazmatBasicId=hazmatBasic.getId()==null?-1L:hazmatBasic.getId(); HzHazmatBasic hb= baseMapper.checkProductSnUnique(hazmatBasic.getProductSn(),hazmatBasic.getCompanyId()); if(hb!=null&&hb.getId().longValue()!=hazmatBasicId.longValue()){ return UserConstant.NOT_UNIQUE; } return UserConstant.UNIQUE; } @Override @Transactional(rollbackFor = RuntimeException.class) public Integer importExcel(MultipartFile file) throws IOException { if(ObjectUtil.isEmpty(file)){ throw new ApiException("上传对象不能为空"); } SysUser currentUser=SecurityUtils.getLoginUser().getUser(); checkUserAllowed(null,currentUser); List hazmatExcelDataList = EasyExcel.read(file.getInputStream(), HazmatBasicExcelData.class, new HazmatBasicExcelDataListener()).sheet().doReadSync(); List hazmatBasicList=new ArrayList<>(); for(HazmatBasicExcelData hazmatBasicExcelData:hazmatExcelDataList){ validateData(hazmatBasicExcelData); if (!checkProductSnUnique(new HzHazmatBasic().setProductSn(hazmatBasicExcelData.getProductSn()).setCompanyId(currentUser.getCompanyId()))) { throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"产品编号已存在"); } HzHazmatBasic hazmatBasic=new HzHazmatBasic(); BeanUtils.copyProperties(hazmatBasicExcelData,hazmatBasic,new String[]{"kind","minPackage"}); Integer kind= HazmatKindEnum.getCodeByInfo(hazmatBasicExcelData.getKind()); if(kind==null){ throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"种类填写不正确"); } Integer minPackage= HazmatPackageEnum.getCodeByInfo(hazmatBasicExcelData.getMinPackage()); if(minPackage==null){ throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"最小包装类型填写不正确"); } HzSecientificVo hzSecientificVo = secientificMapper.selectBySecientificName(hazmatBasic.getName()); hazmatBasic.setPeculiarityType(hzSecientificVo!=null? hzSecientificVo.getPeculiarityType() : ""); hazmatBasic.setPeculiarityNumber(hzSecientificVo!=null? hzSecientificVo.getPeculiarityNumber() : 0); hazmatBasic.setSecientificId(hzSecientificVo!=null? hzSecientificVo.getId() : null); hazmatBasic.setKind(kind); hazmatBasic.setMinPackage(minPackage); hazmatBasic.setCompanyId(currentUser.getCompanyId()); hazmatBasic.setCreateBy(currentUser.getUsername()); hazmatBasicList.add(hazmatBasic); } if(!hazmatBasicList.isEmpty()){ if(hazmatBasicList.size()>100){ int pageSize=100; while (true){ List hazmatBasics=hazmatBasicList.subList(0, Math.min(hazmatBasicList.size(), pageSize)); saveBatch(hazmatBasics); if(hazmatBasics.size()