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 sysEmbedmentRecordEntities = sysEmbedmentRecordMapper.embedmentRecordList(embedmentRecordDto); PageInfo 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 sysEmbedmentRecordEntities = sysEmbedmentRecordMapper.embedmentRecordOutList(embedmentRecordDto); PageInfo 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 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 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> 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 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","空文件"); } } }