diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoRepository.java index 500c1f45..09eff539 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoRepository.java @@ -17,4 +17,6 @@ public interface TbConsInfoRepository extends JpaRepository int countByConCode(String conCode); List findByConTypeId(Integer typeId); + + TbConsInfo findByConCode(String conCode); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java index fafa597f..237f1326 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java @@ -12,4 +12,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; public interface TbConsTypeRepository extends JpaRepository, JpaSpecificationExecutor { int countByConTypeCode(String conTypeCode); + + TbConsType findByConTypeCode(String conTypeCode); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java index b9132067..64558e63 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java @@ -13,6 +13,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; +import org.springframework.web.multipart.MultipartFile; + import java.io.IOException; import javax.servlet.http.HttpServletResponse; @@ -72,4 +74,16 @@ public class TbConsInfoController { tbConsInfoService.stockInOut(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + + + + @PostMapping("inputStock") + public ResponseEntity inputStock(@RequestParam String shopId,@RequestParam("file") MultipartFile file){ + try { + tbConsInfoService.inputStock(shopId,file); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java index 3260b05d..10bd7963 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java @@ -6,6 +6,9 @@ import cn.ysk.cashier.cons.domain.TbConsSuppFlow; import cn.ysk.cashier.cons.service.dto.TbConsInfoDto; import cn.ysk.cashier.cons.service.dto.TbConsInfoQueryCriteria; import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + import java.util.Map; import java.util.List; import java.io.IOException; @@ -68,4 +71,7 @@ public interface TbConsInfoService { void stockInOut(SuppFlow resources) throws Exception; + + + void inputStock(String shopId, MultipartFile file) throws Exception; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java index 5000fb99..59c33687 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java @@ -68,12 +68,13 @@ public class TbConsInfoDto implements Serializable { private Integer shopId; - - private BigDecimal price; private String status; private BigDecimal stockConsume; + + + private String contypeCode; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java index 100b1f35..5b199068 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.cons.service.impl; +import cn.hutool.core.util.ObjectUtil; import cn.ysk.cashier.cons.domain.*; import cn.ysk.cashier.cons.repository.TbConsInfoFlowRepository; import cn.ysk.cashier.cons.repository.TbConsInfoRepository; @@ -26,14 +27,20 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.Timestamp; import java.util.*; @@ -73,7 +80,14 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { @Override public List queryAll(TbConsInfoQueryCriteria criteria) { - return tbConsInfoMapper.toDto(tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); + + List list= tbConsInfoMapper.toDto(tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); + if(Objects.nonNull(list)&&list.size()>0){ + list.parallelStream().forEach(it->{ + it.setContypeCode(tbConsTypeRepository.findById(it.getConTypeId()).orElseGet(TbConsType::new).getConTypeCode()); + }); + } + return list; } @Override @@ -142,17 +156,13 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { List> list = new ArrayList<>(); for (TbConsInfoDto tbConsInfo : all) { Map map = new LinkedHashMap<>(); - map.put("耗材类型id", tbConsInfo.getConTypeId()); - map.put("耗材类型名称", tbConsInfo.getConTypeName()); map.put("耗材代码", tbConsInfo.getConCode()); map.put("耗材名称", tbConsInfo.getConName()); - map.put("库存值", tbConsInfo.getStockNumber()); - map.put("单位值", tbConsInfo.getConUnit()); - map.put("最近一次入库量", tbConsInfo.getLasterInStock()); - map.put("创建时间", tbConsInfo.getCreateTime()); - map.put("耗材预警值", tbConsInfo.getConWarning()); - map.put("更新时间", tbConsInfo.getUpdateTime()); - map.put("店铺id", tbConsInfo.getShopId()); + map.put("耗材类型代码", tbConsInfo.getContypeCode()); + map.put("单位", tbConsInfo.getConUnit()); + map.put("价格",tbConsInfo.getPrice()); + map.put("耗材预警值",tbConsInfo.getConWarning()); + map.put("库存",tbConsInfo.getStockNumber().subtract(tbConsInfo.getStockConsume())); list.add(map); } FileUtil.downloadExcel(list, response); @@ -306,6 +316,173 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { tbProductStockOperateRepository.save(stockOperate); } + @Override + @Transactional + public void inputStock(String shopId, MultipartFile file) throws Exception { + + + //根据路径获取这个操作excel的实例 + XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file.getInputStream()); + //根据页面index 获取sheet页 + XSSFSheet sheet = xssfWorkbook.getSheetAt(0); + XSSFRow row = null; + + List consInfos=new ArrayList<>(); + for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) { + row = sheet.getRow(i); + if (row != null) { + XSSFCell cell0 = row.getCell(0); + XSSFCell cell1 = row.getCell(1); + if (ObjectUtil.isEmpty(cell1)) { + log.info("耗材名称为空:{}", cell1); + continue; + } + + + XSSFCell cell2 = row.getCell(2); + + if (ObjectUtil.isEmpty(cell2)) { + log.info("耗材类型为空:{}", cell2); + continue; + } + + + XSSFCell cell3 = row.getCell(3); + + if (ObjectUtil.isEmpty(cell3)) { + log.info("耗材单位为空:{}", cell3); + continue; + } + + + XSSFCell cell4 = row.getCell(4); + + if (ObjectUtil.isEmpty(cell4)) { + log.info("耗材价格为空:{}", cell4); + continue; + } + + + XSSFCell cell5 = row.getCell(5); + + if (ObjectUtil.isEmpty(cell5)) { + log.info("耗材预警值为空:{}", cell5); + continue; + } + + + XSSFCell cell6 = row.getCell(6); + + if (ObjectUtil.isEmpty(cell6)) { + log.info("耗材库存为空:{}", cell6); + continue; + } + + + TbConsType tbConsType = tbConsTypeRepository.findByConTypeCode(cell2.toString()); + if (Objects.isNull(tbConsType)) { + log.info("不存在的耗材类型:{}", cell2.toString()); + continue; + } + + + if (ObjectUtil.isNotEmpty(cell0)) { + + TbConsInfo consInfo = tbConsInfoRepository.findByConCode(cell0.toString()); + if (ObjectUtil.isEmpty(consInfo) || ObjectUtil.isNull(consInfo)) { + consInfo = new TbConsInfo(); + consInfo.setConCode(UUID.randomUUID().toString()); + consInfo.setShopId(Integer.valueOf(shopId)); + consInfo.setConTypeId(tbConsType.getId()); + consInfo.setConTypeName(tbConsType.getConTypeName()); + consInfo.setConName(cell1.toString()); + consInfo.setPrice(new BigDecimal(cell4.toString())); + consInfo.setStockNumber(new BigDecimal(cell6.toString())); + consInfo.setStockConsume(BigDecimal.ZERO); + consInfo.setStatus("1"); + consInfo.setConUnit(cell4.toString()); + consInfo.setLasterInStock(consInfo.getStockNumber()); + consInfo.setConWarning(new BigDecimal(cell5.toString())); + consInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); + consInfo = tbConsInfoRepository.save(consInfo); + + + TbConsInfoFlow flow = new TbConsInfoFlow(); + flow.setBizCode("stockOtherIn"); + flow.setBizName("导入库存"); + flow.setBizType("+"); + flow.setConsId(consInfo.getId()); + flow.setShopId(consInfo.getShopId()); + flow.setConName(consInfo.getConName()); + flow.setAmount(consInfo.getStockNumber()); + flow.setBalance(consInfo.getStockNumber()); + + flow.setCreateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoFlowRepository.save(flow); + + + } else { + consInfo.setConName(cell1.toString()); + consInfo.setPrice(new BigDecimal(cell4.toString())); + consInfo.setStockNumber(new BigDecimal(cell6.toString())); + consInfo.setStockConsume(BigDecimal.ZERO); + consInfo.setConUnit(cell4.toString()); + consInfo.setLasterInStock(consInfo.getStockNumber()); + consInfo.setConWarning(new BigDecimal(cell5.toString())); + consInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); + consInfo = tbConsInfoRepository.save(consInfo); + + TbConsInfoFlow flow = new TbConsInfoFlow(); + flow.setBizCode("stockOtherIn"); + flow.setBizName("导入库存"); + flow.setBizType("+"); + flow.setConsId(consInfo.getId()); + flow.setShopId(consInfo.getShopId()); + flow.setConName(consInfo.getConName()); + flow.setAmount(consInfo.getStockNumber()); + flow.setBalance(consInfo.getStockNumber()); + + flow.setCreateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoFlowRepository.save(flow); + } + } else { + TbConsInfo consInfo = new TbConsInfo(); + consInfo.setConCode(UUID.randomUUID().toString()); + consInfo.setShopId(Integer.valueOf(shopId)); + consInfo.setConTypeId(tbConsType.getId()); + consInfo.setConTypeName(tbConsType.getConTypeName()); + consInfo.setConName(cell1.toString()); + consInfo.setPrice(new BigDecimal(cell4.toString())); + consInfo.setStockNumber(new BigDecimal(cell6.toString())); + consInfo.setStockConsume(BigDecimal.ZERO); + consInfo.setStatus("1"); + consInfo.setConUnit(cell4.toString()); + consInfo.setLasterInStock(consInfo.getStockNumber()); + consInfo.setConWarning(new BigDecimal(cell5.toString())); + consInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); + consInfo = tbConsInfoRepository.save(consInfo); + + + TbConsInfoFlow flow = new TbConsInfoFlow(); + flow.setBizCode("stockOtherIn"); + flow.setBizName("导入库存"); + flow.setBizType("+"); + flow.setConsId(consInfo.getId()); + flow.setShopId(consInfo.getShopId()); + flow.setConName(consInfo.getConName()); + flow.setAmount(consInfo.getStockNumber()); + flow.setBalance(consInfo.getStockNumber()); + + flow.setCreateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoFlowRepository.save(flow); + + } + } + + } + + } + public static void main(String[] args){ System.out.println(UUID.randomUUID().toString()); }