From af1f20052bc88c0c8004dccd8e06382eb2ffcff6 Mon Sep 17 00:00:00 2001 From: renfan <2206580733@qq.com> Date: Thu, 1 Aug 2024 18:56:05 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90admin=E3=80=91=E6=96=B0=E5=A2=9E#?= =?UTF-8?q?=E5=87=BA=E5=85=A5=E5=BA=93=E5=AE=A1=E6=A0=B8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SparePartAuditController.java | 97 +++++++++ .../hcy/admin/controller/WxPayController.java | 164 --------------- .../SparePartInWarehouseController.java | 97 +++++++++ .../SparePartStockAuditController.java | 97 +++++++++ .../warehouse/WarehouseController.java | 18 +- .../ISparePartAuditService.java | 59 ++++++ .../impl/SparePartAuditServiceImpl.java | 165 +++++++++++++++ .../sparePart/impl/SparePartServiceImpl.java | 26 ++- .../ISparePartInWarehouseService.java | 59 ++++++ .../impl/SparePartInWarehouseServiceImpl.java | 173 ++++++++++++++++ .../ISparePartStockAuditService.java | 59 ++++++ .../impl/SparePartStockAuditServiceImpl.java | 195 ++++++++++++++++++ .../service/warehouse/IWarehouseService.java | 3 + .../warehouse/impl/WarehouseServiceImpl.java | 89 +++++++- .../SparePartAudit/SparePartAuditParam.java | 59 ++++++ .../validate/sparePart/SparePartParam.java | 6 +- .../SparePartStockAuditParam.java | 99 +++++++++ .../SparePartAuditDetailVo.java | 26 +++ .../SparePartAudit/SparePartAuditListVo.java | 28 +++ .../admin/vo/sparePart/SparePartDetailVo.java | 2 +- .../admin/vo/sparePart/SparePartListVo.java | 6 +- .../SparePartStockAuditDetailVo.java | 35 ++++ .../SparePartStockAuditListVo.java | 35 ++++ .../admin/vo/warehouse/WarehouseDetailVo.java | 2 + .../admin/vo/warehouse/WarehouseListVo.java | 3 +- .../hcy/admin/vo/warehouse/WarehouseVo.java | 28 +++ common/pom.xml | 1 + .../entity/SparePartAudit/SparePartAudit.java | 33 +++ .../common/entity/sparePart/SparePart.java | 2 +- .../SparePartStockAudit.java | 42 ++++ .../SparePartAudit/SparePartAuditMapper.java | 13 ++ .../SparePartStockAuditMapper.java | 13 ++ .../admin-log4j2-ERROR-2024-07-30_1.log.gz | Bin 0 -> 1772 bytes .../admin-log4j2-ERROR-2024-07-31_1.log.gz | Bin 0 -> 1548 bytes .../admin-log4j2-INFO-2024-07-30_1.log.gz | Bin 0 -> 41990 bytes .../admin-log4j2-INFO-2024-07-31_1.log.gz | Bin 0 -> 52001 bytes .../admin-log4j2-WARN-2024-07-30_1.log.gz | Bin 0 -> 2246 bytes .../admin-log4j2-WARN-2024-07-31_1.log.gz | Bin 0 -> 2213 bytes 38 files changed, 1555 insertions(+), 179 deletions(-) create mode 100644 admin/src/main/java/com/hcy/admin/controller/SparePartAudit/SparePartAuditController.java delete mode 100644 admin/src/main/java/com/hcy/admin/controller/WxPayController.java create mode 100644 admin/src/main/java/com/hcy/admin/controller/sparePartInWarehouse/SparePartInWarehouseController.java create mode 100644 admin/src/main/java/com/hcy/admin/controller/sparePartStockAudit/SparePartStockAuditController.java create mode 100644 admin/src/main/java/com/hcy/admin/service/SparePartAudit/ISparePartAuditService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/SparePartAudit/impl/SparePartAuditServiceImpl.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/ISparePartInWarehouseService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/ISparePartStockAuditService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java create mode 100644 admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java create mode 100644 admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditDetailVo.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditDetailVo.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditListVo.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseVo.java create mode 100644 common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java create mode 100644 common/src/main/java/com/hcy/common/entity/sparePartStockAudit/SparePartStockAudit.java create mode 100644 common/src/main/java/com/hcy/common/mapper/SparePartAudit/SparePartAuditMapper.java create mode 100644 common/src/main/java/com/hcy/common/mapper/sparePartStockAudit/SparePartStockAuditMapper.java create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-ERROR-2024-07-30_1.log.gz create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-ERROR-2024-07-31_1.log.gz create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-INFO-2024-07-30_1.log.gz create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-INFO-2024-07-31_1.log.gz create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-07-30_1.log.gz create mode 100644 www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-07-31_1.log.gz 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 new file mode 100644 index 0000000..2b328d4 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/controller/SparePartAudit/SparePartAuditController.java @@ -0,0 +1,97 @@ +package com.hcy.admin.controller.SparePartAudit; + +import com.hcy.admin.config.aop.Log; +import com.hcy.admin.service.SparePartAudit.ISparePartAuditService; +import com.hcy.admin.validate.SparePartAudit.SparePartAuditParam; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditDetailVo; +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/SparePartAudit") +public class SparePartAuditController { + + @Resource + ISparePartAuditService iSparePartAuditService; + + /** + * 备件审核列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return Object + */ + @GetMapping("/list") + public Object list(@Validated PageParam pageParam, + @RequestParam Map params) { + PageResult list = iSparePartAuditService.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) { + SparePartAuditDetailVo detail = iSparePartAuditService.detail(id); + return AjaxResult.success(detail); + } + + /** + * 备件审核新增 + * + * @author hcy + * @param sparePartAuditParam 参数 + * @return Object + */ + @Log(title = "备件审核新增") + @PostMapping("/add") + public Object add(@Validated(value = SparePartAuditParam.create.class) @RequestBody SparePartAuditParam sparePartAuditParam) { + iSparePartAuditService.add(sparePartAuditParam); + return AjaxResult.success(); + } + + /** + * 备件审核编辑 + * + * @author hcy + * @param sparePartAuditParam 参数 + * @return Object + */ + @Log(title = "备件审核编辑") + @PostMapping("/edit") + public Object edit(@Validated(value = SparePartAuditParam.update.class) @RequestBody SparePartAuditParam sparePartAuditParam) { + iSparePartAuditService.edit(sparePartAuditParam); + return AjaxResult.success(); + } + + /** + * 备件审核删除 + * + * @author hcy + * @param sparePartAuditParam 参数 + * @return Object + */ + @Log(title = "备件审核删除") + @PostMapping("/del") + public Object del(@Validated(value = SparePartAuditParam.delete.class) @RequestBody SparePartAuditParam sparePartAuditParam) { + iSparePartAuditService.del(Math.toIntExact(sparePartAuditParam.getId())); + return AjaxResult.success(); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/controller/WxPayController.java b/admin/src/main/java/com/hcy/admin/controller/WxPayController.java deleted file mode 100644 index 33cf986..0000000 --- a/admin/src/main/java/com/hcy/admin/controller/WxPayController.java +++ /dev/null @@ -1,164 +0,0 @@ -package com.hcy.admin.controller; - -import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; -import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; -import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult; -import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult; -import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryV3Result; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.hcy.admin.service.order.IOrderService; -import com.hcy.admin.service.refund.IOrderRefundService; -import com.hcy.common.entity.order.Order; -import com.hcy.common.utils.WxPayServiceUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; - -/** - * @author panweiliang - */ -@Slf4j -@RestController -@RequestMapping("/api/pay/wx") -public class WxPayController { - - @Resource - private IOrderService orderService; - - @Resource - private IOrderRefundService refundService; - - /** - *
-     * 查询订单(详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2)
-     * 该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
-     * 需要调用查询接口的情况:
-     * ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
-     * ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
-     * ◆ 调用被扫支付API,返回USERPAYING的状态;
-     * ◆ 调用关单或撤销接口API之前,需确认支付状态;
-     * 接口地址:https://api.mch.weixin.qq.com/pay/orderquery
-     * 
- *

