From 566abd1972188b1a172c143a6acc62be5d9f8365 Mon Sep 17 00:00:00 2001 From: renfan <2206580733@qq.com> Date: Fri, 2 Aug 2024 20:56:41 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90admin=E3=80=91=E6=96=B0=E5=A2=9E#1?= =?UTF-8?q?=E3=80=81=E5=85=A5=E5=BA=93=E5=A4=87=E4=BB=B6=E7=AE=A1=E7=90=86?= =?UTF-8?q?=202=E3=80=81=E5=87=BA=E5=BA=93=E5=A4=87=E4=BB=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/pom.xml | 11 + .../order/CancelOrderConfigController.java | 2 +- .../SparePartAuditController.java | 2 +- .../SparePartInWarehouseController.java | 11 +- .../SparePartOutWarehouseController.java | 98 +++++++ .../impl/SparePartAuditServiceImpl.java | 3 + .../ISparePartInWarehouseService.java | 14 +- .../impl/SparePartInWarehouseServiceImpl.java | 151 ++++++++--- .../ISparePartOutWarehouseService.java | 59 +++++ .../SparePartOutWarehouseServiceImpl.java | 246 ++++++++++++++++++ .../SparePartAudit/SparePartAuditParam.java | 8 +- .../SparePartStockAuditParam.java | 37 ++- .../SparePartOutWarehouseListVo.java | 34 +++ .../SparePartInWarehouseListVo.java | 34 +++ .../entity/SparePartAudit/SparePartAudit.java | 4 +- .../SparePartStockAudit.java | 2 +- .../common/enums/Audit/AuditStateEnum.java | 61 +++++ .../admin-log4j2-ERROR-2024-08-01_1.log.gz | Bin 0 -> 1466 bytes .../admin-log4j2-INFO-2024-08-01_1.log.gz | Bin 0 -> 48414 bytes .../admin-log4j2-WARN-2024-08-01_1.log.gz | Bin 0 -> 2192 bytes 20 files changed, 698 insertions(+), 79 deletions(-) rename admin/src/main/java/com/hcy/admin/controller/{SparePartAudit => sparePartAudit}/SparePartAuditController.java (98%) create mode 100644 admin/src/main/java/com/hcy/admin/controller/sparePartOutWarehouse/SparePartOutWarehouseController.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/ISparePartOutWarehouseService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/SparePartOutWarehouseListVo/SparePartOutWarehouseListVo.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/sparePartInWarehouse/SparePartInWarehouseListVo.java create mode 100644 common/src/main/java/com/hcy/common/enums/Audit/AuditStateEnum.java create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-ERROR-2024-08-01_1.log.gz create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-INFO-2024-08-01_1.log.gz create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-08-01_1.log.gz diff --git a/admin/pom.xml b/admin/pom.xml index ce22c5e..76dbe7e 100644 --- a/admin/pom.xml +++ b/admin/pom.xml @@ -33,6 +33,17 @@ org.quartz-scheduler quartz + + com.alibaba + fastjson + 1.2.83 + + + com.alibaba.fastjson2 + fastjson2 + 2.0.12 + compile + diff --git a/admin/src/main/java/com/hcy/admin/controller/order/CancelOrderConfigController.java b/admin/src/main/java/com/hcy/admin/controller/order/CancelOrderConfigController.java index af919b9..7144a60 100644 --- a/admin/src/main/java/com/hcy/admin/controller/order/CancelOrderConfigController.java +++ b/admin/src/main/java/com/hcy/admin/controller/order/CancelOrderConfigController.java @@ -1,6 +1,6 @@ package com.hcy.admin.controller.order; -import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson.JSON; import com.hcy.admin.config.aop.Log; import com.hcy.admin.service.order.ICancelOrderConfigService; import com.hcy.admin.validate.order.CancelOrderConfigParam; diff --git a/admin/src/main/java/com/hcy/admin/controller/SparePartAudit/SparePartAuditController.java b/admin/src/main/java/com/hcy/admin/controller/sparePartAudit/SparePartAuditController.java similarity index 98% rename from admin/src/main/java/com/hcy/admin/controller/SparePartAudit/SparePartAuditController.java rename to admin/src/main/java/com/hcy/admin/controller/sparePartAudit/SparePartAuditController.java index 2b328d4..d00a847 100644 --- a/admin/src/main/java/com/hcy/admin/controller/SparePartAudit/SparePartAuditController.java +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartAudit/SparePartAuditController.java @@ -1,4 +1,4 @@ -package com.hcy.admin.controller.SparePartAudit; +package com.hcy.admin.controller.sparePartAudit; import com.hcy.admin.config.aop.Log; import com.hcy.admin.service.SparePartAudit.ISparePartAuditService; diff --git a/admin/src/main/java/com/hcy/admin/controller/sparePartInWarehouse/SparePartInWarehouseController.java b/admin/src/main/java/com/hcy/admin/controller/sparePartInWarehouse/SparePartInWarehouseController.java index f574e4b..6fd6c14 100644 --- a/admin/src/main/java/com/hcy/admin/controller/sparePartInWarehouse/SparePartInWarehouseController.java +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartInWarehouse/SparePartInWarehouseController.java @@ -4,6 +4,7 @@ import com.hcy.admin.config.aop.Log; import com.hcy.admin.service.sparePartInWarehouse.ISparePartInWarehouseService; import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePartInWarehouse.SparePartInWarehouseListVo; import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; import com.hcy.common.core.AjaxResult; @@ -36,7 +37,7 @@ public class SparePartInWarehouseController { @GetMapping("/list") public Object list(@Validated PageParam pageParam, @RequestParam Map params) { - PageResult list = iSparePartInWarehouseService.list(pageParam, params); + PageResult list = iSparePartInWarehouseService.list(pageParam, params); return AjaxResult.success(list); } /** @@ -48,7 +49,7 @@ public class SparePartInWarehouseController { */ @GetMapping("/detail") public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) { - SparePartStockAuditDetailVo detail = iSparePartInWarehouseService.detail(id); + SparePartInWarehouseListVo detail = iSparePartInWarehouseService.detail(id); return AjaxResult.success(detail); } @@ -59,7 +60,7 @@ public class SparePartInWarehouseController { * @param sparePartStockAuditParam 参数 * @return Object */ - @Log(title = "备件出入库审核新增") + @Log(title = "备件入库新增") @PostMapping("/add") public Object add(@Validated(value = SparePartStockAuditParam.create.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { iSparePartInWarehouseService.add(sparePartStockAuditParam); @@ -73,7 +74,7 @@ public class SparePartInWarehouseController { * @param sparePartStockAuditParam 参数 * @return Object */ - @Log(title = "备件出入库审核编辑") + @Log(title = "备件入库编辑") @PostMapping("/edit") public Object edit(@Validated(value = SparePartStockAuditParam.update.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { iSparePartInWarehouseService.edit(sparePartStockAuditParam); @@ -87,7 +88,7 @@ public class SparePartInWarehouseController { * @param sparePartStockAuditParam 参数 * @return Object */ - @Log(title = "备件出入库审核删除") + @Log(title = "备件入库删除") @PostMapping("/del") public Object del(@Validated(value = SparePartStockAuditParam.delete.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { iSparePartInWarehouseService.del(Math.toIntExact(sparePartStockAuditParam.getId())); diff --git a/admin/src/main/java/com/hcy/admin/controller/sparePartOutWarehouse/SparePartOutWarehouseController.java b/admin/src/main/java/com/hcy/admin/controller/sparePartOutWarehouse/SparePartOutWarehouseController.java new file mode 100644 index 0000000..7049015 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartOutWarehouse/SparePartOutWarehouseController.java @@ -0,0 +1,98 @@ +package com.hcy.admin.controller.sparePartOutWarehouse; + +import com.hcy.admin.config.aop.Log; +import com.hcy.admin.service.sparePartInWarehouse.ISparePartInWarehouseService; +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.admin.vo.sparePartInWarehouse.SparePartInWarehouseListVo; +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/sparePartOutWarehouse") +public class SparePartOutWarehouseController { + + @Resource + ISparePartOutWarehouseService iSparePartOutWarehouseService; + + /** + * 备件出库列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return Object + */ + @GetMapping("/list") + public Object list(@Validated PageParam pageParam, + @RequestParam Map params) { + PageResult list = iSparePartOutWarehouseService.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 = iSparePartOutWarehouseService.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) { + iSparePartOutWarehouseService.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) { + iSparePartOutWarehouseService.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) { + iSparePartOutWarehouseService.del(Math.toIntExact(sparePartStockAuditParam.getId())); + return AjaxResult.success(); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/service/SparePartAudit/impl/SparePartAuditServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/SparePartAudit/impl/SparePartAuditServiceImpl.java index 9bce19b..676739c 100644 --- a/admin/src/main/java/com/hcy/admin/service/SparePartAudit/impl/SparePartAuditServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/SparePartAudit/impl/SparePartAuditServiceImpl.java @@ -110,6 +110,9 @@ public class SparePartAuditServiceImpl implements ISparePartAuditService { model.setUnit(sparePartAuditParam.getUnit()); model.setQuantity(sparePartAuditParam.getQuantity()); model.setUnitPrice(sparePartAuditParam.getUnitPrice()); + model.setIntCount(sparePartAuditParam.getIntCount()); + model.setOutCount(sparePartAuditParam.getOutCount()); + model.setCreateTime(System.currentTimeMillis() / 1000); sparePartAuditMapper.insert(model); } diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/ISparePartInWarehouseService.java b/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/ISparePartInWarehouseService.java index b112c90..9c31c28 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/ISparePartInWarehouseService.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/ISparePartInWarehouseService.java @@ -2,8 +2,8 @@ package com.hcy.admin.service.sparePartInWarehouse; import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePartInWarehouse.SparePartInWarehouseListVo; import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; -import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; import com.hcy.common.core.PageResult; import java.util.Map; @@ -16,21 +16,21 @@ public interface ISparePartInWarehouseService { /** * 备件入库列表 * - * @author hcy * @param pageParam 分页参数 - * @param params 搜索参数 - * @return PageResult + * @param params 搜索参数 + * @return PageResult + * @author hcy */ - PageResult list(PageParam pageParam, Map params); + PageResult list(PageParam pageParam, Map params); /** * 备件入库详情 * * @author hcy * @param id 主键ID - * @return SparePartStockAudit + * @return SparePartInWarehouseListVo */ - SparePartStockAuditDetailVo detail(Integer id); + SparePartInWarehouseListVo detail(Integer id); /** * 备件入库新增 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 7a44381..9e1e1bf 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 @@ -3,24 +3,30 @@ package com.hcy.admin.service.sparePartInWarehouse.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.sparePartInWarehouse.ISparePartInWarehouseService; import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePartInWarehouse.SparePartInWarehouseListVo; import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; -import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; +import com.hcy.common.constant.GlobalConstant; import com.hcy.common.core.PageResult; import com.hcy.common.entity.SparePartAudit.SparePartAudit; import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; +import com.hcy.common.entity.user.User; +import com.hcy.common.enums.Audit.AuditStateEnum; +import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper; import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; import com.hcy.common.utils.TimeUtil; +import io.lettuce.core.ScriptOutputType; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import javax.annotation.Resource; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; + +import java.text.SimpleDateFormat; +import java.util.*; /** * 备件入库实现类 @@ -31,37 +37,42 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer @Resource SparePartStockAuditMapper sparePartStockAuditMapper; + @Resource + SparePartAuditMapper sparePartAuditMapper; + /** * 备件入库列表 * - * @author hcy * @param pageParam 分页参数 - * @param params 搜索参数 - * @return PageResult + * @param params 搜索参数 + * @return PageResult + * @author hcy */ - @Override - public PageResult list(PageParam pageParam, Map params) { + + public PageResult list(PageParam pageParam, Map params) { Integer page = pageParam.getPageNo(); Integer limit = pageParam.getPageSize(); QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("in_warehouse_type",0); queryWrapper.eq("is_delete", 0); queryWrapper.orderByDesc("id"); sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{ - "=:receiptNumber@receipt_number:str", + "like:receiptNumber@receipt_number:str", "=:warehouseId@warehouse_id:long", - "=:inWarehouseType@in_warehouse_type:long", + "=:outWarehouseType@out_warehouse_type:long", "=:auditState@audit_state:int", }); IPage iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper); - List list = new LinkedList<>(); + List list = new LinkedList<>(); for(SparePartStockAudit item : iPage.getRecords()) { - SparePartStockAuditListVo vo = new SparePartStockAuditListVo(); + SparePartInWarehouseListVo vo = new SparePartInWarehouseListVo(); BeanUtils.copyProperties(item, vo); vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime())); vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime())); + vo.setSupplierPhone(item.getSupplier() + "/" + item.getPhone()); list.add(vo); } @@ -73,10 +84,10 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer * * @author hcy * @param id 主键参数 - * @return SparePartStockAudit + * @return SparePartInWarehouseListVo */ @Override - public SparePartStockAuditDetailVo detail(Integer id) { + public SparePartInWarehouseListVo detail(Integer id) { SparePartStockAudit model = sparePartStockAuditMapper.selectOne( new QueryWrapper() .eq("id", id) @@ -85,8 +96,16 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer Assert.notNull(model, "数据不存在"); - SparePartStockAuditDetailVo vo = new SparePartStockAuditDetailVo(); + SparePartInWarehouseListVo vo = new SparePartInWarehouseListVo(); BeanUtils.copyProperties(model, vo); + + //获取待审核备件信息 + List stockAuditId = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + ); + vo.setSparePartAuditList(stockAuditId); + return vo; } @@ -99,15 +118,42 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer @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.getId() == null){ + model.setId(1L); + }else{ + model.setId(sparePartStockAudit.getId() + 1); + } + model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 入库仓库 model.setInWarehouseType(sparePartStockAuditParam.getInWarehouseType()); //入库类别 model.setSupplier(sparePartStockAuditParam.getSupplier()); //供应商 model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 - model.setSparePartAuditId(sparePartStockAuditParam.getSparePartAuditId()); // 备件审核id - List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); - for (SparePartAudit sparePartAudit : sparePartAuditList) { + model.setReceiptNumber(generateOrderNumber()); // 单据编号 + // 获取当前的用户 + Object username = AdminThreadLocal.get("username"); + model.setResponsiblePerson((String) username); + // 审核状态 + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + //单据类型(0=入库单,1=出库单,2=仓库调拨单) + model.setReceiptType(AuditStateEnum.INWAREHOUSE.getStatus()); + //model.setSparePartAuditId(sparePartStockAuditParam.getSparePartAuditId()); // 备件审核id + List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); + // 使用StringBuilder来拼接id值 + StringBuilder sb = new StringBuilder(); + for (SparePartAudit sparePartAudit : sparePartAuditList) { + sparePartAudit.setStockAuditId(model.getId()); + sparePartAudit.setUpdateTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.updateById(sparePartAudit);//插入备件审核信息 + sb.append(sparePartAudit.getId()).append(","); } + sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号 + model.setSparePartAuditId(String.valueOf(sb));// 备件审核id + model.setCreateTime(System.currentTimeMillis() / 1000); sparePartStockAuditMapper.insert(model); } @@ -126,26 +172,22 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer .last("limit 1")); Assert.notNull(model, "数据不存在!"); - model.setId(sparePartStockAuditParam.getId()); - model.setReceiptNumber(sparePartStockAuditParam.getReceiptNumber()); - model.setReceiptType(sparePartStockAuditParam.getReceiptType()); - model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); - model.setImportWarehouse(sparePartStockAuditParam.getImportWarehouse()); - model.setExportWarehouse(sparePartStockAuditParam.getExportWarehouse()); - model.setInWarehouseType(sparePartStockAuditParam.getInWarehouseType()); - model.setSupplier(sparePartStockAuditParam.getSupplier()); - model.setOutWarehouseType(sparePartStockAuditParam.getOutWarehouseType()); - model.setResponsiblePerson(sparePartStockAuditParam.getResponsiblePerson()); - model.setHandlingTime(sparePartStockAuditParam.getHandlingTime().getTime()); - model.setAllotType(sparePartStockAuditParam.getAllotType()); - model.setConsignee(sparePartStockAuditParam.getConsignee()); - model.setAuditState(sparePartStockAuditParam.getAuditState()); - model.setAuditResult(sparePartStockAuditParam.getAuditResult()); - model.setAuditTime(sparePartStockAuditParam.getAuditTime().getTime()); - model.setAuditIdea(sparePartStockAuditParam.getAuditIdea()); - model.setPhone(sparePartStockAuditParam.getPhone()); - model.setRemark(sparePartStockAuditParam.getRemark()); + model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 入库仓库 + model.setInWarehouseType(sparePartStockAuditParam.getInWarehouseType()); //入库类别 + model.setSupplier(sparePartStockAuditParam.getSupplier()); //供应商 + model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 + model.setReceiptNumber(sparePartStockAuditParam.getReceiptNumber()); // 单据编号 + + List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); + // 使用StringBuilder来拼接id值 + StringBuilder sb = new StringBuilder(); + for (SparePartAudit sparePartAudit : sparePartAuditList) { + sb.append(sparePartAudit.getId()).append(","); + } + sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号 + model.setSparePartAuditId(String.valueOf(sb));// 备件审核id + model.setUpdateTime(System.currentTimeMillis() / 1000); sparePartStockAuditMapper.updateById(model); } @@ -170,4 +212,37 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer 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/sparePartOutWarehouse/ISparePartOutWarehouseService.java b/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/ISparePartOutWarehouseService.java new file mode 100644 index 0000000..4aec94c --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/ISparePartOutWarehouseService.java @@ -0,0 +1,59 @@ +package com.hcy.admin.service.sparePartOutWarehouse; + +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo; +import com.hcy.admin.vo.sparePartInWarehouse.SparePartInWarehouseListVo; +import com.hcy.common.core.PageResult; + +import java.util.Map; + +/** + * 备件入库服务接口类 + */ +public interface ISparePartOutWarehouseService { + + /** + * 备件入库列表 + * + * @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/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java new file mode 100644 index 0000000..6435d98 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartOutWarehouse/impl/SparePartOutWarehouseServiceImpl.java @@ -0,0 +1,246 @@ +package com.hcy.admin.service.sparePartOutWarehouse.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.admin.vo.sparePartInWarehouse.SparePartInWarehouseListVo; +import com.hcy.common.core.PageResult; +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; +import com.hcy.common.enums.Audit.AuditStateEnum; +import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper; +import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; +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.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * 备件出库实现类 + */ +@Service +public class SparePartOutWarehouseServiceImpl implements ISparePartOutWarehouseService { + + @Resource + SparePartStockAuditMapper sparePartStockAuditMapper; + + @Resource + SparePartAuditMapper sparePartAuditMapper; + + /** + * 备件出库列表 + * + * @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("out_warehouse_type",0); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{ + "like:receiptNumber@receipt_number:str", + "=:warehouseId@warehouse_id:long", + "=:outWarehouseType@out_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.setConsigneePhone(item.getConsignee() + "/" + item.getPhone()); + 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); + + //获取待审核备件信息 + List stockAuditId = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + ); + vo.setSparePartAuditList(stockAuditId); // 待入库的备件 + + 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.getId() == null){ + model.setId(1L); + }else{ + model.setId(sparePartStockAudit.getId() + 1); + } + + model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 出库仓库 + model.setOutWarehouseType(sparePartStockAuditParam.getOutWarehouseType()); // 出库类别(0=调拨出库) + model.setConsignee(sparePartStockAuditParam.getConsignee()); // 收货单位(人员) + model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 + model.setReceiptNumber(generateOrderNumber()); // 单据编号 + // 获取当前的用户 + Object username = AdminThreadLocal.get("username"); + model.setResponsiblePerson((String) username); + // 审核状态 + 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.setStockAuditId(model.getId()); + sparePartAudit.setUpdateTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.updateById(sparePartAudit);//插入备件审核信息 + sb.append(sparePartAudit.getId()).append(","); + } + 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.setOutWarehouseType(sparePartStockAuditParam.getOutWarehouseType()); // 出库类别 + model.setConsignee(sparePartStockAuditParam.getConsignee()); // 收货单位(人员) + model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 + model.setReceiptNumber(sparePartStockAuditParam.getReceiptNumber()); // 单据编号 + + List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); + // 使用StringBuilder来拼接id值 + StringBuilder sb = new StringBuilder(); + for (SparePartAudit sparePartAudit : sparePartAuditList) { + sb.append(sparePartAudit.getId()).append(","); + } + 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/validate/SparePartAudit/SparePartAuditParam.java b/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java index f0115f5..03a90ed 100644 --- a/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java +++ b/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java @@ -25,8 +25,6 @@ public class SparePartAuditParam implements Serializable { private Long id; - @NotNull(message = "stockAuditId参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "stockAuditId参数值不能少于0", groups = {create.class, update.class}) private Long stockAuditId; @NotNull(message = "sparePartsCode参数缺失", groups = {create.class, update.class}) @@ -45,9 +43,7 @@ public class SparePartAuditParam implements Serializable { @Length(max = 255, message = "specificationsModel参数不能超出255个字符", groups = {create.class, update.class}) private String specificationsModel; - @NotNull(message = "unit参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "unit参数值不能少于0", groups = {create.class, update.class}) - private Long unit; + private String unit; @NotNull(message = "quantity参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "quantity参数值不能少于0", groups = {create.class, update.class}) @@ -56,4 +52,6 @@ public class SparePartAuditParam implements Serializable { @NotNull(message = "unitPrice参数缺失", groups = {create.class, update.class}) private BigDecimal unitPrice; + private Integer intCount; + private Integer outCount; } 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 667056a..9c4154a 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 @@ -1,6 +1,7 @@ package com.hcy.admin.validate.sparePartStockAudit; import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import io.swagger.models.auth.In; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.hibernate.validator.constraints.Length; @@ -27,70 +28,66 @@ public class SparePartStockAuditParam implements Serializable { private Long id; - @NotNull(message = "receiptNumber参数缺失", groups = {create.class, update.class}) - @Length(max = 255, message = "receiptNumber参数不能超出255个字符", groups = {create.class, update.class}) private String receiptNumber; - @NotNull(message = "receiptType参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "receiptType参数值不能少于0", groups = {create.class, update.class}) - private Long receiptType; + private Integer receiptType; - @NotNull(message = "warehouseId参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "warehouseId参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "warehouseId参数值不能少于0", groups = {create.class, update.class}) private Long warehouseId; - @NotNull(message = "importWarehouse参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "importWarehouse参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "importWarehouse参数值不能少于0", groups = {create.class, update.class}) private Long importWarehouse; - @NotNull(message = "exportWarehouse参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "exportWarehouse参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "exportWarehouse参数值不能少于0", groups = {create.class, update.class}) private Long exportWarehouse; - @NotNull(message = "inWarehouseType参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "inWarehouseType参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "inWarehouseType参数值不能少于0", groups = {create.class, update.class}) private Long inWarehouseType; - @NotNull(message = "supplier参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "supplier参数缺失", groups = {create.class, update.class}) @Length(max = 32, message = "supplier参数不能超出32个字符", groups = {create.class, update.class}) private String supplier; - @NotNull(message = "outWarehouseType参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "outWarehouseType参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "outWarehouseType参数值不能少于0", groups = {create.class, update.class}) private Long outWarehouseType; - @NotNull(message = "responsiblePerson参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "responsiblePerson参数缺失", groups = {create.class, update.class}) @Length(max = 32, message = "responsiblePerson参数不能超出32个字符", groups = {create.class, update.class}) private String responsiblePerson; - @NotNull(message = "handlingTime参数缺失", groups = {create.class, update.class}) + // @NotNull(message = "handlingTime参数缺失", groups = {create.class, update.class}) private Date handlingTime; - @NotNull(message = "allotType参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "allotType参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "allotType参数值不能少于0", groups = {create.class, update.class}) private Long allotType; - @NotNull(message = "consignee参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "consignee参数缺失", groups = {create.class, update.class}) @Length(max = 255, message = "consignee参数不能超出255个字符", groups = {create.class, update.class}) private String consignee; - @NotNull(message = "auditState参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "auditState参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "auditState参数值不能少于0", groups = {create.class, update.class}) private Integer auditState; - @NotNull(message = "auditResult参数缺失", groups = {create.class, update.class}) + //@NotNull(message = "auditResult参数缺失", groups = {create.class, update.class}) @DecimalMin(value = "0", message = "auditResult参数值不能少于0", groups = {create.class, update.class}) private Integer auditResult; private Date auditTime; - @Length(max = 255, message = "auditIdea参数不能超出255个字符", groups = {create.class, update.class}) + //@Length(max = 255, message = "auditIdea参数不能超出255个字符", groups = {create.class, update.class}) private String auditIdea; - @Length(max = 32, message = "phone参数不能超出32个字符", groups = {create.class, update.class}) + //@Length(max = 32, message = "phone参数不能超出32个字符", groups = {create.class, update.class}) private String phone; - @Length(max = 255, message = "remark参数不能超出255个字符", groups = {create.class, update.class}) + //@Length(max = 255, message = "remark参数不能超出255个字符", groups = {create.class, update.class}) private String remark; private String sparePartAuditId; // 备件审核id diff --git a/admin/src/main/java/com/hcy/admin/vo/SparePartOutWarehouseListVo/SparePartOutWarehouseListVo.java b/admin/src/main/java/com/hcy/admin/vo/SparePartOutWarehouseListVo/SparePartOutWarehouseListVo.java new file mode 100644 index 0000000..2ca2a31 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/SparePartOutWarehouseListVo/SparePartOutWarehouseListVo.java @@ -0,0 +1,34 @@ +package com.hcy.admin.vo.SparePartOutWarehouseListVo; + +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * sparePartOutWarehouseListVo + */ +@Data +public class SparePartOutWarehouseListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private String receiptNumber; // 单据编号 + private Long warehouseId; // 所属仓库 + private Long outWarehouseType; // 出库类别(0=调拨出库) + private String consignee; // 收货单位(人员) + private String phone; // 联系电话 + private String responsiblePerson; // 经办人 + private Long 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; //待入库的备件 +} diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePartInWarehouse/SparePartInWarehouseListVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePartInWarehouse/SparePartInWarehouseListVo.java new file mode 100644 index 0000000..d83352c --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartInWarehouse/SparePartInWarehouseListVo.java @@ -0,0 +1,34 @@ +package com.hcy.admin.vo.sparePartInWarehouse; + +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * sparePartInWarehouseListVo + */ +@Data +public class SparePartInWarehouseListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private String receiptNumber; // 单据编号 + private Long warehouseId; // 所属仓库 + private Long inWarehouseType; // 入库类别(0=采购入库) + private String supplier; // 供应商 + private String phone; // 联系电话 + private String responsiblePerson; // 经办人 + private Long 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 supplierPhone; // 供应商/电话 + private List sparePartAuditList; //待入库的备件 +} diff --git a/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java b/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java index 41ea6ec..8a206c7 100644 --- a/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java +++ b/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java @@ -22,12 +22,14 @@ public class SparePartAudit implements Serializable { private String sparePartsName; // 备件名称 private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 - private Long unit; // 单位 + private String unit; // 单位 private Long quantity; // 库存数量 private BigDecimal unitPrice; // 单价(元) private Integer isDelete; // 是否删除: [0=否, 1=是] private Long createTime; // 创建时间 private Long updateTime; // 更新时间 private Long deleteTime; // 删除时间 + private Integer intCount; // 入库数量 + private Integer OutCount; // 出库数量 } \ No newline at end of file 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 dcaa82b..d3350ff 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 @@ -17,7 +17,7 @@ public class SparePartStockAudit implements Serializable { @TableId(value="id", type= IdType.AUTO) private Long id; // 主键id private String receiptNumber; // 单据编号 - private Long receiptType; // 单据类型(0=入库单,1=出库单,2=仓库调拨单) + private Integer receiptType; // 单据类型(0=入库单,1=出库单,2=仓库调拨单) private Long warehouseId; // 所属仓库 private Long importWarehouse; // 调入仓库 private Long exportWarehouse; // 调出仓库 diff --git a/common/src/main/java/com/hcy/common/enums/Audit/AuditStateEnum.java b/common/src/main/java/com/hcy/common/enums/Audit/AuditStateEnum.java new file mode 100644 index 0000000..49b1e30 --- /dev/null +++ b/common/src/main/java/com/hcy/common/enums/Audit/AuditStateEnum.java @@ -0,0 +1,61 @@ +package com.hcy.common.enums.Audit; + +import com.google.common.collect.Maps; +import com.hcy.common.enums.coupon.UserCouponStatusEnum; + +import java.util.Map; + +/** + * 审核状态 + * @author dabin + */ + +public enum AuditStateEnum { + UNREVIEWED(0, "未审核"), + AUDITED(1, "已审核"), + + CANCELED(2,"已取消"), + NOTPASS(0,"未通过"), + ALREADYPASSED(1, "已通过"), + + // 单据类型(0=入库单,1=出库单,2=仓库调拨单) + INWAREHOUSE(0,"入库单"), + OUTWAREHOUSE(1, "出库单"), + ALLOT(2,"仓库调拨单"); + + private final int status; + private final String desc; + + AuditStateEnum(int status, String desc) { + this.status = status; + this.desc = desc; + } + + /** + * 获取状态码 + * + * @return int + * @author dabin + */ + public int getStatus() { + return this.status; + } + + /** + * 获取提示 + * + * @return String + * @author dabin + */ + public String getDesc() { + return this.desc; + } + + public static Map getMap() { + Map map = Maps.newHashMap(); + for (AuditStateEnum auditStateEnum : AuditStateEnum.values()) { + map.put(auditStateEnum.status, auditStateEnum.desc); + } + return map; + } +} diff --git a/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-ERROR-2024-08-01_1.log.gz b/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-ERROR-2024-08-01_1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..62582e088801fa2174cd59d8840cf9d57f219889 GIT binary patch literal 1466 zcmV;r1x5NFiwFP!000000PR}KZW}igT{l4fVHRE}K*efC50BiUfh-%Tg4l7a1X%<@ zKyfH(;t?s69NWsGi|$(V3%bjyzYrk#oTlimztBr^tQkGy*s*H_+z8@h&bcHn?}NC0 zZOgB1)qNBOHSfi7iiLX9B|{pe2^FuNb8$pPx&G4IJv@AT=n+0bLoz`)8pR9|&ie5H z*^dxCBQ#YpXQ365zdjbmc?j>%R$y1K*!)bQ*k0QObb~m4jA})MWd4hOG)K- z)4ljI;6eD=;JNBdRc7~$65ADV`=6GU3>rqib_K=-WrZVEtya6u7F zKTKJ7NRtGKl$DBYyG@ng-uZY2Vu9>-3l+Akennc-|Fg%J$D>{k6Va%Ra_J5f`4I9N=K%iMyEvYz(!ORlDnZi9} z{2!RDejj!9Z`<~7Z0xcjW`v6EN!M_+A3W-8Z*26#uou)TRfJQ;yOc$bMMQ-x{V+HW z6@Od|7!X2U(;I>Bo^gz~!6oV4d4tc+z`6|$G#YF7ZfT6C&nyt&0LoORQej4RAVyiw z$rA{)rAA-cg(A!yWHsNg~c z7b>_=!G#L9G*r-%jV3x)Fiv2a*-F!{p}h&j5c{014~e7b-?iJ20ZRqEfO`J*zm&-$m>HsCzl97|Jo(LOgnlGLpoURG_X~KYJ9C=`$b3@H4x5Xz9)tVf zqgpe&5Bl#K4seA_(5u$|Tm>BzcvlEmxAkMXISn?aV}`70P4CT+h1Po95Lvi+gJcc= zs${v9F_%CM1wYOE+QyFL^mDT_H)`Gb7nFhwDLJy-D=0UwyvuXAlB#{Gw9Cr!q@~35 zTBCL;;w3qaPFl9Hq)Vu$Lzc90$-Ha|6U%%ttptqk9D{G8-0RHC!fVehUFPR9KbQHr z%+Fi_@% literal 0 HcmV?d00001 diff --git a/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-INFO-2024-08-01_1.log.gz b/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-INFO-2024-08-01_1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..dc94acb00c7d6905a123dcff52b98298b3e52ad4 GIT binary patch literal 48414 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.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 z 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 literal 0 HcmV?d00001 diff --git a/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-08-01_1.log.gz b/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-08-01_1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..92ddeb385716e4a76908c488c830986d7c445d0d GIT binary patch literal 2192 zcmV;B2ygcviwFP!000000PS4MZX-7qT~7o34_p{%H4t&?{hCL{Ry&DBRhunC%GWQLJzVb}4{aZXb92EE=sIzTAqIqngjrwJe9eA**rDn{8@;FuQ_r|d0_ zOJ3mZo+t|vm;1CF@&vWfvHWltPoZC)bB1#=8qop^T1?WIZWol`?&A0UtTh91JJY@7 z4f>1-)T5N4jFW^Ws5eD_-G7OAfx7Rq!-7xJgckB~Un%uWpl!x@3BNh}2nmkT0pmr= z2B;jS0x4CY4fWxp<2WNitUJ2A8kGQz=lVT;Vw#a(43fx@fT1O|8I=a50O>=G2be+g{ zupK&@v-LT1BiF>151hRK+w4}R_*r^FinMcxhI}mO38gTyCY#@ovojd$u3(FpIIt|u+4`J?kpsDc;cL#;VMuuOFPZcK{un=T}}$vC6M*ROeTLW{P0 zO~{wQeuoHpRlxs*q!|pp&G=VNMVP^G6q|kgS-evf0(u?uuFLpXkXWsl5uNRtu z2Pt~%fFlkBSKJ6hvW%aCRMIbj!lt~83!32P7#(sU(q1-|t)gOjEF_f#i6JlKXE`~0 znf7U!=2Yr7ruZBs&MHcFkB+`LLNf~?NuDyS>Hw@h!t^YrW2w{Jvc9YuKIc7P<=;R3 z^!}gU|K}h7`tSGOzW@2}?|=O9e?Ncs^vPQ?Avhy!0Hse~&J^Bb6Rs+aSELxwau>vo zsi}I7{&xIv z^zoa^l3swV3;>!9&Wqa1N7+o)%06;5kz*?apcETl+o4$_T^_2EFq2$ADH&m~T*#^k z*sJ7xRi>G!Wh#-aWdL=VRTI($ZK<`XUQ`eld(?C7+gIUq2oxOBO-B`+7)jULFGx;LK{kfLGeIgh zgF8ez>JEr5>8r*2#^UVoah4$HB;6K6(y^h1W2-!PL*O3}qe50abS43T!>^Wz^o`vw zUsfn7W#vLh18u42ZNPyrsS3zTGt$fGN2s9h#sG<=_e&5Tm$ff-&AfiQa|5ZtyOb= z#CS9UCqK95!;F+bdAQ8}52&be+^C3&Ht*w3#^eoq~F&USUR6(Z-I#tlAf=(44X{vBxYj0lJ zit5?H`%}mv4mew#M%--Q@A4+r0g)C6qQU)*hDm1z4ZqGHuoC9jUS0b$|w)`$wgxn;&fOtTeiV^FtHQX>p}ipfdQd#iF8}}pSws01KuqP7`KXJ@^PMQ&f6-mP`TcR z0SlD(cp$LAe?TzLyertk%T$Y?92Wd^@vc+(kp=vP-gOvNVf`Mph=(*jQP@{N`gdme zf?Pq%16sYl(T7R& zVG@0qgd-Q|w$!*CiK9K!w348cQQ0*eiO SYwo&f!~X$VEuchVUjP6Uz%$4I literal 0 HcmV?d00001