修改耗材信息校验
This commit is contained in:
parent
9590359f13
commit
d232e923d6
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue