diff --git a/hiver-admin/src/main/resources/application.yml b/hiver-admin/src/main/resources/application.yml index 9449a85d..0a3506bd 100644 --- a/hiver-admin/src/main/resources/application.yml +++ b/hiver-admin/src/main/resources/application.yml @@ -306,6 +306,9 @@ ignored: - /hiver/app/sale/getShopAll - /hiver/app/productAttribute/selectAttributeAndValueByCategoryId - /hiver/app/stock/productCount + - /hiver/app/sale/getShopWeek + - /hiver/app/purchase/getPurchaseList + - /hiver/app/stock/getShopStock # 限流及黑名单不拦截的路径 limitUrls: - /**/*.js diff --git a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java index e3dd9e76..228ef50d 100644 --- a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java +++ b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java @@ -1,5 +1,6 @@ package cc.hiver.core.serviceimpl; +import cc.hiver.core.common.constant.WorkerConstant; import cc.hiver.core.common.utils.SecurityUtil; import cc.hiver.core.common.vo.SearchVo; import cc.hiver.core.dao.WorkerDao; @@ -130,10 +131,13 @@ public class WorkerServiceImpl implements WorkerService { list.add(ownerCompanyField.in(transCompany)); } } - + // 不传公司名称,查询拉包工,传的话查询该快递公司下的快递员 if (StringUtils.isNotEmpty(worker.getOwnerCompany())) { list.add(cb.like(ownerCompanyField, '%' + worker.getOwnerCompany() + '%')); + }else{ + list.add(cb.equal(signPersonField, WorkerConstant.SIGN_PERSON[0])); } + if (worker.getWorkerStatus() != null) { list.add(cb.equal(workerStatusField, 1)); } 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 eaadd944..f5c330d0 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 @@ -127,6 +127,26 @@ public class PurchaseController { return new ResultUtil>().setData(list); } + /** + * 查询采购单列表 + * @author 王富康 + * @date 2023/11/20 + * @param purchaseQueryVo + * @return Result + */ + @RequestMapping(value = "/getPurchaseList", method = RequestMethod.POST) + @ApiOperation("查询采购单列表") + public Result getPurchaseList(@RequestBody(required=false) PurchaseQueryVo purchaseQueryVo) { + if(purchaseQueryVo == null ){ + purchaseQueryVo = new PurchaseQueryVo(); + } + // shopId从缓存中设置 + final String shopId = securityUtil.getShopId(); + purchaseQueryVo.setShopId(shopId); + final List list = purchaseService.getPurchaseList(purchaseQueryVo); + return new ResultUtil>().setData(list); + } + @RequestMapping(value = "/getPurchaseDetailByBarcode", method = RequestMethod.GET) @ApiOperation("根据二维码查询采购单明细") 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 684a9198..52fa5a45 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 @@ -300,22 +300,23 @@ public class ReturnSaleController { public Result> queryAll(@RequestBody SaleComVO saleComVO) { final QueryWrapper queryWrapper = new QueryWrapper<>(); if (!ObjectUtils.isEmpty(saleComVO)) { - if (!StringUtils.isEmpty(saleComVO.getShopId())) { - queryWrapper.eq("shop_id", saleComVO.getShopId()); - } + // shopId从缓存中设置 + final String shopId = securityUtil.getShopId(); + queryWrapper.eq("shop_id", shopId); + if (!StringUtils.isEmpty(saleComVO.getSaleId())) { queryWrapper.eq("sale_id", saleComVO.getSaleId()); } - final String remark = saleComVO.getRemark(); + /*final String remark = saleComVO.getRemark(); if (!StringUtils.isEmpty(remark)) { if ("1".equals(remark)) { - queryWrapper.ne("status", "5"); + queryWrapper.ne("status", SaleConstant.SALE_STATUS[4]); } else if ("2".equals(remark)) { - queryWrapper.eq("status", "5"); + queryWrapper.eq("status", SaleConstant.SALE_STATUS[4]); } } else { return ResultUtil.error("退货标识参数缺失,请确认!"); - } + }*/ final SearchDateVo searchDateVo = saleComVO.getSearchDateVo(); if (!ObjectUtils.isEmpty(searchDateVo) && !searchDateVo.isAnyFieldEmpty()) { final Date endDate = searchDateVo.getEndDate(); 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 4fa88f87..d733b3b6 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 @@ -529,6 +529,19 @@ public class SaleController { return new ResultUtil().setData(saleAllVO); } + @RequestMapping(value = "/getShopWeek", method = RequestMethod.POST) + @ApiOperation("获取本周利润") + public Result getShopWeek() { + + List weekSale = null; + try { + weekSale = salesCalculateService.getShopWeek(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return ResultUtil.data(weekSale); + } + @RequestMapping(value = "/getAllSum", method = RequestMethod.POST) @ApiOperation("获取当日门店销售总额") public String getShopTodayAllSum(@RequestBody SaleVO saleVO) { @@ -714,4 +727,23 @@ public class SaleController { final List list = saleService.list(queryWrapper); return new ResultUtil>().setData(list); } + + /** + * 回款 + * @author 王富康 + * @date 2023/11/15 + * @param id 销售单id + * @param price 回款金额 + * @param dealingsWay 交易方式/附言 + * @return Result + */ + @RequestMapping(value = "/editPayPrice", method = RequestMethod.POST) + @ApiOperation("回款") + public Result editPayPrice(String id, BigDecimal price,String dealingsWay) { + if (StringUtils.isEmpty(id)) { + return ResultUtil.error("销售单id不能为空!"); + } + saleService.editPayPrice(id, price, dealingsWay); + 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 e6a4faf6..c6950a76 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 @@ -5,6 +5,7 @@ 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.vo.PurchaseVo; +import cc.hiver.mall.pojo.vo.ShopStockVo; import cc.hiver.mall.service.mybatis.StockService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; @@ -70,6 +71,7 @@ public class StockController { public Result putInPrice(@RequestBody PurchaseVo purchaseVo) { return stockService.putInPrice(purchaseVo); } + @RequestMapping(value = "/getStockInfoByCondition", method = RequestMethod.GET) @ApiOperation("根据店铺信息获取库存信息") public Result> getStockInfoByCondition(Stock stock) { @@ -117,7 +119,7 @@ public class StockController { * @return Result> */ @RequestMapping(value = "/productCount", method = RequestMethod.GET) - @ApiOperation("根据店铺信息获取库存信息") + @ApiOperation("根据商品获取库存信息") public Result> productCount(String productId) { final QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("product_id", productId); @@ -126,4 +128,16 @@ public class StockController { return new ResultUtil>().setData(list); } + /** + * 获取某店铺的库存管理顶部信息 + * @author 王富康 + * @date 2023/11/21 + * @return Result + */ + @RequestMapping(value = "/getShopStock", method = RequestMethod.POST) + @ApiOperation("获取某店铺的库存管理顶部信息") + public Result getShopStock(){ + final ShopStockVo shopStockVo = stockService.getShopStock(); + return ResultUtil.data(shopStockVo); + } } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/ProductMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/ProductMapper.java index 55879ee5..21f52025 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/ProductMapper.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/ProductMapper.java @@ -38,4 +38,6 @@ public interface ProductMapper extends BaseMapper { List getShareList(Page page, @Param("queryParams") ProductPageQuery queryParams); List getProductList(@Param("productIdList") List productIdList); + + List getProductListOfShop(String shopId); } \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseMapper.java index f1a3db82..7e2b00a4 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseMapper.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseMapper.java @@ -3,6 +3,7 @@ package cc.hiver.mall.dao.mapper; import cc.hiver.mall.entity.Purchase; import cc.hiver.mall.entity.PurchaseExample; import cc.hiver.mall.pojo.dto.DebtSupplier; +import cc.hiver.mall.pojo.vo.PurchaseQueryVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -34,4 +35,5 @@ public interface PurchaseMapper extends BaseMapper { List selectDebtByShopId(String shopId); + List getPurchaseList(PurchaseQueryVo purchaseQueryVo); } \ 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 a0efcc98..d86139d6 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 @@ -30,4 +30,6 @@ public interface StockMapper extends BaseMapper { int updateByPrimaryKeySelective(Stock record); int updateByPrimaryKey(Stock record); + + List stockListOfShop(String shopId); } \ No newline at end of file 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 ad95cc8e..638851e6 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 @@ -43,6 +43,12 @@ public class ProductPageQuery extends HiverBasePageQuery { @ApiModelProperty("商品分类ID") private String categoryId; + @ApiModelProperty("商品名称") + private String productName; + + @ApiModelProperty("货号") + private String productSn; + @ApiModelProperty("供应商名称") private String supplierName; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/PurchaseQueryVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/PurchaseQueryVo.java index fc84b337..094dcbf0 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/PurchaseQueryVo.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/PurchaseQueryVo.java @@ -1,13 +1,11 @@ package cc.hiver.mall.pojo.vo; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; -import javax.persistence.Transient; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; @@ -66,6 +64,11 @@ public class PurchaseQueryVo { @ApiModelProperty(value = "结束日期") private Date endDate; + @ApiModelProperty(value = "查询条件") + private String searchStr; + + + public Date getStartDate() { return startDate; } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ShopStockVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ShopStockVo.java new file mode 100644 index 00000000..d05e645d --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ShopStockVo.java @@ -0,0 +1,33 @@ +package cc.hiver.mall.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * 库存管理顶部几个数值Vo + * @author 王富康 + * @date 2023/11/21 + */ +@Data +@Accessors(chain = true) +public class ShopStockVo { + @ApiModelProperty(value = "库存预警商品数") + private Integer tailWarnCount; + + @ApiModelProperty(value = "达到尾货预警日期商品数") + private Integer salesWeekCount; + + @ApiModelProperty(value = "商品数量") + private Integer productCount; + + @ApiModelProperty(value = "库存数") + private Integer stockCount; + + @ApiModelProperty(value = "库存成本") + private BigDecimal stockCost; + + +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SalesCalculateService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SalesCalculateService.java index 6692d3b9..25e400ea 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SalesCalculateService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SalesCalculateService.java @@ -1,17 +1,14 @@ package cc.hiver.mall.service; -import cc.hiver.mall.entity.ReturnSale; -import cc.hiver.mall.entity.Sale; -import cc.hiver.mall.pojo.dto.SaleDTO; -import cc.hiver.mall.pojo.dto.SaleQueryDTO; -import cc.hiver.mall.pojo.dto.SaleReturnDTO; import cc.hiver.mall.pojo.vo.SaleAllVO; -import cc.hiver.mall.pojo.vo.SaleVO; +import java.math.BigDecimal; import java.text.ParseException; +import java.util.List; public interface SalesCalculateService { SaleAllVO calculateService(String startTime, String endTime) throws ParseException; + List getShopWeek(); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductService.java index e7954835..bcbe6f7b 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/ProductService.java @@ -13,4 +13,12 @@ public interface ProductService extends IService { IPage getShareList(ProductPageQuery productPageQuery); List getProductList(List productIdList); + + /** + * 获取店铺中商品信息 + * @author 王富康 + * @date 2023/11/21 + * @return List + */ + List getProductListOfShop(); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseService.java index 5cde35c4..18985472 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseService.java @@ -1,8 +1,8 @@ package cc.hiver.mall.service.mybatis; -import cc.hiver.mall.entity.ProductAttribute; import cc.hiver.mall.entity.Purchase; import cc.hiver.mall.pojo.dto.DebtSupplier; +import cc.hiver.mall.pojo.vo.PurchaseQueryVo; import cc.hiver.mall.pojo.vo.PurchaseVo; import com.baomidou.mybatisplus.extension.service.IService; @@ -22,4 +22,13 @@ public interface PurchaseService extends IService { * @return PurchaseVo */ PurchaseVo getPurchaseAllData(String id); + + /** + * 查询采购单列表 + * @author 王富康 + * @date 2023/11/20 + * @param purchaseQueryVo + * @return List + */ + List getPurchaseList(PurchaseQueryVo purchaseQueryVo); } 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 33e5a325..59c11807 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 @@ -1,10 +1,10 @@ package cc.hiver.mall.service.mybatis; -import cc.hiver.core.common.vo.Result; import cc.hiver.mall.entity.Sale; -import cc.hiver.mall.entity.Stock; -import cc.hiver.mall.pojo.vo.PurchaseVo; import com.baomidou.mybatisplus.extension.service.IService; +import java.math.BigDecimal; + public interface SaleService extends IService { + void editPayPrice(String id, BigDecimal price, String dealingsWay); } 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 2689b4bf..237782f9 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 @@ -1,16 +1,40 @@ package cc.hiver.mall.service.mybatis; import cc.hiver.core.common.vo.Result; -import cc.hiver.mall.entity.Purchase; import cc.hiver.mall.entity.Stock; import cc.hiver.mall.pojo.vo.PurchaseVo; -import cc.hiver.mall.pojo.vo.StockVo; +import cc.hiver.mall.pojo.vo.ShopStockVo; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + public interface StockService extends IService { Result putIn(PurchaseVo purchaseVo); Result putInOfProduct(PurchaseVo purchaseVo); + /** + * 待入库入库,维护价格等相关信息 + * @author 王富康 + * @date 2023/11/21 + * @param purchaseVo + * @return Result + */ Result putInPrice(PurchaseVo purchaseVo); + + /** + * 获取某店铺的库存管理顶部信息 + * @author 王富康 + * @date 2023/11/21 + * @return ShopStockVo + */ + ShopStockVo getShopStock(); + + /** + * 获取该店的库存信息 + * @author 王富康 + * @date 2023/11/21 + * @return List + */ + List stockListOfShop(); } 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 949d6b8d..138d4d33 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 @@ -5,7 +5,10 @@ import cc.hiver.core.common.utils.SecurityUtil; import cc.hiver.core.common.utils.StringUtils; import cc.hiver.mall.dao.mapper.ReturnSaleMapper; import cc.hiver.mall.dao.mapper.SaleMapper; -import cc.hiver.mall.entity.*; +import cc.hiver.mall.entity.ReturnSaleExample; +import cc.hiver.mall.entity.Sale; +import cc.hiver.mall.entity.SaleDetail; +import cc.hiver.mall.entity.SaleExample; import cc.hiver.mall.pojo.vo.SaleAllVO; import cc.hiver.mall.service.SalesCalculateService; import cc.hiver.mall.service.mybatis.ReturnDetailService; @@ -20,7 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.math.BigDecimal; -import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -61,8 +64,8 @@ public class SalesCalculateServiceImpl implements SalesCalculateService { try{ if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) { - String startDateStr = DateUtils.formatDate(new Date(), "yyyy-MM-dd") + " 00:00:00"; - String endDateStr = DateUtils.formatDate(new Date(), "yyyy-MM-dd") + " 23:59:59"; + final String startDateStr = DateUtils.formatDate(new Date(), "yyyy-MM-dd") + " 00:00:00"; + final String endDateStr = DateUtils.formatDate(new Date(), "yyyy-MM-dd") + " 23:59:59"; startDate = DateUtil.COMMON_FULL.getTextDate(startDateStr); endDate = DateUtil.COMMON_FULL.getTextDate(endDateStr); } else { @@ -172,4 +175,58 @@ public class SalesCalculateServiceImpl implements SalesCalculateService { return saleAllVO; } + + @Override + public List getShopWeek() { + final List thisWeekSale = new ArrayList<>(); + try{ + // 今天 + final String todayDateStr = DateUtils.formatDate(new Date(), "yyyy-MM-dd"); + String searchDate; + for (int i = -6; i < 1; i++) { + // 查询的日期加一天 + searchDate = DateUtil.getAfterDayTime(todayDateStr, i); + // 店铺id从缓存中获取,并放到数据中去 + final String shopId = securityUtil.getShopId(); + // 查询日期范围内数据 + final Date startDate = DateUtil.COMMON_FULL.getTextDate(searchDate + " 00:00:00"); + final Date endDate = DateUtil.COMMON_FULL.getTextDate(searchDate + " 23:59:59"); + + BigDecimal totalAmount1 = new BigDecimal(0); + //获取当日门店销售总额 销售笔数 销售总件数 + final SaleExample saleExample = new SaleExample(); + saleExample.createCriteria() + .andCreateTimeBetween(startDate, endDate) + .andStatusNotEqualTo(SaleConstant.SALE_STATUS[2]) + .andStatusNotEqualTo(SaleConstant.SALE_STATUS[8]) + .andShopIdEqualTo(shopId); + final SaleAllVO saleAllVO1 = saleMapper.saleSumAndCount(saleExample); + if (!ObjectUtils.isEmpty(saleAllVO1)) { + totalAmount1 = saleAllVO1.getTotalAmount(); + } + + //获取当日门店利润(当日总营收-当日总成本+(退货总营收-退货总成本)) + final QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("shop_id", shopId) + .between("create_time", startDate, endDate); + BigDecimal totalPurchasePrice = new BigDecimal("0.0"); + final List list = saleDetailService.list(queryWrapper); + for (SaleDetail saleDetail : list) { + final BigDecimal purchasePrice = saleDetail.getPurchasePrice(); + final int productCount = saleDetail.getProductCount(); + totalPurchasePrice = totalPurchasePrice.add(purchasePrice.multiply(new BigDecimal(productCount))); + } + // 利润= 销售总金额-成本 + final BigDecimal subtract = totalAmount1.subtract(totalPurchasePrice); + + thisWeekSale.add(subtract); + + + } + }catch (Exception e){ + log.error("获取本周日期错误!",e); + } + + return thisWeekSale; + } } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductServiceImpl.java index a8e39867..c825d38a 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductServiceImpl.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/ProductServiceImpl.java @@ -1,5 +1,6 @@ package cc.hiver.mall.serviceimpl.mybatis; +import cc.hiver.core.common.utils.SecurityUtil; import cc.hiver.mall.dao.mapper.ProductMapper; import cc.hiver.mall.entity.Product; import cc.hiver.mall.pojo.query.ProductPageQuery; @@ -8,12 +9,17 @@ import cc.hiver.mall.service.mybatis.ProductService; import com.baomidou.mybatisplus.core.metadata.IPage; 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.List; @Service public class ProductServiceImpl extends ServiceImpl implements ProductService { + + @Autowired + private SecurityUtil securityUtil; + @Override public IPage getShareList(ProductPageQuery productPageQuery) { final Page page = new Page<>(productPageQuery.getPageNum(), productPageQuery.getPageSize()); @@ -26,4 +32,17 @@ public class ProductServiceImpl extends ServiceImpl impl public List getProductList(List productIdList) { return baseMapper.getProductList(productIdList); } + + /** + * 获取店铺中商品信息 + * @author 王富康 + * @date 2023/11/21 + * @return List + */ + @Override + public List getProductListOfShop() { + // shopId从缓存中设置 + final String shopId = securityUtil.getShopId(); + return baseMapper.getProductListOfShop(shopId); + } } 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 4d55b47a..6d84262b 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 @@ -9,6 +9,7 @@ import cc.hiver.mall.entity.Purchase; import cc.hiver.mall.entity.PurchaseDetail; import cc.hiver.mall.entity.StockLog; import cc.hiver.mall.pojo.dto.DebtSupplier; +import cc.hiver.mall.pojo.vo.PurchaseQueryVo; import cc.hiver.mall.pojo.vo.PurchaseVo; import cc.hiver.mall.service.mybatis.DealingsRecordService; import cc.hiver.mall.service.mybatis.PurchaseDetailService; @@ -119,4 +120,16 @@ public class PurchaseServiceImpl extends ServiceImpl i return purchaseVo; } + + /** + * 查询采购单列表 + * @author 王富康 + * @date 2023/11/20 + * @param purchaseQueryVo + * @return List + */ + @Override + public List getPurchaseList(PurchaseQueryVo purchaseQueryVo) { + return purchaseMapper.getPurchaseList(purchaseQueryVo); + } } 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 00bd7793..1ad3a7b0 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 @@ -1,25 +1,64 @@ package cc.hiver.mall.serviceimpl.mybatis; -import cc.hiver.core.common.utils.BeanUtils; -import cc.hiver.core.common.utils.ResultUtil; -import cc.hiver.core.common.vo.Result; +import cc.hiver.core.common.constant.DealingsRecordConstant; +import cc.hiver.core.common.utils.SecurityUtil; +import cc.hiver.core.entity.User; import cc.hiver.mall.dao.mapper.SaleMapper; -import cc.hiver.mall.dao.mapper.StockMapper; -import cc.hiver.mall.entity.*; -import cc.hiver.mall.pojo.vo.PurchaseVo; -import cc.hiver.mall.service.mybatis.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import cc.hiver.mall.entity.DealingsRecord; +import cc.hiver.mall.entity.Sale; +import cc.hiver.mall.service.mybatis.DealingsRecordService; +import cc.hiver.mall.service.mybatis.SaleService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import java.util.List; +import java.math.BigDecimal; +import java.util.Date; @Service public class SaleServiceImpl extends ServiceImpl implements SaleService { + @Autowired + private DealingsRecordService dealingsRecordService; + @Autowired + private SaleService saleService; + @Autowired + private SecurityUtil securityUtil; + + @Override + public void editPayPrice(String id, BigDecimal price, String dealingsWay) { + // 修改采购单、实付、未付金额 + final Sale oldSale = saleService.getById(id); + final BigDecimal noPay = oldSale.getNoEarn(); + final BigDecimal alreadyPay = oldSale.getAlreadyEarn(); + // 计算未付 + final BigDecimal newNoPay = noPay.subtract(price); + oldSale.setNoEarn(newNoPay); + // 计算已付 + final BigDecimal newAlreadPay = alreadyPay.add(price); + oldSale.setAlreadyEarn(newAlreadPay); + saleService.saveOrUpdate(oldSale); + // 保存记录表 + final DealingsRecord dealingsRecord = new DealingsRecord(); + // 已确认 校验accessToken + final User user = securityUtil.getCurrUser(); + dealingsRecord.setAmount(price); + dealingsRecord.setCreateBy(user.getId()); + dealingsRecord.setCreateByName(user.getNickname()); + dealingsRecord.setCreateTime(new Date()); + dealingsRecord.setSaleId(id); + // 交易对象id;上游供应商id/下游客户id + dealingsRecord.setDealingsUserId(oldSale.getUserId()); + // 交易对象名称 + dealingsRecord.setDealingsUserName(oldSale.getUserName()); + // 类型( 0-上游供货商;1-下游客户) + dealingsRecord.setUserType(DealingsRecordConstant.TYPE[1]); + // 剩余欠款 + dealingsRecord.setBalanceDue(newNoPay); + // 交易方式/附言 + dealingsRecord.setDealingsWay(dealingsWay); + dealingsRecordService.save(dealingsRecord); + } } 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 2af69b12..5a6231b8 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 @@ -8,6 +8,7 @@ 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.PurchaseVo; +import cc.hiver.mall.pojo.vo.ShopStockVo; import cc.hiver.mall.service.mybatis.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -37,6 +38,9 @@ public class StockServiceImpl extends ServiceImpl implements @Autowired private StockService stockService; + @Autowired + private StockMapper stockMapper; + @Autowired private SecurityUtil securityUtil; @@ -161,7 +165,7 @@ public class StockServiceImpl extends ServiceImpl implements // 需要新增的履历集合 final List stockLogAddList = new ArrayList<>(); // 需要更新的商品信息集合 - List updateProductList = new ArrayList<>(); + final List updateProductList = new ArrayList<>(); // 需要修改的商品信息集合,商品中的平均采购价需要计算 final List productIdList = new ArrayList<>(); for (PurchaseDetail purchaseDetail : purchaseDetails) { @@ -264,7 +268,7 @@ public class StockServiceImpl extends ServiceImpl implements //1. 计算库存 if (stockMap.containsKey(stockLog.getAttributeList())) { //存在库存则修改库存数量 - Stock stock = stockMap.get(stockLog.getAttributeList()); + final Stock stock = stockMap.get(stockLog.getAttributeList()); stockCount = stock.getStockCount() != null ? stock.getStockCount() : 0; if (purchaseDetail.getPurchasePrice() != null) { //有采购价才更新库存 @@ -276,7 +280,7 @@ public class StockServiceImpl extends ServiceImpl implements // 实时更新库存信息 if (purchaseDetail.getPurchasePrice() != null) { // 有采购价才更新库存 - Stock stock = new Stock(); + final Stock stock = new Stock(); //没有则新建库存数据 // BeanUtils.copyBeanProp(stock, purchaseDetail); // 这里不能把商品的id同步过来 @@ -332,6 +336,14 @@ public class StockServiceImpl extends ServiceImpl implements } } + /** + * 待入库入库,维护价格等相关信息 + * + * @param purchaseVo + * @return Result + * @author 王富康 + * @date 2023/11/21 + */ @Override public Result putInPrice(PurchaseVo purchaseVo) { @@ -341,7 +353,7 @@ public class StockServiceImpl extends ServiceImpl implements final User user = securityUtil.getCurrUser(); // 入库单主表信息 - Purchase putInPurchase = purchaseVo.getPurchase(); + final Purchase putInPurchase = purchaseVo.getPurchase(); final String id = putInPurchase.getId(); final Purchase purchase = purchaseService.getById(id); purchase.setUpdateTime(new Date()); @@ -357,7 +369,7 @@ public class StockServiceImpl extends ServiceImpl implements // 获取前台入库商品信息 final List purchaseDetails = purchaseVo.getPurchaseDetails(); // 需要更新的商品信息集合 - List updateProductList = new ArrayList<>(); + final List updateProductList = new ArrayList<>(); // 需要修改的商品信息集合,商品中的平均采购价需要计算 final List productIdList = new ArrayList<>(); for (PurchaseDetail purchaseDetail : purchaseDetails) { @@ -446,13 +458,13 @@ public class StockServiceImpl extends ServiceImpl implements //1. 计算库存 if (stockMap.containsKey(stockLog.getAttributeList())) { //存在库存则修改库存数量 - Stock stock = stockMap.get(stockLog.getAttributeList()); + final Stock stock = stockMap.get(stockLog.getAttributeList()); stockCount = stock.getStockCount() != null ? stock.getStockCount() : 0; stock.setStockCount(stockCount + stockLog.getProductCount()); // 实时更新库存信息 stockService.saveOrUpdate(stock); } else { - Stock stock = new Stock(); + final Stock stock = new Stock(); //没有则新建库存数据 // BeanUtils.copyBeanProp(stock, purchaseDetail); // 这里不能把商品的id同步过来 @@ -492,4 +504,79 @@ public class StockServiceImpl extends ServiceImpl implements } } + /** + * 获取某店铺的库存管理顶部信息 + * @author 王富康 + * @date 2023/11/21 + * @return ShopStockVo + */ + @Override + public ShopStockVo getShopStock() { + final ShopStockVo shopStockVo = new ShopStockVo(); + // 获取该店的商品信息 + final List productListOfShop = productService.getProductListOfShop(); + // 方便后边计算 + final Map productMap = new HashMap<>(); + // 获取该店的库存信息 + final List stockList = stockService.stockListOfShop(); + // 1. 商品数 + shopStockVo.setProductCount(productListOfShop.size()); + // 2. 尾货预警 + int salesWeekCount = 0; + for (Product product : productListOfShop) { + final Date salesWeek = product.getSalesWeek(); + final boolean after = salesWeek.before(new Date()); + if (after) { + //超过尾货预警日期,数量加1 + salesWeekCount++; + } + productMap.putIfAbsent(product.getId(), product); + } + shopStockVo.setSalesWeekCount(salesWeekCount); + + // 3. 库存预警 + int tailWarnCount = 0; + // 4. 库存数 + int stockCount = 0; + // 5. 库存成本 + BigDecimal stockCost = new BigDecimal(0); + for (Stock stock : stockList) { + + final Product product = productMap.get(stock.getProductId()); + // 商品的库存预警 + final Integer tailWarn = product.getTailWarn(); + //平均采购价 + final BigDecimal purchasePrice = product.getPurchasePrice(); + final Integer thisStockCount = stock.getStockCount(); + // 计算成本,负数按0计算 + if (thisStockCount > 0) { + final BigDecimal thisStockCost = purchasePrice.multiply(BigDecimal.valueOf(thisStockCount)); + stockCost = stockCost.add(thisStockCost); + } + // 计算库存数 + stockCount += thisStockCount; + // 计算达到库存预警的规格数量 + if (tailWarn > thisStockCount) { + tailWarnCount++; + } + } + shopStockVo.setTailWarnCount(tailWarnCount); + shopStockVo.setStockCount(stockCount); + shopStockVo.setStockCost(stockCost); + return shopStockVo; + } + + /** + * 获取该店的库存信息 + * @author 王富康 + * @date 2023/11/21 + * @return List + */ + @Override + public List stockListOfShop() { + // shopId从缓存中设置 + final String shopId = securityUtil.getShopId(); + return stockMapper.stockListOfShop(shopId); + } + } diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/CustomerMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/CustomerMapper.xml index fc0fc79a..db0664d8 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/CustomerMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/CustomerMapper.xml @@ -382,6 +382,7 @@ and a.status != '3' -- 取消订单 and shop_id = #{shopId,jdbcType=VARCHAR} group by a.user_id,b.nickname + order by no_earn desc \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/ProductMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/ProductMapper.xml index e9ab5b8a..0c3d2922 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/ProductMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/ProductMapper.xml @@ -568,6 +568,15 @@ AND t.category_id =#{queryParams.categoryId} + + + AND t.product_name like concat('%',#{queryParams.productName},'%') + + + + AND t.product_sn like concat('%',#{queryParams.productSn},'%') + + AND t.supplier_name like concat('%',#{queryParams.supplierName},'%') @@ -582,7 +591,7 @@ #{queryParams.sortField} #{queryParams.sort} , - t.del_flag asc, t.create_time desc + t.update_time desc, in_storage_status,t.del_flag asc + + + \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseMapper.xml index 93fc6360..9191357b 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseMapper.xml @@ -17,7 +17,7 @@ - + @@ -387,7 +387,30 @@ and no_pay > 0 and shop_id = #{shopId,jdbcType=VARCHAR} group by a.supplier_id,a.supplier_name + order by no_pay desc + \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/StockMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/StockMapper.xml index 6fdbe0ea..69a55d36 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/StockMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/StockMapper.xml @@ -555,4 +555,15 @@ tail_warn = #{tailWarn,jdbcType=INTEGER} where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file