From 5653bb9d4d32d2686245f3a1f0272e7a301e88a5 Mon Sep 17 00:00:00 2001
From: wangfukang <15630117759@163.com>
Date: Sat, 30 Mar 2024 09:52:02 +0800
Subject: [PATCH] =?UTF-8?q?AI=E9=9B=86=E6=88=90=20BUG=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/resources/application.yml | 24 +-
.../cc/hiver/core/base/HiverBaseEntity.java | 1 +
.../core/common/constant/ProductConstant.java | 14 ++
.../core/common/constant/SaleConstant.java | 9 +-
.../cc/hiver/core/entity/LogiticsCompany.java | 3 +
hiver-modules/hiver-mall/pom.xml | 11 +
.../controller/CheckStockController.java | 73 +++++-
.../CheckStockDetailController.java | 49 ++++-
.../mapper/CheckStockDetailMapper.java | 11 +
.../checkstock/mapper/CheckStockMapper.java | 4 +
.../checkstock/pojo/CheckStockPageQuery.java | 30 +++
.../service/CheckStockDetailService.java | 13 ++
.../checkstock/service/CheckStockService.java | 17 +-
.../impl/CheckStockDetailServiceImpl.java | 203 +++++++++++++++++
.../service/impl/CheckStockServiceImpl.java | 160 +++++++++++---
.../checkstock/vo/CheckStockAttributeVo.java | 6 +
.../checkstock/vo/CheckStockDetailVo.java | 13 ++
.../mall/checkstock/vo/CheckStockPageVo.java | 27 +++
.../common/constant/PurchaseConstant.java | 20 ++
.../mall/config/aliocr/AliOcrConfig.java | 12 +
.../mall/config/thread/ThreadConfig.java | 22 ++
.../thread/ThreadPoolConfiguration.java | 51 +++++
.../hiver/mall/config/thread/TimerThread.java | 65 ++++++
.../mall/controller/OrderController.java | 38 ++--
.../controller/ProductCategoryController.java | 13 ++
.../mall/controller/ProductController.java | 12 +-
.../mall/controller/PurchaseController.java | 1 +
.../ReturnCommissionController.java | 12 +-
.../mall/controller/ReturnSaleController.java | 11 +
.../hiver/mall/controller/SaleController.java | 10 +
.../mall/controller/StockController.java | 15 ++
.../mall/dao/mapper/PurchaseDetailMapper.java | 2 +-
.../cc/hiver/mall/dao/mapper/SaleMapper.java | 5 +-
.../hiver/mall/dao/mapper/StockLogMapper.java | 2 +-
.../cc/hiver/mall/dao/mapper/StockMapper.java | 3 +
.../service/impl/DeductLogServiceImpl.java | 101 +++++----
.../java/cc/hiver/mall/entity/Customer.java | 4 +
.../java/cc/hiver/mall/entity/OrderXd.java | 6 +
.../cc/hiver/mall/entity/ProductCategory.java | 18 +-
.../java/cc/hiver/mall/entity/ReturnSale.java | 3 +
.../main/java/cc/hiver/mall/entity/Sale.java | 5 +-
.../main/java/cc/hiver/mall/entity/Share.java | 3 +
.../mapper/OperatingAreaMapper.java | 1 +
.../impl/OperatingAreaServiceImpl.java | 29 +--
.../operatingarea/vo/OperatingAreaPageVO.java | 6 +
.../mall/pojo/query/ProductPageQuery.java | 3 +
.../hiver/mall/pojo/query/SalePageQuery.java | 9 +
.../hiver/mall/pojo/query/StockPageQuery.java | 6 +
.../mall/pojo/vo/ProductAttributeOfAddVo.java | 24 ++
.../mall/pojo/vo/ProductAttributeValueVo.java | 20 ++
.../hiver/mall/pojo/vo/ProductCategoryVo.java | 26 +++
.../hiver/mall/pojo/vo/StockAttributeVo.java | 15 ++
.../cc/hiver/mall/pojo/vo/StockProductVo.java | 32 +++
.../PurchaseOcrPictureController.java | 54 +++++
.../entity/PurchaseOcrPicture.java | 42 ++++
.../mapper/PurchaseOcrPictureMapper.java | 13 ++
.../service/PurchaseOcrPictureService.java | 20 ++
.../impl/PurchaseOcrPictureServiceImpl.java | 111 ++++++++++
.../vo/PurchaseOciPictureAddVo.java | 17 ++
.../mybatis/ProductCategoryService.java | 2 +
.../mybatis/PurchaseDetailService.java | 2 +-
.../mall/service/mybatis/SaleService.java | 2 +
.../mall/service/mybatis/StockLogService.java | 2 +-
.../mall/service/mybatis/StockService.java | 4 +
.../mall/serviceimpl/OrderServiceImpl.java | 16 +-
.../serviceimpl/ProductShareServiceImpl.java | 9 +
.../serviceimpl/RushOrderServiceImpl.java | 17 +-
.../SalesAndDetailsServiceImpl.java | 54 +++--
.../SalesCalculateServiceImpl.java | 4 +-
.../mybatis/ProductCategoryServiceImpl.java | 73 ++++++
.../mybatis/PurchaseDetailServiceImpl.java | 4 +-
.../mybatis/PurchaseServiceImpl.java | 4 +-
.../mybatis/SaleDetailServiceImpl.java | 6 -
.../serviceimpl/mybatis/SaleServiceImpl.java | 17 +-
.../mybatis/StockLogServiceImpl.java | 4 +-
.../serviceimpl/mybatis/StockServiceImpl.java | 52 ++++-
.../java/cc/hiver/mall/utils/AliOcrUtil.java | 208 ++++++++++++++++++
.../mapper/CheckStockDetailMapper.xml | 49 ++++-
.../resources/mapper/CheckStockMapper.xml | 10 +
.../main/resources/mapper/CustomerMapper.xml | 23 +-
.../resources/mapper/OperatingAreaMapper.xml | 33 ++-
.../mapper/ProductAttributeMapper.xml | 7 +-
.../main/resources/mapper/ProductMapper.xml | 14 +-
.../resources/mapper/PurchaseDetailMapper.xml | 3 +-
.../main/resources/mapper/PurchaseMapper.xml | 1 +
.../mapper/PurchaseOcrPictureMapper.xml | 106 +++++++++
.../resources/mapper/ReturnSaleMapper.xml | 2 +-
.../src/main/resources/mapper/SaleMapper.xml | 42 +++-
.../main/resources/mapper/StockLogMapper.xml | 3 +-
.../src/main/resources/mapper/StockMapper.xml | 39 +++-
90 files changed, 2113 insertions(+), 229 deletions(-)
create mode 100644 hiver-core/src/main/java/cc/hiver/core/common/constant/ProductConstant.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/pojo/CheckStockPageQuery.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockPageVo.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/common/constant/PurchaseConstant.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/aliocr/AliOcrConfig.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadConfig.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadPoolConfiguration.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/TimerThread.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeOfAddVo.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeValueVo.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductCategoryVo.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockAttributeVo.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockProductVo.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/controller/PurchaseOcrPictureController.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/entity/PurchaseOcrPicture.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/mapper/PurchaseOcrPictureMapper.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/PurchaseOcrPictureService.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/vo/PurchaseOciPictureAddVo.java
create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliOcrUtil.java
create mode 100644 hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseOcrPictureMapper.xml
diff --git a/hiver-admin/src/main/resources/application.yml b/hiver-admin/src/main/resources/application.yml
index 497f077e..259fd286 100644
--- a/hiver-admin/src/main/resources/application.yml
+++ b/hiver-admin/src/main/resources/application.yml
@@ -11,7 +11,7 @@ server:
uri-encoding: UTF-8
threads:
# 工作线程的最大数量 io密集型建议10倍的cpu数,cpu密集型建议cpu数+1,绝大部分应用都是io密集型
- max: 1000
+ max: 2000
# 工作线程的最小数量,初始化时创建的线程数
min-spare: 30
# 最大吞吐量不限制
@@ -133,6 +133,17 @@ spring:
# - org.activiti.spring.boot.SecurityAutoConfiguration
# 暂未使用ES 排除client自动装配类
- org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration
+ task:
+ execution:
+ pool:
+ # 线程池创建时的初始化线程数,默认为8
+ core-size: 10
+ # 线程池的最大线程数,默认为int最大值
+ max-size: 100
+ # 用来缓冲执行任务的队列,默认为int最大值
+ queue-capacity: 200
+ # 非核心线程的存活时间,线程终止前允许保持空闲的时间
+ keep-alive: 60
hiver:
# 全局限流
@@ -310,6 +321,12 @@ ignored:
- /hiver/app/sale/getCustomerBuyProductLog
- /hiver/app/sale/getSupplierBuyProductLog
- /hiver/app/sale/getSaleByCompanyId
+ - /hiver/order/app/getAllStatus/**
+ - /hiver/app/productCategory/batchSaveCategoryAndAttribute
+ - /hiver/app/stock/getTailWarnProduct
+ - /hiver/purchaseOcrPicture/batchSave
+ - /hiver/purchaseOcrPicture/invoicingAi
+ - /hiver/purchaseOcrPicture/multiRoundConversationCall
# 限流及黑名单不拦截的路径
limitUrls:
@@ -379,3 +396,8 @@ logging:
jpush:
appKey: 130f556e8473c9b558777fe3
masterSecret: 2b4e5196dfc40a78db36480d
+aliyun:
+ openapi:
+ accessKeyId: 56640
+ # 阿里云秘钥
+ accessKeySecret: sk-bcfa4865b89548acb8225f910f13d682
diff --git a/hiver-core/src/main/java/cc/hiver/core/base/HiverBaseEntity.java b/hiver-core/src/main/java/cc/hiver/core/base/HiverBaseEntity.java
index dd1f603d..4ab63df4 100644
--- a/hiver-core/src/main/java/cc/hiver/core/base/HiverBaseEntity.java
+++ b/hiver-core/src/main/java/cc/hiver/core/base/HiverBaseEntity.java
@@ -48,6 +48,7 @@ public abstract class HiverBaseEntity implements Serializable {
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
+ @TableField(fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者")
diff --git a/hiver-core/src/main/java/cc/hiver/core/common/constant/ProductConstant.java b/hiver-core/src/main/java/cc/hiver/core/common/constant/ProductConstant.java
new file mode 100644
index 00000000..93712ac1
--- /dev/null
+++ b/hiver-core/src/main/java/cc/hiver/core/common/constant/ProductConstant.java
@@ -0,0 +1,14 @@
+package cc.hiver.core.common.constant;
+
+/**
+ * 订单常量类
+ * @author 王富康
+ * @date 2023/10/21
+ */
+public interface ProductConstant {
+ /**
+ 商品状态:0:下架;1:上架:2删除
+ */
+ String[] DEL_FLAG = {"0", "1", "2"};
+
+}
diff --git a/hiver-core/src/main/java/cc/hiver/core/common/constant/SaleConstant.java b/hiver-core/src/main/java/cc/hiver/core/common/constant/SaleConstant.java
index 8c04aa6a..7740cc9a 100644
--- a/hiver-core/src/main/java/cc/hiver/core/common/constant/SaleConstant.java
+++ b/hiver-core/src/main/java/cc/hiver/core/common/constant/SaleConstant.java
@@ -24,14 +24,21 @@ public interface SaleConstant {
分享页提交订单:6:待配货
挂单页提交订单:7:挂单
+ 挂单页提交订单:8:物流公司上门取货(待取货)
+ 挂单页提交订单:9:物流公司上门取货(已取货)
*/
- String[] SALE_STATUS = {"0", "1", "2", "3", "4", "5", "00", "01", "02", "03", "04","6","7"};
+ String[] SALE_STATUS = {"0", "1", "2", "3", "4", "5", "00", "01", "02", "03", "04","6","7","8","9"};
/**
* 物流类别 0-物流 1-快递 2-自提 3-拼单 4-送车 5-大巴
*/
String[] TRANSPORT_TYPE = {"0","1","2","3","4","5"};
+ /**
+ * 配送方式 0-平台配送 1-自送 2-物流自提
+ */
+ String[] MODE_OF_SERVICE = {"0","1","2"};
+
/**
* 收款状态 0-未收款 1-已收款 2-部分收款
*/
diff --git a/hiver-core/src/main/java/cc/hiver/core/entity/LogiticsCompany.java b/hiver-core/src/main/java/cc/hiver/core/entity/LogiticsCompany.java
index 6dd46bf5..c2e53ee9 100644
--- a/hiver-core/src/main/java/cc/hiver/core/entity/LogiticsCompany.java
+++ b/hiver-core/src/main/java/cc/hiver/core/entity/LogiticsCompany.java
@@ -102,4 +102,7 @@ public class LogiticsCompany extends HiverBaseEntity {
@ApiModelProperty(value = "公司扣减固定金额")
private BigDecimal fixedAmount;
+ @ApiModelProperty(value = "是否支持上门取货:0:否;1:是")
+ private Integer canToDoor = 0;
+
}
diff --git a/hiver-modules/hiver-mall/pom.xml b/hiver-modules/hiver-mall/pom.xml
index 89e00e2b..00cd6ca2 100644
--- a/hiver-modules/hiver-mall/pom.xml
+++ b/hiver-modules/hiver-mall/pom.xml
@@ -17,6 +17,17 @@
hiver-app
1.0-SNAPSHOT
+
+ com.alibaba
+ dashscope-sdk-java
+ 2.12.0
+
+
+ org.slf4j
+ slf4j-simple
+
+
+
\ No newline at end of file
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockController.java
index 20e22c94..72cc3316 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockController.java
@@ -2,11 +2,16 @@ package cc.hiver.mall.checkstock.controller;
import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.vo.Result;
+import cc.hiver.mall.checkstock.entity.CheckStock;
+import cc.hiver.mall.checkstock.pojo.CheckStockPageQuery;
import cc.hiver.mall.checkstock.service.CheckStockService;
-import cc.hiver.mall.checkstock.vo.CheckStockDetailVo;
+import cc.hiver.mall.checkstock.vo.CheckStockPageVo;
+import cc.hiver.mall.checkstock.vo.CheckStockVo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
@@ -14,10 +19,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
-import java.util.List;
-
/**
* 盘点接口
+ *
* @author 王富康
* @date 2024/3/10
*/
@@ -31,11 +35,66 @@ public class CheckStockController {
@Autowired
private CheckStockService checkStockService;
- @RequestMapping(value = "/saveOrUpdateOperatingArea", method = RequestMethod.POST)
+ @RequestMapping(value = "/addCheckStock", method = RequestMethod.POST)
@ApiOperation("新增盘点信息")
- public Result addCheckStock(@RequestBody List checkStockDetailVos){
+ public Result addCheckStock(@RequestBody CheckStockVo checkStockVo) {
+
+ final CheckStock saveCheckStock = checkStockService.addCheckStock(checkStockVo);
+ return new ResultUtil().setData(saveCheckStock);
+ }
+
+ @RequestMapping(value = "/getCheckStockList", method = RequestMethod.POST)
+ @ApiOperation("获取盘点信息列表")
+ public Result getCheckStockList(@RequestBody CheckStockPageQuery checkStockPageQuery) {
+ final Page checkStockList = checkStockService.getCheckStockList(checkStockPageQuery);
+ return new ResultUtil<>().setData(checkStockList);
+ }
+
+ /**
+ * 根据盘点id获取盘点及商品详细信息
+ *
+ * @param id
+ * @return Result
+ * @author 王富康
+ * @date 2024/3/17
+ */
+ @RequestMapping(value = "/getCheckStock", method = RequestMethod.POST)
+ @ApiOperation("根据盘点id获取盘点及商品详细信息")
+ public Result getCheckStock(@RequestBody CheckStockPageQuery checkStockPageQuery) {
+
+ if (StringUtils.isEmpty(checkStockPageQuery.getCheckStockId())) {
+ return ResultUtil.error("盘点id不能为空");
+ }
+ final CheckStockPageVo checkStockVo = checkStockService.getCheckStock(checkStockPageQuery);
+ return new ResultUtil().setData(checkStockVo);
+ }
+
+ /**
+ * 确认完成盘点
+ *
+ * @param id
+ * @return Result
+ * @author 王富康
+ * @date 2024/3/17
+ */
+
+ @RequestMapping(value = "/submitToStock", method = RequestMethod.POST)
+ @ApiOperation("确认完成盘点")
+ public Result submitToStock(String id) {
+ if (StringUtils.isEmpty(id)) {
+ return ResultUtil.error("盘点id不能为空");
+ }
+ checkStockService.submitToStock(id);
+ return ResultUtil.success("已完成库存更新操作!");
+ }
- checkStockService.addCheckStock(checkStockDetailVos);
- return ResultUtil.success("盘点成功!");
+ @RequestMapping(value = "/deleteCheckStock", method = RequestMethod.POST)
+ @ApiOperation("删除盘点(假删除,delflag=3)")
+ public Result deleteCheckStock(String id) {
+ if (StringUtils.isEmpty(id)) {
+ return ResultUtil.error("盘点id不能为空");
+ }
+ checkStockService.deleteCheckStock(id);
+ return ResultUtil.success("删除成功!");
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockDetailController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockDetailController.java
index 010a141a..0ae160a7 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockDetailController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/controller/CheckStockDetailController.java
@@ -1,26 +1,67 @@
package cc.hiver.mall.checkstock.controller;
+import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.vo.Result;
import cc.hiver.mall.checkstock.service.CheckStockDetailService;
-import cc.hiver.mall.checkstock.vo.CheckStockVo;
+import cc.hiver.mall.checkstock.vo.CheckStockDetailVo;
import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+
+/**
+ * 盘点商品明细
+ * @author 王富康
+ * @date 2024/3/22
+ */
@Slf4j
@RestController
@Api(tags = "盘点商品明细接口")
-@RequestMapping("/hiver/app/checkStock/")
+@RequestMapping("/hiver/app/checkStockDetail/")
@Transactional
public class CheckStockDetailController {
@Autowired
private CheckStockDetailService checkStockDetailService;
- public Result addCheckStockDetail(CheckStockVo checkStockVo){
- return null;
+ /**
+ * 增加盘点明细
+ *
+ * @param checkStockDetailVos 商品明细
+ * @return Result
+ * @author 王富康
+ * @date 2024/3/17
+ */
+ @RequestMapping(value = "/addCheckStockDetail", method = RequestMethod.POST)
+ @ApiOperation("盘点-新增商品详细信息")
+ public Result addCheckStockDetail(@RequestBody List checkStockDetailVos) {
+ checkStockDetailService.addCheckStockDetail(checkStockDetailVos);
+ return ResultUtil.success("新增商品信息成功!");
+ }
+
+ /**
+ * 删除盘点明细
+ *
+ * @param id 盘点id
+ * @return Result
+ * @author 王富康
+ * @date 2024/3/17
+ */
+ @RequestMapping(value = "/deleteCheckStockDetail", method = RequestMethod.POST)
+ @ApiOperation("盘点-删除商品详细信息")
+ public Result deleteCheckStockDetail(String id) {
+ if (StringUtils.isEmpty(id)) {
+ ResultUtil.error("盘点明细id不能为空!");
+ }
+ checkStockDetailService.deleteCheckStockDetail(id);
+ return ResultUtil.success("删除成功!");
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockDetailMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockDetailMapper.java
index 87134aca..b5ace345 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockDetailMapper.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockDetailMapper.java
@@ -1,7 +1,10 @@
package cc.hiver.mall.checkstock.mapper;
import cc.hiver.mall.checkstock.entity.CheckStockDetail;
+import cc.hiver.mall.checkstock.pojo.CheckStockPageQuery;
+import cc.hiver.mall.deductlog.vo.WorkerDeductLogVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -10,4 +13,12 @@ import java.util.List;
@Repository
public interface CheckStockDetailMapper extends BaseMapper {
void batchInsertCheckStock(@Param("checkStockDetailList") List checkStockDetailList);
+
+ List getByCheckStockDetailByCheckId(@Param("checkStockId")String checkStockId);
+
+ void deleteByProductId(@Param("shopId")String shopId,@Param("checkStockId")String checkStockId,@Param("productId") String productId);
+
+ List getByCheckStockDetailByCheckIdOfPage(@Param("checkStockPageQuery")CheckStockPageQuery checkStockPageQuery);
+
+ Page getByCheckStockProductByCheckId(Page page, @Param("checkStockPageQuery")CheckStockPageQuery checkStockPageQuery);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockMapper.java
index 7bc3d51e..ebe4996a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockMapper.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/mapper/CheckStockMapper.java
@@ -1,9 +1,13 @@
package cc.hiver.mall.checkstock.mapper;
import cc.hiver.mall.checkstock.entity.CheckStock;
+import cc.hiver.mall.checkstock.pojo.CheckStockPageQuery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface CheckStockMapper extends BaseMapper {
+ Page getCheckStockList(Page page,@Param("deductLogPageQuery") CheckStockPageQuery checkStockPageQuery);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/pojo/CheckStockPageQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/pojo/CheckStockPageQuery.java
new file mode 100644
index 00000000..c83bcb98
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/pojo/CheckStockPageQuery.java
@@ -0,0 +1,30 @@
+package cc.hiver.mall.checkstock.pojo;
+
+import cc.hiver.core.base.HiverBasePageQuery;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CheckStockPageQuery extends HiverBasePageQuery {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "店铺id")
+ private String shopId;
+
+ @ApiModelProperty(value = "盘点id")
+ private String checkStockId;
+
+ @ApiModelProperty(value = "开始时间")
+ private String startDate;
+
+ @ApiModelProperty(value = "结束时间")
+ private String endDate;
+
+ @ApiModelProperty(value = "商品id")
+ private List productIdList;
+
+
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockDetailService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockDetailService.java
index 0db78f4b..e43890b0 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockDetailService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockDetailService.java
@@ -1,7 +1,20 @@
package cc.hiver.mall.checkstock.service;
import cc.hiver.mall.checkstock.entity.CheckStockDetail;
+import cc.hiver.mall.checkstock.pojo.CheckStockPageQuery;
+import cc.hiver.mall.checkstock.vo.CheckStockDetailVo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
public interface CheckStockDetailService extends IService {
+
+ void addCheckStockDetail(List checkStockDetailVos);
+
+ void deleteCheckStockDetail(String id);
+
+ List getByCheckStockDetailByCheckId(String checkStockId);
+
+ Page getByCheckStockDetailByCheckIdOfPage(CheckStockPageQuery checkStockPageQuery);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockService.java
index 746e1159..dbd58d36 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/CheckStockService.java
@@ -1,11 +1,20 @@
package cc.hiver.mall.checkstock.service;
import cc.hiver.mall.checkstock.entity.CheckStock;
-import cc.hiver.mall.checkstock.vo.CheckStockDetailVo;
+import cc.hiver.mall.checkstock.pojo.CheckStockPageQuery;
+import cc.hiver.mall.checkstock.vo.CheckStockPageVo;
+import cc.hiver.mall.checkstock.vo.CheckStockVo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
-import java.util.List;
-
public interface CheckStockService extends IService {
- void addCheckStock(List checkStockDetailVos);
+ CheckStock addCheckStock(CheckStockVo checkStockVo);
+
+ CheckStockPageVo getCheckStock(CheckStockPageQuery checkStockPageQuery);
+
+ void submitToStock(String id);
+
+ Page getCheckStockList( CheckStockPageQuery checkStockPageQuery);
+
+ void deleteCheckStock(String id);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockDetailServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockDetailServiceImpl.java
index 42ad4647..893dfef5 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockDetailServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockDetailServiceImpl.java
@@ -1,11 +1,214 @@
package cc.hiver.mall.checkstock.service.impl;
+import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.mall.checkstock.entity.CheckStockDetail;
import cc.hiver.mall.checkstock.mapper.CheckStockDetailMapper;
+import cc.hiver.mall.checkstock.pojo.CheckStockPageQuery;
import cc.hiver.mall.checkstock.service.CheckStockDetailService;
+import cc.hiver.mall.checkstock.vo.CheckStockAttributeVo;
+import cc.hiver.mall.checkstock.vo.CheckStockDetailVo;
+import cc.hiver.mall.deductlog.vo.WorkerDeductLogVo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 盘点商品实现类
+ *
+ * @author 王富康
+ * @date 2024/3/22
+ */
@Service
public class CheckStockDetailServiceImpl extends ServiceImpl implements CheckStockDetailService {
+
+ @Autowired
+ private SecurityUtil securityUtil;
+
+ @Autowired
+ private CheckStockDetailMapper checkStockDetailMapper;
+
+ /**
+ * 添加盘点详情信息
+ *
+ * @param checkStockDetailVos 盘点详情视图对象列表,包含需要添加的盘点细节
+ */
+ @Override
+ public void addCheckStockDetail(List checkStockDetailVos) {
+ if (checkStockDetailVos == null || checkStockDetailVos.isEmpty()) {
+ return; // 处理边界条件,输入参数为空的情况
+ }
+
+ // 获取当前店铺ID
+ final String shopId = securityUtil.getShopId();
+
+ // 初始化盘点详情列表
+ final List checkStockDetailList = new ArrayList<>();
+ for (CheckStockDetailVo checkStockDetailVo : checkStockDetailVos) {
+ // 获取商品ID和盘点ID
+ final String productId = checkStockDetailVo.getProductId();
+ final String checkStockId = checkStockDetailVo.getCheckStockId();
+ try {
+ // 先根据商品ID删除原有的盘点明细
+ checkStockDetailMapper.deleteByProductId(shopId, checkStockId, productId);
+
+ // 遍历并新增盘点的商品明细
+ final List checkStockAttributeVos = checkStockDetailVo.getCheckStockAttributeVos();
+ for (CheckStockAttributeVo checkStockAttributeVo : checkStockAttributeVos) {
+ checkStockDetailList.addAll(buildCheckStockDetailList(checkStockDetailVo, checkStockAttributeVo, shopId, checkStockId, productId));
+ }
+ } catch (Exception e) {
+ // 日志记录异常,可以进行相应的异常处理逻辑
+ log.error("添加盘点详情信息失败", e);
+ }
+ }
+
+ // 批量插入盘点详情信息
+ try {
+ checkStockDetailMapper.batchInsertCheckStock(checkStockDetailList);
+ } catch (Exception e) {
+ // 日志记录异常,可以进行相应的异常处理逻辑
+ log.error("批量插入盘点详情信息失败", e);
+ }
+ }
+
+ /**
+ * 构建盘点详情信息列表
+ */
+ private static List buildCheckStockDetailList(CheckStockDetailVo checkStockDetailVo,
+ CheckStockAttributeVo checkStockAttributeVo,
+ String shopId,
+ String checkStockId,
+ String productId) {
+ final List details = new ArrayList<>();
+ final String attributeList = checkStockAttributeVo.getAttributeList();
+ final Integer pdNum = checkStockAttributeVo.getPdNum();
+ final Integer stockCount = checkStockAttributeVo.getStockCount();
+
+ // 可为负数
+ final int changeCount = pdNum - stockCount;
+
+ final CheckStockDetail checkStockDetail = new CheckStockDetail();
+ checkStockDetail.setCheckStockId(checkStockId);
+ checkStockDetail.setShopId(shopId);
+ checkStockDetail.setProductId(productId);
+ checkStockDetail.setProductName(checkStockDetailVo.getProductName());
+ checkStockDetail.setProductSn(checkStockDetailVo.getProductSn());
+ checkStockDetail.setProductPicture(checkStockDetailVo.getProductPicture());
+ checkStockDetail.setPdNum(pdNum);
+ checkStockDetail.setChangeCount(changeCount);
+ checkStockDetail.setStockCount(stockCount);
+ checkStockDetail.setAttributeList(attributeList);
+
+ details.add(checkStockDetail);
+ return details;
+ }
+
+
+ @Override
+ public void deleteCheckStockDetail(String id) {
+ // 删除明细
+ checkStockDetailMapper.deleteById(id);
+ }
+
+ @Override
+ public List getByCheckStockDetailByCheckId(String checkStockId) {
+
+ // 查询明细
+ final List checkStockDetailList = checkStockDetailMapper.getByCheckStockDetailByCheckId(checkStockId);
+
+ // 封装至返回结果中
+ final Map checkStockDetailVoMap = new HashMap<>();
+ for (CheckStockDetail checkStockDetail : checkStockDetailList) {
+ final String productId = checkStockDetail.getProductId();
+ if (checkStockDetailVoMap.containsKey(productId)) {
+ // 直接放规格即可
+ final CheckStockAttributeVo checkStockAttributeVo = new CheckStockAttributeVo();
+ checkStockAttributeVo.setAttributeList(checkStockDetail.getAttributeList());
+ checkStockAttributeVo.setStockCount(checkStockDetail.getStockCount());
+ checkStockAttributeVo.setPdNum(checkStockDetail.getPdNum());
+ checkStockDetailVoMap.get(productId).getCheckStockAttributeVos().add(checkStockAttributeVo);
+ } else {
+ // 新增对象
+ final CheckStockDetailVo checkStockDetailVo = new CheckStockDetailVo();
+ checkStockDetailVo.setCheckStockId(checkStockDetail.getCheckStockId());
+ checkStockDetailVo.setProductId(productId);
+ checkStockDetailVo.setProductName(checkStockDetail.getProductName());
+ checkStockDetailVo.setProductPicture(checkStockDetail.getProductPicture());
+ checkStockDetailVo.setProductSn(checkStockDetail.getProductSn());
+ final List checkStockAttributeVos = new ArrayList<>();
+ final CheckStockAttributeVo checkStockAttributeVo = new CheckStockAttributeVo();
+ checkStockAttributeVo.setAttributeList(checkStockDetail.getAttributeList());
+ checkStockAttributeVo.setStockCount(checkStockDetail.getStockCount());
+ checkStockAttributeVo.setPdNum(checkStockDetail.getPdNum());
+ checkStockAttributeVos.add(checkStockAttributeVo);
+ checkStockDetailVo.setCheckStockAttributeVos(checkStockAttributeVos);
+ checkStockDetailVoMap.put(productId, checkStockDetailVo);
+ }
+ }
+ return new ArrayList<>(checkStockDetailVoMap.values());
+ }
+
+ @Override
+ public Page getByCheckStockDetailByCheckIdOfPage(CheckStockPageQuery checkStockPageQuery) {
+ // 校验分页参数
+ if (checkStockPageQuery.getPageNum() <= 0 || checkStockPageQuery.getPageSize() <= 0) {
+ throw new IllegalArgumentException("分页参数异常!");
+ }
+
+ final Page page = new Page<>(checkStockPageQuery.getPageNum(), checkStockPageQuery.getPageSize());
+ final Page returnData = new Page<>();
+ try {
+ // 查询商品id集合
+ // 查询明细,这里假设底层已经做了SQL注入等安全防护
+ final Page checkStockDetailListOfProduct = checkStockDetailMapper.getByCheckStockProductByCheckId(page, checkStockPageQuery);
+ if (checkStockDetailListOfProduct.getRecords() == null) {
+ // 避免空指针异常
+ checkStockDetailListOfProduct.setRecords(new ArrayList<>());
+ }
+ checkStockPageQuery.setProductIdList(checkStockDetailListOfProduct.getRecords());
+
+
+ if (!checkStockPageQuery.getProductIdList().isEmpty()) {
+ final List checkStockDetailList = checkStockDetailMapper.getByCheckStockDetailByCheckIdOfPage(checkStockPageQuery);
+
+ // 封装至返回结果中,使用Map和computeIfAbsent简化逻辑
+ final Map checkStockDetailVoMap = checkStockDetailList.stream()
+ .collect(Collectors.toMap(CheckStockDetail::getProductId, detail -> {
+ final CheckStockDetailVo vo = new CheckStockDetailVo();
+ vo.setCheckStockId(detail.getCheckStockId());
+ vo.setProductId(detail.getProductId());
+ vo.setProductName(detail.getProductName());
+ vo.setProductPicture(detail.getProductPicture());
+ vo.setProductSn(detail.getProductSn());
+ vo.setCheckStockAttributeVos(new ArrayList<>());
+ final CheckStockAttributeVo attributeVo = new CheckStockAttributeVo();
+ attributeVo.setAttributeList(detail.getAttributeList());
+ attributeVo.setStockCount(detail.getStockCount());
+ attributeVo.setPdNum(detail.getPdNum());
+ vo.getCheckStockAttributeVos().add(attributeVo);
+ return vo;
+ }, (vo1, vo2) -> {
+ vo2.getCheckStockAttributeVos().addAll(vo1.getCheckStockAttributeVos());
+ return vo2;
+ }));
+ returnData.setCountId(checkStockDetailListOfProduct.getCountId());
+ returnData.setCurrent(checkStockDetailListOfProduct.getCurrent());
+ returnData.setTotal(checkStockDetailListOfProduct.getTotal());
+ returnData.setRecords(new ArrayList<>(checkStockDetailVoMap.values()));
+
+ }
+ return returnData;
+ } catch (Exception e) {
+ // 异常处理,建议加上更详细的日志记录
+ throw new RuntimeException("获取盘点信息出错!", e);
+ }
+ }
+
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockServiceImpl.java
index 2f134ac0..40b194f7 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/service/impl/CheckStockServiceImpl.java
@@ -1,21 +1,39 @@
package cc.hiver.mall.checkstock.service.impl;
+import cc.hiver.core.common.utils.BeanUtils;
import cc.hiver.core.common.utils.SecurityUtil;
+import cc.hiver.core.entity.User;
import cc.hiver.mall.checkstock.entity.CheckStock;
-import cc.hiver.mall.checkstock.mapper.CheckStockDetailMapper;
import cc.hiver.mall.checkstock.mapper.CheckStockMapper;
+import cc.hiver.mall.checkstock.pojo.CheckStockPageQuery;
+import cc.hiver.mall.checkstock.service.CheckStockDetailService;
import cc.hiver.mall.checkstock.service.CheckStockService;
+import cc.hiver.mall.checkstock.vo.CheckStockAttributeVo;
import cc.hiver.mall.checkstock.vo.CheckStockDetailVo;
+import cc.hiver.mall.checkstock.vo.CheckStockPageVo;
+import cc.hiver.mall.checkstock.vo.CheckStockVo;
import cc.hiver.mall.entity.Shop;
+import cc.hiver.mall.entity.Stock;
+import cc.hiver.mall.entity.StockLog;
import cc.hiver.mall.service.ShopService;
import cc.hiver.mall.service.mybatis.StockLogService;
import cc.hiver.mall.service.mybatis.StockService;
+import cc.hiver.mall.utils.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+/**
+ * 盘点服务实现类
+ *
+ * @author 王富康
+ * @date 2024/3/22
+ */
@Service
public class CheckStockServiceImpl extends ServiceImpl implements CheckStockService {
@@ -26,7 +44,7 @@ public class CheckStockServiceImpl extends ServiceImpl checkStockDetailVos) {
- // 设置店铺id为缓存中的内容
- // shopId从缓存中设置
+ public CheckStock addCheckStock(CheckStockVo checkStockVo) {
+ // 获取当前登录店铺的ID
final String shopId = securityUtil.getShopId();
+ // 根据店铺ID获取店铺信息
final Shop shop = shopService.get(shopId);
-
- // 1. 新增盘点信息
+ // 获取当前登录用户
+ final User user = securityUtil.getCurrUser();
+ // 新增盘点信息
final CheckStock checkStock = new CheckStock();
- // 创建的新对象是有id的
- // final String checkStockId = checkStock.getId();
+ // 设置创建人名称
+ checkStock.setCreateByName(user.getNickname());
+ // 设置店铺ID
checkStock.setShopId(shopId);
+ // 设置店铺名称
checkStock.setShopName(shop.getShopName());
+ // 将新的盘点信息插入数据库
checkStockMapper.insert(checkStock);
- /*final List checkStockDetailList = new ArrayList<>();
+ return checkStock;
+ }
+
+ /**
+ * 根据查询条件获取检查库存的页面视图对象。
+ *
+ * @param checkStockPageQuery 包含查询条件的查询对象,其中包含了检查库存的ID。
+ * @return 返回一个CheckStockPageVo对象,该对象包含了查询到的检查库存的详细信息及其明细。
+ */
+ @Override
+ public CheckStockPageVo getCheckStock(CheckStockPageQuery checkStockPageQuery) {
+ // 通过ID查询检查库存实体
+ final CheckStock checkStock = checkStockMapper.selectById(checkStockPageQuery.getCheckStockId());
+ // 创建一个检查库存的页面视图对象
+ final CheckStockPageVo checkStockVo = new CheckStockPageVo();
+ // 将实体对象的属性值复制到视图对象中
+ BeanUtils.copyBeanProp(checkStockVo, checkStock);
+ // 获取检查库存的明细信息
+ final Page checkStockDetailVos = checkStockDetailService.getByCheckStockDetailByCheckIdOfPage(checkStockPageQuery);
+ // 将明细信息设置到视图对象中
+ checkStockVo.setCheckStockDetailVoList(checkStockDetailVos);
+ return checkStockVo;
+ }
+
+
+ /**
+ * 提交盘点信息到库存系统
+ *
+ * @param id 盘点任务的唯一标识符
+ */
+ @Override
+ public void submitToStock(String id) {
+
+ // 更新盘点状态为已完成
+ final CheckStock checkStock = checkStockMapper.selectById(id);
+ // 标记为已删除,表示盘点已完成
+ checkStock.setDelFlag(1);
+ checkStockMapper.updateById(checkStock);
+
+ // 获取当前店铺ID
+ final String shopId = securityUtil.getShopId();
+
+ // 获取盘点详情信息
+ final List checkStockDetailVos = checkStockDetailService.getByCheckStockDetailByCheckId(id);
for (CheckStockDetailVo checkStockDetailVo : checkStockDetailVos) {
final List checkStockAttributeVos = checkStockDetailVo.getCheckStockAttributeVos();
+ final String productId = checkStockDetailVo.getProductId();
+ final String checkStockId = checkStockDetailVo.getCheckStockId();
+
+ // 遍历产品属性,更新库存信息
for (CheckStockAttributeVo checkStockAttributeVo : checkStockAttributeVos) {
- // 2. 新增盘点的商品明细
- final CheckStockDetail checkStockDetail = new CheckStockDetail();
- final String productId = checkStockDetailVo.getProductId();
final String attributeList = checkStockAttributeVo.getAttributeList();
- checkStockDetail.setCheckStockId(checkStockId);
- checkStockDetail.setShopId(shopId);
- checkStockDetail.setProductId(productId);
- checkStockDetail.setProductName(checkStockDetailVo.getProductName());
- checkStockDetail.setProductSn(checkStockDetailVo.getProductSn());
- checkStockDetail.setProductPicture(checkStockDetailVo.getProductPicture());
final Integer pdNum = checkStockAttributeVo.getPdNum();
- final Integer stockCount = checkStockAttributeVo.getStockCount();
- checkStockDetail.setPdNum(pdNum);
- final int changeCount = pdNum - stockCount;
- checkStockDetail.setChangeCount(changeCount);
- checkStockDetail.setStockCount(stockCount);
- checkStockDetail.setAttributeList(attributeList);
- checkStockDetailList.add(checkStockDetail);
-
final QueryWrapper stockQueryWrapper = new QueryWrapper<>();
stockQueryWrapper.eq("product_id", productId);
stockQueryWrapper.eq("attribute_list", attributeList);
- //存在库存则修改库存数量
+
+ // 查询库存信息,如果存在则更新库存数量
final Stock stock = stockService.getOne(stockQueryWrapper);
- // 计算并更新库存
+ // 获取更新前的库存数量
+ final Integer stockCount = stock.getStockCount();
+ // 计算库存数量变化
+ final Integer changeCount = stockCount - pdNum;
+ // 更新库存数量为盘点数量
stock.setStockCount(pdNum);
stockService.saveOrUpdate(stock);
- //2.记录库存履历
+ // 记录库存变动历史
final StockLog stockLog = new StockLog();
- //出库
+ // 盘点出库
stockLog.setChangeType("2");
stockLog.setOrderId(checkStockId);
stockLog.setProductId(productId);
stockLog.setAttributeList(attributeList);
- //出库前数量
+ // 更新前库存数量
stockLog.setStock(stockCount);
- //出库数量
+ // 出库数量(库存减少量)
stockLog.setProductCount(changeCount);
stockLog.setShopId(shopId);
stockLogService.save(stockLog);
}
}
- checkStockDetailMapper.batchInsertCheckStock(checkStockDetailList);*/
}
+
+ /**
+ * 获取盘点商品信息(分页)
+ *
+ * @param checkStockPageQuery 查询条件,包含分页信息和库存检查的条件。
+ * @return 返回库存检查结果的分页列表。
+ */
+ @Override
+ public Page getCheckStockList(CheckStockPageQuery checkStockPageQuery) {
+ // 获取当前店铺ID,并设置到查询条件中
+ final String shopId = securityUtil.getShopId();
+ checkStockPageQuery.setShopId(shopId);
+
+ // 初始化分页参数
+ final Page page = new Page<>(checkStockPageQuery.getPageNum(), checkStockPageQuery.getPageSize());
+
+ // 如果查询条件中包含结束日期,则将其设置为结束日期的次日,确保查询范围完整
+ if (StringUtils.isNotEmpty(checkStockPageQuery.getEndDate())) {
+ checkStockPageQuery.setEndDate(DateUtil.addDay(checkStockPageQuery.getEndDate(), 1));
+ }
+
+ // 执行查询,并返回结果
+ return checkStockMapper.getCheckStockList(page, checkStockPageQuery);
+ }
+
+ @Override
+ public void deleteCheckStock(String id) {
+ checkStockMapper.deleteById(id);
+ }
+
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockAttributeVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockAttributeVo.java
index e65930fc..8f5681bf 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockAttributeVo.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockAttributeVo.java
@@ -1,11 +1,17 @@
package cc.hiver.mall.checkstock.vo;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CheckStockAttributeVo {
+ @ApiModelProperty(value = "规格")
private String attributeList;
+
+ @ApiModelProperty(value = "盘点的数量")
private Integer pdNum;
+
+ @ApiModelProperty(value = "盘点前库存数量")
private Integer stockCount;
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockDetailVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockDetailVo.java
index 7fba9686..e0e113e1 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockDetailVo.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockDetailVo.java
@@ -1,5 +1,6 @@
package cc.hiver.mall.checkstock.vo;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@@ -7,9 +8,21 @@ import java.util.List;
@Data
public class CheckStockDetailVo {
+ @ApiModelProperty(value = "盘点表ID")
+ private String checkStockId;
+
+ @ApiModelProperty(value = "商品id")
private String productId;
+
+ @ApiModelProperty(value = "商品名称")
private String productName;
+
+ @ApiModelProperty(value = "商品图片")
private String productPicture;
+
+ @ApiModelProperty(value = "商品货号")
private String productSn;
+
+ @ApiModelProperty(value = "商品规格明细")
private List checkStockAttributeVos;
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockPageVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockPageVo.java
new file mode 100644
index 00000000..db50ead5
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/checkstock/vo/CheckStockPageVo.java
@@ -0,0 +1,27 @@
+package cc.hiver.mall.checkstock.vo;
+
+import cc.hiver.core.base.HiverBaseEntity;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class CheckStockPageVo extends HiverBaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "盘点人姓名")
+ private String createByName;
+
+ @ApiModelProperty(value = "店铺id")
+ private String shopId;
+
+ @ApiModelProperty(value = "店铺名称")
+ private String shopName;
+
+ @ApiModelProperty(value = "备注")
+ private String remark;
+
+ private Page checkStockDetailVoList;
+
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/common/constant/PurchaseConstant.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/common/constant/PurchaseConstant.java
new file mode 100644
index 00000000..351d211e
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/common/constant/PurchaseConstant.java
@@ -0,0 +1,20 @@
+package cc.hiver.mall.common.constant;
+
+/**
+ * 店铺常量
+ *
+ * @author cc
+ */
+public interface PurchaseConstant {
+
+ /**
+ * 入库状态:0:待入库(未维护对应的采购价信息);1:已入库;2:ocr入库(未识别)3:ocr入库(已识别);
+ */
+ int[] IN_STORAGE_STATUS = {0, 1, 2, 3};
+
+ /**
+ * ocr识别状态 0:(未识别)1:(已识别);
+ */
+ int[] OCR_STATUS = {0, 1};
+
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/aliocr/AliOcrConfig.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/aliocr/AliOcrConfig.java
new file mode 100644
index 00000000..25c8f895
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/aliocr/AliOcrConfig.java
@@ -0,0 +1,12 @@
+package cc.hiver.mall.config.aliocr;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "aliyun.openapi")
+public class AliOcrConfig {
+ private String apiKey;
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadConfig.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadConfig.java
new file mode 100644
index 00000000..a686257e
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadConfig.java
@@ -0,0 +1,22 @@
+package cc.hiver.mall.config.thread;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+public class ThreadConfig {
+
+ @Value("${spring.task.execution.pool.core-size}")
+ private int corePoolSize;
+
+ @Value("${spring.task.execution.pool.max-size}")
+ private int maxPoolSize;
+
+ @Value("${spring.task.execution.pool.queue-capacity}")
+ private int queueCapacity;
+
+ @Value("${spring.task.execution.pool.keep-alive}")
+ private int keepAliveSeconds;
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadPoolConfiguration.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadPoolConfiguration.java
new file mode 100644
index 00000000..74d83671
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadPoolConfiguration.java
@@ -0,0 +1,51 @@
+package cc.hiver.mall.config.thread;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 线程池bean
+ *
+ * @author 王富康
+ * @date 2023/3/24 10:03
+ **/
+@Configuration
+@Component
+public class ThreadPoolConfiguration {
+
+ /**
+ * 核心线程池大小-32
+ **/
+ private int corePoolSize = 10;
+ /**
+ * 最大可创建的线程数-50
+ **/
+ private int maxPoolSize = 50;
+ /**
+ * 线程池维护线程所允许的空闲时间-60
+ **/
+ private int keepAliveTime = 60;
+ /**
+ * 队列最大长度-100
+ **/
+ private int queueCapacity = 100;
+
+ @Bean(name = "threadPoolTaskExecutor")
+ public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
+ final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setMaxPoolSize(maxPoolSize);
+ executor.setCorePoolSize(corePoolSize);
+ executor.setQueueCapacity(queueCapacity);
+ executor.setKeepAliveSeconds(keepAliveTime);
+ //配置线程池中的线程的名称前缀
+ executor.setThreadNamePrefix("ocr-");
+ // 线程池对拒绝任务(无线程可用)的处理策略
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ executor.initialize();
+ return executor;
+ }
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/TimerThread.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/TimerThread.java
new file mode 100644
index 00000000..42830c09
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/TimerThread.java
@@ -0,0 +1,65 @@
+package cc.hiver.mall.config.thread;
+
+import cc.hiver.core.common.utils.ResultUtil;
+import cc.hiver.core.common.vo.Result;
+import cc.hiver.mall.common.constant.PurchaseConstant;
+import cc.hiver.mall.purchaseocr.entity.PurchaseOcrPicture;
+import cc.hiver.mall.purchaseocr.service.PurchaseOcrPictureService;
+import cc.hiver.mall.utils.AliOcrUtil;
+import cn.hutool.json.JSONObject;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.exception.UploadFileException;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/**
+ * 请详细描述方法
+ * @author 王富康
+ * @date 2024/3/24
+ */
+@Data
+@Slf4j
+public class TimerThread implements Callable {
+
+ private PurchaseOcrPictureService purchaseOcrPictureService;
+ private List purchaseOcrPictureAddList;
+
+ public TimerThread() {
+ }
+
+ public TimerThread(List purchaseOcrPictureAddList,PurchaseOcrPictureService purchaseOcrPictureService) {
+ this.purchaseOcrPictureAddList = purchaseOcrPictureAddList;
+ this.purchaseOcrPictureService = purchaseOcrPictureService;
+ }
+ /**
+ * 每个线程拿到数据后如何去处理
+ *
+ * @return
+ */
+ public Result call() {
+ try {
+ log.info("当前线程名称:------------>>>>>"+Thread.currentThread().getName());
+ for (PurchaseOcrPicture purchaseOcrPicture : purchaseOcrPictureAddList) {
+ try {
+ log.info("正在ocr识别:" + purchaseOcrPicture.getOcrPicture() + "
线程池名称:"+Thread.currentThread().getName());
+ final JSONObject jsonObject = AliOcrUtil.simpleMultiModalConversationCall(purchaseOcrPicture.getOcrPicture());
+ // 得到处理结果之后,开始新增库存的详细信息
+ log.info("识别结果:" + jsonObject);
+ purchaseOcrPicture.setOcrMsg(jsonObject.get("msg").toString());
+ purchaseOcrPicture.setOcrStatus(PurchaseConstant.OCR_STATUS[1]);
+ } catch (NoApiKeyException e) {
+ throw new RuntimeException(e);
+ } catch (UploadFileException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ purchaseOcrPictureService.batchUpdate(purchaseOcrPictureAddList);
+ } catch (Exception e) {
+ log.error("timerThread出错,线程------>" + Thread.currentThread().getName(), e);
+ }
+ return ResultUtil.success();
+ }
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java
index b82aac4d..c676db63 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java
@@ -77,7 +77,7 @@ public class OrderController {
public Result> getByCondition(OrderXd order,
SearchVo searchVo,
PageVo pageVo) {
- final Page page = orderService.findByCondition(order, searchVo, PageUtil.initPage(pageVo));
+ final Page page = orderService.findByCondition(order, searchVo, PageUtil.initPage(pageVo));
return new ResultUtil>().setData(page);
}
@@ -135,6 +135,11 @@ public class OrderController {
// 更新订单状态为待取货
orderxd.setOrderStatus(OrderConstant.ORDER_STATUS[1]);
orderxd.setGetTime(new Date());
+ // 增加配送人员的联系方式
+ // 获取拉包工信息
+ final Worker worker = workerService.findByWorkerId(orderXd.getOrderByWorker());
+ final String workerMobile = worker.getMobile();
+ orderxd.setWorkerMobile(workerMobile);
orderService.update(orderxd);
// 更新订单状态为待取货
final String orderId = orderxd.getOrderId();
@@ -151,6 +156,11 @@ public class OrderController {
orderxd.setOrderByWorker(orderXd.getOrderByWorker());
// 更新订单状态为待取货
orderxd.setOrderStatus(OrderConstant.ORDER_STATUS[7]);
+ // 增加配送人员的联系方式
+ // 获取拉包工信息
+ final Worker worker = workerService.findByWorkerId(orderXd.getOrderByWorker());
+ final String workerMobile = worker.getMobile();
+ orderxd.setWorkerMobile(workerMobile);
orderService.update(orderxd);
// 更新订单状态为待取货
final String orderId = orderxd.getOrderId();
@@ -342,10 +352,10 @@ public class OrderController {
saleService.saveOrUpdate(sale);
// 扣减配送人员、配送公司的押金、增加店铺返佣
- String workId = orderQueryVO.getOrderByWorker();
- String transCompanyId = sale.getTransCompany();
- String shopId = sale.getShopId();
- String saleId = sale.getId();
+ final String workId = orderQueryVO.getOrderByWorker();
+ final String transCompanyId = sale.getTransCompany();
+ final String shopId = sale.getShopId();
+ final String saleId = sale.getId();
deductLogService.updateRebateAmount(workId, transCompanyId, shopId, saleId);
}
@@ -384,10 +394,11 @@ public class OrderController {
/**
* 后台管理系统获取订单信息
+ *
+ * @param orderQueryVO
+ * @return Result>
* @author 王富康
* @date 2024/2/27
- * @param orderQueryVO
- * @return Result>
*/
@RequestMapping(value = "/ow/getOrderList", method = RequestMethod.POST)
@ApiOperation("后台管理系统获取订单信息")
@@ -398,24 +409,25 @@ public class OrderController {
/**
* 转单接口
- * @author 王富康
- * @date 2024/2/27
+ *
* @param orderXd
* @return Result
+ * @author 王富康
+ * @date 2024/2/27
*/
@RequestMapping(value = "/ow/transferOrder", method = RequestMethod.POST)
@ApiOperation("转单接口")
public Result transferOrder(@RequestBody OrderVO orderVO) {
- if(StringUtils.isEmpty(orderVO.getOrderId())){
+ if (StringUtils.isEmpty(orderVO.getOrderId())) {
return ResultUtil.error("订单信息不能为空!");
}
- if(StringUtils.isEmpty(orderVO.getOrderByWorker())){
+ if (StringUtils.isEmpty(orderVO.getOrderByWorker())) {
return ResultUtil.error("转单人员不能为空!");
}
- try{
+ try {
orderService.transferOrder(orderVO);
return ResultUtil.success("转单成功");
- }catch (Exception e){
+ } catch (Exception e) {
return ResultUtil.error("转单失败");
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java
index 969a8328..892d075a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java
@@ -4,6 +4,7 @@ import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.vo.Result;
import cc.hiver.mall.entity.ProductCategory;
+import cc.hiver.mall.pojo.vo.ProductCategoryVo;
import cc.hiver.mall.service.mybatis.ProductCategoryService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
@@ -11,6 +12,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@@ -80,4 +82,15 @@ public class ProductCategoryController {
return new ResultUtil>().setData(list);
}
+
+ @RequestMapping(value = "/batchSaveCategoryAndAttribute", method = RequestMethod.POST)
+ @ApiOperation(value = "一键新增类别及分类信息")
+ public Result batchSaveCategoryAndAttribute(@RequestBody ProductCategoryVo productCategoryVo) {
+ boolean result = productCategoryService.batchSaveCategoryAndAttribute(productCategoryVo);
+ if (result) {
+ return ResultUtil.success("添加成功");
+ } else {
+ return ResultUtil.error("添加失败");
+ }
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductController.java
index 18791e7c..238c2019 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductController.java
@@ -2,6 +2,7 @@ package cc.hiver.mall.controller;
import cc.hiver.core.common.annotation.RateLimiter;
import cc.hiver.core.common.constant.CommonConstant;
+import cc.hiver.core.common.constant.ProductConstant;
import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.vo.Result;
@@ -66,7 +67,7 @@ public class ProductController {
@ApiOperation(value = "根据货品id上架货品")
public Result up(String id) {
UpdateWrapper updateWrapper = new UpdateWrapper<>();
- updateWrapper.set("del_flag", 1);
+ updateWrapper.set("del_flag", ProductConstant.DEL_FLAG[1]);
updateWrapper.eq("id", id);
boolean result = productService.update(updateWrapper);
if (result) {
@@ -80,7 +81,7 @@ public class ProductController {
@ApiOperation(value = "根据货品id下架货品")
public Result down(String id) {
UpdateWrapper updateWrapper = new UpdateWrapper<>();
- updateWrapper.set("del_flag", 0);
+ updateWrapper.set("del_flag", ProductConstant.DEL_FLAG[0]);
updateWrapper.eq("id", id);
boolean result = productService.update(updateWrapper);
if (result) {
@@ -92,8 +93,11 @@ public class ProductController {
@RequestMapping(value = "/delById", method = RequestMethod.POST)
@ApiOperation(value = "根据id删除货品")
- public Result delete(@RequestBody Product product) {
- boolean result = productService.removeById(product);
+ public Result delete(String id) {
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.set("del_flag", ProductConstant.DEL_FLAG[2]);
+ updateWrapper.eq("id", id);
+ boolean result = productService.update(updateWrapper);
if (result) {
return ResultUtil.success("删除成功");
} else {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PurchaseController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PurchaseController.java
index a5de184d..19e99a89 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PurchaseController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PurchaseController.java
@@ -51,6 +51,7 @@ public class PurchaseController {
final Purchase purchase = purchaseVo.getPurchase();
final List purchaseDetails = purchaseVo.getPurchaseDetails();
final Random random = new Random();
+ // 生成条码
for (PurchaseDetail purchaseDetail : purchaseDetails) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < 20; i++) {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java
index 9ed44bed..9fdf9612 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java
@@ -25,7 +25,7 @@ import java.util.List;
@Slf4j
@RestController
-@Api(tags = "店铺返佣接口")
+@Api(tags = "店铺提现接口")
@RequestMapping("/hiver/app/returnCommission/")
@Transactional
public class ReturnCommissionController {
@@ -39,7 +39,7 @@ public class ReturnCommissionController {
private SecurityUtil securityUtil;
@RequestMapping(value = "/save", method = RequestMethod.POST)
- @ApiOperation("新增店铺返佣")
+ @ApiOperation("新增店铺提现")
public Result save(ReturnCommission returnCommission) {
final boolean result = returnCommissionService.save(returnCommission);
if (result) {
@@ -72,7 +72,7 @@ public class ReturnCommissionController {
}
@RequestMapping(value = "/listWithNoReturn", method = RequestMethod.GET)
- @ApiOperation(value = "查询商铺未处理的返佣记录", httpMethod = "GET")
+ @ApiOperation(value = "查询商铺未处理的提现记录", httpMethod = "GET")
public Result listWithNoReturn(@ApiParam(value = "商铺id", required = true) @RequestParam(value = "shopId", required = true) String shopId) {
final QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("shop_id", shopId);
@@ -96,7 +96,7 @@ public class ReturnCommissionController {
@Transactional
@RequestMapping(value = "/handleReturn", method = RequestMethod.POST)
- @ApiOperation("返佣处理")
+ @ApiOperation("提现处理")
public Result handleReturn(@RequestBody ReturnCommission returnCommission) {
final String shopId = securityUtil.getShopId();
@@ -156,12 +156,12 @@ public class ReturnCommissionController {
returnCommission.setRemark(e.getErrMsg());
aliResult = "支付宝转账失败,请联系管理员!";
}
- //2.修改返佣记录
+ //2.修改提现记录
result = returnCommissionService.save(returnCommission);
if (result) {
return ResultUtil.success("处理完成," + aliResult);
} else {
- return ResultUtil.error("修改返佣数据失败," + aliResult);
+ return ResultUtil.error("修改提现数据失败," + aliResult);
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnSaleController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnSaleController.java
index 12bd505a..3b4e580d 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnSaleController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnSaleController.java
@@ -425,4 +425,15 @@ public class ReturnSaleController {
final long waitReturnCount = returnSaleService.count(querySaleWrapper);
return ResultUtil.data(waitReturnCount);
}
+
+ @RequestMapping(value = "/cancelOrder", method = RequestMethod.POST)
+ @ApiOperation("取消配送")
+ public Result cancelOrder(String orderId) {
+ final ReturnSale returnSale = returnSaleService.getById(orderId);
+ returnSale.setStatus(SaleConstant.SALE_STATUS[4]);
+ returnSaleService.saveOrUpdate(returnSale);
+ // 同时取消订单
+ orderService.delete(orderId);
+ return ResultUtil.success("取消配送成功");
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java
index 06f74416..760b307c 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java
@@ -898,4 +898,14 @@ public class SaleController {
final Page saleNoWorkerVOPage = saleService.getSaleByCompanyId(salePageQuery);
return ResultUtil.data(saleNoWorkerVOPage);
}
+
+ @RequestMapping(value = "/companyGetSale", method = RequestMethod.POST)
+ @ApiOperation("物流公司-确认取货")
+ public Result companyGetSale(String saleId) {
+ if(StringUtils.isEmpty(saleId)){
+ ResultUtil.error("订单id不能为空");
+ }
+ saleService.companyGetSale(saleId);
+ return ResultUtil.success("取货成功!");
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/StockController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/StockController.java
index 90341766..80f30daa 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/StockController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/StockController.java
@@ -4,9 +4,11 @@ import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.vo.Result;
import cc.hiver.mall.entity.Stock;
+import cc.hiver.mall.pojo.query.StockPageQuery;
import cc.hiver.mall.pojo.vo.ProductCategoryStockVo;
import cc.hiver.mall.pojo.vo.PurchaseVo;
import cc.hiver.mall.pojo.vo.ShopStockVo;
+import cc.hiver.mall.pojo.vo.StockProductVo;
import cc.hiver.mall.service.mybatis.StockService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
@@ -169,5 +171,18 @@ public class StockController {
return ResultUtil.data(list);
}
+ /**
+ * 获取店铺所有达到库存预警的商品信息
+ * @author 王富康
+ * @date 2024/3/18
+ * @param stockPageQuery
+ * @return Result
+ */
+ @RequestMapping(value = "/getTailWarnProduct", method = RequestMethod.POST)
+ @ApiOperation(value = "获取店铺所有达到库存预警的商品信息")
+ public Result getTailWarnProduct(StockPageQuery stockPageQuery){
+ final List checkStockList = stockService.getTailWarnProduct(stockPageQuery);
+ return new ResultUtil>().setData(checkStockList);
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseDetailMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseDetailMapper.java
index 9e9a5ad7..5b597a37 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseDetailMapper.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseDetailMapper.java
@@ -33,5 +33,5 @@ public interface PurchaseDetailMapper extends BaseMapper {
List getByPurchaseId(String id);
- List getByPurchaseIdList(@Param("purchaseIds") List purchaseIds);
+ List getByPurchaseIdList(@Param("purchaseIds") List purchaseIds, @Param("productId") String productId);
}
\ No newline at end of file
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/SaleMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/SaleMapper.java
index 42b97756..2e38c507 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/SaleMapper.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/SaleMapper.java
@@ -3,6 +3,7 @@ package cc.hiver.mall.dao.mapper;
import cc.hiver.mall.entity.Sale;
import cc.hiver.mall.entity.SaleExample;
import cc.hiver.mall.pojo.dto.ShopRevenue;
+import cc.hiver.mall.pojo.query.SalePageQuery;
import cc.hiver.mall.pojo.query.SalesRankingQueryCriteria;
import cc.hiver.mall.pojo.vo.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -73,5 +74,7 @@ public interface SaleMapper extends BaseMapper {
Page getSupplierBuyProductLog(Page page, @Param("supplierId") String supplierId, @Param("shopId") String shopId);
- Page getSaleByCompanyId(Page page, @Param("companyId") String companyId);
+ Page getSaleByCompanyId(Page page, @Param("salePageQuery") SalePageQuery salePageQuery);
+
+ void companyGetSale(@Param("saleId")String saleId);
}
\ No newline at end of file
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockLogMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockLogMapper.java
index 6baae65d..e418f0b7 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockLogMapper.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockLogMapper.java
@@ -33,5 +33,5 @@ public interface StockLogMapper extends BaseMapper {
int updateByPrimaryKey(StockLog record);
- List getByPurchaseIds(@Param("purchaseIds") List purchaseIds);
+ List getByPurchaseIds(@Param("purchaseIds") List purchaseIds,@Param("productId")String productId);
}
\ No newline at end of file
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockMapper.java
index d91d5b2b..08850d99 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockMapper.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/StockMapper.java
@@ -2,6 +2,7 @@ package cc.hiver.mall.dao.mapper;
import cc.hiver.mall.entity.Stock;
import cc.hiver.mall.entity.StockExample;
+import cc.hiver.mall.pojo.query.StockPageQuery;
import cc.hiver.mall.pojo.vo.ProductCategoryStockVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
@@ -37,4 +38,6 @@ public interface StockMapper extends BaseMapper {
String productCount(@Param("productId")String productId, @Param("attributeList")String attributeList);
List getlistByAttributeList(@Param("id")String id, @Param("shopId")String shopId, @Param("attributeList")String attributeList);
+
+ List getTailWarnProduct(@Param("stockPageQuery") StockPageQuery stockPageQuery);
}
\ No newline at end of file
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/impl/DeductLogServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/impl/DeductLogServiceImpl.java
index ab8b222a..956dc7cf 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/impl/DeductLogServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/impl/DeductLogServiceImpl.java
@@ -128,7 +128,11 @@ public class DeductLogServiceImpl extends ServiceImpl0){
+ // 固定扣减金额大于0,才去更新,否则,没变化不用更新
+ workerService.update(worker);
+ }
+
}
// 获取物流公司信息
@@ -143,58 +147,61 @@ public class DeductLogServiceImpl extends ServiceImpl0){
+ companyService.update(logiticsCompany);
+ }
}
- // 获取店铺信息
- final Shop shop = shopService.findById(shopId);
- final String shopName = shop.getShopName();
- // 返佣金额
- final BigDecimal shopBefRebateAmount = shop.getRebateAmount() == null ? BigDecimal.valueOf(0) : shop.getRebateAmount();
-
- // 本次返佣金额
- final BigDecimal shopRebateAmount = companyRebateAmount.add(workerRebateAmount);
- // 返佣后金额
- final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.add(shopRebateAmount);
- // 更新返佣金额
- shop.setRebateAmount(shopAfterRebateAmount);
- shopService.update(shop);
-
- // 保存押金扣减记录表
- final DeductLog deductLog = new DeductLog();
- deductLog.setCreateTime(new Date());
- deductLog.setSaleId(saleId);
- deductLog.setCompanyId(transCompanyId);
- deductLog.setCompanyName(companyName);
- deductLog.setCompanyFixedAmount(companyFixedAmount);
- deductLog.setCompanyRebateAmount(companyRebateAmount);
- deductLog.setCompanyBefDepoBal(companyDepoBal);
- deductLog.setCompanyAfterDepoBal(companyAfterDepoBal);
-
- if (StringUtils.isNotEmpty(workId) && worker != null) {
- // 选择了拉包工,那么就需要返佣
- deductLog.setWorkerId(worker.getWorkerId());
- deductLog.setWorkerName(worker.getWorkerName());
- deductLog.setWorkerFixedAmount(workerFixedAmount);
- deductLog.setWorkerRebateAmount(workerRebateAmount);
- deductLog.setWorkerBefDepoBal(workerBefDepoBal);
- deductLog.setWorkerAfterDepoBal(workerAfterDepoBal);
+ // 如果拉包工的返佣金额或者物流公司的返佣金额任意之一大于0,才去更新,店铺返佣金额,及更新记录
+ if(companyRebateAmount.compareTo(BigDecimal.valueOf(0))>0 ||workerRebateAmount.compareTo(BigDecimal.valueOf(0))>0){
+ // 获取店铺信息
+ final Shop shop = shopService.findById(shopId);
+ final String shopName = shop.getShopName();
+ // 返佣金额
+ final BigDecimal shopBefRebateAmount = shop.getRebateAmount() == null ? BigDecimal.valueOf(0) : shop.getRebateAmount();
+ // 本次返佣金额
+ final BigDecimal shopRebateAmount = companyRebateAmount.add(workerRebateAmount);
+ // 返佣后金额
+ final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.add(shopRebateAmount);
+ // 更新返佣金额
+ shop.setRebateAmount(shopAfterRebateAmount);
+ shopService.update(shop);
+
+ // 保存押金扣减记录表
+ final DeductLog deductLog = new DeductLog();
+ deductLog.setCreateTime(new Date());
+ deductLog.setSaleId(saleId);
+ deductLog.setCompanyId(transCompanyId);
+ deductLog.setCompanyName(companyName);
+ deductLog.setCompanyFixedAmount(companyFixedAmount);
+ deductLog.setCompanyRebateAmount(companyRebateAmount);
+ deductLog.setCompanyBefDepoBal(companyDepoBal);
+ deductLog.setCompanyAfterDepoBal(companyAfterDepoBal);
+
+ if (StringUtils.isNotEmpty(workId) && worker != null) {
+ // 选择了拉包工,那么就需要返佣
+ deductLog.setWorkerId(worker.getWorkerId());
+ deductLog.setWorkerName(worker.getWorkerName());
+ deductLog.setWorkerFixedAmount(workerFixedAmount);
+ deductLog.setWorkerRebateAmount(workerRebateAmount);
+ deductLog.setWorkerBefDepoBal(workerBefDepoBal);
+ deductLog.setWorkerAfterDepoBal(workerAfterDepoBal);
+ }
+
+ deductLog.setShopId(shopId);
+ deductLog.setShopName(shopName);
+ deductLog.setShopBefRebateAmount(shopBefRebateAmount);
+ deductLog.setShopAfterRebateAmount(shopAfterRebateAmount);
+ deductLog.setShopRebateAmount(shopRebateAmount);
+ if (shopBefRebateAmount.compareTo(BigDecimal.valueOf(0)) > 0) {
+ // 返佣金额大于0的时候再保存返佣记录
+ saveDeductLog(deductLog);
+ }
}
-
- deductLog.setShopId(shopId);
- deductLog.setShopName(shopName);
- deductLog.setShopBefRebateAmount(shopBefRebateAmount);
- deductLog.setShopAfterRebateAmount(shopAfterRebateAmount);
- deductLog.setShopRebateAmount(shopRebateAmount);
- if (shopBefRebateAmount.compareTo(BigDecimal.valueOf(0)) > 0) {
- // 返佣金额大于0的时候再保存返佣记录
- saveDeductLog(deductLog);
- }
-
}
@Override
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Customer.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Customer.java
index 16e633cc..041fd592 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Customer.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Customer.java
@@ -60,4 +60,8 @@ public class Customer implements Serializable {
@ApiModelProperty(value = "登录账号")
private String userName;
+ @TableField(exist = false)
+ @ApiModelProperty(value = "欠款")
+ private String noEarn;
+
}
\ No newline at end of file
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/OrderXd.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/OrderXd.java
index a7b7cdf1..fe325d37 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/OrderXd.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/OrderXd.java
@@ -215,6 +215,12 @@ public class OrderXd implements Serializable {
@Column(name = "transCompany")
private String transCompany;
+ /**
+ * 运送公司名称
+ */
+ @ApiModelProperty("运送公司名称")
+ private String companyName;
+
/**
* 乐观锁
*/
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ProductCategory.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ProductCategory.java
index 649ca18d..e629cde7 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ProductCategory.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ProductCategory.java
@@ -1,29 +1,15 @@
package cc.hiver.mall.entity;
-import cc.hiver.core.common.utils.SnowFlakeUtil;
+import cc.hiver.core.base.HiverBaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import java.io.Serializable;
-import java.util.Date;
-
@Data
@ApiModel(value = "商品类别表")
@TableName(value = "t_product_category", autoResultMap = true)
-public class ProductCategory implements Serializable {
- private String id = SnowFlakeUtil.nextId().toString();
-
- private String createBy;
-
- private Date createTime;
-
- private Integer delFlag;
-
- private String updateBy;
-
- private Date updateTime;
+public class ProductCategory extends HiverBaseEntity {
@ApiModelProperty(value = "商品类别名称")
private String categoryName;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ReturnSale.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ReturnSale.java
index 4c283c4f..12abd1e4 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ReturnSale.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/ReturnSale.java
@@ -94,6 +94,9 @@ public class ReturnSale implements Serializable {
@ApiModelProperty(value = "物流公司")
private String transCompany;
+ @ApiModelProperty(value = "物流公司")
+ private String transCompanyName;
+
@ApiModelProperty(value = "下单总件数")
private int productCount;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java
index fd5bc290..f7f72d1a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java
@@ -99,7 +99,7 @@ public class Sale implements Serializable {
@ApiModelProperty(value = "订单状态 1-拣货中 2-已预定 3-已作废 4-已取货 5-已送达")
private String status;
- @ApiModelProperty(value = "物流类别 1-物流 2-自提 3-快递 4-拼单")
+ @ApiModelProperty(value = "物流类别 1-物流 2-自提 3-快递 4-拼单 8-物流上门(待取货) 9-物流上门(已取货)")
private String transportType;
@ApiModelProperty(value = "拼单店铺地址 为拼单类别时手动输入")
@@ -138,6 +138,9 @@ public class Sale implements Serializable {
@ApiModelProperty(value="其他费用")
private BigDecimal otherExpense;
+ @ApiModelProperty(value="配送方式 0-平台配送 1-自送 2-物流自提")
+ private String modeOfService;
+
@Transient
@TableField(exist = false)
@ApiModelProperty(value="商品详情")
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Share.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Share.java
index eca2d02b..805ea58a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Share.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Share.java
@@ -76,6 +76,9 @@ public class Share extends HiverBaseEntity {
@ApiModelProperty(value = "商铺id")
private String shopId;
+ @ApiModelProperty(value = "商铺名称")
+ private String shopName;
+
@ApiModelProperty(value = "勾选分享时,存的商品主键")
private String shareProductId;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/mapper/OperatingAreaMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/mapper/OperatingAreaMapper.java
index eb9983c7..81f4182b 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/mapper/OperatingAreaMapper.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/mapper/OperatingAreaMapper.java
@@ -14,6 +14,7 @@ import java.util.List;
public interface OperatingAreaMapper extends BaseMapper {
List getByArea(@Param("province") String province, @Param("city") String city, @Param("area") String area, @Param("shippingType") String shippingType, @Param("seachParams") String seachParams);
+ List getByAreaOfCompany(@Param("province") String province, @Param("city") String city, @Param("area") String area, @Param("shippingType") String shippingType, @Param("seachParams") String seachParams);
List getOperatingAreaList(Page page, @Param("queryParams") OperatingAreaPageQuery operatingAreaPageQuery);
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/service/impl/OperatingAreaServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/service/impl/OperatingAreaServiceImpl.java
index b4b4e4a5..bef52597 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/service/impl/OperatingAreaServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/service/impl/OperatingAreaServiceImpl.java
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -48,21 +49,23 @@ public class OperatingAreaServiceImpl extends ServiceImpl resultMap = new HashMap<>();
// 当输入搜索条件时不需要查询线路相关的,只需要返回符合条件的物流公司信息即可
- // if(StringUtils.isEmpty(seachParams)){
+ if(StringUtils.isEmpty(seachParams)){
// 根据区域获取物流公司
- final List operatingAreaList = operatingAreaMapper.getByArea(province, city, area, shippingType, seachParams);
+ final List operatingAreaList = operatingAreaMapper.getByAreaOfCompany(province, city, area, shippingType, seachParams);
resultMap.put("operatingAreaList", operatingAreaList);
- // }
-
- // 获取所有已上线、未删除的物流公司
- final LogiticsCompanyQueryVo logiticsCompany = new LogiticsCompanyQueryVo();
- // 根据公司名称模糊查询的
- logiticsCompany.setSeachParams(seachParams);
- logiticsCompany.setDelFlag(CommonConstant.DEL_FLAG_FALSE);
- logiticsCompany.setIsOnLine(CommonConstant.ON_LINE);
- logiticsCompany.setSignCompany(shippingType);
- final List logiticsCompanyList = logiticsCompanyService.findByCondition(logiticsCompany);
- resultMap.put("logiticsCompanyList", logiticsCompanyList);
+ // 获取所有已上线、未删除的物流公司
+ final LogiticsCompanyQueryVo logiticsCompany = new LogiticsCompanyQueryVo();
+ // 根据公司名称模糊查询的
+ logiticsCompany.setSeachParams(seachParams);
+ logiticsCompany.setDelFlag(CommonConstant.DEL_FLAG_FALSE);
+ logiticsCompany.setIsOnLine(CommonConstant.ON_LINE);
+ logiticsCompany.setSignCompany(shippingType);
+ final List logiticsCompanyList = logiticsCompanyService.findByCondition(logiticsCompany);
+ resultMap.put("logiticsCompanyList", logiticsCompanyList);
+ }else{
+ final List operatingAreaList = operatingAreaMapper.getByAreaOfCompany(province, city, area, shippingType, seachParams);
+ resultMap.put("operatingAreaList", operatingAreaList);
+ }
return resultMap;
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/vo/OperatingAreaPageVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/vo/OperatingAreaPageVO.java
index f0d76a7d..3b640e09 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/vo/OperatingAreaPageVO.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/operatingarea/vo/OperatingAreaPageVO.java
@@ -60,4 +60,10 @@ public class OperatingAreaPageVO {
@ApiModelProperty("返佣金额")
private String rebateAmount;
+
+ @ApiModelProperty("上线状态")
+ private String isOnLine;
+
+ @ApiModelProperty(value = "是否支持上门取货")
+ private Integer canToDoor;
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/ProductPageQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/ProductPageQuery.java
index 79a453f5..e9e93891 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/ProductPageQuery.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/ProductPageQuery.java
@@ -61,6 +61,9 @@ public class ProductPageQuery extends HiverBasePageQuery {
@ApiModelProperty("排序规则(asc:升序;desc:降序)")
private String sort;
+ @ApiModelProperty("根据商品状态查询,这里暂时只有分享页使用到了,传1,只查询上架状态的数据")
+ private Integer delFlag;
+
@ApiModelProperty("查询条件")
private String searchStr;
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/SalePageQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/SalePageQuery.java
index f340a1b6..48e002f5 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/SalePageQuery.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/SalePageQuery.java
@@ -42,4 +42,13 @@ public class SalePageQuery extends HiverBasePageQuery {
@ApiModelProperty("物流公司id")
private String companyId;
+ @ApiModelProperty("配送方式")
+ private String transportType;
+
+ @ApiModelProperty(value="配送方式 0-平台配送 1-自送 2-物流自提")
+ private String modeOfService;
+
+ @ApiModelProperty("订单状态")
+ private String status;
+
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/StockPageQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/StockPageQuery.java
index 03abbe96..4495ed1e 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/StockPageQuery.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/StockPageQuery.java
@@ -32,5 +32,11 @@ public class StockPageQuery extends HiverBasePageQuery {
@ApiModelProperty("商品ID")
private String productId;
+ @ApiModelProperty("商品ID")
+ private String shopId;
+
+ @ApiModelProperty("查询条件")
+ private String searchStr;
+
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeOfAddVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeOfAddVo.java
new file mode 100644
index 00000000..39911b2e
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeOfAddVo.java
@@ -0,0 +1,24 @@
+package cc.hiver.mall.pojo.vo;
+
+import cc.hiver.core.base.HiverBaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "商品规格属性")
+public class ProductAttributeOfAddVo extends HiverBaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "商品类别ID")
+ private String categoryId;
+
+ @ApiModelProperty(value = "属性名称")
+ private String attributeName;
+
+ private List productAttributeValueVoList;
+
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeValueVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeValueVo.java
new file mode 100644
index 00000000..a0d11ec5
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductAttributeValueVo.java
@@ -0,0 +1,20 @@
+package cc.hiver.mall.pojo.vo;
+
+import cc.hiver.core.base.HiverBaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "商品属性值表")
+public class ProductAttributeValueVo extends HiverBaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "商品属性ID")
+ private String attributeId;
+
+ @ApiModelProperty(value = "属性值")
+ private String value;
+
+}
\ No newline at end of file
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductCategoryVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductCategoryVo.java
new file mode 100644
index 00000000..e0993129
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductCategoryVo.java
@@ -0,0 +1,26 @@
+package cc.hiver.mall.pojo.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@ApiModel(value = "类别Vo")
+public class ProductCategoryVo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "商品类别名称")
+ private String categoryName;
+
+ @ApiModelProperty(value = "店铺id")
+ private String shopId;
+
+ @ApiModelProperty(value = "分类列表")
+ private List productAttributeOfAddVos;
+
+
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockAttributeVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockAttributeVo.java
new file mode 100644
index 00000000..7c9ee92d
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockAttributeVo.java
@@ -0,0 +1,15 @@
+package cc.hiver.mall.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class StockAttributeVo {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "商品规格")
+ private String attributeList;
+
+ @ApiModelProperty(value = "库存数")
+ private Integer stockCount;
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockProductVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockProductVo.java
new file mode 100644
index 00000000..04867474
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/StockProductVo.java
@@ -0,0 +1,32 @@
+package cc.hiver.mall.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class StockProductVo {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "商品名称")
+ private String productName;
+
+ @ApiModelProperty(value = "货号")
+ private String productSn;
+
+ @ApiModelProperty(value = "货品图片")
+ private String productPicture;
+
+ @ApiModelProperty(value = "条码")
+ private String barcode;
+
+ @ApiModelProperty(value = "尾货预警")
+ private Integer tailWarn;
+
+ @ApiModelProperty(value = "商品总库存(某一规格库存为负数的按0计算总数)")
+ private Integer stockCount;
+
+ @ApiModelProperty(value = "商品规格")
+ private List stockAttributeVoList;
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/controller/PurchaseOcrPictureController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/controller/PurchaseOcrPictureController.java
new file mode 100644
index 00000000..30f30783
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/controller/PurchaseOcrPictureController.java
@@ -0,0 +1,54 @@
+package cc.hiver.mall.purchaseocr.controller;
+
+import cc.hiver.core.common.utils.ResultUtil;
+import cc.hiver.core.common.vo.Result;
+import cc.hiver.mall.purchaseocr.service.PurchaseOcrPictureService;
+import cc.hiver.mall.purchaseocr.vo.PurchaseOciPictureAddVo;
+import cn.hutool.json.JSONObject;
+import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.exception.UploadFileException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@Api(tags = "问题反馈接口")
+@RequestMapping("/hiver/purchaseOcrPicture/")
+@Transactional
+public class PurchaseOcrPictureController {
+
+ @Autowired
+ private PurchaseOcrPictureService purchaseOcrPictureService;
+
+ @RequestMapping(value = "/batchSave", method = RequestMethod.POST)
+ @ApiOperation("新增或编辑OCR识别信息")
+ public Result batchSave(@RequestBody PurchaseOciPictureAddVo purchaseOciPictureAddVo) {
+ JSONObject jsonObject = purchaseOcrPictureService.batchSave(purchaseOciPictureAddVo);
+ return new ResultUtil().setData(jsonObject);
+ }
+
+ @RequestMapping(value = "/invoicingAi", method = RequestMethod.POST)
+ @ApiOperation("AI开单")
+ public Result invoicingAi(String questionMsg) throws NoApiKeyException, InputRequiredException {
+ JSONObject jsonObject = purchaseOcrPictureService.invoicingAi(questionMsg);
+ return new ResultUtil().setData(jsonObject);
+ }
+
+ @RequestMapping(value = "/multiRoundConversationCall", method = RequestMethod.POST)
+ @ApiOperation("图片识别-多轮对话")
+ public List multiRoundConversationCall(String picturePath, String firstQuestionMsg, String secondQuestionMsg) throws NoApiKeyException, InputRequiredException, UploadFileException {
+ List multiModalConversationResults = purchaseOcrPictureService.multiRoundConversationCall(picturePath,firstQuestionMsg, secondQuestionMsg);
+ return multiModalConversationResults;
+ }
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/entity/PurchaseOcrPicture.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/entity/PurchaseOcrPicture.java
new file mode 100644
index 00000000..a034e88c
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/entity/PurchaseOcrPicture.java
@@ -0,0 +1,42 @@
+package cc.hiver.mall.purchaseocr.entity;
+
+import cc.hiver.core.base.HiverBaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * ai图片表
+ * @author 王富康
+ * @date 2024/3/23
+ */
+@Data
+@ApiModel(value = "ai图片表")
+@TableName(value = "t_purchase_ocr_picture", autoResultMap = true)
+public class PurchaseOcrPicture extends HiverBaseEntity {
+
+ @ApiModelProperty(value = "创建人名称")
+ private String createByName;
+
+ @ApiModelProperty(value = "采购单id")
+ private String orderId;
+
+ @ApiModelProperty(value = "图片路径")
+ private String ocrPicture;
+
+ @ApiModelProperty(value = "图片顺序")
+ private String ocrPictureOrder;
+
+ @ApiModelProperty(value = "识别标识:0:未识别;1:识别成功;2:识别失败")
+ private Integer ocrStatus;
+
+ @ApiModelProperty(value = "识别结果")
+ private String ocrMsg;
+
+ @ApiModelProperty(value = "店铺ID")
+ private String shopId;
+
+ @ApiModelProperty(value = "店铺名称")
+ private String shopName;
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/mapper/PurchaseOcrPictureMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/mapper/PurchaseOcrPictureMapper.java
new file mode 100644
index 00000000..f28afbff
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/mapper/PurchaseOcrPictureMapper.java
@@ -0,0 +1,13 @@
+package cc.hiver.mall.purchaseocr.mapper;
+
+import cc.hiver.mall.purchaseocr.entity.PurchaseOcrPicture;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface PurchaseOcrPictureMapper extends BaseMapper {
+ void batchSave(@Param("purchaseOcrPictureList") List purchaseOcrPictureList);
+
+ void batchUpdate(@Param("purchaseOcrPictureList") List purchaseOcrPictureAddList);
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/PurchaseOcrPictureService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/PurchaseOcrPictureService.java
new file mode 100644
index 00000000..0c7813c5
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/PurchaseOcrPictureService.java
@@ -0,0 +1,20 @@
+package cc.hiver.mall.purchaseocr.service;
+
+import cc.hiver.mall.purchaseocr.entity.PurchaseOcrPicture;
+import cc.hiver.mall.purchaseocr.vo.PurchaseOciPictureAddVo;
+import cn.hutool.json.JSONObject;
+import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.exception.UploadFileException;
+
+import java.util.List;
+
+public interface PurchaseOcrPictureService {
+ JSONObject batchSave(PurchaseOciPictureAddVo purchaseOciPictureAddVo);
+ void batchUpdate(List purchaseOcrPictureList);
+
+ JSONObject invoicingAi(String questionMsg) throws NoApiKeyException, InputRequiredException;
+
+ List multiRoundConversationCall(String picturePath,String firstQuestionMsg, String secondQuestionMsg) throws NoApiKeyException, InputRequiredException, UploadFileException;
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java
new file mode 100644
index 00000000..979a6339
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java
@@ -0,0 +1,111 @@
+package cc.hiver.mall.purchaseocr.service.impl;
+
+import cc.hiver.core.common.utils.SecurityUtil;
+import cc.hiver.core.common.vo.Result;
+import cc.hiver.mall.common.constant.PurchaseConstant;
+import cc.hiver.mall.config.thread.TimerThread;
+import cc.hiver.mall.entity.Purchase;
+import cc.hiver.mall.purchaseocr.entity.PurchaseOcrPicture;
+import cc.hiver.mall.purchaseocr.mapper.PurchaseOcrPictureMapper;
+import cc.hiver.mall.purchaseocr.service.PurchaseOcrPictureService;
+import cc.hiver.mall.purchaseocr.vo.PurchaseOciPictureAddVo;
+import cc.hiver.mall.service.mybatis.PurchaseService;
+import cc.hiver.mall.utils.AliOcrUtil;
+import cn.hutool.json.JSONObject;
+import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.exception.UploadFileException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.concurrent.CompletionService;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutorCompletionService;
+import java.util.concurrent.Future;
+
+@Slf4j
+@Service
+public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService {
+
+ @Autowired
+ private PurchaseOcrPictureMapper purchaseOcrPictureMapper;
+
+ @Autowired
+ private SecurityUtil securityUtil;
+
+ @Autowired
+ private PurchaseService purchaseService;
+
+ @Autowired
+ private PurchaseOcrPictureService purchaseOcrPictureService;
+
+ @Autowired
+ ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+ @Override
+ public JSONObject batchSave(PurchaseOciPictureAddVo purchaseOciPictureAddVo) {
+ final JSONObject jsonObject = new JSONObject();
+ // shopId从缓存中设置
+ final String shopId = "wfkde";
+ // 如果采购单位空,那么就需要新增采购单信息
+ if (StringUtils.isEmpty(purchaseOciPictureAddVo.getOrderId())) {
+ final Purchase purchase = new Purchase();
+ // 新增的对象会有id,将新增的id放到参数中取
+ purchaseOciPictureAddVo.setOrderId(purchase.getId());
+ purchase.setShopId(shopId);
+ // 设置为ocr识别(未识别)状态
+ purchase.setInStorageStatus(PurchaseConstant.IN_STORAGE_STATUS[2]);
+ final boolean save = purchaseService.save(purchase);
+ }
+ // 然后批量新增图片
+ final List purchaseOcrPictureList = purchaseOciPictureAddVo.getPurchaseOcrPictureList();
+ final CopyOnWriteArrayList purchaseOcrPictureAddList = new CopyOnWriteArrayList<>();
+
+ for (PurchaseOcrPicture purchaseOcrPicture : purchaseOcrPictureList) {
+ // todo 如果前台传了id,后台会覆盖么
+ final String id = purchaseOcrPicture.getId();
+ final PurchaseOcrPicture oldPurchaseOcrPicture = purchaseOcrPictureMapper.selectById(id);
+ if(oldPurchaseOcrPicture ==null ){
+ final PurchaseOcrPicture addPurchaseOcrPicture = new PurchaseOcrPicture();
+ // 如果是修改新增的图片,需要增加图片信息
+ addPurchaseOcrPicture.setShopId(shopId);
+ addPurchaseOcrPicture.setOcrPicture(purchaseOcrPicture.getOcrPicture());
+ addPurchaseOcrPicture.setOrderId(purchaseOciPictureAddVo.getOrderId());
+ addPurchaseOcrPicture.setOcrStatus(PurchaseConstant.OCR_STATUS[0]);
+ purchaseOcrPictureAddList.add(addPurchaseOcrPicture);
+ }
+ }
+ purchaseOcrPictureMapper.batchSave(purchaseOcrPictureAddList);
+ // 异步处理ocr识别
+ try {
+ CompletionService> service = new ExecutorCompletionService<>(threadPoolTaskExecutor);
+ TimerThread timerThread = new TimerThread(purchaseOcrPictureAddList,purchaseOcrPictureService);
+ // 这里可以使用线程池,也可以使用CompletionService处理,运行任务需要是callable的,需要最终结果。
+ final Future submit = service.submit(timerThread);
+ } catch (Exception e) {
+ log.error("异步处理ocr识别失败", e);
+ }
+ jsonObject.set("msg", "success");
+ return jsonObject;
+ }
+
+ @Override
+ public void batchUpdate(List purchaseOcrPictureList) {
+ purchaseOcrPictureMapper.batchUpdate(purchaseOcrPictureList);
+ }
+
+ @Override
+ public JSONObject invoicingAi(String questionMsg) throws NoApiKeyException, InputRequiredException {
+ return AliOcrUtil.callWithMessage(questionMsg);
+ }
+
+ @Override
+ public List multiRoundConversationCall(String picturePath,String firstQuestionMsg, String secondQuestionMsg) throws NoApiKeyException, InputRequiredException, UploadFileException {
+ return AliOcrUtil.multiRoundConversationCall(picturePath,firstQuestionMsg,secondQuestionMsg);
+ }
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/vo/PurchaseOciPictureAddVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/vo/PurchaseOciPictureAddVo.java
new file mode 100644
index 00000000..66ced0d1
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/vo/PurchaseOciPictureAddVo.java
@@ -0,0 +1,17 @@
+package cc.hiver.mall.purchaseocr.vo;
+
+import cc.hiver.mall.purchaseocr.entity.PurchaseOcrPicture;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PurchaseOciPictureAddVo {
+
+ @ApiModelProperty(value = "采购单id")
+ private String orderId;
+
+ @ApiModelProperty(value = "Oci图片信息")
+ private List purchaseOcrPictureList;
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductCategoryService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductCategoryService.java
index 5c04412e..d508453b 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductCategoryService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductCategoryService.java
@@ -1,7 +1,9 @@
package cc.hiver.mall.service.mybatis;
import cc.hiver.mall.entity.ProductCategory;
+import cc.hiver.mall.pojo.vo.ProductCategoryVo;
import com.baomidou.mybatisplus.extension.service.IService;
public interface ProductCategoryService extends IService {
+ boolean batchSaveCategoryAndAttribute(ProductCategoryVo productCategoryVo);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseDetailService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseDetailService.java
index 7a35a41b..dc9ea94c 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseDetailService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseDetailService.java
@@ -9,5 +9,5 @@ public interface PurchaseDetailService extends IService {
List getByPurchaseId(String id);
- List getByPurchaseIdList(List purchaseIds);
+ List getByPurchaseIdList(List purchaseIds, String productId);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleService.java
index 333b4236..81e9c1fb 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleService.java
@@ -47,4 +47,6 @@ public interface SaleService extends IService {
Page getSupplierBuyProductLog(SalePageQuery salePageQuery);
Page getSaleByCompanyId(SalePageQuery salePageQuery);
+
+ void companyGetSale(String saleId);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockLogService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockLogService.java
index f4e393ed..5091dfb9 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockLogService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockLogService.java
@@ -8,5 +8,5 @@ import java.util.List;
public interface StockLogService extends IService {
List getByPurchaseId(String id);
- List getByPurchaseIds(List purchaseIdList);
+ List getByPurchaseIds(List purchaseIdList, String productId);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockService.java
index 6b9ab3b9..89e30dab 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/StockService.java
@@ -2,9 +2,11 @@ package cc.hiver.mall.service.mybatis;
import cc.hiver.core.common.vo.Result;
import cc.hiver.mall.entity.Stock;
+import cc.hiver.mall.pojo.query.StockPageQuery;
import cc.hiver.mall.pojo.vo.ProductCategoryStockVo;
import cc.hiver.mall.pojo.vo.PurchaseVo;
import cc.hiver.mall.pojo.vo.ShopStockVo;
+import cc.hiver.mall.pojo.vo.StockProductVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -42,4 +44,6 @@ public interface StockService extends IService {
String productCount(String productId,String attributeList);
List getlistByAttributeList(String id, String attributeList);
+
+ List getTailWarnProduct(StockPageQuery stockPageQuery);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/OrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/OrderServiceImpl.java
index a71dbd02..b979e2b1 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/OrderServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/OrderServiceImpl.java
@@ -13,6 +13,7 @@ import cc.hiver.mall.service.OrderService;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -126,6 +127,10 @@ public class OrderServiceImpl implements OrderService {
//抢单时间
final Path createTimeField = root.get("orderByWorkertime");
final Path regionField = root.get("region");
+ //配送员姓名
+ final Path workerNameField = root.get("workerName");
+ // 配送公司名称
+ final Path companyNameField = root.get("companyName");
final List list = new ArrayList<>();
@@ -162,7 +167,7 @@ public class OrderServiceImpl implements OrderService {
}
// 状态
- if (order.getOrderStatus() != null) {
+ if (StringUtils.isNotEmpty(order.getOrderStatus())) {
list.add(cb.equal(orderStatusdField, order.getOrderStatus()));
}
@@ -182,10 +187,19 @@ public class OrderServiceImpl implements OrderService {
list.add(cb.between(createTimeField, start, DateUtil.endOfDay(end)));
}
+ if (CharSequenceUtil.isNotBlank(order.getWorkerName())) {
+ list.add(cb.like(workerNameField, order.getWorkerName()));
+ }
+
+ if (CharSequenceUtil.isNotBlank(order.getCompanyName())) {
+ list.add(cb.like(companyNameField, order.getCompanyName()));
+ }
+
// 数据权限
final Predicate[] arr = new Predicate[list.size()];
cq.where(list.toArray(arr));
+ cq.orderBy(cb.asc(root.get("orderByWorkertime")));
return null;
}
}, pageable);
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ProductShareServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ProductShareServiceImpl.java
index 62908690..83ec1430 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ProductShareServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ProductShareServiceImpl.java
@@ -1,14 +1,17 @@
package cc.hiver.mall.serviceimpl;
+import cc.hiver.core.common.constant.CommonConstant;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.entity.User;
import cc.hiver.mall.dao.ProductShareDao;
import cc.hiver.mall.entity.Share;
+import cc.hiver.mall.entity.Shop;
import cc.hiver.mall.pojo.query.ProductPageQuery;
import cc.hiver.mall.pojo.query.SharetPageQuery;
import cc.hiver.mall.pojo.vo.ProductPageVO;
import cc.hiver.mall.pojo.vo.ShareVO;
import cc.hiver.mall.service.ProductShareService;
+import cc.hiver.mall.service.ShopService;
import cc.hiver.mall.service.mybatis.ProductService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.lang3.StringUtils;
@@ -29,6 +32,9 @@ public class ProductShareServiceImpl implements ProductShareService {
@Autowired
private SecurityUtil securityUtil;
+ @Autowired
+ private ShopService shopService;
+
/**
* 新增分享链接
*
@@ -41,6 +47,8 @@ public class ProductShareServiceImpl implements ProductShareService {
public Share save(Share share) {
// shopId从缓存中设置
final String shopId = securityUtil.getShopId();
+ final Shop shop = shopService.get(shopId);
+ share.setShopName(shop.getShopName());
final User user = securityUtil.getCurrUser();
share.setShopId(shopId);
// 保存销售员id(当前登录人为销售员)
@@ -67,6 +75,7 @@ public class ProductShareServiceImpl implements ProductShareService {
// 查询项
productPageQuery.setCategoryId(sharetPageQuery.getCategoryId());
productPageQuery.setSupplierName(sharetPageQuery.getSupplierName());
+ productPageQuery.setDelFlag(CommonConstant.DEL_FLAG_TRUE);
// 商铺id(全推) 和商品id(勾选推送)
productPageQuery.setShopId(share.getShopId());
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/RushOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/RushOrderServiceImpl.java
index 1878a3a3..604ad116 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/RushOrderServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/RushOrderServiceImpl.java
@@ -58,6 +58,7 @@ public class RushOrderServiceImpl implements RushOrderService {
orderXd.setOrderStatus(sale.getStatus());
orderXd.setOrderByWorker(CharSequenceUtil.isNotEmpty(saleDTO.getOrderByWorker()) ? saleDTO.getOrderByWorker() : null);
orderXd.setTransCompany(saleDTO.getTransCompany());
+ orderXd.setCompanyName(sale.getCompanyName());
orderXd.setOrderByWorkertime(sale.getCreateTime());
orderXd.setTimeout(2);
// 补充客户信息
@@ -99,6 +100,7 @@ public class RushOrderServiceImpl implements RushOrderService {
orderXd.setOrderAddress(orderAddress);
orderXd.setShopName(sale.getShopName());
orderXd.setTransCompanyPhone(sale.getCompanyPhone());
+ orderXd.setCompanyName(sale.getCompanyName());
// 取货地址
// shopId从缓存中设置
final String shopId = securityUtil.getShopId();
@@ -131,6 +133,7 @@ public class RushOrderServiceImpl implements RushOrderService {
}
orderXd.setTransCompany(saleQueryDTO.getSale().getTransCompany());
+ orderXd.setCompanyName(saleQueryDTO.getSale().getCompanyName());
orderXd.setTimeout(OrderConstant.IS_TIMEOUT[0]);
// 补充客户信息
@@ -175,16 +178,20 @@ public class RushOrderServiceImpl implements RushOrderService {
if (StringUtils.isNotEmpty(saleReturnDTO.getOrderByWorker())) {
// 指定了拉包工,直接为待取货
orderXd.setOrderStatus(OrderConstant.ORDER_STATUS[7]);
+
+ orderXd.setOrderByWorker(saleReturnDTO.getOrderByWorker());
+ // 指定了拉包工,这里插入抢单时间
+ orderXd.setOrderByWorkertime(returnSale.getCreateTime());
+ // 获取拉包工信息
+ final Worker worker = workerService.findByWorkerId(saleReturnDTO.getOrderByWorker());
+ orderXd.setWorkerName(worker.getWorkerName());
+ orderXd.setWorkerMobile(worker.getMobile());
} else {
orderXd.setOrderStatus(OrderConstant.ORDER_STATUS[6]);
}
- orderXd.setOrderByWorker(CharSequenceUtil.isNotEmpty(saleReturnDTO.getOrderByWorker()) ? saleReturnDTO.getOrderByWorker() : null);
orderXd.setTransCompany(saleReturnDTO.getTransCompany());
- // 指定了拉包工,这里插入抢单时间
- if (CharSequenceUtil.isNotEmpty(saleReturnDTO.getOrderByWorker())) {
- orderXd.setOrderByWorkertime(returnSale.getCreateTime());
- }
+ orderXd.setCompanyName(returnSale.getTransCompanyName());
orderXd.setTimeout(OrderConstant.IS_TIMEOUT[0]);
// 补充客户信息
final String userId = returnSale.getUserId();
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java
index d939c967..7cc595a4 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java
@@ -3,6 +3,7 @@ package cc.hiver.mall.serviceimpl;
import cc.hiver.core.common.constant.CommonConstant;
import cc.hiver.core.common.constant.SaleConstant;
import cc.hiver.core.common.constant.UserConstant;
+import cc.hiver.core.common.sms.SmsUtil;
import cc.hiver.core.common.utils.*;
import cc.hiver.core.common.vo.PageVo;
import cc.hiver.core.entity.LogiticsCompany;
@@ -19,6 +20,7 @@ import cc.hiver.mall.operatingarea.service.OperatingAreaService;
import cc.hiver.mall.pojo.dto.*;
import cc.hiver.mall.service.ProductShareService;
import cc.hiver.mall.service.SalesAndDetailsService;
+import cc.hiver.mall.service.ShopService;
import cc.hiver.mall.service.mybatis.*;
import cn.hutool.core.text.CharSequenceUtil;
import lombok.extern.slf4j.Slf4j;
@@ -80,6 +82,12 @@ public class SalesAndDetailsServiceImpl implements SalesAndDetailsService {
@Autowired
private DeductLogService deductLogService;
+ @Autowired
+ private ShopService shopService;
+
+ @Autowired
+ private SmsUtil smsUtil;
+
@Override
public Sale handleSalesAndDetails(SaleDTO saleDTO) {
@@ -197,6 +205,21 @@ public class SalesAndDetailsServiceImpl implements SalesAndDetailsService {
} else {
sale.setPayStatus("0");
}
+ // 物流公司联系电话
+ String transCompanyPhone = "";
+ if(StringUtils.isNotEmpty(sale.getTransCompany())){
+ //
+ LogiticsCompany logiticsCompany = logiticsCompanyService.findById(sale.getTransCompany());
+ if(logiticsCompany == null ){
+ // 选取的是运营区域
+ // 获取运营商id
+ transCompanyPhone = operatingAreaService.getOperatingAreaById(sale.getTransCompany());
+ sale.setCompanyPhone(transCompanyPhone);
+ }else{
+ transCompanyPhone = logiticsCompany.getMobile();
+ sale.setCompanyPhone(transCompanyPhone);
+ }
+ }
// 如果是自送,状态为完成,其他使用平台的则为待取货
if (SaleConstant.TRANSPORT_TYPE[2].equals(sale.getTransportType())) {
sale.setStatus(SaleConstant.SALE_STATUS[4]);
@@ -205,7 +228,16 @@ public class SalesAndDetailsServiceImpl implements SalesAndDetailsService {
if(StringUtils.isNotEmpty(sale.getTransCompany())){
deductLogService.updateRebateAmount("", sale.getTransCompany(), sale.getShopId(), sale.getId());
}
- } else {
+ } else if(SaleConstant.MODE_OF_SERVICE[2].equals(sale.getModeOfService())){
+ // 物流自提
+ sale.setStatus(SaleConstant.SALE_STATUS[13]);
+ // 给物流公司发送一个短信
+ // shopId从缓存中设置
+ final String shopId = securityUtil.getShopId();
+ final Shop shop = shopService.get(shopId);
+ final String shopAddress = shop.getShopAddress();
+ smsUtil.sendCode(transCompanyPhone, "{shopAddress:" + shopAddress + "}", "SMS_465402378");
+ }else{
//0:待抢单 1:待取货 2:已作废 3:待送达 4:已完成
//退货:
//5:下游客户待退货 00:退货待抢单 01:退货待取货 02:退货已作废 03:退货待送达 04:待确认退货 4:已完成
@@ -216,10 +248,6 @@ public class SalesAndDetailsServiceImpl implements SalesAndDetailsService {
sale.setStatus(SaleConstant.SALE_STATUS[0]);
}
}
- // 销售员
- // final User user = securityUtil.getCurrUser();
- // sale.setCreateBy(user.getId());
- // sale.setCreateByName(user.getNickname());
// 获取销售员的手机号
User user = userService.get(sale.getCreateBy());
sale.setCreateByPhone(user.getMobile());
@@ -227,20 +255,8 @@ public class SalesAndDetailsServiceImpl implements SalesAndDetailsService {
sale.setDelFlag(CommonConstant.DEL_FLAG_FALSE);
// 客户id
// sale.setUserId();
- // 物流公司联系电话
- if(StringUtils.isNotEmpty(sale.getTransCompany())){
- //
- LogiticsCompany logiticsCompany = logiticsCompanyService.findById(sale.getTransCompany());
- if(logiticsCompany == null ){
- // 选取的是运营区域
- // 获取运营商id
- String transCompanyPhone = operatingAreaService.getOperatingAreaById(sale.getTransCompany());
- sale.setCompanyPhone(transCompanyPhone);
- }else{
- String transCompanyPhone = logiticsCompany.getMobile();
- sale.setCompanyPhone(transCompanyPhone);
- }
- }
+
+ sale.setCompanyPhone(transCompanyPhone);
saleService.save(sale);
final String saleId = sale.getId();
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesCalculateServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesCalculateServiceImpl.java
index 59d1581d..d78ea419 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesCalculateServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesCalculateServiceImpl.java
@@ -71,6 +71,8 @@ public class SalesCalculateServiceImpl implements SalesCalculateService {
} else {
startDate = DateUtil.COMMON_FULL.getTextDate(startTime + " 00:00:00");
endDate = DateUtil.COMMON_FULL.getTextDate(endTime + " 23:59:59");
+ // 如果根据时间查询,那么结束时间加1天,
+ endTime = DateUtil.addDay(endTime, 1);
}
}catch (Exception e){
log.error("日期转换出错!");
@@ -176,7 +178,7 @@ public class SalesCalculateServiceImpl implements SalesCalculateService {
saleAllVO.setTotalCCount(0);
}
- //获取当日门店下单客户数
+ //获取今日实收
final BigDecimal totalAlreadyEarn = saleMapper.queryTotalAlreadyEarn(shopId,startTime,endTime);
saleAllVO.setTotalAlreadyEarn(totalAlreadyEarn);
return saleAllVO;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductCategoryServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductCategoryServiceImpl.java
index aeb43546..b62f9bbd 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductCategoryServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductCategoryServiceImpl.java
@@ -1,11 +1,84 @@
package cc.hiver.mall.serviceimpl.mybatis;
+import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.mall.dao.mapper.ProductCategoryMapper;
+import cc.hiver.mall.entity.ProductAttribute;
+import cc.hiver.mall.entity.ProductAttributeValue;
import cc.hiver.mall.entity.ProductCategory;
+import cc.hiver.mall.pojo.vo.ProductAttributeOfAddVo;
+import cc.hiver.mall.pojo.vo.ProductAttributeValueVo;
+import cc.hiver.mall.pojo.vo.ProductCategoryVo;
+import cc.hiver.mall.service.mybatis.ProductAttributeService;
+import cc.hiver.mall.service.mybatis.ProductAttributeValueService;
import cc.hiver.mall.service.mybatis.ProductCategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
@Service
public class ProductCategoryServiceImpl extends ServiceImpl implements ProductCategoryService {
+
+ @Autowired
+ private SecurityUtil securityUtil;
+
+ @Autowired
+ private ProductCategoryMapper productCategoryMapper;
+
+ @Autowired
+ private ProductAttributeService productAttributeService;
+
+ @Autowired
+ private ProductAttributeValueService productAttributeValueService;
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public boolean batchSaveCategoryAndAttribute(ProductCategoryVo productCategoryVo) {
+
+ try {
+ // 新增类别信息
+ final ProductCategory productCategory = new ProductCategory();
+ final String shopId = securityUtil.getShopId();
+ productCategory.setShopId(shopId);
+ productCategory.setCategoryName(productCategoryVo.getCategoryName());
+ productCategoryMapper.insert(productCategory);
+
+ // 新增类别
+ final List productAttributeOfAddVos = productCategoryVo.getProductAttributeOfAddVos();
+ // 需要新增的类别集合
+ final List productAttributes = new ArrayList<>();
+ // 需要新增的属性值集合
+ final List productAttributeValues = new ArrayList<>();
+ for (ProductAttributeOfAddVo productAttributeOfAddVo : productAttributeOfAddVos) {
+ final ProductAttribute productAttribute = new ProductAttribute();
+ productAttribute.setCategoryId(productCategory.getId());
+ productAttribute.setAttributeName(productAttributeOfAddVo.getAttributeName());
+ productAttributes.add(productAttribute);
+ final List productAttributeValueVoList = productAttributeOfAddVo.getProductAttributeValueVoList();
+ for (ProductAttributeValueVo productAttributeValueVo : productAttributeValueVoList) {
+ final ProductAttributeValue productAttributeValue = new ProductAttributeValue();
+ productAttributeValue.setAttributeId(productAttribute.getId());
+ productAttributeValue.setValue(productAttributeValueVo.getValue());
+ productAttributeValues.add(productAttributeValue);
+ }
+ }
+ // 批量插入分类
+ if (!productAttributes.isEmpty()) {
+ productAttributeService.saveBatch(productAttributes, productAttributes.size());
+ }
+ //批量插入属性值
+ if (!productAttributeValues.isEmpty()) {
+ productAttributeValueService.saveBatch(productAttributeValues, productAttributeValues.size());
+ }
+ return true;
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ return false;
+ }
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseDetailServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseDetailServiceImpl.java
index 9b736990..c6c444a9 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseDetailServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseDetailServiceImpl.java
@@ -21,7 +21,7 @@ public class PurchaseDetailServiceImpl extends ServiceImpl getByPurchaseIdList(List purchaseIds) {
- return purchaseDetailMapper.getByPurchaseIdList(purchaseIds);
+ public List getByPurchaseIdList(List purchaseIds,String productId) {
+ return purchaseDetailMapper.getByPurchaseIdList(purchaseIds,productId);
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseServiceImpl.java
index 8d0e68c5..fe189e41 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseServiceImpl.java
@@ -168,7 +168,7 @@ public class PurchaseServiceImpl extends ServiceImpl i
final Map> purchaseDetailMap = new HashMap<>();
if(!purchaseIdList.isEmpty()){
// 获取采购单明细
- final List byPurchaseIdList = purchaseDetailService.getByPurchaseIdList(purchaseIdList);
+ final List byPurchaseIdList = purchaseDetailService.getByPurchaseIdList(purchaseIdList,productId);
for (PurchaseDetail purchaseDetail : byPurchaseIdList) {
final String purchaseId = purchaseDetail.getPurchaseId();
if (purchaseDetailMap.containsKey(purchaseId)) {
@@ -182,7 +182,7 @@ public class PurchaseServiceImpl extends ServiceImpl i
// 获取规格及数量
// 获取规格信息
- final List stockLogList = stockLogService.getByPurchaseIds(purchaseIdList);
+ final List stockLogList = stockLogService.getByPurchaseIds(purchaseIdList,productId);
final Map> stockLogMap = new HashMap<>();
// 封装规格属性
for (StockLog stockLog : stockLogList) {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleDetailServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleDetailServiceImpl.java
index b147f474..834d8efd 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleDetailServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleDetailServiceImpl.java
@@ -1,11 +1,9 @@
package cc.hiver.mall.serviceimpl.mybatis;
-import cc.hiver.core.common.utils.StringUtils;
import cc.hiver.mall.dao.mapper.SaleDetailMapper;
import cc.hiver.mall.entity.SaleDetail;
import cc.hiver.mall.entity.SaleDetailExample;
import cc.hiver.mall.service.mybatis.SaleDetailService;
-import cc.hiver.mall.utils.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
@@ -43,10 +41,6 @@ public class SaleDetailServiceImpl extends ServiceImpl listOfShopAll(String shopId, String startDate, String endDate) {
- // 如果根据时间查询,那么结束时间加1天,
- if(StringUtils.isNotEmpty(endDate)){
- endDate = DateUtil.addDay(endDate, 1);
- }
return saleDetailMapper.listOfShopAll(shopId, startDate, endDate);
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleServiceImpl.java
index 6b73dd9e..e3fd2121 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleServiceImpl.java
@@ -7,6 +7,7 @@ import cc.hiver.core.common.utils.StringUtils;
import cc.hiver.core.entity.User;
import cc.hiver.mall.common.constant.StockConstant;
import cc.hiver.mall.dao.mapper.SaleMapper;
+import cc.hiver.mall.deductlog.service.DeductLogService;
import cc.hiver.mall.entity.*;
import cc.hiver.mall.pojo.dto.SaleDetailDTO;
import cc.hiver.mall.pojo.dto.SaleDetailQueryDTO;
@@ -52,6 +53,9 @@ public class SaleServiceImpl extends ServiceImpl implements Sa
@Autowired
private PurchaseService purchaseService;
+ @Autowired
+ private DeductLogService deductLogService;
+
@Override
public void editPayPrice(String id, BigDecimal price, String dealingsWay) {
@@ -296,7 +300,7 @@ public class SaleServiceImpl extends ServiceImpl implements Sa
@Override
public Page getCustomerBuyProductLog(SalePageQuery salePageQuery) {
- final String shopId = "1739537306278301696";// securityUtil.getShopId();
+ final String shopId = securityUtil.getShopId();
// 先拿到该客户购买的所有商品信息
final Page page = new Page<>(salePageQuery.getPageNum(), salePageQuery.getPageSize());
final String userId = salePageQuery.getUserId();
@@ -449,7 +453,16 @@ public class SaleServiceImpl extends ServiceImpl implements Sa
@Override
public Page getSaleByCompanyId(SalePageQuery salePageQuery) {
final Page page = new Page<>(salePageQuery.getPageNum(), salePageQuery.getPageSize());
- final Page saleNoWorkerVOPage = saleMapper.getSaleByCompanyId(page, salePageQuery.getCompanyId());
+ final Page saleNoWorkerVOPage = saleMapper.getSaleByCompanyId(page, salePageQuery);
return saleNoWorkerVOPage;
}
+
+ @Override
+ public void companyGetSale(String saleId) {
+
+ saleMapper.companyGetSale(saleId);
+ final Sale sale = saleMapper.selectById(saleId);
+ // 处理返佣
+ deductLogService.updateRebateAmount("", sale.getTransCompany(), sale.getShopId(), saleId);
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockLogServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockLogServiceImpl.java
index 849ffb1e..3071ea06 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockLogServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockLogServiceImpl.java
@@ -21,8 +21,8 @@ public class StockLogServiceImpl extends ServiceImpl i
}
@Override
- public List getByPurchaseIds(List purchaseIds) {
- return stockLogMapper.getByPurchaseIds(purchaseIds);
+ public List getByPurchaseIds(List purchaseIds,String productId) {
+ return stockLogMapper.getByPurchaseIds(purchaseIds, productId);
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockServiceImpl.java
index 7ad95876..179023b5 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/StockServiceImpl.java
@@ -7,9 +7,8 @@ import cc.hiver.core.entity.User;
import cc.hiver.mall.common.constant.StockConstant;
import cc.hiver.mall.dao.mapper.StockMapper;
import cc.hiver.mall.entity.*;
-import cc.hiver.mall.pojo.vo.ProductCategoryStockVo;
-import cc.hiver.mall.pojo.vo.PurchaseVo;
-import cc.hiver.mall.pojo.vo.ShopStockVo;
+import cc.hiver.mall.pojo.query.StockPageQuery;
+import cc.hiver.mall.pojo.vo.*;
import cc.hiver.mall.service.mybatis.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -527,7 +526,7 @@ public class StockServiceImpl extends ServiceImpl implements
for (Product product : productListOfShop) {
final Date salesWeek = product.getSalesWeek();
// 商品的尾货预警可为空了,这里判断下,为空就不统计尾货预警
- if(salesWeek != null ){
+ if (salesWeek != null) {
final boolean after = salesWeek.before(new Date());
if (after) {
//超过尾货预警日期,数量加1
@@ -595,7 +594,50 @@ public class StockServiceImpl extends ServiceImpl implements
public List getlistByAttributeList(String id, String attributeList) {
// shopId从缓存中设置
final String shopId = securityUtil.getShopId();
- return stockMapper.getlistByAttributeList(id,shopId, attributeList);
+ return stockMapper.getlistByAttributeList(id, shopId, attributeList);
+ }
+
+ @Override
+ public List getTailWarnProduct(StockPageQuery stockPageQuery) {
+ // shopId从缓存中设置
+ final String shopId = securityUtil.getShopId();
+ stockPageQuery.setShopId(shopId);
+ final List records = stockMapper.getTailWarnProduct(stockPageQuery);
+ // final List records = result.getRecords();
+ final Map stringStockProductVoMap = new HashMap<>();
+ for (Stock record : records) {
+ final String productId = record.getProductId();
+ final Integer stockCount = record.getStockCount();
+ final Integer productStockCount = record.getStockCount() < 0?0:record.getStockCount();
+
+ //存在,增加规格信息
+ final StockAttributeVo stockAttributeVo = new StockAttributeVo();
+ stockAttributeVo.setAttributeList(record.getAttributeList());
+ stockAttributeVo.setStockCount(stockCount);
+ if(stringStockProductVoMap.containsKey(productId)){
+ final Integer count = stringStockProductVoMap.get(productId).getStockCount();
+ // 计算商品的总库存
+ stringStockProductVoMap.get(productId).setStockCount(count+productStockCount);
+ // 增加规格信息
+ stringStockProductVoMap.get(productId).getStockAttributeVoList().add(stockAttributeVo);
+ }else{
+ // 不存在,先增加商品信息
+ final StockProductVo stockProductVo = new StockProductVo();
+ stockProductVo.setProductName(record.getProductName());
+ stockProductVo.setProductSn(record.getProductSn());
+ stockProductVo.setProductPicture(record.getProductPicture());
+ stockProductVo.setTailWarn(record.getTailWarn());
+ stockProductVo.setBarcode(record.getBarcode());
+ // 这里计算一下该商品的总库存
+ stockProductVo.setStockCount(productStockCount);
+ final List stockAttributeVoList = new ArrayList<>();
+ stockAttributeVoList.add(stockAttributeVo);
+ stockProductVo.setStockAttributeVoList(stockAttributeVoList);
+ stringStockProductVoMap.put(productId,stockProductVo);
+ }
+ }
+ List stockProductVos = new ArrayList<>(stringStockProductVoMap.values());
+ return stockProductVos;
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliOcrUtil.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliOcrUtil.java
new file mode 100644
index 00000000..91d710c2
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliOcrUtil.java
@@ -0,0 +1,208 @@
+package cc.hiver.mall.utils;// Copyright (c) Alibaba, Inc. and its affiliates.
+
+import cc.hiver.mall.config.aliocr.AliOcrConfig;
+import cn.hutool.core.date.StopWatch;
+import cn.hutool.json.JSONObject;
+import com.alibaba.dashscope.aigc.generation.Generation;
+import com.alibaba.dashscope.aigc.generation.GenerationParam;
+import com.alibaba.dashscope.aigc.generation.GenerationResult;
+import com.alibaba.dashscope.aigc.generation.models.QwenParam;
+import com.alibaba.dashscope.aigc.multimodalconversation.*;
+import com.alibaba.dashscope.common.Message;
+import com.alibaba.dashscope.common.MessageManager;
+import com.alibaba.dashscope.common.MultiModalMessage;
+import com.alibaba.dashscope.common.Role;
+import com.alibaba.dashscope.exception.ApiException;
+import com.alibaba.dashscope.exception.InputRequiredException;
+import com.alibaba.dashscope.exception.NoApiKeyException;
+import com.alibaba.dashscope.exception.UploadFileException;
+import com.alibaba.dashscope.utils.Constants;
+import com.alibaba.dashscope.utils.JsonUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Slf4j
+@Component
+public class AliOcrUtil {
+
+ @Autowired
+ private static AliOcrConfig aliOcrConfig;
+
+ /**
+ * 图片识别
+ * @author 王富康
+ * @date 2024/3/24
+ * @param picturePath
+ * @return JSONObject
+ */
+ public static JSONObject simpleMultiModalConversationCall(String picturePath)
+ throws ApiException, NoApiKeyException, UploadFileException {
+ final JSONObject jsonObject = new JSONObject();
+ final StopWatch stopWatch = new StopWatch("Ai回答计时");
+ Constants.apiKey = "sk-bcfa4865b89548acb8225f910f13d682";
+ final MultiModalConversation conv = new MultiModalConversation();
+ final MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
+ .content(Arrays.asList(Collections.singletonMap("image", picturePath),
+ Collections.singletonMap("text", "这是一个入库小票,请帮我把图片中所有内容封装为json,必须一次性列出所有json数据,json格式为:{ \"productSn\": \"货号\", \"productName\": \"商品名称\",\"price\": \"单价\", \"productCount\": \"数量\", \"attributeList\": \"{\"颜色\":\"红色\",\"尺码\":\"均码\"}\" }"))).build();
+ stopWatch.start("开始回答:");
+ final MultiModalConversationParam param = MultiModalConversationParam.builder()
+ .model("qwen-vl-max")
+ .message(userMessage)
+ .temperature(1F)
+ .topP(0.1)
+ .topK(1)
+ .seed(500)
+ .build();
+ final MultiModalConversationResult result = conv.call(param);
+ stopWatch.stop();
+ log.info(String.valueOf(result));
+ log.info(stopWatch.prettyPrint());
+ final Map stringObjectMap = result.getOutput().getChoices().get(0).getMessage().getContent().get(0);
+ jsonObject.set("msg", stringObjectMap);
+ return jsonObject;
+ }
+
+ public static List multiRoundConversationCall(String picturePath,String firstQuestionMsg,String secondQuestionMsg) throws ApiException, NoApiKeyException, UploadFileException {
+ final StopWatch stopWatch = new StopWatch("Ai回答计时");
+ Constants.apiKey = "sk-bcfa4865b89548acb8225f910f13d682";
+ List multiModalConversationResults = new ArrayList<>();
+ final MultiModalConversation conv = new MultiModalConversation();
+ final MultiModalMessageItemText systemText = new MultiModalMessageItemText("You are a helpful assistant.");
+ final MultiModalConversationMessage systemMessage = MultiModalConversationMessage.builder()
+ .role(Role.SYSTEM.getValue()).content(Collections.singletonList(systemText)).build();
+ final MultiModalMessageItemImage userImage = new MultiModalMessageItemImage(picturePath);
+ // "这是一个入库小票,请帮我把图片中所有内容封装为json,必须一次性列出所有json数据,json格式为:{ \"productSn\": \"货号\", \"productName\": \"商品名称\",\"price\": \"单价\", \"productCount\": \"数量\", \"attributeList\": \"{\"颜色\":\"红色\",\"尺码\":\"均码\"}\" }"
+ MultiModalMessageItemText userText = new MultiModalMessageItemText(firstQuestionMsg);
+ final MultiModalConversationMessage userMessage =
+ MultiModalConversationMessage.builder().role(Role.USER.getValue())
+ .content(Arrays.asList(userImage, userText)).build();
+ final List messages = new ArrayList<>();
+ messages.add(systemMessage);
+ messages.add(userMessage);
+ final MultiModalConversationParam param = MultiModalConversationParam.builder()
+ .model("qwen-vl-max")
+ .messages(messages)
+ .temperature(1F)
+ .topP(0.1)
+ .topK(1)
+ .seed(500)
+ .build();
+ stopWatch.start("一轮会话");
+ MultiModalConversationResult result = conv.call(param);
+ stopWatch.stop();
+ multiModalConversationResults.add(result);
+ System.out.println(result);
+ // 我会在这里对结果进行解析,然后,判断要不要走第二次回话
+ if(StringUtils.isNotEmpty(secondQuestionMsg)){
+
+ final MultiModalMessageItemText assistentText = new MultiModalMessageItemText(
+ result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text").toString());
+ final MultiModalConversationMessage assistentMessage = MultiModalConversationMessage.builder()
+ .role(Role.ASSISTANT.getValue()).content(Collections.singletonList(assistentText)).build();
+ messages.add(assistentMessage);
+ userText = new MultiModalMessageItemText(secondQuestionMsg);
+ messages.add(MultiModalConversationMessage.builder().role(Role.USER.getValue())
+ .content(Collections.singletonList(userText)).build());
+ param.setMessages(new ArrayList