叶松
2023-09-26 232cab080647152de06755fbac3d4170629d5b3c
hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/embedment/service/impl/SysEmbedmentRecordServiceImpl.java
对比新文件
@@ -0,0 +1,248 @@
package com.thhy.materials.modules.biz.embedment.service.impl;
import cn.hutool.core.text.StrBuilder;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.thhy.general.common.BasicMessage;
import com.thhy.general.common.BasicResult;
import com.thhy.general.config.SysUserInfo;
import com.thhy.general.exception.BasicException;
import com.thhy.general.utils.ExcelUtils;
import com.thhy.general.utils.UserInfoUtils;
import com.thhy.materials.modules.biz.embedment.dto.EmbedmentRecordDto;
import com.thhy.materials.modules.biz.embedment.entity.SysEmbedmentGoodsEntity;
import com.thhy.materials.modules.biz.embedment.entity.SysEmbedmentRecordEntity;
import com.thhy.materials.modules.biz.embedment.mapper.SysEmbedmentGoodsMapper;
import com.thhy.materials.modules.biz.embedment.mapper.SysEmbedmentRecordMapper;
import com.thhy.materials.modules.biz.embedment.service.SysEmbedmentRecordService;
import com.thhy.materials.modules.biz.materials.entity.SysAssistGood;
import com.thhy.materials.modules.biz.utils.ExcelUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * @Author QiuYuHao
 * @CreateDate 2023-09-22 16:28:24
 * 预埋件出入库实现
 */
