diff --git a/src/main/java/com/glxp/api/controller/inv/InvProductController.java b/src/main/java/com/glxp/api/controller/inv/InvProductController.java new file mode 100644 index 000000000..731c862ea --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inv/InvProductController.java @@ -0,0 +1,151 @@ +package com.glxp.api.controller.inv; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.github.pagehelper.PageInfo; +import com.glxp.api.common.enums.ResultEnum; +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.common.util.ResultVOUtils; +import com.glxp.api.constant.ConstantType; +import com.glxp.api.entity.inv.InvProductDetailEntity; +import com.glxp.api.entity.inv.InvProductEntity; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; +import com.glxp.api.req.inv.FilterInvProductRequest; +import com.glxp.api.req.system.DeleteRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.res.inv.InvProductDetailResponse; +import com.glxp.api.res.inv.InvProductPageResponse; +import com.glxp.api.res.inv.InvProductResponse; +import com.glxp.api.service.auth.CustomerService; +import com.glxp.api.service.auth.WarehouseUserService; +import com.glxp.api.service.inv.InvProductDetailService; +import com.glxp.api.service.inv.InvProductService; +import com.glxp.api.util.udi.FilterUdiUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 库存查询接口 + */ +@Slf4j +@RestController +public class InvProductController { + + @Resource + private InvProductService invProductService; + @Resource + private InvProductDetailService invProductDetailService; + @Resource + private WarehouseUserService warehouseUserService; + @Resource + private CustomerService customerService; + + /** + * 库存列表查询接口 + * + * @param filterInvProductRequest + * @return + */ + @GetMapping("/spms/inv/product/filter") + public BaseResponse filterList(FilterInvProductRequest filterInvProductRequest) { + boolean showSup = false; //前端控制表格显示列字段 + if (StrUtil.isNotBlank(filterInvProductRequest.getUdiCode())) { + filterInvProductRequest.setNameCode(FilterUdiUtils.getDiStr(filterInvProductRequest.getUdiCode())); + } + + if (StrUtil.isBlank(filterInvProductRequest.getInvCode())) { + List invCodes = warehouseUserService.selectCodeByUser(customerService.getUserIdStr()); + if (CollUtil.isNotEmpty(invCodes)) { + filterInvProductRequest.setInvCodes(invCodes); + } + } + + List list = invProductService.filterList(filterInvProductRequest); + PageInfo pageInfo = new PageInfo<>(list); + InvProductPageResponse pageResponse = new InvProductPageResponse(); + pageResponse.setList(pageInfo.getList()); + pageResponse.setTotal(pageResponse.getTotal()); + pageResponse.setShowSup(showSup); + return ResultVOUtils.success(pageResponse); + } + + /** + * 查询库存详情 + * + * @param filterInvProductDetailRequest + * @return + */ + @GetMapping("/spms/inv/product/filterDetail") + public BaseResponse filterInvProductDetail(FilterInvProductDetailRequest filterInvProductDetailRequest) { + if (StrUtil.isBlank(filterInvProductDetailRequest.getBatchNo())) { + filterInvProductDetailRequest.setBatchNo("empty"); + } + + List invProductDetailEntities = invProductDetailService.filterInvProductDetailList(filterInvProductDetailRequest); + PageInfo pageInfo = new PageInfo<>(invProductDetailEntities); + + List list = new ArrayList<>(); + if (CollUtil.isNotEmpty(invProductDetailEntities)) { + invProductDetailEntities.forEach(invProductDetailEntity -> { + InvProductDetailResponse response = new InvProductDetailResponse(); + BeanUtil.copyProperties(invProductDetailEntity, response); + if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) { + response.setMainActionStr("出库"); + response.setOutCount(invProductDetailEntity.getCount()); + } else { + response.setMainActionStr("入库"); + response.setInCount(invProductDetailEntity.getCount()); + } + list.add(response); + }); + } + + PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); + pageSimpleResponse.setTotal(pageInfo.getTotal()); + pageSimpleResponse.setList(list); + return ResultVOUtils.success(pageSimpleResponse); + } + + /** + * 删除库存 + * + * @param deleteRequest + * @param bindingResult + * @return + */ + @PostMapping("/spms/inv/product/delete") + public BaseResponse deleteInvProduct(@RequestBody DeleteRequest deleteRequest, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + + String id = deleteRequest.getId(); + InvProductEntity invProductEntity = invProductService.findById(deleteRequest.getId()); + if (null != invProductEntity) { + FilterInvProductDetailRequest detailRequest = new FilterInvProductDetailRequest(); + detailRequest.setSupId(invProductEntity.getSupId()); + detailRequest.setRelId(String.valueOf(invProductEntity.getRelIdFk())); + detailRequest.setInvCode(invProductEntity.getInvCode()); + if (StrUtil.isBlank(invProductEntity.getBatchNo())) { + detailRequest.setBatchNo("empty"); + } else { + detailRequest.setBatchNo(invProductEntity.getBatchNo()); + } + invProductService.deleteById(id); + invProductDetailService.deleteInvProductDetail(detailRequest); + return ResultVOUtils.success("删除成功"); + } else { + return ResultVOUtils.error(500, "删除失败"); + } + } + +} diff --git a/src/main/java/com/glxp/api/dao/auth/WarehouseUserDao.java b/src/main/java/com/glxp/api/dao/auth/WarehouseUserDao.java index 3bbaeb1a8..f1ead4405 100644 --- a/src/main/java/com/glxp/api/dao/auth/WarehouseUserDao.java +++ b/src/main/java/com/glxp/api/dao/auth/WarehouseUserDao.java @@ -41,7 +41,7 @@ public interface WarehouseUserDao { List selectListkey(FilterInvLinkDataRequest filterInvLinkDataRequest); List selectNotSelectUserid(@Param("userIds")List userIds ); - List selectCodeByUser(@Param("userId") String userId); + List selectCodeByUser(@Param("userId") String userId); void deleteByCode(@Param("code") String code); diff --git a/src/main/java/com/glxp/api/dao/inv/InvProductDao.java b/src/main/java/com/glxp/api/dao/inv/InvProductDao.java index 52ccf096b..22789e4d9 100644 --- a/src/main/java/com/glxp/api/dao/inv/InvProductDao.java +++ b/src/main/java/com/glxp/api/dao/inv/InvProductDao.java @@ -1,10 +1,21 @@ package com.glxp.api.dao.inv; import com.glxp.api.dao.BaseMapperPlus; -import com.glxp.api.entity.inv.InvPreinDetailEntity; import com.glxp.api.entity.inv.InvProductEntity; +import com.glxp.api.req.inv.FilterInvProductRequest; +import com.glxp.api.res.inv.InvProductResponse; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + @Mapper public interface InvProductDao extends BaseMapperPlus { + + /** + * 查询库存列表 + * + * @param filterInvProductRequest + * @return + */ + List filterList(FilterInvProductRequest filterInvProductRequest); } diff --git a/src/main/java/com/glxp/api/dao/inv/InvProductDetailDao.java b/src/main/java/com/glxp/api/dao/inv/InvProductDetailDao.java index ffecafe2b..04b7841f4 100644 --- a/src/main/java/com/glxp/api/dao/inv/InvProductDetailDao.java +++ b/src/main/java/com/glxp/api/dao/inv/InvProductDetailDao.java @@ -1,10 +1,22 @@ package com.glxp.api.dao.inv; import com.glxp.api.dao.BaseMapperPlus; -import com.glxp.api.entity.inv.InvPreinDetailEntity; import com.glxp.api.entity.inv.InvProductDetailEntity; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + @Mapper public interface InvProductDetailDao extends BaseMapperPlus { + + /** + * 查询库存详情列表 + * + * @param filterInvProductDetailRequest + * @return + */ + List filterInvProductDetailList(FilterInvProductDetailRequest filterInvProductDetailRequest); + + boolean deleteInvProductDetail(FilterInvProductDetailRequest detailRequest); } diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvProductDetailRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvProductDetailRequest.java new file mode 100644 index 000000000..6ffa94b1e --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterInvProductDetailRequest.java @@ -0,0 +1,83 @@ +package com.glxp.api.req.inv; + +import com.glxp.api.util.page.ListPageRequest; +import lombok.Data; + +import java.util.List; + +/** + * 库存详情查询参数 + */ +@Data +public class FilterInvProductDetailRequest extends ListPageRequest { + + /** + * UDI码 + */ + private String code; + + /** + * 出入库单据类型 + */ + private String mainAction; + + /** + * 单据类型 + */ + private String action; + + /** + * 供应商ID + */ + private String supId; + + /** + * 耗材字典ID + */ + private String relId; + + /** + * 最小销售标识 + */ + private String nameCode; + + /** + * 单据号 + */ + private String orderId; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + + /** + * 货位编码 + */ + private String invSpaceCode; + + /** + * 原始编码 + */ + private String originCode; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 产品ID集合 + */ + private List productIdList; + + /** + * 更新时间 + */ + private String updateTime; +} diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvProductRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvProductRequest.java new file mode 100644 index 000000000..119adfbc8 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterInvProductRequest.java @@ -0,0 +1,101 @@ +package com.glxp.api.req.inv; + +import com.glxp.api.util.page.ListPageRequest; +import lombok.Data; + +import java.util.List; + +/** + * 库存查询参数 + */ +@Data +public class FilterInvProductRequest extends ListPageRequest { + + private String id; + + /** + * 产品名称 + */ + private String cpmctymc; + + /** + * 产品标识DI + */ + private String nameCode; + + /** + * UDI码 + */ + private String udiCode; + + /** + * 耗材字典ID + */ + private String relIdFk; + + /** + * 规格型号 + */ + private String ggxh; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 生产日期 + */ + private String productionDate; + + /** + * 失效日期 + */ + private String expireDate; + + /** + * 生产厂家 + */ + private String ylqxzcrbarmc; + + /** + * 批准文号 + */ + private String zczbhhzbapzbh; + + /** + * 客户ID + */ + private String customerId; + + /** + * 供应商ID + */ + private String supId; + + /** + * 供应商名称 + */ + private String supName; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + + /** + * 仓库数组 + */ + private List invCodes; + + /** + * 产品类别 + */ + private String cplb; + +} diff --git a/src/main/java/com/glxp/api/res/inv/InvProductDetailResponse.java b/src/main/java/com/glxp/api/res/inv/InvProductDetailResponse.java new file mode 100644 index 000000000..5a9238526 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/InvProductDetailResponse.java @@ -0,0 +1,124 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +import java.util.Date; + +/** + * 库存详情数据VO + */ +@Data +public class InvProductDetailResponse { + + private Integer id; + + /** + * UDI码 + */ + private String code; + + /** + * 订单号外键 + */ + private String orderId; + + /** + * 耗材字典ID + */ + private Long relId; + + /** + * 最小销售标识 + */ + private String nameCode; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 生产日期 + */ + private String produceDate; + + /** + * 失效日期 + */ + private String expireDate; + + /** + * 序列号 + */ + private String serialNo; + + /** + * 供应商 + */ + private String supId; + + /** + * 扫码数量 + */ + private Integer count; + + /** + * 实际数量 + */ + private Integer reCount; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + + /** + * 货位编码 + */ + private String invSpaceCode; + + /** + * 原始编码 + */ + private String originCode; + + /** + * 采购类型 + */ + private Integer purchaseType; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 单据出入库类型 + */ + private String mainAction; + + /** + * 单据类型编码 + */ + private String action; + + /** + * 出入库类型中文字符串 + */ + private String mainActionStr; + + /** + * 入库数量 + */ + private Integer inCount; + + /** + * 出库数量 + */ + private Integer outCount; +} diff --git a/src/main/java/com/glxp/api/res/inv/InvProductPageResponse.java b/src/main/java/com/glxp/api/res/inv/InvProductPageResponse.java new file mode 100644 index 000000000..7c9db0822 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/InvProductPageResponse.java @@ -0,0 +1,17 @@ +package com.glxp.api.res.inv; + +import com.glxp.api.res.PageSimpleResponse; +import lombok.Data; + +/** + * 库存查询分页对象 + */ +@Data +public class InvProductPageResponse extends PageSimpleResponse { + + /** + * 前端页面控制字段 + */ + private boolean showSup; + +} diff --git a/src/main/java/com/glxp/api/res/inv/InvProductResponse.java b/src/main/java/com/glxp/api/res/inv/InvProductResponse.java new file mode 100644 index 000000000..f90e1b872 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/InvProductResponse.java @@ -0,0 +1,10 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +/** + * 库存数据VO + */ +@Data +public class InvProductResponse { +} diff --git a/src/main/java/com/glxp/api/service/auth/WarehouseUserService.java b/src/main/java/com/glxp/api/service/auth/WarehouseUserService.java index c8e44497d..2fe689055 100644 --- a/src/main/java/com/glxp/api/service/auth/WarehouseUserService.java +++ b/src/main/java/com/glxp/api/service/auth/WarehouseUserService.java @@ -22,7 +22,7 @@ public interface WarehouseUserService { List getListByCode(String code); - List selectCodeByUser(String userId); + List selectCodeByUser(String userId); List filterWarehouseUsers(FilterInvUserRequest filterInvUserRequest); diff --git a/src/main/java/com/glxp/api/service/auth/impl/WarehouseUserServiceImpl.java b/src/main/java/com/glxp/api/service/auth/impl/WarehouseUserServiceImpl.java index 775180e93..873a77400 100644 --- a/src/main/java/com/glxp/api/service/auth/impl/WarehouseUserServiceImpl.java +++ b/src/main/java/com/glxp/api/service/auth/impl/WarehouseUserServiceImpl.java @@ -45,7 +45,7 @@ public class WarehouseUserServiceImpl implements WarehouseUserService { } @Override - public List selectCodeByUser(String userId) { + public List selectCodeByUser(String userId) { return warehouseUserDao.selectCodeByUser(userId); } diff --git a/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java b/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java index fa4fa6bc9..0a3b7b782 100644 --- a/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java +++ b/src/main/java/com/glxp/api/service/inv/InvProductDetailService.java @@ -1,7 +1,7 @@ package com.glxp.api.service.inv; import com.glxp.api.entity.inv.InvProductDetailEntity; -import com.glxp.api.entity.inv.InvProductEntity; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; import java.util.List; @@ -12,4 +12,14 @@ public interface InvProductDetailService { List selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode); boolean insertList(List invProductDetailEntities); + + /** + * 查询库存详情列表 + * + * @param filterInvProductDetailRequest + * @return + */ + List filterInvProductDetailList(FilterInvProductDetailRequest filterInvProductDetailRequest); + + boolean deleteInvProductDetail(FilterInvProductDetailRequest detailRequest); } diff --git a/src/main/java/com/glxp/api/service/inv/InvProductService.java b/src/main/java/com/glxp/api/service/inv/InvProductService.java index b3c9d086d..8f06e058d 100644 --- a/src/main/java/com/glxp/api/service/inv/InvProductService.java +++ b/src/main/java/com/glxp/api/service/inv/InvProductService.java @@ -1,6 +1,8 @@ package com.glxp.api.service.inv; import com.glxp.api.entity.inv.InvProductEntity; +import com.glxp.api.req.inv.FilterInvProductRequest; +import com.glxp.api.res.inv.InvProductResponse; import java.util.List; @@ -15,4 +17,27 @@ public interface InvProductService { InvProductEntity selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode); + /** + * 库存查询 + * + * @param filterInvProductRequest + * @return + */ + List filterList(FilterInvProductRequest filterInvProductRequest); + + /** + * 根据ID查询库存 + * + * @param id + * @return + */ + InvProductEntity findById(String id); + + /** + * 删除库存 + * + * @param id + * @return + */ + boolean deleteById(String id); } diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java index c64b60785..b1db70287 100644 --- a/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inv/impl/InvProductDetailServiceImpl.java @@ -1,14 +1,16 @@ package com.glxp.api.service.inv.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; import com.glxp.api.dao.inv.InvProductDetailDao; import com.glxp.api.entity.inv.InvProductDetailEntity; -import com.glxp.api.entity.inv.InvProductEntity; +import com.glxp.api.req.inv.FilterInvProductDetailRequest; import com.glxp.api.service.inv.InvProductDetailService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.Collections; import java.util.List; @Service @@ -32,4 +34,20 @@ public class InvProductDetailServiceImpl implements InvProductDetailService { public boolean insertList(List invProductDetailEntities) { return invProductDetailDao.insertBatch(invProductDetailEntities); } + + @Override + public List filterInvProductDetailList(FilterInvProductDetailRequest filterInvProductDetailRequest) { + if (null == filterInvProductDetailRequest) { + return Collections.emptyList(); + } + if (null != filterInvProductDetailRequest.getPage() && null != filterInvProductDetailRequest.getLimit()) { + PageHelper.offsetPage((filterInvProductDetailRequest.getPage() - 1) * filterInvProductDetailRequest.getLimit(), filterInvProductDetailRequest.getLimit()); + } + return invProductDetailDao.filterInvProductDetailList(filterInvProductDetailRequest); + } + + @Override + public boolean deleteInvProductDetail(FilterInvProductDetailRequest detailRequest) { + return invProductDetailDao.deleteInvProductDetail(detailRequest); + } } diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvProductServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvProductServiceImpl.java index aa34ae08e..44cfd7279 100644 --- a/src/main/java/com/glxp/api/service/inv/impl/InvProductServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inv/impl/InvProductServiceImpl.java @@ -1,13 +1,17 @@ package com.glxp.api.service.inv.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; import com.glxp.api.dao.inv.InvProductDao; import com.glxp.api.entity.inv.InvProductEntity; +import com.glxp.api.req.inv.FilterInvProductRequest; +import com.glxp.api.res.inv.InvProductResponse; import com.glxp.api.service.inv.InvProductService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.Collections; import java.util.List; @Service @@ -37,4 +41,25 @@ public class InvProductServiceImpl implements InvProductService { return invProductDao.selectOne(new QueryWrapper().eq("relIdFk", relId).eq("batchNo", batchNo).eq("supId", supId).eq("deptCode", deptCode).eq("invCode", invCode)); } + @Override + public List filterList(FilterInvProductRequest filterInvProductRequest) { + if (null == filterInvProductRequest) { + return Collections.emptyList(); + } + if (null != filterInvProductRequest.getPage() && null != filterInvProductRequest.getLimit()) { + PageHelper.offsetPage((filterInvProductRequest.getPage() - 1) * filterInvProductRequest.getLimit(), filterInvProductRequest.getLimit()); + } + return invProductDao.filterList(filterInvProductRequest); + } + + @Override + public InvProductEntity findById(String id) { + return invProductDao.selectById(id); + } + + @Override + public boolean deleteById(String id) { + return invProductDao.deleteById(id) == 1 ? true : false; + } + } \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/auth/WarehouseUserDao.xml b/src/main/resources/mybatis/mapper/auth/WarehouseUserDao.xml index 41efb1dcc..3c768da42 100644 --- a/src/main/resources/mybatis/mapper/auth/WarehouseUserDao.xml +++ b/src/main/resources/mybatis/mapper/auth/WarehouseUserDao.xml @@ -303,9 +303,8 @@ - - + select code from auth_warehouse_user where userId = #{userId} diff --git a/src/main/resources/mybatis/mapper/inv/invProductDao.xml b/src/main/resources/mybatis/mapper/inv/invProductDao.xml new file mode 100644 index 000000000..72500b80b --- /dev/null +++ b/src/main/resources/mybatis/mapper/inv/invProductDao.xml @@ -0,0 +1,83 @@ + + + + + diff --git a/src/main/resources/mybatis/mapper/inv/invProductDetailDao.xml b/src/main/resources/mybatis/mapper/inv/invProductDetailDao.xml new file mode 100644 index 000000000..970414e34 --- /dev/null +++ b/src/main/resources/mybatis/mapper/inv/invProductDetailDao.xml @@ -0,0 +1,83 @@ + + + + + + + delete + from inv_product_detail + + + AND relId = #{relId} + + + AND batchNo = #{batchNo} + + + AND batchNo is null + + + AND supId = #{supId} + + + AND invCode = #{invCode} + + + +