diff --git a/src/main/java/com/glxp/api/controller/inv/InvPlaceController.java b/src/main/java/com/glxp/api/controller/inv/InvPlaceController.java new file mode 100644 index 000000000..9c5319957 --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inv/InvPlaceController.java @@ -0,0 +1,71 @@ +package com.glxp.api.controller.inv; + +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.req.inv.FilterInvPlaceRequest; +import com.glxp.api.res.inv.BindInvSpaceRequest; +import com.glxp.api.res.inv.InvPlaceDetailResponse; +import com.glxp.api.service.inv.InvPlaceService; +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 javax.validation.Valid; +import java.util.List; + +/** + * 库存摆放接口 + */ +@RestController +public class InvPlaceController { + + @Resource + private InvPlaceService invPlaceService; + + /** + * 查询库存摆放记录 + * + * @return + */ + @GetMapping("/spms/inv/product/getPlaceDetailList") + public BaseResponse getPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest) { + List list = invPlaceService.getPlaceDetailList(filterInvPlaceRequest); + PageInfo pageInfo = new PageInfo<>(list); + return ResultVOUtils.page(pageInfo); + } + + /** + * 绑定货位接口 + * + * @param bindInvSpaceRequest + * @return + */ + @PostMapping("/spms/inv/product/bindInvSpace") + public BaseResponse bindInvSpace(@RequestBody @Valid BindInvSpaceRequest bindInvSpaceRequest) { + if (null == bindInvSpaceRequest) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + invPlaceService.bindInvSpace(bindInvSpaceRequest); + return ResultVOUtils.success("绑定成功"); + } + + /** + * 校验库存详情绑定货位信息 + * + * @param bindInvSpaceRequest + * @return + */ + @PostMapping("/spms/inv/product/checkCodeSpace") + public BaseResponse checkCodeSpace(@RequestBody BindInvSpaceRequest bindInvSpaceRequest) { + if (null == bindInvSpaceRequest || StrUtil.isBlank(bindInvSpaceRequest.getInvCode()) || StrUtil.isBlank(bindInvSpaceRequest.getInvSpaceCode()) || StrUtil.isBlank(bindInvSpaceRequest.getCode())) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return invPlaceService.checkCodeSpace(bindInvSpaceRequest); + } + +} diff --git a/src/main/java/com/glxp/api/dao/auth/InvSubWarehouseDao.java b/src/main/java/com/glxp/api/dao/auth/InvSubWarehouseDao.java index 5ed750636..dc9708554 100644 --- a/src/main/java/com/glxp/api/dao/auth/InvSubWarehouseDao.java +++ b/src/main/java/com/glxp/api/dao/auth/InvSubWarehouseDao.java @@ -86,4 +86,13 @@ public interface InvSubWarehouseDao extends BaseMapperPlus selectInvListByUser(@Param("userId") Long userId); + + /** + * 根据仓库编码查询部门编码 + * + * @param invCode + * @return + */ + String selectParentIdByCode(@Param("invCode") String invCode); + } 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 04b7841f4..304774f0c 100644 --- a/src/main/java/com/glxp/api/dao/inv/InvProductDetailDao.java +++ b/src/main/java/com/glxp/api/dao/inv/InvProductDetailDao.java @@ -2,8 +2,12 @@ package com.glxp.api.dao.inv; import com.glxp.api.dao.BaseMapperPlus; import com.glxp.api.entity.inv.InvProductDetailEntity; +import com.glxp.api.req.inv.FilterInvPlaceRequest; import com.glxp.api.req.inv.FilterInvProductDetailRequest; +import com.glxp.api.res.inv.BindInvSpaceRequest; +import com.glxp.api.res.inv.InvPlaceDetailResponse; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -18,5 +22,35 @@ public interface InvProductDetailDao extends BaseMapperPlus filterInvProductDetailList(FilterInvProductDetailRequest filterInvProductDetailRequest); + /** + * 删除库存详情 + * + * @param detailRequest + * @return + */ boolean deleteInvProductDetail(FilterInvProductDetailRequest detailRequest); + + /** + * 查询库存摆放详情 + * + * @param filterInvPlaceRequest + * @return + */ + List selectPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest); + + /** + * 绑定货位 + * + * @param ids + * @param invSpaceCode + */ + void batchBindSpace(@Param("ids") List ids, @Param("invSpaceCode") String invSpaceCode); + + /** + * 根据仓库编码和UDI码查询库存详情 + * + * @param bindInvSpaceRequest + * @return + */ + InvProductDetailEntity selectByInvAndCode(BindInvSpaceRequest bindInvSpaceRequest); } diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvPlaceRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvPlaceRequest.java new file mode 100644 index 000000000..d1cd93afe --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterInvPlaceRequest.java @@ -0,0 +1,27 @@ +package com.glxp.api.req.inv; + +import com.glxp.api.util.page.ListPageRequest; +import lombok.Data; + +/** + * 库存摆放接口参数 + */ +@Data +public class FilterInvPlaceRequest extends ListPageRequest { + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + + /** + * 货位编码 + */ + private String invSpaceCode; + +} diff --git a/src/main/java/com/glxp/api/res/inv/BindInvSpaceRequest.java b/src/main/java/com/glxp/api/res/inv/BindInvSpaceRequest.java new file mode 100644 index 000000000..871e53ec5 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/BindInvSpaceRequest.java @@ -0,0 +1,43 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * 库存条码绑定货位参数 + */ +@Data +public class BindInvSpaceRequest { + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + @NotBlank(message = "请选择仓库") + private String invCode; + + /** + * 货位编码 + */ + @NotBlank(message = "请选择货位") + private String invSpaceCode; + + /** + * 条码列表 + */ + @NotEmpty(message = "请扫描货物条码") + private List codeArray; + + /** + * UDI码 + */ + private String code; + +} diff --git a/src/main/java/com/glxp/api/res/inv/InvPlaceDetailResponse.java b/src/main/java/com/glxp/api/res/inv/InvPlaceDetailResponse.java new file mode 100644 index 000000000..a92d61f44 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/InvPlaceDetailResponse.java @@ -0,0 +1,101 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +/** + * 库存摆放接口查询返回参数 + */ +@Data +public class InvPlaceDetailResponse { + + /** + * 库存详情ID + */ + private Integer id; + + /** + * UDI码 + */ + private String code; + + /** + * 耗材字典ID + */ + private String relId; + + /** + * 产品名称 + */ + private String productName; + + /** + * 规格型号 + */ + private String ggxh; + + /** + * 出入单据类型 + */ + private String mainAction; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 生产日期 + */ + private String productionDate; + + /** + * 失效日期 + */ + private String expireDate; + + /** + * 产品DI + */ + private String nameCode; + + /** + * 注册证,批准文号 + */ + private String zczbhhzbapzbh; + + /** + * 生产厂家 + */ + private String ylqxzcrbarmc; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + + /** + * 货位码 + */ + private String invSpaceCode; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 仓库名称 + */ + private String invName; + + /** + * 货位名称 + */ + private String invSpaceName; + +} diff --git a/src/main/java/com/glxp/api/service/inv/InvPlaceService.java b/src/main/java/com/glxp/api/service/inv/InvPlaceService.java new file mode 100644 index 000000000..ef9376942 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/InvPlaceService.java @@ -0,0 +1,37 @@ +package com.glxp.api.service.inv; + +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.req.inv.FilterInvPlaceRequest; +import com.glxp.api.res.inv.BindInvSpaceRequest; +import com.glxp.api.res.inv.InvPlaceDetailResponse; + +import java.util.List; + +/** + * 库存摆放Service + */ +public interface InvPlaceService { + + /** + * 查询库存摆放记录列表 + * + * @param filterInvPlaceRequest + * @return + */ + List getPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest); + + /** + * 绑定货位 + * + * @param bindInvSpaceRequest + */ + void bindInvSpace(BindInvSpaceRequest bindInvSpaceRequest); + + /** + * 校验库存详情绑定货位信息 + * + * @param bindInvSpaceRequest + * @return + */ + BaseResponse checkCodeSpace(BindInvSpaceRequest bindInvSpaceRequest); +} diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvPlaceServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvPlaceServiceImpl.java new file mode 100644 index 000000000..377158750 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/impl/InvPlaceServiceImpl.java @@ -0,0 +1,85 @@ +package com.glxp.api.service.inv.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; +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.dao.auth.InvSpaceDao; +import com.glxp.api.dao.auth.InvSubWarehouseDao; +import com.glxp.api.dao.inv.InvProductDetailDao; +import com.glxp.api.entity.inv.InvProductDetailEntity; +import com.glxp.api.req.inv.FilterInvPlaceRequest; +import com.glxp.api.res.inv.BindInvSpaceRequest; +import com.glxp.api.res.inv.InvPlaceDetailResponse; +import com.glxp.api.service.inv.InvPlaceService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvPlaceServiceImpl implements InvPlaceService { + + @Resource + private InvProductDetailDao invProductDetailDao; + @Resource + private InvSubWarehouseDao invSubWarehouseDao; + @Resource + private InvSpaceDao invSpaceDao; + + @Override + public List getPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest) { + if (null == filterInvPlaceRequest) { + return Collections.emptyList(); + } + if (null != filterInvPlaceRequest.getPage() && null != filterInvPlaceRequest.getLimit()) { + PageHelper.offsetPage((filterInvPlaceRequest.getPage() - 1) * filterInvPlaceRequest.getLimit(), filterInvPlaceRequest.getLimit()); + } + return invProductDetailDao.selectPlaceDetailList(filterInvPlaceRequest); + } + + @Override + public void bindInvSpace(BindInvSpaceRequest bindInvSpaceRequest) { + //查询仓库的部门ID + String deptCode = invSubWarehouseDao.selectParentIdByCode(bindInvSpaceRequest.getInvCode()); + List list = invProductDetailDao.selectList(new QueryWrapper() + .select("id") + .eq("deptCode", deptCode) + .eq("invCode", bindInvSpaceRequest.getInvCode()) + .in("code", bindInvSpaceRequest.getCodeArray()) + ); + if (CollUtil.isNotEmpty(list)) { + List ids = list.stream().map(InvProductDetailEntity::getId).collect(Collectors.toList()); + log.info("本次绑定货位的库存详情数量为:{} 条", ids.size()); + invProductDetailDao.batchBindSpace(ids, bindInvSpaceRequest.getInvSpaceCode()); + } else { + log.info("绑定货位列表查询无数据"); + } + } + + @Override + public BaseResponse checkCodeSpace(BindInvSpaceRequest bindInvSpaceRequest) { + //查询仓库的部门ID + String deptCode = invSubWarehouseDao.selectParentIdByCode(bindInvSpaceRequest.getInvCode()); + bindInvSpaceRequest.setDeptCode(deptCode); + //查询此库存详情的信息 + InvProductDetailEntity invProductDetailEntity = invProductDetailDao.selectByInvAndCode(bindInvSpaceRequest); + if (null == invProductDetailEntity) { + return ResultVOUtils.error(ResultEnum.DATA_ERROR, "此货物非当前仓库物品,无法绑定货位"); + } + if (StrUtil.isNotBlank(invProductDetailEntity.getInvSpaceCode()) && !bindInvSpaceRequest.getInvSpaceCode().equals(invProductDetailEntity.getInvSpaceCode())) { + String invSpaceName = invSpaceDao.selectNameByCode(invProductDetailEntity.getDeptCode(), invProductDetailEntity.getInvCode(), invProductDetailEntity.getInvSpaceCode()); + return ResultVOUtils.error(ResultEnum.DATA_REPEAT, "此货物已绑定 " + invSpaceName + " 货位,是否重新绑定?"); + } + return ResultVOUtils.success(); + } +} diff --git a/src/main/resources/mybatis/mapper/auth/PurPlanService.xml b/src/main/resources/mybatis/mapper/auth/PurPlanService.xml index 6a40ad4d7..a1df15fee 100644 --- a/src/main/resources/mybatis/mapper/auth/PurPlanService.xml +++ b/src/main/resources/mybatis/mapper/auth/PurPlanService.xml @@ -341,4 +341,8 @@ inner join auth_warehouse_user on auth_warehouse.code = auth_warehouse_user.code where userId = #{userId} + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/inv/invProductDetailDao.xml b/src/main/resources/mybatis/mapper/inv/invProductDetailDao.xml index f1edcd52b..a7756f6c1 100644 --- a/src/main/resources/mybatis/mapper/inv/invProductDetailDao.xml +++ b/src/main/resources/mybatis/mapper/inv/invProductDetailDao.xml @@ -77,4 +77,57 @@ + + + + + update inv_product_detail + set invSpaceCode = #{invSpaceCode} + where id in + + #{item} + + + +