- * 查询订单支付信息 - * - * @param transactionId 微信订单号 - * @param outTradeNo 商户系统内部的订单号,当没提供transactionId时需要传这个。 - */ - @GetMapping("/queryOrder") - public WxPayOrderQueryV3Result queryOrder(@RequestParam(required = false) String transactionId, - @RequestParam(required = false) String outTradeNo) - throws WxPayException { - Order order = orderService.getBySn(outTradeNo); - return WxPayServiceUtils.wxPayService(order.getPayChannel()).queryOrderV3(transactionId, outTradeNo); - } - - /*@PostMapping("/queryOrder") - public WxPayOrderQueryV3Result queryOrder(@RequestBody WxPayOrderQueryV3Request wxPayOrderQueryV3Request) throws WxPayException { - return this.wxService.queryOrderV3(wxPayOrderQueryV3Request); - }*/ - - /** - *

-     * 关闭订单
-     * 应用场景
-     * 以下情况需要调用关单接口:
-     * 1. 商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;
-     * 2. 系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
-     * 注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
-     * 接口地址:https://api.mch.weixin.qq.com/pay/closeorder
-     * 是否需要证书:   不需要。
-     * 
- * - * @param outTradeNo 商户系统内部的订单号 - * 关闭订单 - */ - @GetMapping("/closeOrder") - public void closeOrder(@RequestParam("outTradeNo") String outTradeNo) throws Exception { - Order order = orderService.getBySn(outTradeNo); - WxPayServiceUtils.wxPayService(order.getPayChannel()).closeOrderV3(outTradeNo); - } - - /* //关闭订单 - @Deprecated - @PostMapping("/closeOrder") - public void closeOrder(@RequestBody WxPayOrderCloseRequest wxPayOrderCloseRequest) throws WxPayException { - this.wxService.closeOrder(wxPayOrderCloseRequest); - }*/ - - /* *//** - *
-     * 微信支付-申请退款
-     * 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
-     * 接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
-     * 
- * - * @param request 请求对象 - * @return 退款操作结果 - *//* - @PostMapping("/refund") - public WxPayRefundV3Result refund(@RequestBody WxPayRefundV3Request request) throws WxPayException { - return this.wxService.refundV3(request); - }*/ - - /* */ - - /** - *
-     * 微信支付-查询退款
-     * 应用场景:
-     *  提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,
-     *  银行卡支付的退款3个工作日后重新查询退款状态。
-     * 详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
-     * 接口链接:https://api.mch.weixin.qq.com/pay/refundquery
-     * 
- * 以下四个参数四选一 - * - * @param outRefundNo 商户退款单号 - * @return 退款信息 - *//* - @GetMapping("/refundQuery") - public WxPayRefundQueryV3Result refundQuery(@RequestParam(required = false) String outRefundNo) - throws WxPayException { - return this.wxService.refundQueryV3(outRefundNo); - }*/ - - /* @PostMapping("/refundQuery") - public WxPayRefundQueryResult refundQuery(@RequestBody WxPayRefundQueryRequest wxPayRefundQueryRequest) throws WxPayException { - return this.wxService.refundQuery(wxPayRefundQueryRequest); - }*/ - - // 支付回调通知处理 - @PostMapping("/notify/order") - public String parseOrderNotifyResult(@RequestBody String xmlData) throws Exception { - log.info("支付回调通知处理,原生xml数据,xmlData:{}", xmlData); - - final WxPayOrderNotifyResult notifyResult = WxPayServiceUtils.wxPayService(null).parseOrderNotifyResult(xmlData); - log.info("支付回调通知处理,解析后数据,parseOrderNotifyResult:{}", notifyResult); - String transactionId = notifyResult.getTransactionId(); - String outTradeNo = notifyResult.getOutTradeNo(); - boolean flag = this.orderService.updateOrderStatusToPaid(outTradeNo, transactionId); - return flag ? WxPayNotifyResponse.success("成功") : WxPayNotifyResponse.fail("失败"); - } - - // 退款回调通知处理 - @PostMapping("/notify/refund") - public String parseRefundNotifyResult(@RequestBody String xmlData) throws WxPayException { - log.info("退款回调通知处理原生数据,xmlData:{}", xmlData); - final WxPayRefundNotifyResult result = WxPayServiceUtils.wxPayService(null).parseRefundNotifyResult(xmlData); - log.info("退款回调通知处理,parseRefundNotifyResult:{}", result); - boolean flag = refundService.updateOrderStatusToPaid(result.getReqInfo()); - return flag ? WxPayNotifyResponse.success("成功") : WxPayNotifyResponse.fail("失败"); - } - - // 扫码支付回调通知处理 - @PostMapping("/notify/scanpay") - public String parseScanPayNotifyResult(String xmlData) throws WxPayException { - final WxScanPayNotifyResult result = WxPayServiceUtils.wxPayService(null).parseScanPayNotifyResult(xmlData); - // TODO 根据自己业务场景需要构造返回对象 - return WxPayNotifyResponse.success("成功"); - } - -} - 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 new file mode 100644 index 0000000..f574e4b --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartInWarehouse/SparePartInWarehouseController.java @@ -0,0 +1,97 @@ +package com.hcy.admin.controller.sparePartInWarehouse; + +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.sparePartStockAudit.SparePartStockAuditDetailVo; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; +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/sparePartInWarehouse") +public class SparePartInWarehouseController { + + @Resource + ISparePartInWarehouseService iSparePartInWarehouseService; + + /** + * 备件入库列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return Object + */ + @GetMapping("/list") + public Object list(@Validated PageParam pageParam, + @RequestParam Map params) { + PageResult list = iSparePartInWarehouseService.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) { + SparePartStockAuditDetailVo detail = iSparePartInWarehouseService.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) { + iSparePartInWarehouseService.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) { + iSparePartInWarehouseService.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) { + iSparePartInWarehouseService.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 new file mode 100644 index 0000000..b0a8d43 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartStockAudit/SparePartStockAuditController.java @@ -0,0 +1,97 @@ +package com.hcy.admin.controller.sparePartStockAudit; + +import com.hcy.admin.config.aop.Log; +import com.hcy.admin.service.sparePartStockAudit.ISparePartStockAuditService; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; +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/sparePartStockAudit") +public class SparePartStockAuditController { + + @Resource + ISparePartStockAuditService iSparePartStockAuditService; + + /** + * 备件出入库审核列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return Object + */ + @GetMapping("/list") + public Object list(@Validated PageParam pageParam, + @RequestParam Map params) { + PageResult list = iSparePartStockAuditService.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) { + SparePartStockAuditDetailVo detail = iSparePartStockAuditService.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) { + iSparePartStockAuditService.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) { + iSparePartStockAuditService.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) { + iSparePartStockAuditService.del(Math.toIntExact(sparePartStockAuditParam.getId())); + return AjaxResult.success(); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/controller/warehouse/WarehouseController.java b/admin/src/main/java/com/hcy/admin/controller/warehouse/WarehouseController.java index 1059039..e223003 100644 --- a/admin/src/main/java/com/hcy/admin/controller/warehouse/WarehouseController.java +++ b/admin/src/main/java/com/hcy/admin/controller/warehouse/WarehouseController.java @@ -3,9 +3,14 @@ package com.hcy.admin.controller.warehouse; import com.alibaba.fastjson.JSONArray; import com.hcy.admin.config.aop.Log; import com.hcy.admin.service.warehouse.IWarehouseService; +import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.warehouse.WarehouseParam; +import com.hcy.admin.vo.sparePart.SparePartListVo; import com.hcy.admin.vo.warehouse.WarehouseDetailVo; +import com.hcy.admin.vo.warehouse.WarehouseListVo; +import com.hcy.admin.vo.warehouse.WarehouseVo; 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.*; @@ -31,7 +36,8 @@ public class WarehouseController { * @return Object */ @GetMapping("/list") - public Object list(@RequestParam Map params) { + public Object list(@Validated PageParam pageParam, + @RequestParam Map params) { JSONArray list = iWarehouseService.list(params); return AjaxResult.success(list); } @@ -90,4 +96,14 @@ public class WarehouseController { return AjaxResult.success(); } + //新增接口:传入仓库id时,查询仓库下的所有子仓库及子仓库的内容 + /** + * 传入仓库id时,查询仓库下的所有子仓库及子仓库的内容 + */ + @GetMapping("/selectWarehouseData") + public Object selectSubcolumnData(WarehouseVo warehouseVo) { + WarehouseVo warehouseVo1 = iWarehouseService.selectWarehouseData(warehouseVo); + return AjaxResult.success(warehouseVo1); + } + } diff --git a/admin/src/main/java/com/hcy/admin/service/SparePartAudit/ISparePartAuditService.java b/admin/src/main/java/com/hcy/admin/service/SparePartAudit/ISparePartAuditService.java new file mode 100644 index 0000000..86b8695 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/SparePartAudit/ISparePartAuditService.java @@ -0,0 +1,59 @@ +package com.hcy.admin.service.SparePartAudit; + +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.SparePartAudit.SparePartAuditParam; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditDetailVo; +import com.hcy.common.core.PageResult; + +import java.util.Map; + +/** + * 备件审核服务接口类 + */ +public interface ISparePartAuditService { + + /** + * 备件审核列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + PageResult list(PageParam pageParam, Map params); + + /** + * 备件审核详情 + * + * @author hcy + * @param id 主键ID + * @return SparePartAudit + */ + SparePartAuditDetailVo detail(Integer id); + + /** + * 备件审核新增 + * + * @author hcy + * @param sparePartAuditParam 参数 + */ + void add(SparePartAuditParam sparePartAuditParam); + + /** + * 备件审核编辑 + * + * @author hcy + * @param sparePartAuditParam 参数 + */ + void edit(SparePartAuditParam sparePartAuditParam); + + /** + * 备件审核删除 + * + * @author hcy + * @param id 主键ID + */ + void del(Integer id); + +} 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 new file mode 100644 index 0000000..9bce19b --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/SparePartAudit/impl/SparePartAuditServiceImpl.java @@ -0,0 +1,165 @@ +package com.hcy.admin.service.SparePartAudit.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.github.yulichang.query.MPJQueryWrapper; +import com.hcy.admin.service.SparePartAudit.ISparePartAuditService; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.SparePartAudit.SparePartAuditParam; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditDetailVo; +import com.hcy.common.core.PageResult; +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper; +import com.hcy.common.utils.ArrayUtil; +import com.hcy.common.utils.TimeUtil; +import com.hcy.common.utils.UrlUtil; +import com.hcy.common.config.GlobalConfig; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.util.*; + +/** + * 备件审核实现类 + */ +@Service +public class SparePartAuditServiceImpl implements ISparePartAuditService { + + @Resource + SparePartAuditMapper sparePartAuditMapper; + + /** + * 备件审核列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageParam pageParam, Map params) { + Integer page = pageParam.getPageNo(); + Integer limit = pageParam.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + sparePartAuditMapper.setSearch(queryWrapper, params, new String[]{ + "=:stockAuditId@stock_audit_id:long", + "=:sparePartsCode@spare_parts_code:str", + "like:sparePartsName@spare_parts_name:str", + "=:warehouseId@warehouse_id:long", + "=:specificationsModel@specifications_model:str", + }); + + IPage iPage = sparePartAuditMapper.selectPage(new Page<>(page, limit), queryWrapper); + + List list = new LinkedList<>(); + for(SparePartAudit item : iPage.getRecords()) { + SparePartAuditListVo vo = new SparePartAuditListVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime())); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 备件审核详情 + * + * @author hcy + * @param id 主键参数 + * @return SparePartAudit + */ + @Override + public SparePartAuditDetailVo detail(Integer id) { + SparePartAudit model = sparePartAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + SparePartAuditDetailVo vo = new SparePartAuditDetailVo(); + BeanUtils.copyProperties(model, vo); + return vo; + } + + /** + * 备件审核新增 + * + * @author hcy + * @param sparePartAuditParam 参数 + */ + @Override + public void add(SparePartAuditParam sparePartAuditParam) { + SparePartAudit model = new SparePartAudit(); + model.setStockAuditId(sparePartAuditParam.getStockAuditId()); + model.setSparePartsCode(sparePartAuditParam.getSparePartsCode()); + model.setSparePartsName(sparePartAuditParam.getSparePartsName()); + model.setWarehouseId(sparePartAuditParam.getWarehouseId()); + model.setSpecificationsModel(sparePartAuditParam.getSpecificationsModel()); + model.setUnit(sparePartAuditParam.getUnit()); + model.setQuantity(sparePartAuditParam.getQuantity()); + model.setUnitPrice(sparePartAuditParam.getUnitPrice()); + sparePartAuditMapper.insert(model); + } + + /** + * 备件审核编辑 + * + * @author hcy + * @param sparePartAuditParam 参数 + */ + @Override + public void edit(SparePartAuditParam sparePartAuditParam) { + SparePartAudit model = sparePartAuditMapper.selectOne( + new QueryWrapper() + .eq("id", sparePartAuditParam.getId()) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setId(sparePartAuditParam.getId()); + model.setStockAuditId(sparePartAuditParam.getStockAuditId()); + model.setSparePartsCode(sparePartAuditParam.getSparePartsCode()); + model.setSparePartsName(sparePartAuditParam.getSparePartsName()); + model.setWarehouseId(sparePartAuditParam.getWarehouseId()); + model.setSpecificationsModel(sparePartAuditParam.getSpecificationsModel()); + model.setUnit(sparePartAuditParam.getUnit()); + model.setQuantity(sparePartAuditParam.getQuantity()); + model.setUnitPrice(sparePartAuditParam.getUnitPrice()); + sparePartAuditMapper.updateById(model); + } + + /** + * 备件审核删除 + * + * @author hcy + * @param id 主键ID + */ + @Override + public void del(Integer id) { + SparePartAudit model = sparePartAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1); + model.setDeleteTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.updateById(model); + } + +} 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 498935e..0edca17 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 @@ -10,9 +10,11 @@ import com.hcy.admin.vo.sparePart.SparePartListVo; import com.hcy.admin.vo.sparePart.SparePartDetailVo; import com.hcy.common.constant.GlobalConstant; import com.hcy.common.core.PageResult; +import com.hcy.common.dto.UserDto; import com.hcy.common.entity.activity.Activity; import com.hcy.common.entity.sparePart.SparePart; import com.hcy.common.mapper.sparePart.SparePartMapper; +import com.hcy.common.utils.StringUtil; import com.hcy.common.utils.TimeUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -44,14 +46,28 @@ public class SparePartServiceImpl implements ISparePartService { Integer page = pageParam.getPageNo(); Integer limit = pageParam.getPageSize(); + // 取得查询页的条件 + SparePartListVo pageDto = new SparePartListVo(); + /*if (StringUtil.isNotEmpty(params.get("likeWork"))) { + pageDto.setLikeWork(params.get("likeWork")); + }*/ + QueryWrapper queryWrapper = new QueryWrapper<>(); + // 取得查询页的条件 + if (StringUtil.isNotEmpty(params.get("likeWork"))) { + pageDto.setLikeWork(params.get("likeWork")); + queryWrapper.like("spare_parts_code", pageDto.getLikeWork()); + queryWrapper.or(); + queryWrapper.like("spare_parts_name", pageDto.getLikeWork()); + } + queryWrapper.eq("is_delete", 0); queryWrapper.orderByDesc("id"); sparePartMapper.setSearch(queryWrapper, params, new String[]{ - "=:sparePartsCode@spare_parts_code:str", - "like:sparePartsName@spare_parts_name:str", - "=:owningWarehouse@owning_warehouse:long", + /*"=:sparePartsCode@spare_parts_code:str", + "like:sparePartsName@spare_parts_name:str",*/ + "=:warehouseId@warehouse_id:long", "=:specificationsModel@specifications_model:str", "=:unit:str", "=:quantity:long", @@ -104,7 +120,7 @@ public class SparePartServiceImpl implements ISparePartService { SparePart model = new SparePart(); model.setSparePartsCode(sparePartParam.getSparePartsCode()); model.setSparePartsName(sparePartParam.getSparePartsName()); - model.setOwningWarehouse(sparePartParam.getOwningWarehouse()); + model.setWarehouseId(sparePartParam.getWarehouseId()); model.setSpecificationsModel(sparePartParam.getSpecificationsModel()); model.setUnit(sparePartParam.getUnit()); model.setQuantity(sparePartParam.getQuantity()); @@ -132,7 +148,7 @@ public class SparePartServiceImpl implements ISparePartService { model.setId(sparePartParam.getId()); model.setSparePartsCode(sparePartParam.getSparePartsCode()); model.setSparePartsName(sparePartParam.getSparePartsName()); - model.setOwningWarehouse(sparePartParam.getOwningWarehouse()); + model.setWarehouseId(sparePartParam.getWarehouseId()); model.setSpecificationsModel(sparePartParam.getSpecificationsModel()); model.setUnit(sparePartParam.getUnit()); model.setQuantity(sparePartParam.getQuantity()); 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 new file mode 100644 index 0000000..b112c90 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/ISparePartInWarehouseService.java @@ -0,0 +1,59 @@ +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.sparePartStockAudit.SparePartStockAuditDetailVo; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; +import com.hcy.common.core.PageResult; + +import java.util.Map; + +/** + * 备件入库服务接口类 + */ +public interface ISparePartInWarehouseService { + + /** + * 备件入库列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + PageResult list(PageParam pageParam, Map params); + + /** + * 备件入库详情 + * + * @author hcy + * @param id 主键ID + * @return SparePartStockAudit + */ + SparePartStockAuditDetailVo 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/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java new file mode 100644 index 0000000..7a44381 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartInWarehouse/impl/SparePartInWarehouseServiceImpl.java @@ -0,0 +1,173 @@ +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.service.sparePartInWarehouse.ISparePartInWarehouseService; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; +import com.hcy.common.core.PageResult; +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; +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.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * 备件入库实现类 + */ +@Service +public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseService { + + @Resource + SparePartStockAuditMapper sparePartStockAuditMapper; + + /** + * 备件入库列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageParam pageParam, Map params) { + Integer page = pageParam.getPageNo(); + Integer limit = pageParam.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{ + "=:receiptNumber@receipt_number:str", + "=:warehouseId@warehouse_id:long", + "=:inWarehouseType@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()) { + SparePartStockAuditListVo vo = new SparePartStockAuditListVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime())); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 备件入库详情 + * + * @author hcy + * @param id 主键参数 + * @return SparePartStockAudit + */ + @Override + public SparePartStockAuditDetailVo detail(Integer id) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + SparePartStockAuditDetailVo vo = new SparePartStockAuditDetailVo(); + BeanUtils.copyProperties(model, vo); + return vo; + } + + /** + * 备件入库新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + @Override + public void add(SparePartStockAuditParam sparePartStockAuditParam) { + SparePartStockAudit model = new SparePartStockAudit(); + 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) { + + } + 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.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()); + 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); + } + +} 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 new file mode 100644 index 0000000..a1b516d --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/ISparePartStockAuditService.java @@ -0,0 +1,59 @@ +package com.hcy.admin.service.sparePartStockAudit; + +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; +import com.hcy.common.core.PageResult; + +import java.util.Map; + +/** + * 备件出入库审核服务接口类 + */ +public interface ISparePartStockAuditService { + + /** + * 备件出入库审核列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + PageResult list(PageParam pageParam, Map params); + + /** + * 备件出入库审核详情 + * + * @author hcy + * @param id 主键ID + * @return SparePartStockAudit + */ + SparePartStockAuditDetailVo 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/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java new file mode 100644 index 0000000..b4b46fa --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java @@ -0,0 +1,195 @@ +package com.hcy.admin.service.sparePartStockAudit.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.github.yulichang.query.MPJQueryWrapper; +import com.hcy.admin.service.sparePartStockAudit.ISparePartStockAuditService; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePart.SparePartListVo; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditListVo; +import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; +import com.hcy.common.core.PageResult; +import com.hcy.common.entity.sparePart.SparePart; +import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; +import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; +import com.hcy.common.utils.ArrayUtil; +import com.hcy.common.utils.TimeUtil; +import com.hcy.common.utils.UrlUtil; +import com.hcy.common.config.GlobalConfig; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.util.*; + +/** + * 备件出入库审核实现类 + */ +@Service +public class SparePartStockAuditServiceImpl implements ISparePartStockAuditService { + + @Resource + SparePartStockAuditMapper sparePartStockAuditMapper; + + /** + * 备件出入库审核列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageParam pageParam, Map params) { + Integer page = pageParam.getPageNo(); + Integer limit = pageParam.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{ + "=:receiptNumber@receipt_number:str", + "=:receiptType@receipt_type:long", + "=:warehouseId@warehouse_id:long", + "=:importWarehouse@import_warehouse:long", + "=:exportWarehouse@export_warehouse:long", + "=:inWarehouseType@in_warehouse_type:long", + "=:supplier:str", + "=:outWarehouseType@out_warehouse_type:long", + "=:responsiblePerson@responsible_person:str", + "=:handlingTime@handling_time:long", + "=:allotType@allot_type:long", + "=:consignee:str", + "=:auditState@audit_state:int", + "=:auditResult@audit_result:int", + }); + + IPage iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper); + List list = new LinkedList<>(); + for(SparePartStockAudit item : iPage.getRecords()) { + SparePartStockAuditListVo vo = new SparePartStockAuditListVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime())); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 备件出入库审核详情 + * + * @author hcy + * @param id 主键参数 + * @return SparePartStockAudit + */ + @Override + public SparePartStockAuditDetailVo detail(Integer id) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + SparePartStockAuditDetailVo vo = new SparePartStockAuditDetailVo(); + BeanUtils.copyProperties(model, vo); + return vo; + } + + /** + * 备件出入库审核新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + @Override + public void add(SparePartStockAuditParam sparePartStockAuditParam) { + SparePartStockAudit model = new SparePartStockAudit(); + 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()); + 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.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()); + 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); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/service/warehouse/IWarehouseService.java b/admin/src/main/java/com/hcy/admin/service/warehouse/IWarehouseService.java index 9666de1..5fd0579 100644 --- a/admin/src/main/java/com/hcy/admin/service/warehouse/IWarehouseService.java +++ b/admin/src/main/java/com/hcy/admin/service/warehouse/IWarehouseService.java @@ -5,6 +5,7 @@ import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.warehouse.WarehouseParam; import com.hcy.admin.vo.warehouse.WarehouseListVo; import com.hcy.admin.vo.warehouse.WarehouseDetailVo; +import com.hcy.admin.vo.warehouse.WarehouseVo; import com.hcy.common.core.PageResult; import java.util.Map; @@ -56,4 +57,6 @@ public interface IWarehouseService { */ void del(Long[] ids); + + WarehouseVo selectWarehouseData(WarehouseVo warehouseVo); } 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 c55777f..05cfb8d 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 @@ -1,6 +1,7 @@ package com.hcy.admin.service.warehouse.impl; import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,14 +9,18 @@ import com.github.yulichang.query.MPJQueryWrapper; import com.hcy.admin.service.warehouse.IWarehouseService; import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.warehouse.WarehouseParam; +import com.hcy.admin.vo.sparePart.SparePartDetailVo; +import com.hcy.admin.vo.sparePart.SparePartListVo; import com.hcy.admin.vo.system.SystemAuthDeptVo; import com.hcy.admin.vo.warehouse.WarehouseListVo; import com.hcy.admin.vo.warehouse.WarehouseDetailVo; +import com.hcy.admin.vo.warehouse.WarehouseVo; import com.hcy.common.constant.GlobalConstant; 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.mapper.sparePart.SparePartMapper; import com.hcy.common.mapper.warehouse.WarehouseMapper; import com.hcy.common.utils.ArrayUtil; import com.hcy.common.utils.TimeUtil; @@ -37,6 +42,9 @@ public class WarehouseServiceImpl implements IWarehouseService { @Resource WarehouseMapper warehouseMapper; + @Resource + SparePartMapper sparePartMapper; + /** * 仓库管理列表 * @@ -54,7 +62,7 @@ public class WarehouseServiceImpl implements IWarehouseService { warehouseMapper.setSearch(queryWrapper, params, new String[]{ "=:parentId@parent_id:long", "like:warehouseName@warehouse_name:str", - "=:warehouseCoding@warehouse_coding:str", + "like:warehouseCoding@warehouse_coding:str", "=:warehouseAddress@warehouse_address:str", }); @@ -157,7 +165,7 @@ public class WarehouseServiceImpl implements IWarehouseService { .eq("is_delete", 0) .last("limit 1")); - Assert.isNull(pModel, "请先删除子级部门"); + Assert.isNull(pModel, "请先删除子级仓库"); } @@ -171,4 +179,81 @@ public class WarehouseServiceImpl implements IWarehouseService { } } + /** + * 获取子节点仓库信息 + * @param pid 父id + * @return warehousesVo + */ + private List getChildrenWarehouseVo(Long pid){ + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .eq(Warehouse::getPid, pid) + .eq(Warehouse::getIsDelete,"0"); + List warehouses = warehouseMapper.selectList(lambdaQueryWrapper); + //将实体类数据转到vo + List list = new LinkedList<>(); + for(Warehouse item : warehouses) { + WarehouseVo vo = new WarehouseVo(); + BeanUtils.copyProperties(item, vo); + list.add(vo); + } + // + for (WarehouseVo item : list) { + item.setWarehouseVoList(getChildrenWarehouseVo(item.getId())); + + //获取栏目的内容信息 + LambdaQueryWrapper sparePartLqw = new LambdaQueryWrapper<>(); + sparePartLqw.eq(SparePart::getWarehouseId, item.getId()); + //sparePartLqw.orderByDesc(AbContent::getReleaseDate); + + List sparePartVos = sparePartMapper.selectList(sparePartLqw); + //将实体类数据转到vo + List sparePartList = new LinkedList<>(); + for(SparePart sparePartItem : sparePartVos) { + SparePartDetailVo vo = new SparePartDetailVo(); + BeanUtils.copyProperties(sparePartItem, vo); + sparePartList.add(vo); + } + + if(sparePartVos != null){ + item.setSparePartVos(sparePartList); + } + } + return list; + } + + /** + * 传入仓库id时,查询仓库下的所有子仓库及子仓库的备件信息 + * + * @param warehouseVo + * @return + */ + public WarehouseVo selectWarehouseData(WarehouseVo warehouseVo) { + Warehouse warehouse = warehouseMapper.selectById(warehouseVo.getId()); + + WarehouseVo abWarehouseVo = new WarehouseVo(); + BeanUtils.copyProperties(warehouse, abWarehouseVo); + + //查询子仓库信息 + abWarehouseVo.setWarehouseVoList(getChildrenWarehouseVo(abWarehouseVo.getId())); + //获取仓库的备件信息 + LambdaQueryWrapper sparePartLqw = new LambdaQueryWrapper<>(); + sparePartLqw.eq(SparePart::getWarehouseId, warehouseVo.getId()); + //sparePartLqw.orderByDesc(SparePart::getReleaseDate); + List abSparePartVos = sparePartMapper.selectList(sparePartLqw); + + //将实体类数据转到vo + List sparePartList = new LinkedList<>(); + for(SparePart sparePartItem : abSparePartVos) { + SparePartDetailVo vo = new SparePartDetailVo(); + BeanUtils.copyProperties(sparePartItem, vo); + sparePartList.add(vo); + } + + if(abSparePartVos != null){ + abWarehouseVo.setSparePartVos(sparePartList); + } + + return abWarehouseVo; + } + } 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 new file mode 100644 index 0000000..f0115f5 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java @@ -0,0 +1,59 @@ +package com.hcy.admin.validate.SparePartAudit; + +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import lombok.Data; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 备件审核参数 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SparePartAuditParam implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface create{} + public interface update{} + public interface delete{} + + 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}) + @Length(max = 255, message = "sparePartsCode参数不能超出255个字符", groups = {create.class, update.class}) + private String sparePartsCode; + + @NotNull(message = "sparePartsName参数缺失", groups = {create.class, update.class}) + @Length(max = 255, message = "sparePartsName参数不能超出255个字符", groups = {create.class, update.class}) + private String sparePartsName; + + @NotNull(message = "warehouseId参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "warehouseId参数值不能少于0", groups = {create.class, update.class}) + private Long warehouseId; + + @NotNull(message = "specificationsModel参数缺失", groups = {create.class, update.class}) + @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; + + @NotNull(message = "quantity参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "quantity参数值不能少于0", groups = {create.class, update.class}) + private Long quantity; + + @NotNull(message = "unitPrice参数缺失", groups = {create.class, update.class}) + private BigDecimal unitPrice; + +} diff --git a/admin/src/main/java/com/hcy/admin/validate/sparePart/SparePartParam.java b/admin/src/main/java/com/hcy/admin/validate/sparePart/SparePartParam.java index a565707..720ded0 100644 --- a/admin/src/main/java/com/hcy/admin/validate/sparePart/SparePartParam.java +++ b/admin/src/main/java/com/hcy/admin/validate/sparePart/SparePartParam.java @@ -37,9 +37,9 @@ public class SparePartParam implements Serializable { @Length(max = 255, message = "sparePartsName参数不能超出255个字符", groups = {create.class, update.class}) private String sparePartsName; - @NotNull(message = "owningWarehouse参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "owningWarehouse参数值不能少于0", groups = {create.class, update.class}) - private Long owningWarehouse; + @NotNull(message = "warehouseId参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "warehouseId参数值不能少于0", groups = {create.class, update.class}) + private Long warehouseId; @NotNull(message = "specificationsModel参数缺失", groups = {create.class, update.class}) @Length(max = 255, message = "specificationsModel参数不能超出255个字符", groups = {create.class, update.class}) 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 new file mode 100644 index 0000000..667056a --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java @@ -0,0 +1,99 @@ +package com.hcy.admin.validate.sparePartStockAudit; + +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import lombok.Data; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 备件出入库审核参数 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SparePartStockAuditParam implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface create{} + public interface update{} + public interface delete{} + + 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; + + @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}) + @DecimalMin(value = "0", message = "importWarehouse参数值不能少于0", groups = {create.class, update.class}) + private Long importWarehouse; + + @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}) + @DecimalMin(value = "0", message = "inWarehouseType参数值不能少于0", groups = {create.class, update.class}) + private Long inWarehouseType; + + @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}) + @DecimalMin(value = "0", message = "outWarehouseType参数值不能少于0", groups = {create.class, update.class}) + private Long outWarehouseType; + + @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}) + private Date handlingTime; + + @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}) + @Length(max = 255, message = "consignee参数不能超出255个字符", groups = {create.class, update.class}) + private String consignee; + + @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}) + @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}) + private String auditIdea; + + @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}) + private String remark; + + private String sparePartAuditId; // 备件审核id + + private List sparePartAuditList; //待入库的备件 +} diff --git a/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditDetailVo.java b/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditDetailVo.java new file mode 100644 index 0000000..f484bfb --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditDetailVo.java @@ -0,0 +1,26 @@ +package com.hcy.admin.vo.SparePartAudit; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * SparePartAuditVo + */ +@Data +public class SparePartAuditDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private Long stockAuditId; // 出入库审核id + private String sparePartsCode; // 备件编码 + private String sparePartsName; // 备件名称 + private Long warehouseId; // 所属仓库 + private String specificationsModel; // 规格型号 + private Long unit; // 单位 + private Long quantity; // 库存数量 + private BigDecimal unitPrice; // 单价(元) + +} diff --git a/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java b/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java new file mode 100644 index 0000000..0e86613 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java @@ -0,0 +1,28 @@ +package com.hcy.admin.vo.SparePartAudit; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * SparePartAuditVo + */ +@Data +public class SparePartAuditListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private Long stockAuditId; // 出入库审核id + private String sparePartsCode; // 备件编码 + private String sparePartsName; // 备件名称 + private Long warehouseId; // 所属仓库 + private String specificationsModel; // 规格型号 + private Long unit; // 单位 + private Long quantity; // 库存数量 + private BigDecimal unitPrice; // 单价(元) + private String createTime; // 创建时间 + private String updateTime; // 更新时间 + +} diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java index 5a16aa9..d71d544 100644 --- a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java @@ -16,7 +16,7 @@ public class SparePartDetailVo implements Serializable { private Integer id; // 主键id private String sparePartsCode; // 备件编码 private String sparePartsName; // 备件名称 - private Long owningWarehouse; // 所属仓库 + private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 private String unit; // 单位 private Long quantity; // 库存数量 diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java index 8036554..8630a95 100644 --- a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java @@ -16,11 +16,15 @@ public class SparePartListVo implements Serializable { private Integer id; // 主键id private String sparePartsCode; // 备件编码 private String sparePartsName; // 备件名称 - private Long owningWarehouse; // 所属仓库 + private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 private String unit; // 单位 private Long quantity; // 库存数量 private String createTime; // 创建时间 private String updateTime; // 更新时间 private BigDecimal unitPrice; // 单价 + + // 备件模糊关键字 + private String likeWork; + } 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 new file mode 100644 index 0000000..77051f5 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditDetailVo.java @@ -0,0 +1,35 @@ +package com.hcy.admin.vo.sparePartStockAudit; + +import lombok.Data; + +import java.io.Serializable; + +/** + * SparePartStockAuditVo + */ +@Data +public class SparePartStockAuditDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private String receiptNumber; // 单据编号 + private Long receiptType; // 单据类型(0=入库单,1=出库单,2=仓库调拨单) + private Long warehouseId; // 所属仓库 + private Long importWarehouse; // 调入仓库 + private Long exportWarehouse; // 调出仓库 + private Long inWarehouseType; // 入库类别(0=采购入库) + private String supplier; // 供应商 + private Long outWarehouseType; // 出库类别(0=调拨出库) + private String responsiblePerson; // 经办人 + private Long handlingTime; // 经办时间 + private Long allotType; // 调拨类别 + private String consignee; // 收货单位(人员) + private Integer auditState; // 审核状态(0=未审核,1=已审核,2=已取消) + private Integer auditResult; // 审核结果(0=未通过,1=已通过) + private Long auditTime; // 审核时间 + private String auditIdea; // 审核意见 + private String phone; // 联系电话 + private String remark; // 备注 + private String sparePartAuditId; // 备件审核id +} 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 new file mode 100644 index 0000000..ce7179a --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartStockAudit/SparePartStockAuditListVo.java @@ -0,0 +1,35 @@ +package com.hcy.admin.vo.sparePartStockAudit; + +import lombok.Data; + +import java.io.Serializable; + +/** + * SparePartStockAuditVo + */ +@Data +public class SparePartStockAuditListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private String receiptNumber; // 单据编号 + private Long receiptType; // 单据类型(0=入库单,1=出库单,2=仓库调拨单) + private Long warehouseId; // 所属仓库 + private Long importWarehouse; // 调入仓库 + private Long exportWarehouse; // 调出仓库 + private Long inWarehouseType; // 入库类别(0=采购入库) + private String supplier; // 供应商 + private Long outWarehouseType; // 出库类别(0=调拨出库) + private String responsiblePerson; // 经办人 + private Long handlingTime; // 经办时间 + private Long allotType; // 调拨类别 + private String consignee; // 收货单位(人员) + private Integer auditState; // 审核状态(0=未审核,1=已审核,2=已取消) + private Integer auditResult; // 审核结果(0=未通过,1=已通过) + private Long auditTime; // 审核时间 + private String createTime; // 创建时间 + private String updateTime; // 更新时间 + private String deleteTime; // 删除时间 + private String sparePartAuditId; // 备件审核id +} diff --git a/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseDetailVo.java b/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseDetailVo.java index fee5528..048c980 100644 --- a/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseDetailVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseDetailVo.java @@ -1,8 +1,10 @@ package com.hcy.admin.vo.warehouse; +import com.hcy.admin.vo.sparePart.SparePartDetailVo; import lombok.Data; import java.io.Serializable; +import java.util.List; /** * WarehouseVo diff --git a/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseListVo.java b/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseListVo.java index 08ca399..587b5ce 100644 --- a/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseListVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseListVo.java @@ -1,8 +1,10 @@ package com.hcy.admin.vo.warehouse; +import com.hcy.admin.vo.sparePart.SparePartDetailVo; import lombok.Data; import java.io.Serializable; +import java.util.List; /** * WarehouseVo @@ -17,5 +19,4 @@ public class WarehouseListVo implements Serializable { private String warehouseName; // 仓库名称(唯一) private String warehouseCoding; // 仓库编码 private String warehouseAddress; // 仓库地址 - } diff --git a/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseVo.java b/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseVo.java new file mode 100644 index 0000000..3af2184 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/warehouse/WarehouseVo.java @@ -0,0 +1,28 @@ +package com.hcy.admin.vo.warehouse; + +import com.hcy.admin.vo.sparePart.SparePartDetailVo; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class WarehouseVo implements Serializable { + + private Long id; // 主键id + private Long pid; // 上级仓库 + private String warehouseName; // 仓库名称(唯一) + private String warehouseCoding; // 仓库编码 + private String warehouseAddress; // 仓库地址 + private String createTime; // 创建时间 + private String updateTime; // 更新时间 + /** + * 子栏目 + */ + private List warehouseVoList; + + /** + * 所属内容信息 + */ + private List sparePartVos; +} diff --git a/common/pom.xml b/common/pom.xml index 5942755..9086418 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -244,6 +244,7 @@ hutool-core 5.8.16 + \ No newline at end of file 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 new file mode 100644 index 0000000..41ea6ec --- /dev/null +++ b/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java @@ -0,0 +1,33 @@ +package com.hcy.common.entity.SparePartAudit; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 备件审核实体 + */ +@Data +public class SparePartAudit implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + private Long id; // 主键id + private Long stockAuditId; // 出入库审核id + private String sparePartsCode; // 备件编码 + private String sparePartsName; // 备件名称 + private Long warehouseId; // 所属仓库 + private String specificationsModel; // 规格型号 + private Long unit; // 单位 + private Long quantity; // 库存数量 + private BigDecimal unitPrice; // 单价(元) + private Integer isDelete; // 是否删除: [0=否, 1=是] + private Long createTime; // 创建时间 + private Long updateTime; // 更新时间 + private Long deleteTime; // 删除时间 + +} \ No newline at end of file diff --git a/common/src/main/java/com/hcy/common/entity/sparePart/SparePart.java b/common/src/main/java/com/hcy/common/entity/sparePart/SparePart.java index 1736217..f90f1e0 100644 --- a/common/src/main/java/com/hcy/common/entity/sparePart/SparePart.java +++ b/common/src/main/java/com/hcy/common/entity/sparePart/SparePart.java @@ -20,7 +20,7 @@ public class SparePart implements Serializable { private Integer id; // 主键id private String sparePartsCode; // 备件编码 private String sparePartsName; // 备件名称 - private Long owningWarehouse; // 所属仓库 + private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 private String unit; // 单位 private Long quantity; // 库存数量 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 new file mode 100644 index 0000000..dcaa82b --- /dev/null +++ b/common/src/main/java/com/hcy/common/entity/sparePartStockAudit/SparePartStockAudit.java @@ -0,0 +1,42 @@ +package com.hcy.common.entity.sparePartStockAudit; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; + +/** + * 备件出入库审核实体 + */ +@Data +public class SparePartStockAudit implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + private Long id; // 主键id + private String receiptNumber; // 单据编号 + private Long receiptType; // 单据类型(0=入库单,1=出库单,2=仓库调拨单) + private Long warehouseId; // 所属仓库 + private Long importWarehouse; // 调入仓库 + private Long exportWarehouse; // 调出仓库 + private Long inWarehouseType; // 入库类别(0=采购入库) + private String supplier; // 供应商 + private Long outWarehouseType; // 出库类别(0=调拨出库) + private String responsiblePerson; // 经办人 + private Long handlingTime; // 经办时间 + private Long allotType; // 调拨类别 + private String consignee; // 收货单位(人员) + private Integer auditState; // 审核状态(0=未审核,1=已审核,2=已取消) + private Integer auditResult; // 审核结果(0=未通过,1=已通过) + private Long auditTime; // 审核时间 + private String auditIdea; // 审核意见 + private String phone; // 联系电话 + private String remark; // 备注 + private Integer isDelete; // 是否删除: [0=否, 1=是] + private Long createTime; // 创建时间 + private Long updateTime; // 更新时间 + private Long deleteTime; // 删除时间 + private String sparePartAuditId; // 备件审核id +} \ No newline at end of file diff --git a/common/src/main/java/com/hcy/common/mapper/SparePartAudit/SparePartAuditMapper.java b/common/src/main/java/com/hcy/common/mapper/SparePartAudit/SparePartAuditMapper.java new file mode 100644 index 0000000..43f2843 --- /dev/null +++ b/common/src/main/java/com/hcy/common/mapper/SparePartAudit/SparePartAuditMapper.java @@ -0,0 +1,13 @@ +package com.hcy.common.mapper.SparePartAudit; + + +import com.hcy.common.core.basics.IBaseMapper; +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import org.apache.ibatis.annotations.Mapper; + +/** + * 备件审核Mapper + */ +@Mapper +public interface SparePartAuditMapper extends IBaseMapper { +} diff --git a/common/src/main/java/com/hcy/common/mapper/sparePartStockAudit/SparePartStockAuditMapper.java b/common/src/main/java/com/hcy/common/mapper/sparePartStockAudit/SparePartStockAuditMapper.java new file mode 100644 index 0000000..3cfe5f8 --- /dev/null +++ b/common/src/main/java/com/hcy/common/mapper/sparePartStockAudit/SparePartStockAuditMapper.java @@ -0,0 +1,13 @@ +package com.hcy.common.mapper.sparePartStockAudit; + + +import com.hcy.common.core.basics.IBaseMapper; +import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; +import org.apache.ibatis.annotations.Mapper; + +/** + * 备件出入库审核Mapper + */ +@Mapper +public interface SparePartStockAuditMapper extends IBaseMapper { +} diff --git a/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-ERROR-2024-07-30_1.log.gz b/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-ERROR-2024-07-30_1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..877dd8f38cc87530b73612c2a563ab3dfbd12115 GIT binary patch literal 1772 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 literal 0 HcmV?d00001 diff --git a/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-INFO-2024-07-30_1.log.gz b/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-INFO-2024-07-30_1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..b68ecb80f5c51f23bf5c04c4e9f70af7d46ce59b GIT binary patch literal 41990 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 TYT~C+xHzkp^2CEor*QrYo45pX literal 0 HcmV?d00001 diff --git a/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-07-30_1.log.gz b/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-07-30_1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..06a321fd01d15ce9ff577af7e75e488b9104ce03 GIT binary patch literal 2246 zcmV;%2s!s3iwFP!000000PS4eZrjKezOI41!vHZ58HmQDNJ^r%+til5i5IrxwY+cv z!w5#?NMcORC>+wZ_F^x3*P>6*n_{o}07ZcXvR8eUrrW!|LeI=l5^YP0Y{%YUF$OG< z^K-s4XU?3T(SdBM<=8E^ft!94og^e;r|5X&a37(7C%8*^5`{d+$*4=RNDSj#;DDzT zN9-*PGM?g%uE&BifD>J)Q1DV;_ zGk)_HGK2Wc^093hA8;#~IX?EAa5e{7HmtIUSDRL|R;8CTsM@D!`|$AfA-X0CdKu86 zODcVj`VEA25(~(?ENHWqTf?|Z) zBp0-$$R{K5F2--eZZIV;)VquKMxAeVJ0q5nOGRsf*FxX2GsZ6%kcjhyp=XRF^cjc> zJ?lj@4pAJ5?3rfcXh0EFtR!TF=q2>XfdIY^Yg^ZATi4sXenCKrNrA77raC(`^&X1Jn+els`giBP(B^E(ztLP#@Nr5K!pTFAxK%f+Qwz!0IC?hdc+hmRrL$ z%Qd!RdE4Q(yasN#CVpI2W^PN0&B2~!p_6wxNwe=d!GMN&Ow%{VJUydnwON+qcjWRC zRyl~yNE+cG=P^Ejk4>FyoS*M7b5D$BiSpI zq;nxfNst)uR8C9CiC*>K`Q@#|Ng_DfB4Uz{{G(|{-S-;|9<-GlND*paZFerr?e+`3h#j74%DiTNZO}a z$(pb{j-RajhGapG zKv()i8vm=Lc9LN{rnPX4TusY$G=hzr*m~pmc7b$rshYx=a`C2V_|4fw7HzgqgEu|AQ-ry*Wz-kSJSbtWpa4dIV&3b}r!l^LB1(RS~Fctcq+ zE#PkUC^QGqZi4Z2LR%Rk7=D_FCES{&%vR?AZfN3l7R zKrf0(H>S@~N+JG*kWpH{5b-=KY^m4q>aOo60#5~hT@uPv%cxl>NDSyiqnBi{M;PgY zuL$`j?MJM#aFEs{%a@9)(W(-p>cIxtb+tqK@pL{{<^2))a0o_zqRj^}$w1`E3}}&o zDwNtQOU%(m$+Al9W|xn_EI5F>u(;QF!H>FrbL z7Dzg(%$=oAr|&%?quOvEM-W}HvRD`M=rn5&%HvL{x$uQ^dbPE;{kyY6_z+Lu4z(kW z&I@NYjXm%%&jToO2cy=h?T7o zByLf#5uQijFs|-b@jQ#6x{hL&VCbr=E;0@{R~(YcE>`{z%vP_5JMy!w+gDe&*?_Qs zrkkUV!f3zT-Pv4S?KOMEbD9*BJmVe8!q+K;!=m!r{y0?p-OYdjV~l*1fbYKI7(WM> zG$#?!Fv`;x76|A7l?hLk(uiV1l(LTbtGd{NT_}egABO^qJYCcc1lw;sG(x?0YXm)b z>X2tbl)5#L4rCVqJz}U(t9vF?Frk786-=mLLWR#XR9Nbse4n$$VZ`n3{cc`j?Gvei zKpM(C)6jntKMOtxY-#6Wfa%J&Iz2UWw15WSSmI3|vXziN3Wv}N- zWUc^}+cnABoGZU;8X+&qFsNY|)BO@X)m*quMMzDl7Msn}s_cXFU}M)W&VzhhfB~*> z26ac>3tlqrnVlB1lDXkB3RwNFWA(|s6&tqQhqUQ zYb!f4g}*ksaHHC-e?l&T0S(SH_8iE@y`_AOuAtdI&7{jJ@}!x-o?CbC1iavzq8ZSW zE)810V_r5P6N%|!HexWo*AQ$S{=}^UG^|Q%hoMNlYz?sU`W<){@jsEs04JOqyWQ1d}G1 zG~x58C8?WQ5_6+yZWK+ZU_u2GDwt5=^A8nFEs3cmF|{P7mc-POm|7B3OJXuVllhs< z&t!fk^D~*>uQKz~l@neK+wzC)X59X&9~C;I6tcOGRFq6T-MpF-{jDyNX8Bz0vHVFE z$N_^h6jL%pA$d~rOsV6mCxJ^G1jhg?je+tjCm{`;0AFc)Q2X5AD U<`-#}`$d}n1IFt`h}KpB0OxX7^8f$< literal 0 HcmV?d00001 diff --git a/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-07-31_1.log.gz b/www/wwwroot/java-smyy/server/like-admin/admin-log4j2-WARN-2024-07-31_1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..4eba991e4a698992d4def0ece80ae1e4fb12b7c4 GIT binary patch literal 2213 zcmV;W2wL|aiwFP!000000PS2$ZzIPMKF5InLmvc$3z(gGzw&S-uCkV~l4Ws?4Il_c zbEZkoYNnezJ(NTra>y+~enBpQPyPXh0R!uke@iybEq@`^(?fDZQ55wwVf00q>F%ko zx~jS!tpbfOvc1T5uC{8)uoq2_n4$+X01wEw{cGi^U zSLEUX_ByPV;SuKxur8ass1Sus*l%zPTb|`lqXFNVd86_i>&=NQUF|`_~ zFq)O*_h#+}!n5351h)6%cfv9ZCZ6Hu4nljWb(s%mT~1_$I0!6lUF%zy8<{pX0z=De zeVO@@ZDT78w9M9*SpW$D4s3tJy_hKi*8(TzIpDdMA=-J`ry- z{3hwe_|xY*9j7y!{-bZZM%?oQ)H>jZgMcg92t=}sp959WFF}M&dKniq!Ot){73q>gIG@ z-JDJ>>+@>jQ{Drq{QKRz_kaKTKY#n?zhD1D-Jt&Ohkt(f!5eZ$a7New7ql-mh4n3BE^7~vkTa$zHeYFo;x{u{JPdIwxHa*)>C8-K_kzZ1DBxQiz{kf`}TD>9Rk5dy6LEb6C>$*`vuAAInc(i zc_v8ZW^ji{N8JI^C4Ds?Zye4JA7=@IMbd3CBpn-?JGRP$HwgX~F)C!loBh89fy1wk zi1dx!&tFz3DP`rHNCR!D=WW0NG06(hOEc2T=troaZ^rZ>z0&#j)2eWzZfky?8DNR}{mMCrlufYwFzXv;=L6-Km z`3O?wi^*2?b}e6*)+$zf*M1~co=+Ib(|9{MOCexf)>r+!j3G~DF>5e%IaJpb2b?R; zO47qs`~$bu@8hog+fn0NTf1yXSWJtZNw>o2ym+~{v$f@fJ>Lw2J|^RmcPUFgDy*E?gALF^Gwrw; z3Ow?BQ&$ko(0^fgD}bIbRj@o)rwTe%(5Zq>6?Cewp{c^c z)!wYK71g_g_a~4;9B{Tejkw*t-_=X310pRDNQ3(u%d5~!H&l$C@4<`|h0#(=kusd+ z_f2=A+*-X-DcrglaDLae4(QFRRcLb8y`F23xdhZ4S0t@#uKX4(LSB+#FvBFH2Mv1F za2+-)Le(ejTG_m4%Q-j?CU(O5Jjllt7!V4VP`8!;xes+P;N7BteXBSoUuVhYY_0+e zmFs;Put0f_CjtxnCj|4%`-08AOmzs#VZqPmW1Y&6%;6VS*I`tJ^#|l49@6+!VP6C3 z-&@KHbOkLBXemQhT_-ICb{)^T6Yz@v6fJ?CO({_Cj&<3LOe*G^+0MZEE+CjH%YDqc zEO_+VQdfSu^3#={uKaZ6rz^jozw)a)CtU1W!L^+e-p|@h5>qGiWn0nHHj_w^gsViN zn@MytiEbv*%_P6jW)ep?lju4@*9p2#&~<{Y6E>rn#L>+p`btq>De6=~rwTe%(5b@a zrwY26L^qS@W)j^@qMJ!{Gl^~{(UqUB{B-4~D?eTN>B{dHS^25X3D>}`XKwb-(F|=b ncTC~huKX24clr}VZe%#suZD-A{xzEQevRh;A;T)do?ZX|&Vw@I literal 0 HcmV?d00001