From ee8f860b139c57ac0b3d0c7dc090f2d080a68790 Mon Sep 17 00:00:00 2001 From: liuyingfang <1357764963@qq.com> Date: Thu, 7 Mar 2024 18:01:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B1=87=E6=80=BB=E9=83=A8=E5=88=86=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=EF=BC=8C=E5=88=86=E7=B1=BB=E9=80=BB=E8=BE=91=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=EF=BC=8C=E8=A7=84=E6=A0=BC=E5=8E=BB=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/shop/SummaryController.java | 27 +++++++ .../TbShopPurveyorTransactController.java | 1 + .../cn/ysk/cashier/dto/shop/PrintConfig.java | 8 +- .../cn/ysk/cashier/pojo/TbShopUserDuty.java | 80 +++++++++++++++++++ .../cashier/pojo/TbShopUserDutyDetail.java | 49 ++++++++++++ .../ShopUserDutyDetailRepository.java | 25 ++++++ .../repository/ShopUserDutyRepository.java | 21 +++++ .../product/TbShopCategoryRepository.java | 2 +- .../ysk/cashier/service/SummaryService.java | 10 +++ .../service/impl/SummaryServiceImpl.java | 49 ++++++++++++ .../productimpl/TbProductSpecServiceImpl.java | 2 +- .../TbShopCategoryServiceImpl.java | 3 +- .../java/cn/ysk/cashier/vo/ProductVO.java | 51 ++++++++++++ .../java/cn/ysk/cashier/vo/SummaryVO.java | 38 +++++++++ 14 files changed, 360 insertions(+), 6 deletions(-) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDuty.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDutyDetail.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyDetailRepository.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyRepository.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/service/SummaryService.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/vo/ProductVO.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/vo/SummaryVO.java diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java new file mode 100644 index 00000000..b6afaf28 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java @@ -0,0 +1,27 @@ +package cn.ysk.cashier.controller.shop; + +import cn.ysk.cashier.service.SummaryService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author lyf + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/summary") +public class SummaryController { + @Resource + private SummaryService summaryService; + @GetMapping + private Object shopSummary(@RequestParam Integer shopId){ + return summaryService.selectSummary(shopId); + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopPurveyorTransactController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopPurveyorTransactController.java index 13809c30..98dc395b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopPurveyorTransactController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopPurveyorTransactController.java @@ -15,6 +15,7 @@ */ package cn.ysk.cashier.controller.shop; +import cn.hutool.core.date.DateTime; import cn.ysk.cashier.annotation.Log; import cn.ysk.cashier.pojo.shop.TbShopPurveyorTransact; import cn.ysk.cashier.service.shop.TbShopPurveyorTransactService; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/PrintConfig.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/PrintConfig.java index 38c01d54..656a412b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/PrintConfig.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/PrintConfig.java @@ -2,7 +2,9 @@ package cn.ysk.cashier.dto.shop; import lombok.Data; import cn.ysk.cashier.pojo.product.TbShopCategory; +import reactor.util.annotation.Nullable; +import javax.validation.constraints.NotNull; import java.util.List; /** @@ -10,14 +12,16 @@ import java.util.List; */ @Data public class PrintConfig { + @NotNull(message = "设备尺寸不能为空") private String width; + @NotNull(message = "打印份数不能为空") private String printerNum; private List categoryList; private String model; - + @NotNull(message = "尾部留空需设置") private String feet; - + @NotNull(message = "自动切刀0开启1关闭") private String autoCut; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDuty.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDuty.java new file mode 100644 index 00000000..d5efe321 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDuty.java @@ -0,0 +1,80 @@ +package cn.ysk.cashier.pojo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.*; +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Timestamp; + +/** + * + * @author lyf + */ +@Entity +@Data +@Table(name = "tb_shop_user_duty") +public class TbShopUserDuty implements Serializable { + @Id + @Column(name = "`id`") + @ApiModelProperty(value = "自增id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "user_id") + @ApiModelProperty(value = "员工id") + private Integer userId; + + @Column(name = "login_time") + @ApiModelProperty(value = "登录时间") + private Timestamp loginTime; + + @Column(name = "order_num") + @ApiModelProperty(value = "订单数量") + private Integer orderNum; + + @Column(name = "amount") + @ApiModelProperty(value = "总收入") + private BigDecimal amount; + + @Column(name = "login_out_time") + @ApiModelProperty(value = "登出时间") + private Timestamp loginOutTime; + + @Column(name = "user_name") + @ApiModelProperty(value = "员工名称") + private String userName; + + @Column(name = "status") + @ApiModelProperty(value = "0:营业中,1:已交班") + private String status; + + @Column(name = "income_amount") + @ApiModelProperty(value = "当班收入") + private BigDecimal incomeAmount; + + @Column(name = "shop_id") + @ApiModelProperty(value = "shopId") + private Integer shopId; + + @Column(name = "petty_cash") + @ApiModelProperty(value = "备用金") + private BigDecimal pettyCash; + + @Column(name = "hand_amount") + @ApiModelProperty(value = "上交金额") + private BigDecimal handAmount; + + @Column(name = "equipment") + @ApiModelProperty(value = "设备") + private String equipment; + + @Column(name = "token_id") + @ApiModelProperty(value = "tokenId") + private Integer tokenId; + + @Column(name = "return_amount") + @ApiModelProperty(value = "退单金额") + private BigDecimal returnAmount; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDutyDetail.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDutyDetail.java new file mode 100644 index 00000000..e9a2814d --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/TbShopUserDutyDetail.java @@ -0,0 +1,49 @@ +package cn.ysk.cashier.pojo; + +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +import javax.persistence.*; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author 12847 + */ +@Entity +@Data +@Table(name = "tb_shop_user_duty_detail") +public class TbShopUserDutyDetail implements Serializable { + @Id + @Column(name = "`id`") + @ApiModelProperty(value = "自增id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "duty_id") + @ApiModelProperty(value = "值班ID") + private Integer dutyId; + + @Column(name = "product_id") + @ApiModelProperty(value = "商品ID") + private Integer productId; + + @Column(name = "product_name") + @ApiModelProperty(value = "商品名称") + private String productName; + @Column(name = "sku_id") + @ApiModelProperty(value = "规格ID") + private Integer skuId; + + @Column(name = "sku_name") + @ApiModelProperty(value = "规格名称") + private Integer skuName; + + @Column(name = "num") + @ApiModelProperty(value = "规格名称") + private Integer num; + @Column(name = "amount") + @ApiModelProperty(value = "商品金额小计") + private BigDecimal amount; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyDetailRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyDetailRepository.java new file mode 100644 index 00000000..f5aab472 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyDetailRepository.java @@ -0,0 +1,25 @@ +package cn.ysk.cashier.repository; + +import cn.ysk.cashier.pojo.TbShopUserDutyDetail; +import cn.ysk.cashier.vo.ProductVO; +import org.apache.ibatis.annotations.Param; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * @author lyf + */ +public interface ShopUserDutyDetailRepository extends JpaRepository { + + @Query(value = "SELECT" + + " product.product_id as productId, product.product_name as productName, SUM(product.num) as productNum" + + " FROM" + + " tb_shop_user_duty_detail AS product" + + " LEFT JOIN tb_shop_user_duty AS user ON product.duty_id = USER.id " + + "WHERE user.shop_id = :shopId" + + " GROUP BY product.product_id" + + " Limit 5", nativeQuery = true) + List searchByDutyId(@Param("shopId") Integer shopId); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyRepository.java new file mode 100644 index 00000000..87104023 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/ShopUserDutyRepository.java @@ -0,0 +1,21 @@ +package cn.ysk.cashier.repository; + + +import cn.ysk.cashier.pojo.TbShopUserDuty; +import org.apache.ibatis.annotations.Param; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import javax.persistence.Tuple; + + +/** + * @author lyf + */ +public interface ShopUserDutyRepository extends JpaRepository{ + @Query("SELECT SUM(detail.orderNum), SUM(detail.amount) " + + "FROM TbShopUserDuty detail " + + "WHERE detail.shopId = :shopId") + Tuple sumByShopId(@Param("shopId") Integer shopId); + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbShopCategoryRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbShopCategoryRepository.java index c8c2e8c4..33f43158 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbShopCategoryRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbShopCategoryRepository.java @@ -38,6 +38,6 @@ public interface TbShopCategoryRepository extends JpaRepository findChildren(@Param("ids")List ids); - @Query(" SELECT category FROM TbShopCategory category where category.shopId = :shopId and category.id = category.tree") + @Query(" SELECT category FROM TbShopCategory category where category.shopId = :shopId") Page findAllBy(@Param("shopId") String shopId,Pageable pageable); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/SummaryService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/SummaryService.java new file mode 100644 index 00000000..de5150e5 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/SummaryService.java @@ -0,0 +1,10 @@ +package cn.ysk.cashier.service; + +import cn.ysk.cashier.vo.SummaryVO; + +/** + * @author lyf + */ +public interface SummaryService { + SummaryVO selectSummary(Integer shop); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java new file mode 100644 index 00000000..ab3a039e --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java @@ -0,0 +1,49 @@ +package cn.ysk.cashier.service.impl; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; +import cn.ysk.cashier.repository.ShopUserDutyDetailRepository; +import cn.ysk.cashier.repository.ShopUserDutyRepository; +import cn.ysk.cashier.service.SummaryService; +import cn.ysk.cashier.vo.SummaryVO; +import cn.ysk.cashier.vo.ProductVO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.persistence.Tuple; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class SummaryServiceImpl implements SummaryService { + @Resource + private ShopUserDutyRepository shopUserDutyRepository; + @Resource + private ShopUserDutyDetailRepository shopUserDutyDetailRepository; + @Override + public SummaryVO selectSummary(Integer shopId) { + SummaryVO summaryVO = new SummaryVO(); + //支付笔数 + Tuple result = shopUserDutyRepository.sumByShopId(shopId); + summaryVO.setPaymentsNumber(result.get(0, Long.class)); + summaryVO.setTotalSales(result.get(1, BigDecimal.class)); + List objects = shopUserDutyDetailRepository.searchByDutyId(shopId); + + List list = new ArrayList<>(); + for (Object[] o :objects) { + ProductVO productVO = new ProductVO(); + productVO.setProductId((Integer) o[0]); + productVO.setProductName((String) o[1]); + productVO.setProductNum((BigDecimal)o[2]); + list.add(productVO); + } + summaryVO.setProductInfoList(list); + summaryVO.setAverageSales(summaryVO.getTotalSales().divide(new BigDecimal(summaryVO.getPaymentsNumber()),2, RoundingMode.DOWN)); + return summaryVO; + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductSpecServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductSpecServiceImpl.java index e51ac842..3d3cead7 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductSpecServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductSpecServiceImpl.java @@ -90,7 +90,7 @@ public class TbProductSpecServiceImpl implements TbProductSpecService { } TbProductSpec tbProductSpec = new TbProductSpec(); tbProductSpec.setName(specDto.getName()); - tbProductSpec.setSpecList(specDto.getSpecList().toString().trim()); + tbProductSpec.setSpecList(specDto.getSpecList().toString().replace(" ", "")); tbProductSpec.setShopId(specDto.getShopId()); tbProductSpec.setCreatedAt(Instant.now().toEpochMilli()); tbProductSpec.setUpdatedAt(Instant.now().toEpochMilli()); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbShopCategoryServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbShopCategoryServiceImpl.java index 5a0971c1..a4d49486 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbShopCategoryServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbShopCategoryServiceImpl.java @@ -62,7 +62,7 @@ public class TbShopCategoryServiceImpl implements TbShopCategoryService { // Page page = tbShopCategoryRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by("sort")); Page page = tbShopCategoryRepository.findAllBy(criteria.getShopId(), pageable); - tbShopCategoryRepository.findAllBy(criteria.getShopId(),pageable); +// tbShopCategoryRepository.findAllBy(criteria.getShopId(),pageable); List treeId = new ArrayList<>(); for (TbShopCategory category : page.getContent()) { @@ -119,7 +119,6 @@ public class TbShopCategoryServiceImpl implements TbShopCategoryService { }else { resources.setTree(Integer.valueOf(resources.getPid().trim())); } - ValidationUtil.isNull(resources.getId(),"TbShopCategory","id",resources.getId()); return tbShopCategoryRepository.save(resources); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/ProductVO.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/ProductVO.java new file mode 100644 index 00000000..5d0a9e54 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/ProductVO.java @@ -0,0 +1,51 @@ +package cn.ysk.cashier.vo; + +import lombok.Data; + +import java.math.BigDecimal; + + +/** + * 商品销量 + * @author lyf + */ +@Data +public class ProductVO { + + private Integer productId; + + private String productName; + + private BigDecimal productNum; + + + public Integer getProductId() { + return productId; + } + + public void setProductId(Integer productId) { + this.productId = productId; + } + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public BigDecimal getProductNum() { + return productNum; + } + + public void setProductNum(BigDecimal productNum) { + this.productNum = productNum; + } + + public ProductVO() { + this.productId = productId; + this.productName = productName; + this.productNum = productNum; + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/SummaryVO.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/SummaryVO.java new file mode 100644 index 00000000..294968d6 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/SummaryVO.java @@ -0,0 +1,38 @@ +package cn.ysk.cashier.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author lyf + */ +@Data +public class SummaryVO { + /** + * 总销售额 + */ + private BigDecimal totalSales; + /** + * 今日销售额 + */ + private BigDecimal todaySales; + /** + * 平均每单 + */ + private BigDecimal averageSales; + /** + * 支付笔数 + */ + private Long paymentsNumber; + /** + * 今天支付笔数 + */ + private Integer todayPaymentsNumber; + /** + * 商品统计数据 + */ + private List productInfoList; + +}