From e57b30d9fc37519c55cb1dee4b8f939075f4c5d6 Mon Sep 17 00:00:00 2001 From: x_z Date: Thu, 16 Feb 2023 23:55:15 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E7=9B=98=E7=82=B9=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E7=9B=B8=E5=85=B3=E5=AE=9E=E4=BD=93=E7=B1=BB=E5=92=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inv/InvCountCodesController.java | 88 +++++++ .../inv/InvCountOrderController.java | 194 +++++++++++++++ .../inv/InvCountOrderDetailController.java | 75 ++++++ .../glxp/api/dao/inv/InvCountCodesDao.java | 79 ++++++ .../glxp/api/dao/inv/InvCountOrderDao.java | 63 +++++ .../api/dao/inv/InvCountOrderDetailDao.java | 86 +++++++ .../com/glxp/api/dao/inv/InvProductDao.java | 13 + .../api/entity/inv/InvCountCodesEntity.java | 71 ++++++ .../entity/inv/InvCountOrderDetailEntity.java | 119 +++++++++ .../api/entity/inv/InvCountOrderEntity.java | 137 ++++++++++ .../req/inv/AddInvCountOrderSaveRequest.java | 28 +++ .../req/inv/FilterInvCountCodesRequest.java | 37 +++ .../inv/FilterInvCountOrderDetailRequest.java | 28 +++ .../req/inv/FilterInvCountOrderRequest.java | 47 ++++ .../req/inv/InvCountOrderPrintRequest.java | 21 ++ .../res/inv/InvCountOrderDetailResponse.java | 96 ++++++++ .../api/res/inv/InvCountOrderResponse.java | 113 +++++++++ .../api/service/inv/InvCountCodesService.java | 46 ++++ .../inv/InvCountOrderDetailService.java | 40 +++ .../api/service/inv/InvCountOrderService.java | 63 +++++ .../inv/impl/InvCountCodesServiceImpl.java | 125 ++++++++++ .../impl/InvCountOrderDetailServiceImpl.java | 81 ++++++ .../inv/impl/InvCountOrderServiceImpl.java | 233 ++++++++++++++++++ .../glxp/api/util/udi/UdiCalCountUtil.java | 6 + .../mybatis/mapper/inv/InvCountCodesDao.xml | 79 ++++++ .../mybatis/mapper/inv/InvCountOrderDao.xml | 96 ++++++++ .../mapper/inv/InvCountOrderDetailDao.xml | 150 +++++++++++ .../mybatis/mapper/inv/invProductDao.xml | 26 ++ 28 files changed, 2240 insertions(+) create mode 100644 src/main/java/com/glxp/api/controller/inv/InvCountCodesController.java create mode 100644 src/main/java/com/glxp/api/controller/inv/InvCountOrderController.java create mode 100644 src/main/java/com/glxp/api/controller/inv/InvCountOrderDetailController.java create mode 100644 src/main/java/com/glxp/api/dao/inv/InvCountCodesDao.java create mode 100644 src/main/java/com/glxp/api/dao/inv/InvCountOrderDao.java create mode 100644 src/main/java/com/glxp/api/dao/inv/InvCountOrderDetailDao.java create mode 100644 src/main/java/com/glxp/api/entity/inv/InvCountCodesEntity.java create mode 100644 src/main/java/com/glxp/api/entity/inv/InvCountOrderDetailEntity.java create mode 100644 src/main/java/com/glxp/api/entity/inv/InvCountOrderEntity.java create mode 100644 src/main/java/com/glxp/api/req/inv/AddInvCountOrderSaveRequest.java create mode 100644 src/main/java/com/glxp/api/req/inv/FilterInvCountCodesRequest.java create mode 100644 src/main/java/com/glxp/api/req/inv/FilterInvCountOrderDetailRequest.java create mode 100644 src/main/java/com/glxp/api/req/inv/FilterInvCountOrderRequest.java create mode 100644 src/main/java/com/glxp/api/req/inv/InvCountOrderPrintRequest.java create mode 100644 src/main/java/com/glxp/api/res/inv/InvCountOrderDetailResponse.java create mode 100644 src/main/java/com/glxp/api/res/inv/InvCountOrderResponse.java create mode 100644 src/main/java/com/glxp/api/service/inv/InvCountCodesService.java create mode 100644 src/main/java/com/glxp/api/service/inv/InvCountOrderDetailService.java create mode 100644 src/main/java/com/glxp/api/service/inv/InvCountOrderService.java create mode 100644 src/main/java/com/glxp/api/service/inv/impl/InvCountCodesServiceImpl.java create mode 100644 src/main/java/com/glxp/api/service/inv/impl/InvCountOrderDetailServiceImpl.java create mode 100644 src/main/java/com/glxp/api/service/inv/impl/InvCountOrderServiceImpl.java create mode 100644 src/main/resources/mybatis/mapper/inv/InvCountCodesDao.xml create mode 100644 src/main/resources/mybatis/mapper/inv/InvCountOrderDao.xml create mode 100644 src/main/resources/mybatis/mapper/inv/InvCountOrderDetailDao.xml diff --git a/src/main/java/com/glxp/api/controller/inv/InvCountCodesController.java b/src/main/java/com/glxp/api/controller/inv/InvCountCodesController.java new file mode 100644 index 000000000..a5714534c --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inv/InvCountCodesController.java @@ -0,0 +1,88 @@ +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.entity.inv.InvCountCodesEntity; +import com.glxp.api.req.inv.FilterInvCountCodesRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.service.inv.InvCountCodesService; +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.List; + +/** + * 盘点单据码表 + */ +@RestController +public class InvCountCodesController { + + @Resource + private InvCountCodesService invCountCodesService; + + /** + * 查询码表 + * + * @param codesRequest + * @return + */ + @GetMapping("/inv/count/codes/filter") + public BaseResponse filterList(FilterInvCountCodesRequest codesRequest) { + List list = invCountCodesService.filterList(codesRequest); + PageInfo pageInfo = new PageInfo<>(list); + PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); + pageSimpleResponse.setTotal(pageInfo.getTotal()); + pageSimpleResponse.setList(list); + return ResultVOUtils.success(pageSimpleResponse); + } + + /** + * 移除条码 + * + * @param codesRequest + * @return + */ + @PostMapping("/inv/count/codes/deleteCode") + public BaseResponse deleteCode(@RequestBody FilterInvCountCodesRequest codesRequest) { + if (null == codesRequest || StrUtil.isBlank(codesRequest.getOrderIdFk()) || StrUtil.isBlank(codesRequest.getRelId()) || StrUtil.isBlank(codesRequest.getCode())) { + return ResultVOUtils.success(ResultEnum.PARAM_VERIFY_FALL); + } + return invCountCodesService.deleteCode(codesRequest); + } + + /** + * 添加条码 + * + * @param invCountCodes + * @return + */ + @PostMapping("/inv/count/codes/addCode") + public BaseResponse addCode(@RequestBody InvCountCodesEntity invCountCodes) { + if (null == invCountCodes || StrUtil.isBlank(invCountCodes.getCode())) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return invCountCodesService.addCode(invCountCodes); + } + + /** + * 根据此盘点单据号统计条码数量 + * + * @param orderIdFk + * @return + */ + @GetMapping("/inv/count/codes/getCountOrderCodesNum") + public BaseResponse getCountOrderCodesNum(String orderIdFk) { + if (StrUtil.isBlank(orderIdFk)) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + Long codesNum = invCountCodesService.getCountOrderCodesNum(orderIdFk); + return ResultVOUtils.success(codesNum); + } + +} diff --git a/src/main/java/com/glxp/api/controller/inv/InvCountOrderController.java b/src/main/java/com/glxp/api/controller/inv/InvCountOrderController.java new file mode 100644 index 000000000..bfbef5d8e --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inv/InvCountOrderController.java @@ -0,0 +1,194 @@ +package com.glxp.api.controller.inv; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.github.pagehelper.PageInfo; +import com.glxp.api.annotation.AuthRuleAnnotation; +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.entity.inv.InvCountOrderEntity; +import com.glxp.api.entity.system.SystemPDFModuleEntity; +import com.glxp.api.entity.system.SystemPDFTemplateEntity; +import com.glxp.api.req.inout.InspectionPDFTemplateRequest; +import com.glxp.api.req.inv.AddInvCountOrderSaveRequest; +import com.glxp.api.req.inv.FilterInvCountOrderRequest; +import com.glxp.api.req.inv.InvCountOrderPrintRequest; +import com.glxp.api.req.system.DeleteRequest; +import com.glxp.api.req.system.FilterPdfModuleRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.res.inv.InvCountOrderResponse; +import com.glxp.api.service.inv.InvCountOrderService; +import com.glxp.api.service.system.SystemPDFModuleService; +import com.glxp.api.service.system.SystemPDFTemplateService; +import com.glxp.api.util.JasperUtils; +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 javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 盘点单接口 + */ +@RestController +public class InvCountOrderController { + + @Resource + private InvCountOrderService invCountOrderService; + @Resource + private SystemPDFTemplateService systemPDFTemplateService; + @Resource + private SystemPDFModuleService systemPDFModuleService; + + /** + * 查询盘点单列表 + * + * @param filterInvCountOrderRequest + * @return + */ + @AuthRuleAnnotation("") + @GetMapping("/inv/count/order/filter") + public BaseResponse filterList(FilterInvCountOrderRequest filterInvCountOrderRequest) { + List list = invCountOrderService.filterList(filterInvCountOrderRequest); + PageInfo pageInfo = new PageInfo<>(list); + PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); + pageSimpleResponse.setTotal(pageInfo.getTotal()); + pageSimpleResponse.setList(pageInfo.getList()); + return ResultVOUtils.success(pageSimpleResponse); + } + + /** + * 删除盘点单据 + * + * @param deleteRequest + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/inv/count/order/delete") + public BaseResponse delete(@RequestBody DeleteRequest deleteRequest) { + invCountOrderService.deleteOrder(deleteRequest.getId()); + return ResultVOUtils.success(); + } + + /** + * 网页新增盘点单据 + * + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/inv/count/order/saveCountOrder") + public BaseResponse saveCountOrder(@RequestBody InvCountOrderEntity invCountOrder, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + + if (null == invCountOrder) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return invCountOrderService.saveCountOrder(invCountOrder); + } + + /** + * 提交审核 + * + * @param id + * @return + */ + @AuthRuleAnnotation("") + @GetMapping("/inv/count/order/submitAudit") + public BaseResponse submitAudit(String id) { + if (StrUtil.isBlank(id)) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return invCountOrderService.submitAudit(id); + } + + /** + * 更新盘点单据状态 + * + * @param filterInvCountOrderRequest + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/invCount/order/updateCountOrderStatus") + public BaseResponse updateCountOrderStatus(@RequestBody FilterInvCountOrderRequest filterInvCountOrderRequest) { + if (null == filterInvCountOrderRequest || StrUtil.isBlank(filterInvCountOrderRequest.getId()) || null == filterInvCountOrderRequest.getStatus()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return invCountOrderService.updateCountOrderStatus(filterInvCountOrderRequest.getId(), filterInvCountOrderRequest.getStatus()); + } + + /** + * 校验模板文件 + * + * @param inspectionPDFTemplateRequest + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/invCount/order/verifyTemplateFile") + public BaseResponse verifyTemplateFile(@RequestBody InspectionPDFTemplateRequest inspectionPDFTemplateRequest) { + if (null == inspectionPDFTemplateRequest) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "参数不能为空!"); + } + //查询模板文件是否存在 + FilterPdfModuleRequest systemPDFModuleRequest = new FilterPdfModuleRequest(); + systemPDFModuleRequest.setId(inspectionPDFTemplateRequest.getModuleId()); + SystemPDFModuleEntity systemPDFModule = systemPDFModuleService.findSystemPDFModule(systemPDFModuleRequest); + if (null == systemPDFModule) { + return ResultVOUtils.error(ResultEnum.DATA_NOT, "所属模块错误"); + } + + SystemPDFTemplateEntity systemPDFTemplateEntity = systemPDFTemplateService.selectById(String.valueOf(systemPDFModule.getTemplateId())); + if (null == systemPDFTemplateEntity) { + return ResultVOUtils.error(ResultEnum.DATA_NOT, "模板错误"); + } + return ResultVOUtils.success(systemPDFModule.getTemplateId()); + } + + /** + * 打印模板单号标签 + * + * @param invCountOrderPrintRequest + * @param request + * @param response + * @throws Exception + */ + @AuthRuleAnnotation("") + @PostMapping("/invCount/order/printOrder") + public void printOrder(@RequestBody InvCountOrderPrintRequest invCountOrderPrintRequest, HttpServletRequest request, HttpServletResponse response) throws Exception { + SystemPDFTemplateEntity systemPDFTemplateEntity = systemPDFTemplateService.selectById(invCountOrderPrintRequest.getTemplateId()); + //打印单号标签 + Map data = new HashMap<>(1); + data.put("orderId", invCountOrderPrintRequest.getOrderId()); + Map>> printData = new HashMap<>(1); + printData.put("data", Arrays.asList(data)); + JasperUtils.jasperReport(request, response, JSONUtil.toJsonStr(printData), systemPDFTemplateEntity.getPath(), "pdf"); + } + + //------------------------------------------------------手持终端接口--------------------------------------------------------------- + + /** + * 手持终端新增盘点单据接口 + * + * @return + */ + @AuthRuleAnnotation("") + @PostMapping("/invCount/order/saveCountOrderForPDA") + public BaseResponse saveCountOrderForPDA(@RequestBody @Valid AddInvCountOrderSaveRequest addInvCountOrderSaveRequest, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage()); + } + return invCountOrderService.saveCountOrderForPDA(addInvCountOrderSaveRequest); + } + +} diff --git a/src/main/java/com/glxp/api/controller/inv/InvCountOrderDetailController.java b/src/main/java/com/glxp/api/controller/inv/InvCountOrderDetailController.java new file mode 100644 index 000000000..2708b31fa --- /dev/null +++ b/src/main/java/com/glxp/api/controller/inv/InvCountOrderDetailController.java @@ -0,0 +1,75 @@ +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.entity.inv.InvCountOrderDetailEntity; +import com.glxp.api.req.inv.FilterInvCountOrderDetailRequest; +import com.glxp.api.res.PageSimpleResponse; +import com.glxp.api.res.inv.InvCountOrderDetailResponse; +import com.glxp.api.service.inv.InvCountOrderDetailService; +import lombok.extern.slf4j.Slf4j; +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.List; + +/** + * 盘点单详情接口 + */ +@Slf4j +@RestController +public class InvCountOrderDetailController { + + @Resource + private InvCountOrderDetailService invCountOrderDetailService; + + /** + * 查询盘点单据详情 + * + * @return + */ + @GetMapping("/inv/count/order/detail/filter") + public BaseResponse filterList(FilterInvCountOrderDetailRequest detailRequest) { + List list = invCountOrderDetailService.filterCountDetail(detailRequest); + PageInfo pageInfo = new PageInfo<>(list); + PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); + pageSimpleResponse.setTotal(pageInfo.getTotal()); + pageSimpleResponse.setList(pageInfo.getList()); + return ResultVOUtils.success(pageSimpleResponse); + } + + /** + * 删除盘点单据详情 + * + * @param detailRequest + * @return + */ + @PostMapping("/inv/count/order/detail/deleteOrderDetail") + public BaseResponse deleteOrderDetail(@RequestBody FilterInvCountOrderDetailRequest detailRequest) { + if (null == detailRequest || null == detailRequest.getId()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return invCountOrderDetailService.deleteOrderDetail(detailRequest); + } + + /** + * 添加产品详情 + * + * @param invCountOrderDetail + * @return + */ + @PostMapping("/inv/count/order/detail/addCountOrderDetail") + public BaseResponse addCountOrderDetail(@RequestBody InvCountOrderDetailEntity invCountOrderDetail) { + if (null == invCountOrderDetail || StrUtil.isBlank(invCountOrderDetail.getOrderIdFk()) || StrUtil.isBlank(invCountOrderDetail.getRelId())) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + return invCountOrderDetailService.addCountOrderDetail(invCountOrderDetail); + } + +} diff --git a/src/main/java/com/glxp/api/dao/inv/InvCountCodesDao.java b/src/main/java/com/glxp/api/dao/inv/InvCountCodesDao.java new file mode 100644 index 000000000..3d0c0c475 --- /dev/null +++ b/src/main/java/com/glxp/api/dao/inv/InvCountCodesDao.java @@ -0,0 +1,79 @@ +package com.glxp.api.dao.inv; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.entity.inv.InvCountCodesEntity; +import com.glxp.api.req.inv.FilterInvCountCodesRequest; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 盘点单据码表Dao + */ +public interface InvCountCodesDao extends BaseMapper { + + /** + * 根据盘点单号删除盘点单据码详情 + * + * @param orderId + */ + void deleteByOrderId(@Param("orderId") String orderId); + + /** + * 查询盘点单据码详情 + * + * @param codesRequest + * @return + */ + List filterList(FilterInvCountCodesRequest codesRequest); + + /** + * 根据盘点单据ID统计条码数量 + * + * @param orderIdFk + * @return + */ + Long countByOrderIdFk(@Param("orderIdFk") String orderIdFk); + + /** + * 根据单据号统计条码数量 + * + * @param orderIdFk + * @return + */ + Long countByOrderId(@Param("orderIdFk") String orderIdFk); + + /** + * 根据条码和盘点单号统计数量 + * + * @param code + * @param orderIdFk + * @return + */ + Long selectCountByCodeAndOrderId(@Param("code") String code, @Param("orderIdFk") String orderIdFk); + + /** + * 清空盘点单据相关字段 + * + * @param orderId + */ + void resetCountFiledValue(@Param("orderId") String orderId); + + /** + * 根据盘点单号和产品ID查询码表 + * + * @param orderIdFk + * @param productId + * @return + */ + List selectByOrderIdAndProductId(@Param("orderIdFk") String orderIdFk, @Param("productId") String productId); + + /** + * 查询盘点单据码详情集合 + * + * @param codesRequest + * @return + */ + List selectCodes(FilterInvCountCodesRequest codesRequest); + +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/dao/inv/InvCountOrderDao.java b/src/main/java/com/glxp/api/dao/inv/InvCountOrderDao.java new file mode 100644 index 000000000..9bc41e68e --- /dev/null +++ b/src/main/java/com/glxp/api/dao/inv/InvCountOrderDao.java @@ -0,0 +1,63 @@ +package com.glxp.api.dao.inv; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.entity.inv.InvCountOrderEntity; +import com.glxp.api.req.inv.FilterInvCountOrderRequest; +import com.glxp.api.res.inv.InvCountOrderResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 盘点单据表Dao + */ +public interface InvCountOrderDao extends BaseMapper { + + /*** + * 查询盘点单据数据 + * @param filterInvCountOrderRequest + * @return + */ + List filterList(FilterInvCountOrderRequest filterInvCountOrderRequest); + + /** + * 根据id查询盘点单号 + * + * @param id + * @return + */ + String selectOrderIdById(@Param("id") String id); + + /** + * 根据仓库和货位码统计盘点单数量 + * + * @param deptCode 部门编码 + * @param invCode 仓库编码 + * @param invSpaceCode 货位编码 + * @return + */ + Integer countBySpaceCode(@Param("deptCode") String deptCode, @Param("invCode") String invCode, @Param("invSpaceCode") String invSpaceCode); + + /** + * 根据盘点单号更新单据信息 + * + * @param invCountOrder + */ + void updateByOrderId(InvCountOrderEntity invCountOrder); + + /** + * 根据单据号查询盘点单据信息 + * + * @param orderId + * @return + */ + InvCountOrderEntity selectByOrderId(@Param("orderId") String orderId); + + /** + * 根据单据号删除单据 + * + * @param orderId + */ + void deleteByOrderId(@Param("orderId") String orderId); + +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/dao/inv/InvCountOrderDetailDao.java b/src/main/java/com/glxp/api/dao/inv/InvCountOrderDetailDao.java new file mode 100644 index 000000000..96b00705e --- /dev/null +++ b/src/main/java/com/glxp/api/dao/inv/InvCountOrderDetailDao.java @@ -0,0 +1,86 @@ +package com.glxp.api.dao.inv; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.entity.inv.InvCountOrderDetailEntity; +import com.glxp.api.req.inv.FilterInvCountOrderDetailRequest; +import com.glxp.api.res.inv.InvCountOrderDetailResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 盘点单据详情Dao + */ +public interface InvCountOrderDetailDao extends BaseMapper { + + /** + * 根据盘点单号删除单据详情 + * + * @param orderId + */ + void deleteByOrderId(@Param("orderId") String orderId); + + /** + * 查询盘点单据详情 + * + * @param detailRequest + * @return + */ + List filterList(FilterInvCountOrderDetailRequest detailRequest); + + /** + * 根据盘点单据ID统计单据详情数量 + * + * @param orderIdFk + * @return + */ + Long countByOrderIdFk(@Param("orderIdFk") String orderIdFk); + + /** + * 查询盘点单据详情 + * + * @param detailRequest + * @return + */ + List filterCountDetail(FilterInvCountOrderDetailRequest detailRequest); + + /** + * 根据产品ID和盘点单号删除条码 + * + * @param orderIdFk + * @param productId + */ + void deleteByOrderIdAndProductId(@Param("orderIdFk") String orderIdFk, @Param("productId") String productId); + + /** + * 根据单据号和产品DI查询单据详情 + * + * @param orderIdFk + * @param nameCode + * @return + */ + InvCountOrderDetailEntity selectOrderDetail(@Param("orderIdFk") String orderIdFk, @Param("nameCode") String nameCode, @Param("batchNo") String batchNo, @Param("produceDate") String produceDate, @Param("expireDate") String expireDate); + + /** + * 查询此盘点单的单据详情 + * + * @param orderId + * @return + */ + List selectByOrderId(@Param("orderId") String orderId); + + /** + * 置空盘点相关字段值 + * + * @param orderId + */ + void resetCountFiledValue(@Param("orderId") String orderId); + + /** + * 批量更新盘点单据详情 + * + * @param list + */ + int updateBatch(List list); + +} \ No newline at end of file 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 66b70f378..f84503c9e 100644 --- a/src/main/java/com/glxp/api/dao/inv/InvProductDao.java +++ b/src/main/java/com/glxp/api/dao/inv/InvProductDao.java @@ -5,6 +5,7 @@ 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 org.apache.ibatis.annotations.Param; import java.util.List; @@ -34,4 +35,16 @@ public interface InvProductDao extends BaseMapperPlus getMAInvProducts(FilterInvProductRequest filterInvProductRequest); + + /** + * 根据产品ID仓库等信息查询库存产品信息 + * + * @param relId 耗材字典ID + * @param batchNo 批次号 + * @param deptCode 部门编码 + * @param invCode 仓库编码 + * @param invSpaceCode 货位编码 + * @return + */ + InvProductEntity selectProductInfo(@Param("relId") String relId, @Param("batchNo") String batchNo, @Param("deptCode") String deptCode, @Param("invCode") String invCode, @Param("invSpaceCode") String invSpaceCode); } diff --git a/src/main/java/com/glxp/api/entity/inv/InvCountCodesEntity.java b/src/main/java/com/glxp/api/entity/inv/InvCountCodesEntity.java new file mode 100644 index 000000000..86895758a --- /dev/null +++ b/src/main/java/com/glxp/api/entity/inv/InvCountCodesEntity.java @@ -0,0 +1,71 @@ +package com.glxp.api.entity.inv; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 盘点单据码表 + */ +@Data +@TableName(value = "inv_count_codes") +public class InvCountCodesEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 盘点单ID + */ + @TableField(value = "orderIdFk") + private String orderIdFk; + + /** + * 产品ID + */ + @TableField(value = "relId") + private String relId; + + /** + * 码 + */ + @TableField(value = "code") + private String code; + + /** + * 条码状态(多码或少码) 0:少 1:多 + */ + @TableField(value = "`status`") + private Integer status; + + /** + * 批次号 + */ + @TableField(value = "batchNo") + private String batchNo; + + /** + * 扫码数量 + */ + @TableField(value = "`count`") + private Integer count; + + public static final String COL_ID = "id"; + + public static final String COL_ORDERIDFK = "orderIdFk"; + + public static final String COL_RELID = "relId"; + + public static final String COL_CODE = "code"; + + public static final String COL_STATUS = "status"; + + public static final String COL_BATCHNO = "batchNo"; + + public static final String COL_COUNT = "count"; +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/entity/inv/InvCountOrderDetailEntity.java b/src/main/java/com/glxp/api/entity/inv/InvCountOrderDetailEntity.java new file mode 100644 index 000000000..5e6e3eadc --- /dev/null +++ b/src/main/java/com/glxp/api/entity/inv/InvCountOrderDetailEntity.java @@ -0,0 +1,119 @@ +package com.glxp.api.entity.inv; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 盘点单详情 + */ +@Data +@TableName(value = "inv_count_order_detail") +public class InvCountOrderDetailEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 盘点单号 + */ + @TableField(value = "orderIdFk") + private String orderIdFk; + + /** + * 产品ID + */ + @TableField(value = "relId") + private String relId; + + /** + * 产品DI + */ + @TableField(value = "nameCode") + private String nameCode; + + /** + * 批次号 + */ + @TableField(value = "batchNo") + private String batchNo; + + /** + * 生产日期 + */ + @TableField(value = "produceDate") + private String produceDate; + + /** + * 失效日期 + */ + @TableField(value = "expireDate") + private String expireDate; + + /** + * 序列号 + */ + @TableField(value = "serialNo") + private String serialNo; + + /** + * 盘点数量 + */ + @TableField(value = "countNum") + private Integer countNum; + + /** + * 账面数量 + */ + @TableField(value = "invNum") + private Integer invNum; + + /** + * 盘盈数量 + */ + @TableField(value = "profitNum") + private Integer profitNum; + + /** + * 盘亏数量 + */ + @TableField(value = "lossNum") + private Integer lossNum; + + /** + * 盈亏状态 0:亏损 1:盈利 + */ + @TableField(value = "`status`") + private Integer status; + + public static final String COL_ID = "id"; + + public static final String COL_ORDERIDFK = "orderIdFk"; + + public static final String COL_RELID = "relId"; + + public static final String COL_NAMECODE = "nameCode"; + + public static final String COL_BATCHNO = "batchNo"; + + public static final String COL_PRODUCEDATE = "produceDate"; + + public static final String COL_EXPIREDATE = "expireDate"; + + public static final String COL_SERIALNO = "serialNo"; + + public static final String COL_COUNTNUM = "countNum"; + + public static final String COL_INVNUM = "invNum"; + + public static final String COL_PROFITNUM = "profitNum"; + + public static final String COL_LOSSNUM = "lossNum"; + + public static final String COL_STATUS = "status"; +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/entity/inv/InvCountOrderEntity.java b/src/main/java/com/glxp/api/entity/inv/InvCountOrderEntity.java new file mode 100644 index 000000000..fa63ca297 --- /dev/null +++ b/src/main/java/com/glxp/api/entity/inv/InvCountOrderEntity.java @@ -0,0 +1,137 @@ +package com.glxp.api.entity.inv; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 盘点单据表 + */ +@Data +@TableName(value = "inv_count_order") +public class InvCountOrderEntity { + + /** + * id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 盘点单号 + */ + @TableField(value = "orderId") + private String orderId; + + /** + * 部门编码 + */ + @TableField(value = "deptCode") + private String deptCode; + + /** + * 仓库编码 + */ + @TableField(value = "invCode") + private String invCode; + + /** + * 货位编码 + */ + @TableField(value = "invSpaceCode") + private String invSpaceCode; + + /** + * 入库扫码单据号,多个使用 , 隔开 + */ + @TableField(value = "inOrderIds") + private String inOrderIds; + + /** + * 出库扫码单据号,多个使用 , 隔开 + */ + @TableField(value = "outOrderIds") + private String outOrderIds; + + /** + * 盘点类型,0:整库盘点 1:按货位盘点 2:部分盘点 + */ + @TableField(value = "countType") + private Integer countType; + + /** + * 状态 0:未提交 1:未审核 2:已审核 + */ + @TableField(value = "`status`") + private Integer status; + + /** + * 盘点用户ID + */ + @TableField(value = "`createUser`") + private String createUser; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + private Date createTime; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + private Date updateTime; + + /** + * 审核用户ID + */ + @TableField(value = "auditUser") + private String auditUser; + + /** + * 审核时间 + */ + @TableField(value = "auditTime") + private Date auditTime; + + /** + * 备注字段 + */ + @TableField(value = "remark") + private String remark; + + public static final String COL_ID = "id"; + + public static final String COL_ORDERID = "orderId"; + + public static final String COL_DEPTCODE = "deptCode"; + + public static final String COL_INVCODE = "invCode"; + + public static final String COL_INVSPACECODE = "invSpaceCode"; + + public static final String COL_INORDERIDS = "inOrderIds"; + + public static final String COL_OUTORDERIDS = "outOrderIds"; + + public static final String COL_COUNTTYPE = "countType"; + + public static final String COL_STATUS = "status"; + + public static final String COL_CREATEUSER = "createUser"; + + public static final String COL_CREATETIME = "createTime"; + + public static final String COL_UPDATETIME = "updateTime"; + + public static final String COL_AUDITUSER = "auditUser"; + + public static final String COL_AUDITTIME = "auditTime"; + + public static final String COL_REMARK = "remark"; +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/req/inv/AddInvCountOrderSaveRequest.java b/src/main/java/com/glxp/api/req/inv/AddInvCountOrderSaveRequest.java new file mode 100644 index 000000000..0f76d674a --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/AddInvCountOrderSaveRequest.java @@ -0,0 +1,28 @@ +package com.glxp.api.req.inv; + +import com.glxp.api.entity.inv.InvCountCodesEntity; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * 手持终端盘点单据保存接口参数 + */ +@Data +public class AddInvCountOrderSaveRequest { + + /** + * 盘点单号 + */ + @NotBlank(message = "盘点单号为空") + private String orderId; + + /** + * 条码 + */ + @NotEmpty(message = "盘点产品不能为空") + private List countCodeList; + +} diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvCountCodesRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvCountCodesRequest.java new file mode 100644 index 000000000..455a4039c --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterInvCountCodesRequest.java @@ -0,0 +1,37 @@ +package com.glxp.api.req.inv; + +import com.glxp.api.util.page.ListPageRequest; +import lombok.Data; + +/** + * 盘点单据码详情查询参数 + */ +@Data +public class FilterInvCountCodesRequest extends ListPageRequest { + + /** + * 盘点单号 + */ + private String orderIdFk; + + /** + * 产品ID + */ + private String relId; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 码 + */ + private String code; + + /** + * 状态 + */ + private Integer status; + +} diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvCountOrderDetailRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvCountOrderDetailRequest.java new file mode 100644 index 000000000..f5ae4e706 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterInvCountOrderDetailRequest.java @@ -0,0 +1,28 @@ +package com.glxp.api.req.inv; + + +import com.glxp.api.util.page.ListPageRequest; +import lombok.Data; + +/** + * 查询盘点单详情参数 + */ +@Data +public class FilterInvCountOrderDetailRequest extends ListPageRequest { + + /** + * 盘点单据详情ID + */ + private Integer id; + + /** + * 盘点单号 + */ + private String orderIdFk; + + /** + * 盈亏状态 0:亏损 1:盈利 2:平衡 + */ + private Integer status; + +} diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvCountOrderRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvCountOrderRequest.java new file mode 100644 index 000000000..dac48f5f9 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/FilterInvCountOrderRequest.java @@ -0,0 +1,47 @@ +package com.glxp.api.req.inv; + +import com.glxp.api.util.page.ListPageRequest; +import lombok.Data; + +/** + * 查询盘点单据参数 + */ +@Data +public class FilterInvCountOrderRequest extends ListPageRequest { + + /** + * id + */ + private String id; + + /** + * 盘点单号 + */ + private String orderId; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编号 + */ + private String invCode; + + /** + * 货位编号 + */ + private String invSpaceCode; + + /** + * 客户ID + */ + private String customerId; + + /** + * 状态 0:未提交 1:已审核 2:已完成 + */ + private Integer status; + +} diff --git a/src/main/java/com/glxp/api/req/inv/InvCountOrderPrintRequest.java b/src/main/java/com/glxp/api/req/inv/InvCountOrderPrintRequest.java new file mode 100644 index 000000000..0bacfb4d6 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inv/InvCountOrderPrintRequest.java @@ -0,0 +1,21 @@ +package com.glxp.api.req.inv; + +import lombok.Data; + +/** + * 盘点单据打印参数 + */ +@Data +public class InvCountOrderPrintRequest { + + /** + * 盘点单号 + */ + private String orderId; + + /** + * 模板ID + */ + private String templateId; + +} diff --git a/src/main/java/com/glxp/api/res/inv/InvCountOrderDetailResponse.java b/src/main/java/com/glxp/api/res/inv/InvCountOrderDetailResponse.java new file mode 100644 index 000000000..848021e61 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/InvCountOrderDetailResponse.java @@ -0,0 +1,96 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +/** + * 盘点单据详情实体类 + */ +@Data +public class InvCountOrderDetailResponse { + + /** + * id + */ + private Integer id; + + /** + * 盘点单号 + */ + private String orderIdFk; + + /** + * 产品ID + */ + private String relId; + + /** + * 产品DI + */ + private String nameCode; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 生产日期 + */ + private String produceDate; + + /** + * 失效日期 + */ + private String expireDate; + + /** + * 序列号 + */ + private String serialNo; + + /** + * 盘点数量 + */ + private Integer countNum; + + /** + * 账面数量 + */ + private Integer invNum; + + /** + * 盘盈数量 + */ + private Integer profitNum; + + /** + * 盘亏数量 + */ + private Integer lossNum; + + /** + * 盈亏状态 0:亏损 1:盈利 + */ + private Integer status; + + /** + * 产品名称 + */ + private String productName; + + /** + * 规格型号 + */ + private String ggxh; + + /** + * 注册/备案凭证号 + */ + private String zczbhhzbapzbh; + + /** + * 生产厂家 + */ + private String ylqxzcrbarmc; + +} diff --git a/src/main/java/com/glxp/api/res/inv/InvCountOrderResponse.java b/src/main/java/com/glxp/api/res/inv/InvCountOrderResponse.java new file mode 100644 index 000000000..8e395e056 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inv/InvCountOrderResponse.java @@ -0,0 +1,113 @@ +package com.glxp.api.res.inv; + +import lombok.Data; + +import java.util.Date; + +/** + * 盘点单详情 + */ +@Data +public class InvCountOrderResponse { + + /** + * id + */ + private Integer id; + + /** + * 盘点单号 + */ + private String orderId; + + /** + * 部门编码 + */ + private String deptCode; + + /** + * 仓库编码 + */ + private String invCode; + + /** + * 货位编码 + */ + private String invSpaceCode; + + /** + * 入库扫码单据号,多个使用 , 隔开 + */ + private String inOrderIds; + + /** + * 出库扫码单据号,多个使用 , 隔开 + */ + private String outOrderIds; + + /** + * 盘点类型,0:整库盘点 1:按货位盘点 2:部分盘点 + */ + private Integer countType; + + /** + * 状态 0:未提交 1:未审核 2:已审核 + */ + private Integer status; + + /** + * 盘点用户ID + */ + private String createUser; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 审核用户ID + */ + private String auditUser; + + /** + * 审核时间 + */ + private Date auditTime; + + /** + * 备注字段 + */ + private String remark; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 仓库名称 + */ + private String invName; + + /** + * 货位名称 + */ + private String invSpaceName; + + /** + * 盘点人名称 + */ + private String createUserName; + + /** + * 审核人名称 + */ + private String auditUserName; + +} diff --git a/src/main/java/com/glxp/api/service/inv/InvCountCodesService.java b/src/main/java/com/glxp/api/service/inv/InvCountCodesService.java new file mode 100644 index 000000000..3604af6c9 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/InvCountCodesService.java @@ -0,0 +1,46 @@ +package com.glxp.api.service.inv; + +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.entity.inv.InvCountCodesEntity; +import com.glxp.api.req.inv.FilterInvCountCodesRequest; + +import java.util.List; + +/** + * 盘点单据码Service + */ +public interface InvCountCodesService { + + /** + * 查询盘点单据码详情 + * + * @param codesRequest + * @return + */ + List filterList(FilterInvCountCodesRequest codesRequest); + + /** + * 盘点单据移除条码 + * + * @param codesRequest + * @return + */ + BaseResponse deleteCode(FilterInvCountCodesRequest codesRequest); + + /** + * 添加条码 + * + * @param invCountCodes + * @return + */ + BaseResponse addCode(InvCountCodesEntity invCountCodes); + + /** + * 根据盘点单号统计条码数量 + * + * @param orderIdFk + * @return + */ + Long getCountOrderCodesNum(String orderIdFk); + +} diff --git a/src/main/java/com/glxp/api/service/inv/InvCountOrderDetailService.java b/src/main/java/com/glxp/api/service/inv/InvCountOrderDetailService.java new file mode 100644 index 000000000..175dc30b5 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/InvCountOrderDetailService.java @@ -0,0 +1,40 @@ +package com.glxp.api.service.inv; + +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.entity.inv.InvCountOrderDetailEntity; +import com.glxp.api.req.inv.FilterInvCountOrderDetailRequest; +import com.glxp.api.res.inv.InvCountOrderDetailResponse; + +import java.util.List; + +/** + * 盘点单据详情Service + */ +public interface InvCountOrderDetailService { + + List filterList(FilterInvCountOrderDetailRequest detailRequest); + + /** + * 查询盘点单据详情 + * + * @return + */ + List filterCountDetail(FilterInvCountOrderDetailRequest detailRequest); + + /** + * 删除盘点单据详情 + * + * @param detailRequest + * @return + */ + BaseResponse deleteOrderDetail(FilterInvCountOrderDetailRequest detailRequest); + + /** + * 添加单据详情 + * + * @param invCountOrderDetail + * @return + */ + BaseResponse addCountOrderDetail(InvCountOrderDetailEntity invCountOrderDetail); + +} diff --git a/src/main/java/com/glxp/api/service/inv/InvCountOrderService.java b/src/main/java/com/glxp/api/service/inv/InvCountOrderService.java new file mode 100644 index 000000000..ae12cfbc2 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/InvCountOrderService.java @@ -0,0 +1,63 @@ +package com.glxp.api.service.inv; + +import com.glxp.api.common.res.BaseResponse; +import com.glxp.api.entity.inv.InvCountOrderEntity; +import com.glxp.api.req.inv.AddInvCountOrderSaveRequest; +import com.glxp.api.req.inv.FilterInvCountOrderRequest; +import com.glxp.api.res.inv.InvCountOrderResponse; + +import java.util.List; + +/** + * 盘点单据Service + */ +public interface InvCountOrderService { + + /** + * 查询盘点单列表 + * + * @param filterInvCountOrderRequest + * @return + */ + List filterList(FilterInvCountOrderRequest filterInvCountOrderRequest); + + /** + * 删除盘点单 + * + * @param id + */ + void deleteOrder(String id); + + /** + * 新增盘点单 + * + * @param invCountOrder + */ + BaseResponse saveCountOrder(InvCountOrderEntity invCountOrder); + + /** + * 盘点单据提交审核 + * + * @param id + * @return + */ + BaseResponse submitAudit(String id); + + /** + * 更新盘点单据状态 + * + * @param id + * @param status + * @return + */ + BaseResponse updateCountOrderStatus(String id, Integer status); + + /** + * 手持终端保存盘点单据 + * + * @param addInvCountOrderSaveRequest + * @return + */ + BaseResponse saveCountOrderForPDA(AddInvCountOrderSaveRequest addInvCountOrderSaveRequest); + +} diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvCountCodesServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvCountCodesServiceImpl.java new file mode 100644 index 000000000..f859d11b6 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/impl/InvCountCodesServiceImpl.java @@ -0,0 +1,125 @@ +package com.glxp.api.service.inv.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +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.basic.UdiRelevanceDao; +import com.glxp.api.dao.inv.InvCountCodesDao; +import com.glxp.api.dao.inv.InvCountOrderDetailDao; +import com.glxp.api.entity.basic.UdiEntity; +import com.glxp.api.entity.inv.InvCountCodesEntity; +import com.glxp.api.entity.inv.InvCountOrderDetailEntity; +import com.glxp.api.req.inv.FilterInvCountCodesRequest; +import com.glxp.api.service.inv.InvCountCodesService; +import com.glxp.api.util.udi.FilterUdiUtils; +import com.glxp.api.util.udi.UdiCalCountUtil; +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; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvCountCodesServiceImpl implements InvCountCodesService { + + @Resource + private InvCountCodesDao invCountCodesDao; + @Resource + private InvCountOrderDetailDao invCountOrderDetailDao; + @Resource + private UdiRelevanceDao udiRelevanceDao; + @Resource + private UdiCalCountUtil udiCalCountUtil; + + @Override + public List filterList(FilterInvCountCodesRequest codesRequest) { + if (null == codesRequest) { + return Collections.emptyList(); + } + if (null != codesRequest.getPage() && null != codesRequest.getLimit()) { + PageHelper.offsetPage((codesRequest.getPage() - 1) * codesRequest.getLimit(), codesRequest.getLimit()); + } + return invCountCodesDao.filterList(codesRequest); + } + + @Override + public BaseResponse deleteCode(FilterInvCountCodesRequest codesRequest) { + //查询盘点单据码详情 + List list = invCountCodesDao.filterList(codesRequest); + if (CollUtil.isEmpty(list)) { + return ResultVOUtils.error(ResultEnum.DATA_NOT); + } + + UdiEntity udi = FilterUdiUtils.getUdi(list.get(0).getCode()); + InvCountOrderDetailEntity invCountOrderDetail = invCountOrderDetailDao.selectOrderDetail(list.get(0).getOrderIdFk(), udi.getUdi(), udi.getBatchNo(), udi.getProduceDate(), udi.getExpireDate()); + + InvCountCodesEntity countCodes = list.get(0); + if (countCodes.getCount() == 1) { + //条码数量等于1,删除条码 + invCountCodesDao.deleteById(list.get(0).getId()); + } else { + //条码数量大于1,将条码数量 -1 + countCodes.setCount(countCodes.getCount() - 1); + invCountCodesDao.updateById(countCodes); + } + + //将此单据详情的盘点数量 - 1 + invCountOrderDetail.setCountNum(invCountOrderDetail.getCountNum() - udiCalCountUtil.getActCount(udi.getUdi())); + invCountOrderDetailDao.updateById(invCountOrderDetail); + return ResultVOUtils.success(); + } + + @Override + public BaseResponse addCode(InvCountCodesEntity invCountCodes) { + //解析条码 + UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode()); + + //查询单据详情,是否包含此产品 + InvCountOrderDetailEntity invCountOrderDetail = invCountOrderDetailDao.selectOrderDetail(invCountCodes.getOrderIdFk(), udi.getUdi(), udi.getBatchNo(), udi.getProduceDate(), udi.getExpireDate()); + if (null == invCountOrderDetail) { + return ResultVOUtils.error(ResultEnum.DATA_NOT, "当前仓库或货位不存在此产品"); + } + + //判断条码是否重复 + FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest(); + codesRequest.setOrderIdFk(invCountCodes.getOrderIdFk()); + codesRequest.setCode(invCountCodes.getCode()); + List codesList = invCountCodesDao.filterList(codesRequest); + if (CollUtil.isEmpty(codesList)) { + //新增条码 + invCountCodes.setRelId(invCountOrderDetail.getRelId()); + invCountCodes.setBatchNo(udi.getBatchNo()); + invCountCodes.setCount(1); + invCountCodesDao.insert(invCountCodes); + } else { + if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) { + //条码为标准条码,批次号和序列号都存在,条码重复 + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!"); + } else if ((StrUtil.isBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo()) || (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isBlank(udi.getSerialNo())))) { + //批次号或序列号,其中一个字段为空,直接修改数量 + InvCountCodesEntity countCodes = codesList.get(0); + countCodes.setCount(countCodes.getCount() + 1); + invCountCodesDao.updateById(countCodes); + } else { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!"); + } + } + + //修改码明细 + invCountOrderDetail.setCountNum(invCountOrderDetail.getCountNum() + udiCalCountUtil.getActCount(udi.getUdi())); + invCountOrderDetailDao.updateById(invCountOrderDetail); + return ResultVOUtils.success(); + } + + @Override + public Long getCountOrderCodesNum(String orderIdFk) { + return invCountCodesDao.countByOrderId(orderIdFk); + } +} diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvCountOrderDetailServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvCountOrderDetailServiceImpl.java new file mode 100644 index 000000000..78338b754 --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/impl/InvCountOrderDetailServiceImpl.java @@ -0,0 +1,81 @@ +package com.glxp.api.service.inv.impl; + +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.inv.InvCountOrderDao; +import com.glxp.api.dao.inv.InvCountOrderDetailDao; +import com.glxp.api.dao.inv.InvProductDao; +import com.glxp.api.entity.inv.InvCountOrderDetailEntity; +import com.glxp.api.entity.inv.InvCountOrderEntity; +import com.glxp.api.entity.inv.InvProductEntity; +import com.glxp.api.req.inv.FilterInvCountOrderDetailRequest; +import com.glxp.api.res.inv.InvCountOrderDetailResponse; +import com.glxp.api.service.inv.InvCountOrderDetailService; +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; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvCountOrderDetailServiceImpl implements InvCountOrderDetailService { + + @Resource + private InvCountOrderDetailDao invCountOrderDetailDao; + @Resource + private InvCountOrderDao invCountOrderDao; + @Resource + private InvProductDao invProductDao; + + @Override + public List filterList(FilterInvCountOrderDetailRequest detailRequest) { + if (null == detailRequest) { + return Collections.emptyList(); + } + if (null != detailRequest.getPage() && null != detailRequest.getLimit()) { + PageHelper.offsetPage((detailRequest.getPage() - 1) * detailRequest.getLimit(), detailRequest.getLimit()); + } + return invCountOrderDetailDao.filterList(detailRequest); + } + + @Override + public List filterCountDetail(FilterInvCountOrderDetailRequest detailRequest) { + if (null == detailRequest) { + return Collections.emptyList(); + } + if (null != detailRequest.getPage() && null != detailRequest.getLimit()) { + PageHelper.offsetPage((detailRequest.getPage() - 1) * detailRequest.getLimit(), detailRequest.getLimit()); + } + return invCountOrderDetailDao.filterCountDetail(detailRequest); + } + + @Override + public BaseResponse deleteOrderDetail(FilterInvCountOrderDetailRequest detailRequest) { + InvCountOrderDetailEntity invCountOrderDetail = invCountOrderDetailDao.selectById(detailRequest.getId()); + if (null == invCountOrderDetail) { + return ResultVOUtils.error(ResultEnum.DATA_NOT); + } + //删除盘点单据详情 + invCountOrderDetailDao.deleteById(detailRequest.getId()); + //删除盘点单据详情的条码数据 + invCountOrderDetailDao.deleteByOrderIdAndProductId(invCountOrderDetail.getOrderIdFk(), invCountOrderDetail.getRelId()); + return ResultVOUtils.success(); + } + + @Override + public BaseResponse addCountOrderDetail(InvCountOrderDetailEntity invCountOrderDetail) { + //查询单据信息 + InvCountOrderEntity invCountOrder = invCountOrderDao.selectByOrderId(invCountOrderDetail.getOrderIdFk()); + InvProductEntity invProductEntity = invProductDao.selectProductInfo(invCountOrderDetail.getRelId(), invCountOrderDetail.getBatchNo(), invCountOrder.getDeptCode(), invCountOrder.getInvCode(), invCountOrder.getInvSpaceCode()); + invCountOrderDetail.setInvNum(invProductEntity.getInCount() - invProductEntity.getOutCount()); + invCountOrderDetail.setCountNum(0); + invCountOrderDetailDao.insert(invCountOrderDetail); + return ResultVOUtils.success(); + } +} diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvCountOrderServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvCountOrderServiceImpl.java new file mode 100644 index 000000000..f2c3c8a9b --- /dev/null +++ b/src/main/java/com/glxp/api/service/inv/impl/InvCountOrderServiceImpl.java @@ -0,0 +1,233 @@ +package com.glxp.api.service.inv.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.StrUtil; +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.constant.Constant; +import com.glxp.api.dao.basic.BasicBusTypeChangeDao; +import com.glxp.api.dao.basic.BasicBussinessTypeDao; +import com.glxp.api.dao.basic.BasicCorpDao; +import com.glxp.api.dao.inout.IoCodeDao; +import com.glxp.api.dao.inout.IoCodeTempDao; +import com.glxp.api.dao.inout.IoOrderDao; +import com.glxp.api.dao.inv.InvCountCodesDao; +import com.glxp.api.dao.inv.InvCountOrderDao; +import com.glxp.api.dao.inv.InvCountOrderDetailDao; +import com.glxp.api.dao.inv.InvProductDetailDao; +import com.glxp.api.entity.auth.AuthAdmin; +import com.glxp.api.entity.inv.InvCountCodesEntity; +import com.glxp.api.entity.inv.InvCountOrderDetailEntity; +import com.glxp.api.entity.inv.InvCountOrderEntity; +import com.glxp.api.req.inv.AddInvCountOrderSaveRequest; +import com.glxp.api.req.inv.FilterInvCountOrderRequest; +import com.glxp.api.res.inv.InvCountOrderResponse; +import com.glxp.api.service.auth.CustomerService; +import com.glxp.api.service.basic.CompanyProductsRelService; +import com.glxp.api.service.inv.InvCountCodesService; +import com.glxp.api.service.inv.InvCountOrderService; +import com.glxp.api.util.GennerOrderUtils; +import com.glxp.api.util.OrderNoTypeBean; +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.Date; +import java.util.List; + +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class InvCountOrderServiceImpl implements InvCountOrderService { + + @Resource + private InvCountOrderDao invCountOrderDao; + @Resource + private InvCountOrderDetailDao invCountOrderDetailDao; + @Resource + private InvCountCodesDao invCountCodesDao; + @Resource + private GennerOrderUtils gennerOrderUtils; + @Resource + private CustomerService customerService; + @Resource + private InvProductDetailDao invProductDetailDao; + @Resource + private BasicBusTypeChangeDao busTypeChangeDao; + @Resource + private BasicBussinessTypeDao bussinessTypeDao; + @Resource + private BasicCorpDao corpDao; + @Resource + private IoOrderDao orderDao; + @Resource + private IoCodeTempDao codesTempDao; + @Resource + private InvCountCodesService invCountCodesService; + @Resource + private IoCodeDao codesDao; + @Resource + private CompanyProductsRelService companyProductsRelService; + + @Override + public List filterList(FilterInvCountOrderRequest filterInvCountOrderRequest) { + if (null == filterInvCountOrderRequest) { + return Collections.emptyList(); + } + if (null != filterInvCountOrderRequest.getPage() && null != filterInvCountOrderRequest.getLimit()) { + PageHelper.offsetPage((filterInvCountOrderRequest.getPage() - 1) * filterInvCountOrderRequest.getLimit(), filterInvCountOrderRequest.getLimit()); + } + return invCountOrderDao.filterList(filterInvCountOrderRequest); + } + + @Override + public void deleteOrder(String id) { + String orderId = invCountOrderDao.selectOrderIdById(id); + log.info("开始删除盘点单据,盘点单号: {}", orderId); + invCountOrderDao.deleteByOrderId(orderId); + if (invCountOrderDetailDao.countByOrderIdFk(orderId) > 0) { + invCountOrderDetailDao.deleteByOrderId(orderId); + } + if (invCountCodesDao.countByOrderIdFk(orderId) > 0) { + invCountCodesDao.deleteByOrderId(orderId); + } + log.info("盘点单据删除完成"); + } + + @Override + public BaseResponse saveCountOrder(InvCountOrderEntity invCountOrder) { + //TODO 确认一下盘点单据的部门是由前端选入还是后端获取 + if (invCountOrder.getCountType() == 0 || invCountOrder.getCountType() == 2) { + //整库盘点 + if (StrUtil.isBlank(invCountOrder.getInvCode())) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "请选择仓库信息!"); + } + } else if (invCountOrder.getCountType() == 1) { + //货位盘点 + if (StrUtil.isBlank(invCountOrder.getInvCode()) || StrUtil.isBlank(invCountOrder.getInvCode()) || StrUtil.isBlank(invCountOrder.getInvSpaceCode())) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "请选择仓库和货位信息!"); + } + } + + //封装相关数据 + //未提交 + invCountOrder.setStatus(0); + + if (StrUtil.isBlank(invCountOrder.getOrderId())) { + //生成单据号 + String orderId = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.COUNT_ORDER, "yyyyMMdd")); + //盘点单号 + invCountOrder.setOrderId(orderId); + AuthAdmin user = customerService.getUserBean(); + invCountOrder.setCreateUser(user.getUserName()); + invCountOrder.setCreateTime(new Date()); + invCountOrder.setUpdateTime(new Date()); + invCountOrderDao.insert(invCountOrder); + } else { + InvCountOrderEntity oldData = invCountOrderDao.selectByOrderId(invCountOrder.getOrderId()); + BeanUtil.copyProperties(invCountOrder, oldData, "id", "createTime", "createUser"); + oldData.setUpdateTime(new Date()); + invCountOrderDao.updateByOrderId(oldData); + } + return ResultVOUtils.success(invCountOrder); + } + + @Override + public BaseResponse submitAudit(String id) { + InvCountOrderEntity invCountOrder = invCountOrderDao.selectById(Integer.valueOf(id)); + if (null == invCountOrder) { + return ResultVOUtils.error(ResultEnum.DATA_ERROR, "单据不存在"); + } + if (invCountOrder.getStatus() != 0) { + return ResultVOUtils.error(ResultEnum.DATA_ERROR, "单据已提交,请勿重复提交"); + } + //查询单据详情和码表是否存在,如果无单据详情和条码,不允许提交 + Long detailCount = invCountOrderDetailDao.countByOrderIdFk(invCountOrder.getOrderId()); + if (detailCount == 0) { + return ResultVOUtils.error(ResultEnum.DATA_ERROR, "请先选择盘点产品"); + } + + Long codesCount = invCountCodesDao.countByOrderIdFk(invCountOrder.getOrderId()); + if (codesCount == 0) { + return ResultVOUtils.error(ResultEnum.DATA_ERROR, "请扫描需要盘点的产品"); + } + //更新状态 + invCountOrder.setStatus(1); + invCountOrder.setUpdateTime(new Date()); + //查询单据详情,计算盘点盈亏状态 + List detailList = invCountOrderDetailDao.selectByOrderId(invCountOrder.getOrderId()); + for (InvCountOrderDetailEntity invCountOrderDetail : detailList) { + int diff = invCountOrderDetail.getInvNum() - invCountOrderDetail.getCountNum(); + if (diff > 0) { + invCountOrderDetail.setLossNum(Math.abs(diff)); + //盘亏 + invCountOrderDetail.setStatus(0); + } else if (diff < 0) { + invCountOrderDetail.setProfitNum(Math.abs(diff)); + //盘盈 + invCountOrderDetail.setStatus(1); + } else { + //平衡 + invCountOrderDetail.setStatus(2); + } + } + //更新单据信息 + invCountOrderDao.updateById(invCountOrder); + //更新单据详情 + invCountOrderDetailDao.updateBatch(detailList); + return ResultVOUtils.success(); + } + + @Override + public BaseResponse updateCountOrderStatus(String id, Integer status) { + InvCountOrderEntity invCountOrder = invCountOrderDao.selectById(Integer.valueOf(id)); + invCountOrder.setStatus(status); + invCountOrder.setAuditUser(customerService.getUserBean().getUserName()); + invCountOrder.setAuditTime(new Date()); + invCountOrder.setUpdateTime(new Date()); + if (status == 0) { + //审核不通过 + //查询盘点单据详情,清空盘盈/盘亏数值 + invCountOrderDetailDao.resetCountFiledValue(invCountOrder.getOrderId()); + } else { + //审核通过 + //根据单据详情生成相关单据 + log.info("单据审核通过,开始生成扫码单据"); + ThreadUtil.execAsync(() -> { + countOrderTransfer(invCountOrder); + }); + } + invCountOrderDao.updateById(invCountOrder); + return ResultVOUtils.success(); + } + + //TODO 盘点单据转单逻辑,待完善 + private void countOrderTransfer(InvCountOrderEntity invCountOrder) { + + } + + @Override + public BaseResponse saveCountOrderForPDA(AddInvCountOrderSaveRequest addInvCountOrderSaveRequest) { + InvCountOrderEntity invCountOrder = invCountOrderDao.selectByOrderId(addInvCountOrderSaveRequest.getOrderId()); + if (null == invCountOrder) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "此单据不存在"); + } + if (invCountOrder.getStatus() != 0) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "此单据不可编辑"); + } + //解析条码,修改单据详情,修改单据状态为待审核 + invCountOrder.setStatus(1); + invCountOrder.setUpdateTime(new Date()); + List countCodeList = addInvCountOrderSaveRequest.getCountCodeList(); + for (InvCountCodesEntity invCountCodes : countCodeList) { + invCountCodesService.addCode(invCountCodes); + } + submitAudit(invCountOrder.getId().toString()); + return ResultVOUtils.success(); + } +} diff --git a/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java b/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java index fea017c4d..d2aca86fa 100644 --- a/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java +++ b/src/main/java/com/glxp/api/util/udi/UdiCalCountUtil.java @@ -49,5 +49,11 @@ public class UdiCalCountUtil { return 1; } + public int getActCount(String nameCode) { + UdiRelevanceResponse udiRelevanceResponse = udiRelevanceService.selectByNameCode(nameCode); + int count = getActCount(udiRelevanceResponse); + return count; + } + } diff --git a/src/main/resources/mybatis/mapper/inv/InvCountCodesDao.xml b/src/main/resources/mybatis/mapper/inv/InvCountCodesDao.xml new file mode 100644 index 000000000..eef465f2f --- /dev/null +++ b/src/main/resources/mybatis/mapper/inv/InvCountCodesDao.xml @@ -0,0 +1,79 @@ + + + + + delete + from inv_count_codes + where orderIdFk = #{orderId} + + + + + + + + + + + + update inv_count_codes + set status = null + where orderIdFk = #{orderId} + + + + + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/inv/InvCountOrderDao.xml b/src/main/resources/mybatis/mapper/inv/InvCountOrderDao.xml new file mode 100644 index 000000000..776a1a40d --- /dev/null +++ b/src/main/resources/mybatis/mapper/inv/InvCountOrderDao.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + update inv_count_order + set deptCode = #{deptCode,jdbcType=VARCHAR}, + invCode = #{invCode,jdbcType=VARCHAR}, + invSpaceCode = #{invSpaceCode,jdbcType=VARCHAR}, + `createUser` = #{createUser,jdbcType=VARCHAR}, + createTime = #{createTime,jdbcType=TIMESTAMP}, + updateTime = #{updateTime,jdbcType=TIMESTAMP}, + auditUser = #{auditUser,jdbcType=VARCHAR}, + auditTime = #{auditTime,jdbcType=TIMESTAMP}, + `status` = #{status,jdbcType=BOOLEAN}, + remark = #{remark,jdbcType=VARCHAR}, + inOrderIds = #{inOrderIds,jdbcType=VARCHAR}, + outOrderIds = #{outOrderIds,jdbcType=VARCHAR}, + countType = #{countType,jdbcType=INTEGER} + where orderId = #{orderId} + + + + + + delete + from inv_count_order + where orderId = #{orderId} + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/inv/InvCountOrderDetailDao.xml b/src/main/resources/mybatis/mapper/inv/InvCountOrderDetailDao.xml new file mode 100644 index 000000000..0c4556d26 --- /dev/null +++ b/src/main/resources/mybatis/mapper/inv/InvCountOrderDetailDao.xml @@ -0,0 +1,150 @@ + + + + + delete + from inv_count_order_detail + where orderIdFk = #{orderId} + + + + + + + + + + delete + from inv_count_codes + where orderIdFk = #{orderIdFk} + and productId = #{productId} + + + + + + + + + + update inv_count_order_detail + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.orderIdFk,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.relId,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.nameCode,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.batchNo,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.produceDate,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.expireDate,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.serialNo,jdbcType=VARCHAR} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.countNum,jdbcType=INTEGER} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.invNum,jdbcType=INTEGER} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.profitNum,jdbcType=INTEGER} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.lossNum,jdbcType=INTEGER} + + + + + when id = #{item.id,jdbcType=INTEGER} then #{item.status,jdbcType=INTEGER} + + + + where id in + + #{item.id,jdbcType=INTEGER} + + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/inv/invProductDao.xml b/src/main/resources/mybatis/mapper/inv/invProductDao.xml index ace044f26..9c2247af1 100644 --- a/src/main/resources/mybatis/mapper/inv/invProductDao.xml +++ b/src/main/resources/mybatis/mapper/inv/invProductDao.xml @@ -170,4 +170,30 @@ group by ip.id + +