From e04281d8b93d0cd249751d06ba0f20c91d3f77fb Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Wed, 16 Oct 2024 17:54:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=80=97=E6=9D=90=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ysk/cashier/cons/domain/TbConsInfo.java | 3 + .../cons/repository/TbConsInfoRepository.java | 14 ++ .../cons/rest/TbConsInfoController.java | 7 + .../cons/rest/ViewConInfoFlowController.java | 126 +++++++++--------- .../cons/service/TbConsInfoService.java | 2 + .../cons/service/dto/TbConsInfoDto.java | 2 + .../service/dto/TbConsInfoQueryCriteria.java | 10 ++ .../service/impl/TbConsInfoServiceImpl.java | 82 +++++++----- 8 files changed, 148 insertions(+), 98 deletions(-) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfo.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfo.java index 1363f6a1..cd0affbd 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfo.java @@ -107,6 +107,9 @@ public class TbConsInfo implements Serializable { @ApiModelProperty(value = "是否检测库存") private String isCheck; + @Transient + private String product; + public void copy(TbConsInfo source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } 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 09eff539..c58ea621 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 @@ -1,8 +1,12 @@ package cn.ysk.cashier.cons.repository; import cn.ysk.cashier.cons.domain.TbConsInfo; +import org.apache.ibatis.annotations.Param; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; import java.util.List; @@ -19,4 +23,14 @@ public interface TbConsInfoRepository extends JpaRepository List findByConTypeId(Integer typeId); TbConsInfo findByConCode(String conCode); + + + @Query(value = + "SELECT CONCAT(pro.id, '_', pro.NAME) AS product" + + " FROM" + + " tb_prosku_con conPro" + + " LEFT JOIN tb_product pro ON conPro.product_id = pro.id AND pro.shop_id = :shopId AND conPro.shop_id = :shopId" + + " where conPro.con_info_id = :conInfoId " + + " group by conPro.product_id ",nativeQuery = true) + List queryAllAndPro(@Param("shopId") Integer shopId,@Param("conInfoId")Integer conInfoId); } \ 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 e9928425..d6218693 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 @@ -47,6 +47,13 @@ public class TbConsInfoController { return new ResponseEntity<>(tbConsInfoService.queryAll(criteria,pageable),HttpStatus.OK); } + + @PostMapping("/allAndPro") + @ApiOperation("耗材列表(携带商品信息)") + public ResponseEntity queryAllAndPro(TbConsInfoQueryCriteria criteria){ + return new ResponseEntity<>(tbConsInfoService.queryAllAndPro(criteria),HttpStatus.OK); + } + @PostMapping @Log("新增耗材信息") @ApiOperation("新增耗材信息") diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/ViewConInfoFlowController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/ViewConInfoFlowController.java index ec79da5d..25094747 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/ViewConInfoFlowController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/ViewConInfoFlowController.java @@ -1,63 +1,63 @@ -package cn.ysk.cashier.cons.rest; - -import cn.ysk.cashier.annotation.Log; -import cn.ysk.cashier.cons.domain.ViewConInfoFlow; -import cn.ysk.cashier.cons.service.ViewConInfoFlowService; -import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowQueryCriteria; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.*; -import java.io.IOException; -import javax.servlet.http.HttpServletResponse; - -/** -* @author admin -* @date 2024-07-17 -**/ -@RestController -@RequiredArgsConstructor -@Api(tags = "获取耗材流水信息管理") -@RequestMapping("/api/viewConInfoFlow") -public class ViewConInfoFlowController { - - private final ViewConInfoFlowService viewConInfoFlowService; - - @Log("导出数据") - @ApiOperation("导出数据") - @GetMapping(value = "/download") - public void exportViewConInfoFlow(HttpServletResponse response, ViewConInfoFlowQueryCriteria criteria) throws IOException { - viewConInfoFlowService.download(viewConInfoFlowService.queryAll(criteria), response); - } - - @PostMapping("get") - @ApiOperation("查询获取耗材流水信息") - public ResponseEntity queryViewConInfoFlow(@RequestBody ViewConInfoFlowQueryCriteria criteria){ - return new ResponseEntity<>(viewConInfoFlowService.queryAllPage(criteria),HttpStatus.OK); - } - - @PostMapping - @Log("新增获取耗材流水信息") - @ApiOperation("新增获取耗材流水信息") - public ResponseEntity createViewConInfoFlow(@Validated @RequestBody ViewConInfoFlow resources){ - return new ResponseEntity<>(viewConInfoFlowService.create(resources),HttpStatus.CREATED); - } - - @PutMapping - @Log("修改获取耗材流水信息") - @ApiOperation("修改获取耗材流水信息") - public ResponseEntity updateViewConInfoFlow(@Validated @RequestBody ViewConInfoFlow resources){ - viewConInfoFlowService.update(resources); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @DeleteMapping - @Log("删除获取耗材流水信息") - @ApiOperation("删除获取耗材流水信息") - public ResponseEntity deleteViewConInfoFlow(@RequestBody Integer[] ids) { - viewConInfoFlowService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } -} \ No newline at end of file +//package cn.ysk.cashier.cons.rest; +// +//import cn.ysk.cashier.annotation.Log; +//import cn.ysk.cashier.cons.domain.ViewConInfoFlow; +//import cn.ysk.cashier.cons.service.ViewConInfoFlowService; +//import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowQueryCriteria; +//import lombok.RequiredArgsConstructor; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.ResponseEntity; +//import org.springframework.validation.annotation.Validated; +//import org.springframework.web.bind.annotation.*; +//import io.swagger.annotations.*; +//import java.io.IOException; +//import javax.servlet.http.HttpServletResponse; +// +///** +//* @author admin +//* @date 2024-07-17 +//**/ +//@RestController +//@RequiredArgsConstructor +//@Api(tags = "获取耗材流水信息管理") +//@RequestMapping("/api/viewConInfoFlow") +//public class ViewConInfoFlowController { +// +// private final ViewConInfoFlowService viewConInfoFlowService; +// +// @Log("导出数据") +// @ApiOperation("导出数据") +// @GetMapping(value = "/download") +// public void exportViewConInfoFlow(HttpServletResponse response, ViewConInfoFlowQueryCriteria criteria) throws IOException { +// viewConInfoFlowService.download(viewConInfoFlowService.queryAll(criteria), response); +// } +// +// @PostMapping("get") +// @ApiOperation("查询获取耗材流水信息") +// public ResponseEntity queryViewConInfoFlow(@RequestBody ViewConInfoFlowQueryCriteria criteria){ +// return new ResponseEntity<>(viewConInfoFlowService.queryAllPage(criteria),HttpStatus.OK); +// } +// +// @PostMapping +// @Log("新增获取耗材流水信息") +// @ApiOperation("新增获取耗材流水信息") +// public ResponseEntity createViewConInfoFlow(@Validated @RequestBody ViewConInfoFlow resources){ +// return new ResponseEntity<>(viewConInfoFlowService.create(resources),HttpStatus.CREATED); +// } +// +// @PutMapping +// @Log("修改获取耗材流水信息") +// @ApiOperation("修改获取耗材流水信息") +// public ResponseEntity updateViewConInfoFlow(@Validated @RequestBody ViewConInfoFlow resources){ +// viewConInfoFlowService.update(resources); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } +// +// @DeleteMapping +// @Log("删除获取耗材流水信息") +// @ApiOperation("删除获取耗材流水信息") +// public ResponseEntity deleteViewConInfoFlow(@RequestBody Integer[] ids) { +// viewConInfoFlowService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } +//} \ No newline at end of file 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 144bd73f..5504fa0d 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 @@ -28,6 +28,8 @@ public interface TbConsInfoService { */ Map queryAll(TbConsInfoQueryCriteria criteria, Pageable pageable); + Map queryAllAndPro(TbConsInfoQueryCriteria criteria); + /** * 查询所有数据不分页 * @param criteria 条件参数 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 bc505d8b..3742409b 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 @@ -80,4 +80,6 @@ public class TbConsInfoDto implements Serializable { private String isCheck; + + private String product; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoQueryCriteria.java index 3be0dd7e..810cf447 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoQueryCriteria.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoQueryCriteria.java @@ -1,6 +1,8 @@ package cn.ysk.cashier.cons.service.dto; import lombok.Data; + +import java.sql.Timestamp; import java.util.List; import cn.ysk.cashier.annotation.Query; @@ -33,4 +35,12 @@ public class TbConsInfoQueryCriteria{ @Query private String status; + + @Query(type = Query.Type.IN) + private List createTimes; + + + private Integer page=0; + private Integer size=10; + private String sort; } \ 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 99303f2c..a581624a 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,19 @@ package cn.ysk.cashier.cons.service.impl; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; +import java.util.ArrayList; +import java.util.List; + +import cn.ysk.cashier.pojo.product.TbProduct; +import org.springframework.data.domain.*; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.JpaRepository; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.util.ObjectUtil; import cn.ysk.cashier.cons.domain.*; import cn.ysk.cashier.cons.repository.TbConsInfoFlowRepository; @@ -25,16 +39,20 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; 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.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; +import javax.persistence.criteria.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; @@ -72,10 +90,29 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { } @Override - public List queryAll(TbConsInfoQueryCriteria criteria) { + public Map queryAllAndPro(TbConsInfoQueryCriteria criteria) { + Sort sort = Sort.by(Sort.Direction.DESC, "consId"); + if(StringUtils.isNotBlank(criteria.getSort())){ + String[] sortParams = criteria.getSort().split(","); + String sortField = sortParams[0]; + Sort.Direction sortDirection = Sort.Direction.fromString(sortParams[1]); + sort = Sort.by(sortDirection, sortField); + } + Pageable pageable = PageRequest.of(criteria.getPage(), criteria.getSize(), sort); + Page page = tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); + Page result = page.map(tbConsInfoMapper::toDto); + result.getContent().forEach(it -> { + List list = tbConsInfoRepository.queryAllAndPro(criteria.getShopId(), it.getId()); + it.setProduct(String.join(",", list)); + }); + return PageUtil.toPage(result); + } + + @Override + public List queryAll(TbConsInfoQueryCriteria criteria) { List list = tbConsInfoMapper.toDto(tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); - if (Objects.nonNull(list) && !list.isEmpty()) { + if (!CollectionUtils.isEmpty(list)) { list.parallelStream().forEach(it -> it.setContypeCode(tbConsTypeRepository.findById(it.getConTypeId()).orElseGet(TbConsType::new).getConTypeCode())); } return list; @@ -104,35 +141,20 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { // if (count > 0) { // throw new Exception("耗材代码不允许重复"); // } - - + if(StringUtils.isBlank(resource.getConUnit())){ + throw new Exception(resource.getConName()+ "的单位不允许为空"); + } resource.setConCode(StringCodeUtil.getRandom(8, LETTER_CAPITAL_NUMBER)); resource.setConTypeName(tbConsType.getConTypeName()); resource.setLasterInStock(BigDecimal.ZERO); resource.setStockNumber(BigDecimal.ZERO); + resource.setIsCheck("0"); resource.setStatus("1"); resource.setStockConsume(BigDecimal.ZERO); resource.setCreateTime(new Timestamp(System.currentTimeMillis())); - resource = tbConsInfoRepository.save(resource); - - - TbConsInfoFlow flow = new TbConsInfoFlow(); - - flow.setBizCode("stockIn"); - flow.setBizName("初始化入库"); - flow.setBizType("+"); - flow.setConsId(resource.getId()); - flow.setShopId(resource.getShopId()); - flow.setConName(resource.getConName()); - flow.setAmount(BigDecimal.ZERO); - flow.setBalance(BigDecimal.ZERO); - flow.setOperator(SecurityUtils.getCurrentUsername()); - flow.setCreateTime(new Timestamp(System.currentTimeMillis())); - tbConsInfoFlowRepository.save(flow); - - + tbConsInfoRepository.save(resource); } - return tbConsInfoMapper.toDto(new TbConsInfo()); + return null; } @Override @@ -144,13 +166,7 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { if (Objects.isNull(tbConsInfo)) { throw new Exception("耗材信息不存在"); } - - tbConsInfo.setConName(ObjectUtil.isEmpty(resource.getConName())||ObjectUtil.isNull(resource.getConName())?tbConsInfo.getConName():resource.getConName()); - tbConsInfo.setPrice(ObjectUtil.isEmpty(resource.getPrice())||ObjectUtil.isNull(resource.getPrice())?tbConsInfo.getPrice():resource.getPrice()); - tbConsInfo.setConUnit(ObjectUtil.isEmpty(resource.getConUnit())||ObjectUtil.isNull(resource.getConUnit())?tbConsInfo.getConUnit(): resource.getConUnit()); - tbConsInfo.setConWarning(ObjectUtil.isEmpty(resource.getConWarning())||ObjectUtil.isNull(resource.getConWarning())?tbConsInfo.getConWarning():resource.getConWarning()); - tbConsInfo.setStatus(ObjectUtil.isEmpty(resource.getStatus())||ObjectUtil.isNull(resource.getStatus())?tbConsInfo.getStatus():resource.getStatus()); - tbConsInfo.setIsCheck(ObjectUtil.isEmpty(resource.getIsCheck())||ObjectUtil.isNull(resource.getIsCheck())?tbConsInfo.getIsCheck():resource.getIsCheck()); + BeanUtil.copyProperties(resource,tbConsInfo, CopyOptions.create().setIgnoreNullValue(true)); tbConsInfo.setUpdateTime(new Timestamp(System.currentTimeMillis())); tbConsInfoRepository.save(tbConsInfo); @@ -274,7 +290,7 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { else if ("out".equals(resources.getType())) { stockOperate.setSubType(-1); - if (conInfos.getStockNumber().compareTo(info.getStockNumber()) > 0) { + if (conInfos.getStockNumber().compareTo(info.getStockNumber().subtract(info.getStockConsume())) > 0) { throw new BadRequestException("出库数量大于现有的库存数量"); } @@ -512,8 +528,4 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { } - public static void main(String[] args) { - System.out.println(UUID.randomUUID().toString()); - } - } From 30f21e1dd330034ab9826f39950679e327e717d9 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Thu, 17 Oct 2024 09:56:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a581624a..9d17a471 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 @@ -91,7 +91,7 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { @Override public Map queryAllAndPro(TbConsInfoQueryCriteria criteria) { - Sort sort = Sort.by(Sort.Direction.DESC, "consId"); + Sort sort = Sort.by(Sort.Direction.DESC, "id"); if(StringUtils.isNotBlank(criteria.getSort())){ String[] sortParams = criteria.getSort().split(","); String sortField = sortParams[0];