From 68c7c1ac163e9cbdff3d3c43936be65ae10ed7c8 Mon Sep 17 00:00:00 2001 From: renfan <2206580733@qq.com> Date: Tue, 6 Aug 2024 21:07:07 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90admin=E3=80=91=E4=BC=98=E5=8C=96#1?= =?UTF-8?q?=E3=80=81=E5=87=BA=E5=85=A5=E5=BA=93=E7=AE=A1=E7=90=86=202?= =?UTF-8?q?=E3=80=81=E4=BB=93=E5=BA=93=E7=BC=96=E8=BE=91=203=E3=80=81?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E5=BA=93=E5=AD=98=E5=AF=B9=E6=AF=94=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SparePartReceiveController.java | 97 +++++ .../SparePartStockAuditController.java | 10 + .../ISparePartReceiveService.java | 58 +++ .../impl/SparePartReceiveServiceImpl.java | 331 ++++++++++++++++++ .../sparePart/impl/SparePartServiceImpl.java | 16 +- .../impl/SpareParAllotServiceImpl.java | 6 +- .../impl/SparePartInWarehouseServiceImpl.java | 8 +- .../SparePartOutWarehouseServiceImpl.java | 6 +- .../ISparePartStockAuditService.java | 6 + .../impl/SparePartStockAuditServiceImpl.java | 56 +++ .../warehouse/impl/WarehouseServiceImpl.java | 23 +- .../SparePartStockAuditParam.java | 15 + .../SparePartReceiveListVo.java | 47 +++ .../SparePartStockAuditDetailVo.java | 17 +- .../SparePartStockAuditListVo.java | 17 + .../SparePartStockAudit.java | 15 + 16 files changed, 715 insertions(+), 13 deletions(-) create mode 100644 admin/src/main/java/com/hcy/admin/controller/sparePartReceive/SparePartReceiveController.java create mode 100644 admin/src/main/java/com/hcy/admin/service/SparePartReceive/ISparePartReceiveService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java diff --git a/admin/src/main/java/com/hcy/admin/controller/sparePartReceive/SparePartReceiveController.java b/admin/src/main/java/com/hcy/admin/controller/sparePartReceive/SparePartReceiveController.java new file mode 100644 index 0000000..9135f66 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartReceive/SparePartReceiveController.java @@ -0,0 +1,97 @@ +package com.hcy.admin.controller.sparePartReceive; + +import com.hcy.admin.config.aop.Log; +import com.hcy.admin.service.SparePartReceive.ISparePartReceiveService; +import com.hcy.admin.service.sparePartOutWarehouse.ISparePartOutWarehouseService; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo; +import com.hcy.common.core.AjaxResult; +import com.hcy.common.core.PageResult; +import com.hcy.common.validator.annotation.IDMust; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * 备件出库管理 + */ +@RestController +@RequestMapping("api/sparePartReceive") +public class SparePartReceiveController { + + @Resource + ISparePartReceiveService iSparePartReceiveService; + + /** + * 备件出库列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return Object + */ + @GetMapping("/list") + public Object list(@Validated PageParam pageParam, + @RequestParam Map params) { + PageResult list = iSparePartReceiveService.list(pageParam, params); + return AjaxResult.success(list); + } + /** + * 备件出库详情 + * + * @author hcy + * @param id 主键ID + * @return Object + */ + @GetMapping("/detail") + public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) { + SparePartOutWarehouseListVo detail = iSparePartReceiveService.detail(id); + return AjaxResult.success(detail); + } + + /** + * 备件出库新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + * @return Object + */ + @Log(title = "备件出库新增") + @PostMapping("/add") + public Object add(@Validated(value = SparePartStockAuditParam.create.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { + iSparePartReceiveService.add(sparePartStockAuditParam); + return AjaxResult.success(); + } + + /** + * 备件出库编辑 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + * @return Object + */ + @Log(title = "备件出库编辑") + @PostMapping("/edit") + public Object edit(@Validated(value = SparePartStockAuditParam.update.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { + iSparePartReceiveService.edit(sparePartStockAuditParam); + return AjaxResult.success(); + } + + /** + * 备件出库删除 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + * @return Object + */ + @Log(title = "备件出库删除") + @PostMapping("/del") + public Object del(@Validated(value = SparePartStockAuditParam.delete.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { + iSparePartReceiveService.del(Math.toIntExact(sparePartStockAuditParam.getId())); + return AjaxResult.success(); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/controller/sparePartStockAudit/SparePartStockAuditController.java b/admin/src/main/java/com/hcy/admin/controller/sparePartStockAudit/SparePartStockAuditController.java index 0f57243..8cb8ba0 100644 --- a/admin/src/main/java/com/hcy/admin/controller/sparePartStockAudit/SparePartStockAuditController.java +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartStockAudit/SparePartStockAuditController.java @@ -121,4 +121,14 @@ public class SparePartStockAuditController { iSparePartStockAuditService.cancelAudit(Math.toIntExact(sparePartStockAuditParam.getId())); return AjaxResult.success(); } + + /** + * 库存比对接口,就是每次出入库审核的时候前端都要请求,如果库存不够就不审核了 + * @param id + */ + @GetMapping("/inventoryComparison") + public Object inventoryComparison(@RequestParam("id") Integer id){ + iSparePartStockAuditService.inventoryComparison(id); + return AjaxResult.success(); + } } diff --git a/admin/src/main/java/com/hcy/admin/service/SparePartReceive/ISparePartReceiveService.java b/admin/src/main/java/com/hcy/admin/service/SparePartReceive/ISparePartReceiveService.java new file mode 100644 index 0000000..bf6d95e --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/SparePartReceive/ISparePartReceiveService.java @@ -0,0 +1,58 @@ +package com.hcy.admin.service.SparePartReceive; + +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo; +import com.hcy.common.core.PageResult; + +import java.util.Map; + +/** + * 备件入库服务接口类 + */ +public interface ISparePartReceiveService { + + /** + * 备件入库列表 + * + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + * @author hcy + */ + PageResult list(PageParam pageParam, Map params); + + /** + * 备件入库详情 + * + * @author hcy + * @param id 主键ID + * @return SparePartInWarehouseListVo + */ + SparePartOutWarehouseListVo detail(Integer id); + + /** + * 备件入库新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + void add(SparePartStockAuditParam sparePartStockAuditParam); + + /** + * 备件入库编辑 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + void edit(SparePartStockAuditParam sparePartStockAuditParam); + + /** + * 备件入库删除 + * + * @author hcy + * @param id 主键ID + */ + void del(Integer id); + +} diff --git a/admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java new file mode 100644 index 0000000..f38e084 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java @@ -0,0 +1,331 @@ +package com.hcy.admin.service.SparePartReceive.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.hcy.admin.AdminThreadLocal; +import com.hcy.admin.service.sparePartOutWarehouse.ISparePartOutWarehouseService; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo; +import com.hcy.common.core.PageResult; +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import com.hcy.common.entity.sparePart.SparePart; +import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; +import com.hcy.common.entity.warehouse.Warehouse; +import com.hcy.common.enums.Audit.AuditStateEnum; +import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper; +import com.hcy.common.mapper.sparePart.SparePartMapper; +import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; +import com.hcy.common.mapper.warehouse.WarehouseMapper; +import com.hcy.common.utils.TimeUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * 备件出库实现类 + */ +@Service +public class SparePartReceiveServiceImpl implements ISparePartOutWarehouseService { + + @Resource + SparePartStockAuditMapper sparePartStockAuditMapper; + + @Resource + SparePartAuditMapper sparePartAuditMapper; + + @Resource + SparePartMapper sparePartMapper; + + @Resource + WarehouseMapper warehouseMapper; + + /** + * 备件出库列表 + * + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + * @author hcy + */ + + public PageResult list(PageParam pageParam, Map params) { + Integer page = pageParam.getPageNo(); + Integer limit = pageParam.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("receipt_type",1); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{ + "like:receiptNumber@receipt_number:str", + "=:warehouseId@warehouse_id:long", + "=:outInWarehouseType@out_in_warehouse_type:long", + "=:auditState@audit_state:int", + }); + + IPage iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper); + List list = new LinkedList<>(); + for(SparePartStockAudit item : iPage.getRecords()) { + SparePartOutWarehouseListVo vo = new SparePartOutWarehouseListVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime())); + vo.setHandlingTime(TimeUtil.timestampToDate(item.getHandlingTime())); //经办时间 + vo.setConsigneePhone(item.getConsignee() + "/" + item.getPhone()); + Warehouse warehouse = warehouseMapper.selectOne( + new QueryWrapper() + .eq("id", item.getWarehouseId()) + .eq("is_delete", 0) + .last("limit 1")); + vo.setWarehouseName(warehouse.getWarehouseName()); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 备件出库详情 + * + * @author hcy + * @param id 主键参数 + * @return SparePartInWarehouseListVo + */ + @Override + public SparePartOutWarehouseListVo detail(Integer id) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + SparePartOutWarehouseListVo vo = new SparePartOutWarehouseListVo(); + BeanUtils.copyProperties(model, vo); + + Warehouse warehouse = warehouseMapper.selectOne( + new QueryWrapper() + .eq("id", model.getWarehouseId()) + .eq("is_delete", 0) + .last("limit 1")); + vo.setWarehouseName(warehouse.getWarehouseName()); + + //获取待审核备件信息 + List stockAuditId = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0) + ); + //获取备件信息 + List listVo = new ArrayList<>(); + for (SparePartAudit sparePartAudit : stockAuditId) { + SparePart sparePart = sparePartMapper.selectOne( + new QueryWrapper() + .eq("id", sparePartAudit.getSparePartsId()) + .eq("is_delete", 0) + .last("limit 1")); + + SparePartAudit sparePartAudit1 = new SparePartAudit(); + BeanUtils.copyProperties(sparePart, sparePartAudit1); + sparePartAudit1.setId(sparePartAudit.getId()); + sparePartAudit1.setSparePartsId(sparePart.getId()); + sparePartAudit1.setStockAuditId(sparePartAudit.getStockAuditId()); + sparePartAudit1.setCount(sparePartAudit.getCount()); // 出库数量 + listVo.add(sparePartAudit1); + } + + vo.setSparePartAuditList(listVo); + vo.setHandlingTime(TimeUtil.timestampToDate(model.getHandlingTime())); //经办时间 + return vo; + } + + /** + * 备件出库新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + @Override + public void add(SparePartStockAuditParam sparePartStockAuditParam) { + SparePartStockAudit model = new SparePartStockAudit(); + + QueryWrapper qw = new QueryWrapper<>(); + qw.select("max(id) as id"); + SparePartStockAudit sparePartStockAudit = sparePartStockAuditMapper.selectOne(qw); + if(sparePartStockAudit == null){ + model.setId(1L); + }else{ + model.setId(sparePartStockAudit.getId() + 1); + } + + model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 出库仓库 + model.setOutInWarehouseType(sparePartStockAuditParam.getOutInWarehouseType()); // 出库类别 2=员工领料,3=销售出库) + model.setConsignee(sparePartStockAuditParam.getConsignee()); // 收货单位(人员) + model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 + model.setReceiptNumber(generateOrderNumber()); // 单据编号 + + // 获取当前的用户 + Object username = AdminThreadLocal.get("username"); + model.setResponsiblePerson((String) username); + model.setHandlingTime(System.currentTimeMillis() / 1000); //经办时间 + + // 审核状态 + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + //单据类型(0=入库单,1=出库单,2=仓库调拨单) + model.setReceiptType(AuditStateEnum.OUTWAREHOUSE.getStatus()); + + List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); + // 使用StringBuilder来拼接id值 + StringBuilder sb = new StringBuilder(); + for (SparePartAudit sparePartAudit : sparePartAuditList) { + SparePartAudit insertSparePartAudit = new SparePartAudit(); + insertSparePartAudit.setSparePartsId(sparePartAudit.getId()); //备件id + sb.append(sparePartAudit.getId()).append(","); + + insertSparePartAudit.setCount(sparePartAudit.getCount()); //备件出库数量 + insertSparePartAudit.setStockAuditId(model.getId()); // 出入库审核id + insertSparePartAudit.setCreateTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.insert(insertSparePartAudit);//插入备件审核信息 + } + sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号 + model.setSparePartAuditId(String.valueOf(sb));// 备件审核id + model.setCreateTime(System.currentTimeMillis() / 1000); + sparePartStockAuditMapper.insert(model); + } + + /** + * 备件出库编辑 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + @Override + public void edit(SparePartStockAuditParam sparePartStockAuditParam) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", sparePartStockAuditParam.getId()) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + model.setId(sparePartStockAuditParam.getId()); + model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 出库仓库 + model.setOutInWarehouseType(sparePartStockAuditParam.getOutInWarehouseType()); // 出库类别(1=调拨出库) + model.setConsignee(sparePartStockAuditParam.getConsignee()); // 收货单位(人员) + model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 + model.setReceiptNumber(sparePartStockAuditParam.getReceiptNumber()); // 单据编号 + + List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); + // 使用StringBuilder来拼接id值 + StringBuilder sb = new StringBuilder(); + List auditList = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0)); + for (SparePartAudit sparePartAudit : auditList) { + //将旧备件审核信息删除 + SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0) + .last("limit 1")); + if(delectSparePartAudit != null){ + delectSparePartAudit.setIsDelete(1); + delectSparePartAudit.setDeleteTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.updateById(delectSparePartAudit); + } + } + for (SparePartAudit sparePartAudit : sparePartAuditList) { + //插入新的备件审核信息 + SparePartAudit insertSparePartAudit = new SparePartAudit(); + if(sparePartAudit.getSparePartsId() != null){ + insertSparePartAudit.setSparePartsId(sparePartAudit.getSparePartsId()); //备件id + }else { + insertSparePartAudit.setSparePartsId(sparePartAudit.getId()); + } + sb.append(sparePartAudit.getId()).append(","); + + insertSparePartAudit.setCount(sparePartAudit.getCount()); //备件出库数量 + insertSparePartAudit.setStockAuditId(model.getId()); // 出入库审核id + insertSparePartAudit.setUpdateTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.insert(insertSparePartAudit);//插入备件审核信息 + } + //如果是已取消状态编辑改成未审核 + if(model.getAuditState() == AuditStateEnum.CANCELED.getStatus()){ + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + } + //已审核,但不通过的,重新编辑之后状态也要变成未审核,审核结果改成空 + if(model.getAuditState() == AuditStateEnum.AUDITED.getStatus() + && model.getAuditResult() == AuditStateEnum.NOTPASS.getStatus()){ + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + model.setAuditResult(null); + } + sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号 + model.setSparePartAuditId(String.valueOf(sb));// 备件审核id + model.setUpdateTime(System.currentTimeMillis() / 1000); + sparePartStockAuditMapper.updateById(model); + } + + /** + * 备件出库删除 + * + * @author hcy + * @param id 主键ID + */ + @Override + public void del(Integer id) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1); + model.setDeleteTime(System.currentTimeMillis() / 1000); + sparePartStockAuditMapper.updateById(model); + } + + + /** + * 系统自动生成订单号:年月日+6位流水号 + * @return + */ + public String generateOrderNumber() { + String DATE_FORMAT = "yyyyMMdd"; + int SEQUENCE_LENGTH = 6; + int sequence = 1; // 流水号从1开始 + // 获取当前日期 + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); + String dateStr = dateFormat.format(new Date()); + + //查看数据库是否今日有订单编号 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like("receipt_number",dateStr); + List sparePartStockAudits = sparePartStockAuditMapper.selectList(queryWrapper); + int max = sparePartStockAudits.size(); + if(sequence <= max){ + sequence = max + 1; // 递增流水号 + } + + // 生成6位流水号 + StringBuilder sequenceBuilder = new StringBuilder(); + for (int i = 0; i < SEQUENCE_LENGTH; i++) { + sequenceBuilder.append(String.format("%0" + (SEQUENCE_LENGTH - i) + "d", sequence)); + } + String truncatedString = sequenceBuilder.substring(0, 6); + // 拼接订单号 + String orderNumber = dateStr + truncatedString; + + return orderNumber; + } +} diff --git a/admin/src/main/java/com/hcy/admin/service/sparePart/impl/SparePartServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePart/impl/SparePartServiceImpl.java index 705defc..a1deeed 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePart/impl/SparePartServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePart/impl/SparePartServiceImpl.java @@ -92,8 +92,18 @@ public class SparePartServiceImpl implements ISparePartService { .eq("id", item.getWarehouseId()) .eq("is_delete", 0) .last("limit 1")); - vo.setWarehouseName(warehouse.getWarehouseName()); - list.add(vo); + if(warehouse != null){ + vo.setWarehouseName(warehouse.getWarehouseName()); + } + + //出库和调拨,选配件的时候,库存数量为0的不应出现 查询要加个字段 + String s = params.get("outAllotType"); + if(s != null && s.equals("0") && item.getQuantity() == 0){ + System.out.println("出库和调拨时,库存数量为0的不应出现!!!"); + }else{ + list.add(vo); + } + } return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); @@ -179,7 +189,7 @@ public class SparePartServiceImpl implements ISparePartService { .eq("warehouse_id", sparePartParam.getWarehouseId()) .eq("is_delete", 0) .last("limit 1")); - if(sparePart != null){ + if(sparePart != null && !Objects.equals(sparePartParam.getId(), sparePart.getId())){ throw new OperateException("当前仓库下的备件编码不可重复!"); } diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartAllot/impl/SpareParAllotServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartAllot/impl/SpareParAllotServiceImpl.java index e0900cf..fd8eaba 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePartAllot/impl/SpareParAllotServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePartAllot/impl/SpareParAllotServiceImpl.java @@ -243,7 +243,11 @@ public class SpareParAllotServiceImpl implements ISparePartAllotService { List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); // 使用StringBuilder来拼接id值 StringBuilder sb = new StringBuilder(); - for (SparePartAudit sparePartAudit : sparePartAuditList) { + List auditList = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0)); + for (SparePartAudit sparePartAudit : auditList) { //将旧备件审核信息删除 SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( new QueryWrapper() diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java index c7382e0..a58143d 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java @@ -238,7 +238,13 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); // 使用StringBuilder来拼接id值 StringBuilder sb = new StringBuilder(); - for (SparePartAudit sparePartAudit : sparePartAuditList) { + + List auditList = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0)); + + for (SparePartAudit sparePartAudit : auditList) { //将旧备件审核信息删除 SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( new QueryWrapper() diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java index b91316b..ec68e09 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java @@ -227,7 +227,11 @@ public class SparePartOutWarehouseServiceImpl implements ISparePartOutWarehouseS List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); // 使用StringBuilder来拼接id值 StringBuilder sb = new StringBuilder(); - for (SparePartAudit sparePartAudit : sparePartAuditList) { + List auditList = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0)); + for (SparePartAudit sparePartAudit : auditList) { //将旧备件审核信息删除 SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( new QueryWrapper() diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/ISparePartStockAuditService.java b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/ISparePartStockAuditService.java index 8d05de1..b27444a 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/ISparePartStockAuditService.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/ISparePartStockAuditService.java @@ -69,4 +69,10 @@ public interface ISparePartStockAuditService { * @param id */ void cancelAudit(Integer id); + + /** + * 库存对比 + * @param id + */ + void inventoryComparison(Integer id); } diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java index c3d65f4..486c2e2 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java @@ -414,4 +414,60 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi model.setUpdateTime(System.currentTimeMillis() / 1000); sparePartStockAuditMapper.updateById(model); } + + + //库存比对接口,就是每次出入库审核的时候前端都要请求,如果库存不够就不审核了 + public void inventoryComparison(Integer id){ + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + // 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足 + //获取待审核备件信息 + List stockAuditId = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0) + ); + if(model.getReceiptType() == AuditStateEnum.OUTWAREHOUSE.getStatus()){ + // 通过审核的出库单 + //获取备件信息 + for (SparePartAudit sparePartAudit : stockAuditId) { + SparePart sparePart = sparePartMapper.selectOne( + new QueryWrapper() + .eq("id", sparePartAudit.getSparePartsId()) + .eq("is_delete", 0) + .last("limit 1")); + // 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足 + if(sparePart.getQuantity() >= sparePartAudit.getCount()){ + }else{ + throw new OperateException(sparePart.getSparePartsName() + "备件库存数量不足,请联系客服人员!"); + } + } + + }else if(model.getReceiptType() == AuditStateEnum.ALLOT.getStatus()){ + //通过审核的调拨单 + //获取备件信息 + for (SparePartAudit sparePartAudit : stockAuditId) { + //调出仓库 + SparePart sparePart = sparePartMapper.selectOne( + new QueryWrapper() + .eq("spare_parts_code", sparePartAudit.getSparePartsCode()) + .eq("warehouse_id", model.getExportWarehouse()) + .eq("is_delete", 0) + .last("limit 1")); + // 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足 + if(sparePart.getQuantity() >= sparePartAudit.getCount()){ + }else{ + throw new OperateException(sparePart.getSparePartsName() + "备件库存数量不足,请联系客服人员!"); + } + + } + + } + } } diff --git a/admin/src/main/java/com/hcy/admin/service/warehouse/impl/WarehouseServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/warehouse/impl/WarehouseServiceImpl.java index 05cfb8d..4cb70cb 100644 --- a/admin/src/main/java/com/hcy/admin/service/warehouse/impl/WarehouseServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/warehouse/impl/WarehouseServiceImpl.java @@ -20,6 +20,7 @@ import com.hcy.common.core.PageResult; import com.hcy.common.entity.sparePart.SparePart; import com.hcy.common.entity.system.SystemAuthDept; import com.hcy.common.entity.warehouse.Warehouse; +import com.hcy.common.exception.OperateException; import com.hcy.common.mapper.sparePart.SparePartMapper; import com.hcy.common.mapper.warehouse.WarehouseMapper; import com.hcy.common.utils.ArrayUtil; @@ -158,17 +159,29 @@ public class WarehouseServiceImpl implements IWarehouseService { new QueryWrapper() .in("id", ids)); for (Long id : ids) { - Warehouse pModel = warehouseMapper.selectOne( - new QueryWrapper() - .select("id,pid,warehouse_name") - .eq("pid", id) + //仓库存在配件且配件数量不为0时,不允许删除 + SparePart sparePart = sparePartMapper.selectOne( + new QueryWrapper() + .eq("warehouse_id", id) .eq("is_delete", 0) .last("limit 1")); + if(sparePart != null && sparePart.getQuantity() != 0){ + + }else{ + Warehouse pModel = warehouseMapper.selectOne( + new QueryWrapper() + .select("id,pid,warehouse_name") + .eq("pid", id) + .eq("is_delete", 0) + .last("limit 1")); + Assert.isNull(pModel, "请先删除子级仓库"); + } + - Assert.isNull(pModel, "请先删除子级仓库"); } + // GlobalConstant.NOT_DELETE 调用未删除常量 // GlobalConstant.DELETE 删除标识 diff --git a/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java b/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java index 22422c3..7fc0d3e 100644 --- a/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java +++ b/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java @@ -9,6 +9,7 @@ import org.hibernate.validator.constraints.Length; import lombok.Data; import javax.validation.constraints.*; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -85,4 +86,18 @@ public class SparePartStockAuditParam implements Serializable { private List sparePartAuditList; //待入库的备件 private Long outInWarehouseType; //出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) + private String workOrderId; //工单号 + private String orderId; //订单编号 + private String shippingAddress; //收货地址 + private String consigner; //发货人 + private String consignerPhone; //发货人联系电话 + private String shipAddress; //发货地址 + private String logisticsCompany; //物流公司 + private String trackingNumber; //物流编号 + private Long distributionMode; //配送方式(0=物流快递,1=送货上门,2=上门取件) + private BigDecimal salesPrice; //销售价 + private String recipient; //领用员工 + private String recipientPhone; //领用员工联系电话 + private Integer recipientNumber; //领用数量 + private Long state; //状态(0=未审核,1=待管理员审核,2=未通过,3=待发货,4=待收货,5=已完成) } diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java new file mode 100644 index 0000000..beb6534 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java @@ -0,0 +1,47 @@ +package com.hcy.admin.vo.sparePartReceive; + +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * SparePartReceiveListVo + */ +@Data +public class SparePartReceiveListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private String receiptNumber; // 单据编号 + private Long warehouseId; // 所属仓库 + private String consignee; // 收货单位(人员) + private String phone; // 联系电话 + private String responsiblePerson; // 经办人 + private String handlingTime; // 经办时间 + private Integer auditState; // 审核状态(0=未审核,1=已审核,2=已取消) + private Integer auditResult; // 审核结果(0=已通过,1=未通过) + private Long auditTime; // 审核时间 + private String auditIdea; // 审核意见 + private String createTime; // 创建时间 + private String updateTime; // 更新时间 + private String sparePartAuditId; // 备件审核id + private String consigneePhone; // 收货单位(人员)/电话 + private List sparePartAuditList; //待入库的备件 + private String warehouseName; // 所属仓库名 + private Long outInWarehouseType; // 出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) + + private String workOrderId; //工单号 + private String recipient; //领用员工 + private String recipientPhone; //领用员工联系电话 + private Integer recipientNumber; //领用数量 + private Long state; //状态(0=未审核,1=待管理员审核,2=未通过,3=待发货,4=待收货,5=已完成) + private String shippingAddress; //收货地址 + private String consigner; //发货人 + private String consignerPhone; //发货人联系电话 + private String shipAddress; //发货地址 + private String logisticsCompany; //物流公司 + private String trackingNumber; //物流编号 +} diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditDetailVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditDetailVo.java index b47567e..8b630b3 100644 --- a/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditDetailVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditDetailVo.java @@ -5,6 +5,7 @@ import io.swagger.models.auth.In; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; /** @@ -39,7 +40,19 @@ public class SparePartStockAuditDetailVo implements Serializable { private Long outInWarehouseType; // 出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) private String supplierPhone; // 供应商/电话 private String consigneePhone; // 收货单位(人员)/电话 - - + private String workOrderId; //工单号 + private String orderId; //订单编号 + private String shippingAddress; //收货地址 + private String consigner; //发货人 + private String consignerPhone; //发货人联系电话 + private String shipAddress; //发货地址 + private String logisticsCompany; //物流公司 + private String trackingNumber; //物流编号 + private Long distributionMode; //配送方式(0=物流快递,1=送货上门,2=上门取件) + private BigDecimal salesPrice; //销售价 + private String recipient; //领用员工 + private String recipientPhone; //领用员工联系电话 + private Integer recipientNumber; //领用数量 + private Long state; //状态(0=未审核,1=待管理员审核,2=未通过,3=待发货,4=待收货,5=已完成) } diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditListVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditListVo.java index 945254a..85f066a 100644 --- a/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditListVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditListVo.java @@ -4,6 +4,7 @@ import com.hcy.common.entity.SparePartAudit.SparePartAudit; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.List; /** @@ -37,4 +38,20 @@ public class SparePartStockAuditListVo implements Serializable { private String importWarehouseName; // 调入仓库名 private String exportWarehouseName; // 调出仓库名 private Long outInWarehouseType; // 出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) + + private String workOrderId; //工单号 + private String orderId; //订单编号 + private String shippingAddress; //收货地址 + private String consigner; //发货人 + private String consignerPhone; //发货人联系电话 + private String shipAddress; //发货地址 + private String logisticsCompany; //物流公司 + private String trackingNumber; //物流编号 + private Long distributionMode; //配送方式(0=物流快递,1=送货上门,2=上门取件) + private BigDecimal salesPrice; //销售价 + private String recipient; //领用员工 + private String recipientPhone; //领用员工联系电话 + private Integer recipientNumber; //领用数量 + private Long state; //状态(0=未审核,1=待管理员审核,2=未通过,3=待发货,4=待收货,5=已完成) + } diff --git a/common/src/main/java/com/hcy/common/entity/sparePartStockAudit/SparePartStockAudit.java b/common/src/main/java/com/hcy/common/entity/sparePartStockAudit/SparePartStockAudit.java index d2e84ef..beb6cf0 100644 --- a/common/src/main/java/com/hcy/common/entity/sparePartStockAudit/SparePartStockAudit.java +++ b/common/src/main/java/com/hcy/common/entity/sparePartStockAudit/SparePartStockAudit.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; /** * 备件出入库审核实体 @@ -40,4 +41,18 @@ public class SparePartStockAudit implements Serializable { private Long deleteTime; // 删除时间 private String sparePartAuditId; // 备件审核id private Long outInWarehouseType; // 出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) + private String workOrderId; //工单号 + private String orderId; //订单编号 + private String shippingAddress; //收货地址 + private String consigner; //发货人 + private String consignerPhone; //发货人联系电话 + private String shipAddress; //发货地址 + private String logisticsCompany; //物流公司 + private String trackingNumber; //物流编号 + private Long distributionMode; //配送方式(0=物流快递,1=送货上门,2=上门取件) + private BigDecimal salesPrice; //销售价 + private String recipient; //领用员工 + private String recipientPhone; //领用员工联系电话 + private Integer recipientNumber; //领用数量 + private Long state; //状态(0=未审核,1=待管理员审核,2=未通过,3=待发货,4=待收货,5=已完成) } \ No newline at end of file