修改耗材信息校验

This commit is contained in:
韩鹏辉 2024-07-11 17:24:55 +08:00
parent 9590359f13
commit d232e923d6
6 changed files with 214 additions and 12 deletions

View File

@ -17,4 +17,6 @@ public interface TbConsInfoRepository extends JpaRepository<TbConsInfo, Integer>
int countByConCode(String conCode); int countByConCode(String conCode);
List<TbConsInfo> findByConTypeId(Integer typeId); List<TbConsInfo> findByConTypeId(Integer typeId);
TbConsInfo findByConCode(String conCode);
} }

View File

@ -12,4 +12,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface TbConsTypeRepository extends JpaRepository<TbConsType, Integer>, JpaSpecificationExecutor<TbConsType> { public interface TbConsTypeRepository extends JpaRepository<TbConsType, Integer>, JpaSpecificationExecutor<TbConsType> {
int countByConTypeCode(String conTypeCode); int countByConTypeCode(String conTypeCode);
TbConsType findByConTypeCode(String conTypeCode);
} }

View File

@ -13,6 +13,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -72,4 +74,16 @@ public class TbConsInfoController {
tbConsInfoService.stockInOut(resources); tbConsInfoService.stockInOut(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT); return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} }
@PostMapping("inputStock")
public ResponseEntity<Object> 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);
}
}
} }

View File

@ -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.TbConsInfoDto;
import cn.ysk.cashier.cons.service.dto.TbConsInfoQueryCriteria; import cn.ysk.cashier.cons.service.dto.TbConsInfoQueryCriteria;
import org.springframework.data.domain.Pageable; 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.Map;
import java.util.List; import java.util.List;
import java.io.IOException; import java.io.IOException;
@ -68,4 +71,7 @@ public interface TbConsInfoService {
void stockInOut(SuppFlow resources) throws Exception; void stockInOut(SuppFlow resources) throws Exception;
void inputStock(String shopId, MultipartFile file) throws Exception;
} }

View File

@ -68,12 +68,13 @@ public class TbConsInfoDto implements Serializable {
private Integer shopId; private Integer shopId;
private BigDecimal price; private BigDecimal price;
private String status; private String status;
private BigDecimal stockConsume; private BigDecimal stockConsume;
private String contypeCode;
} }

View File

@ -1,5 +1,6 @@
package cn.ysk.cashier.cons.service.impl; package cn.ysk.cashier.cons.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.ysk.cashier.cons.domain.*; import cn.ysk.cashier.cons.domain.*;
import cn.ysk.cashier.cons.repository.TbConsInfoFlowRepository; import cn.ysk.cashier.cons.repository.TbConsInfoFlowRepository;
import cn.ysk.cashier.cons.repository.TbConsInfoRepository; import cn.ysk.cashier.cons.repository.TbConsInfoRepository;
@ -26,14 +27,20 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; 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.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.*; import java.util.*;
@ -73,7 +80,14 @@ public class TbConsInfoServiceImpl implements TbConsInfoService {
@Override @Override
public List<TbConsInfoDto> queryAll(TbConsInfoQueryCriteria criteria) { public List<TbConsInfoDto> queryAll(TbConsInfoQueryCriteria criteria) {
return tbConsInfoMapper.toDto(tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder)));
List<TbConsInfoDto> 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 @Override
@ -142,17 +156,13 @@ public class TbConsInfoServiceImpl implements TbConsInfoService {
List<Map<String, Object>> list = new ArrayList<>(); List<Map<String, Object>> list = new ArrayList<>();
for (TbConsInfoDto tbConsInfo : all) { for (TbConsInfoDto tbConsInfo : all) {
Map<String, Object> map = new LinkedHashMap<>(); Map<String, Object> map = new LinkedHashMap<>();
map.put("耗材类型id", tbConsInfo.getConTypeId());
map.put("耗材类型名称", tbConsInfo.getConTypeName());
map.put("耗材代码", tbConsInfo.getConCode()); map.put("耗材代码", tbConsInfo.getConCode());
map.put("耗材名称", tbConsInfo.getConName()); map.put("耗材名称", tbConsInfo.getConName());
map.put("库存值", tbConsInfo.getStockNumber()); map.put("耗材类型代码", tbConsInfo.getContypeCode());
map.put("单位值", tbConsInfo.getConUnit()); map.put("单位", tbConsInfo.getConUnit());
map.put("最近一次入库量", tbConsInfo.getLasterInStock()); map.put("价格",tbConsInfo.getPrice());
map.put("创建时间", tbConsInfo.getCreateTime()); map.put("耗材预警值",tbConsInfo.getConWarning());
map.put("耗材预警值", tbConsInfo.getConWarning()); map.put("库存",tbConsInfo.getStockNumber().subtract(tbConsInfo.getStockConsume()));
map.put("更新时间", tbConsInfo.getUpdateTime());
map.put("店铺id", tbConsInfo.getShopId());
list.add(map); list.add(map);
} }
FileUtil.downloadExcel(list, response); FileUtil.downloadExcel(list, response);
@ -306,6 +316,173 @@ public class TbConsInfoServiceImpl implements TbConsInfoService {
tbProductStockOperateRepository.save(stockOperate); 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<TbConsInfo> 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){ public static void main(String[] args){
System.out.println(UUID.randomUUID().toString()); System.out.println(UUID.randomUUID().toString());
} }