@Service
public class SysEmbedmentRecordServiceImpl implements SysEmbedmentRecordService{
   @Autowired
   private SysEmbedmentRecordMapper sysEmbedmentRecordMapper;
   @Autowired
   private SysEmbedmentGoodsMapper sysEmbedmentGoodsMapper;
   @Override
   @Transactional(rollbackFor = Exception.class)
   public BasicResult insert(SysEmbedmentRecordEntity sysEmbedmentRecordEntity) {
      SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
      sysEmbedmentRecordEntity.setCreateUser(sysUserInfo.getRealName());
      sysEmbedmentRecordEntity.setCompanyId(sysUserInfo.getCompanyId());
      SysEmbedmentGoodsEntity entity = sysEmbedmentGoodsMapper.findEntity(sysEmbedmentRecordEntity.getEmbedmentId());
         if(entity!=null){
            String stockType = sysEmbedmentRecordEntity.getStockType();
            //stockType 1入库 2出库
            int result = entity.getStock();
            if("1".equals(stockType)){
               result= entity.getStock() + sysEmbedmentRecordEntity.getChangeStock();
            }else{
               result= entity.getStock() - sysEmbedmentRecordEntity.getChangeStock();
            }
            if(result < 0 ){
               return BasicResult.faild("11111","库存不足","库存不足");
            }
            entity.setStock(result);
            sysEmbedmentGoodsMapper.update(entity);//更改库存
         }else {
            return BasicResult.faild("11111","库存没有该预埋件,请到【预埋件种类】添加","库存没有该预埋件,请到【预埋件种类】添加");
         }
         sysEmbedmentRecordMapper.insert(sysEmbedmentRecordEntity);
      return BasicResult.success();
   }
   @Override
   public BasicResult embedmentRecordDel(String id) {
      sysEmbedmentRecordMapper.embedmentRecordDel(id);
      return BasicResult.success();
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public BasicResult update(SysEmbedmentRecordEntity sysEmbedmentRecordEntity) {
      String id = sysEmbedmentRecordEntity.getId();//记录id
      String embedmentId = sysEmbedmentRecordEntity.getEmbedmentId();//库存id
      SysEmbedmentRecordEntity queryRecordData = sysEmbedmentRecordMapper.embedmentRecordInfo(id);//查询到的记录
      Integer dataChangeStock = queryRecordData.getChangeStock();//拿到修改前的入库数量
      Integer paramChangeStock = sysEmbedmentRecordEntity.getChangeStock();//当前传输入库数量
      Integer nowChangeStock = paramChangeStock - dataChangeStock;//当前传的和库里的取差值
      SysEmbedmentGoodsEntity entity = sysEmbedmentGoodsMapper.findEntity(embedmentId);
      Integer resultStock = entity.getStock() + nowChangeStock;
      entity.setStock(resultStock);
      sysEmbedmentGoodsMapper.update(entity);
      sysEmbedmentRecordMapper.update(sysEmbedmentRecordEntity);
      return BasicResult.success();
   }
   @Override
   public BasicResult embedmentRecordList(EmbedmentRecordDto embedmentRecordDto) {
      SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
      embedmentRecordDto.setCompanyId(sysUserInfo.getCompanyId());
      PageHelper.startPage(embedmentRecordDto.getPageNum(),embedmentRecordDto.getPageSize());
      List<SysEmbedmentRecordEntity> sysEmbedmentRecordEntities = sysEmbedmentRecordMapper.embedmentRecordList(embedmentRecordDto);
      PageInfo<SysEmbedmentRecordEntity> info = new PageInfo<>(sysEmbedmentRecordEntities);
      return BasicResult.success(info);
   }
   @Override
   public BasicResult embedmentRecordOutList(EmbedmentRecordDto embedmentRecordDto) {
      SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
      embedmentRecordDto.setCompanyId(sysUserInfo.getCompanyId());
      PageHelper.startPage(embedmentRecordDto.getPageNum(),embedmentRecordDto.getPageSize());
      List<SysEmbedmentRecordEntity> sysEmbedmentRecordEntities = sysEmbedmentRecordMapper.embedmentRecordOutList(embedmentRecordDto);
      PageInfo<SysEmbedmentRecordEntity> info = new PageInfo<>(sysEmbedmentRecordEntities);
      return BasicResult.success(info);
   }
   @Override
   public BasicResult embedmentRecordInfo(String id) {
      return BasicResult.success(sysEmbedmentRecordMapper.embedmentRecordInfo(id));
   }
   @Override
   public void export(EmbedmentRecordDto embedmentRecordDto, HttpServletResponse response) {
      SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
      embedmentRecordDto.setCompanyId(sysUserInfo.getCompanyId());
      List<SysEmbedmentRecordEntity> sysEmbedmentRecordEntities = sysEmbedmentRecordMapper.embedmentRecordList(embedmentRecordDto);
      ExcelUtils.downExcel(sysEmbedmentRecordEntities,SysEmbedmentRecordEntity.class,response,"预埋件入库");
   }
   @Override
   public void recordExportTemplate(EmbedmentRecordDto embedmentRecordDto, HttpServletResponse response) {
      SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
      String companyId = sysUserInfo.getCompanyId();
      XSSFWorkbook book = new XSSFWorkbook();
      XSSFSheet sheet = book.createSheet();
      XSSFRow row = sheet.createRow(0);
      row.createCell(0).setCellValue("物品名称-规格型号");
      row.createCell(1).setCellValue("入库数量");
      row.createCell(2).setCellValue("单价");
      row.createCell(3).setCellValue("金额");
      row.createCell(4).setCellValue("备注");
      embedmentRecordDto.setCompanyId(companyId);
      List<String> lx = sysEmbedmentRecordMapper.embedmentRecordList(embedmentRecordDto).stream().map(s -> s.getEmbedmentNameAndModel()).collect(Collectors.toList());
      String[] gjlx = lx.toArray(new String[lx.size()]);
      //物品名称-规格型号
      CellRangeAddressList regions1 = new CellRangeAddressList(1, 500, 0, 0);
      DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
      DataValidationConstraint createExplicitListConstraint1 = dataValidationHelper.createExplicitListConstraint(gjlx);
      DataValidation createValidation1 = dataValidationHelper.createValidation(createExplicitListConstraint1, regions1);
      sheet.addValidationData(createValidation1);
      response.setContentType("application/vnd.ms-excel;charset=UTF-8");
      response.setHeader("Content-Disposition", "attachment;filename=test.xls");
      OutputStream out = null;
      try {
         out = response.getOutputStream();
         book.write(out);
         out.close();
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         IOUtils.closeQuietly(out);
      }
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public BasicResult variateExcel(MultipartFile file, HttpServletRequest request) {
      List<List<Object>> lists = null;//去工具类处理,返回excel中的数据
      try {
         lists = ExcelUtil.getUserListByExcel(file.getInputStream(), file.getOriginalFilename());
      } catch (Exception e) {
         e.printStackTrace();
      }
      lists.remove(0);
      if (lists.size()>0){
         for (List<Object> list :lists){
            String embedmentNameAndModel = list.get(0).toString();
            String[] split = embedmentNameAndModel.split("-");
            String embedmentName = split[0];
            StringBuilder embedmentModel = new StringBuilder();
            for (int i = 1; i < split.length; i++) {
               if (StringUtils.isBlank(embedmentModel)){
                  embedmentModel.append(split[i]);
               }else {
                  embedmentModel.append("-"+split[i]);
               }
            }
            String id =  sysEmbedmentGoodsMapper.embedmentNameAndType(embedmentName,null, embedmentModel.toString());
            if(StringUtils.isBlank(id)) {
               throw new BasicException(new BasicMessage("500","库存没有【"+embedmentName+"】,请到预埋件种类新增,新增完可重新导入!"));
            }
            SysEmbedmentRecordEntity sysEmbedmentRecordEntity = new SysEmbedmentRecordEntity();
            sysEmbedmentRecordEntity.setEmbedmentId(id);
            //入库数量
            Integer changeStock = Integer.valueOf(list.get(1).toString());
            sysEmbedmentRecordEntity.setChangeStock(changeStock);
            //单价
            String dj = list.get(2).toString();
            BigDecimal singlePrice = new BigDecimal(dj);
            sysEmbedmentRecordEntity.setSinglePrice(singlePrice);
            //金额
            String je = list.get(3).toString();
            BigDecimal amount = new BigDecimal(je);
            sysEmbedmentRecordEntity.setAmount(amount);
            //备注
            String remark = list.get(4).toString();
            sysEmbedmentRecordEntity.setRemark(remark);
            //入库人
            SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
            String companyId = sysUserInfo.getCompanyId();
            sysEmbedmentRecordEntity.setCreateUser(sysUserInfo.getRealName());
            sysEmbedmentRecordEntity.setCompanyId(companyId);
            //stockType 1入库
            sysEmbedmentRecordEntity.setStockType("1");
            SysEmbedmentGoodsEntity entity = sysEmbedmentGoodsMapper.findEntity(sysEmbedmentRecordEntity.getEmbedmentId());
            if(entity!=null){
               int result = entity.getStock() + sysEmbedmentRecordEntity.getChangeStock();
               entity.setStock(result);
               sysEmbedmentGoodsMapper.update(entity);//更改库存
            }else {
               throw new BasicException(new BasicMessage("500","库存没有【"+embedmentName+"】,请到预埋件种类新增,新增完可重新导入!"));
            }
            sysEmbedmentRecordMapper.insert(sysEmbedmentRecordEntity);
         }
         return BasicResult.success("导入成功");
      }else {
         return BasicResult.faild("11111","error","空文件");
      }
   }
}