From b1c8c1d89e3d353f82c4789d29638ffd9128ba7f Mon Sep 17 00:00:00 2001 From: LiJianZhao Date: Wed, 14 May 2025 10:27:38 +0800 Subject: [PATCH] dev --- .../clinic/server/common/util/StringUtil.java | 9 ++++ .../statistics/StatisticsController.java | 12 +++-- .../server/entity/goods/dto/GoodsQuery.java | 2 +- .../entity/statistics/ChrgitmLvOverview.java | 12 +++++ .../entity/statistics/GoodsStatistics.java | 21 +++++++++ .../server/mapper/goods/GoodsMapper.java | 4 ++ .../server/service/goods/GoodsService.java | 16 ++++++- .../service/statistics/StatisticsService.java | 46 +++++++++++++++++-- 8 files changed, 111 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/syjiaer/clinic/server/entity/statistics/ChrgitmLvOverview.java create mode 100644 src/main/java/com/syjiaer/clinic/server/entity/statistics/GoodsStatistics.java diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java index c6735d4..43ba7d8 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java +++ b/src/main/java/com/syjiaer/clinic/server/common/util/StringUtil.java @@ -28,4 +28,13 @@ public class StringUtil { String code = tag+formattedDateTime+randomNumber; return code; } + + /** + * 判断字符串是否是纯数字 + * @param str + * @return + */ + public static boolean isNumeric(String str) { + return str != null && str.matches("\\d+"); + } } diff --git a/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java b/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java index 9ad0d53..1a6f91b 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java @@ -5,10 +5,7 @@ import com.syjiaer.clinic.server.common.util.DateUtil; import com.syjiaer.clinic.server.common.vo.Result; import com.syjiaer.clinic.server.controller.BaseController; import com.syjiaer.clinic.server.entity.goods.Goods; -import com.syjiaer.clinic.server.entity.statistics.PersonPayOverviewVo; -import com.syjiaer.clinic.server.entity.statistics.RevenueOverviewVo; -import com.syjiaer.clinic.server.entity.statistics.SalePersonReportVo; -import com.syjiaer.clinic.server.entity.statistics.TipCountVo; +import com.syjiaer.clinic.server.entity.statistics.*; import com.syjiaer.clinic.server.service.goods.GoodsService; import com.syjiaer.clinic.server.service.inventory.InventoryService; import com.syjiaer.clinic.server.service.statistics.StatisticsService; @@ -86,5 +83,12 @@ public class StatisticsController extends BaseController { LocalDateTime endTime = DateUtil.getDateTime(end); return success( statisticsService.getWaitCount(beginTime, endTime)); } + /** + * 商品统计 + */ + @RequestMapping("/goodsStatistics") + public Result getGoodsStatistics() { + return success( statisticsService.getGoodsStatistics()); + } } diff --git a/src/main/java/com/syjiaer/clinic/server/entity/goods/dto/GoodsQuery.java b/src/main/java/com/syjiaer/clinic/server/entity/goods/dto/GoodsQuery.java index 4e6c15e..c27d200 100644 --- a/src/main/java/com/syjiaer/clinic/server/entity/goods/dto/GoodsQuery.java +++ b/src/main/java/com/syjiaer/clinic/server/entity/goods/dto/GoodsQuery.java @@ -8,7 +8,7 @@ import java.util.List; @Getter public class GoodsQuery { - private String name; + private String keyword; private Integer cateId; private Integer minInterestRate; private Integer maxInterestRate; diff --git a/src/main/java/com/syjiaer/clinic/server/entity/statistics/ChrgitmLvOverview.java b/src/main/java/com/syjiaer/clinic/server/entity/statistics/ChrgitmLvOverview.java new file mode 100644 index 0000000..3376547 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/statistics/ChrgitmLvOverview.java @@ -0,0 +1,12 @@ +package com.syjiaer.clinic.server.entity.statistics; + +import lombok.Data; + +@Data +public class ChrgitmLvOverview { + private String chrgitmLv; + private String name; + private Long count; + private String ratio; + +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/statistics/GoodsStatistics.java b/src/main/java/com/syjiaer/clinic/server/entity/statistics/GoodsStatistics.java new file mode 100644 index 0000000..4624de2 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/statistics/GoodsStatistics.java @@ -0,0 +1,21 @@ +package com.syjiaer.clinic.server.entity.statistics; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +@Data +public class GoodsStatistics { + private BigDecimal totalCost; + private BigDecimal totalPrice; + private Long totalSocialCount; + private List chrgitmLvInfoList; + + public GoodsStatistics() { + this.totalCost = new BigDecimal(0); + this.totalPrice = new BigDecimal(0); + this.totalSocialCount = 0L; + this.chrgitmLvInfoList = new ArrayList<>(); + } +} diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/goods/GoodsMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/goods/GoodsMapper.java index 7cd664b..84cacb1 100644 --- a/src/main/java/com/syjiaer/clinic/server/mapper/goods/GoodsMapper.java +++ b/src/main/java/com/syjiaer/clinic/server/mapper/goods/GoodsMapper.java @@ -2,6 +2,7 @@ package com.syjiaer.clinic.server.mapper.goods; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.syjiaer.clinic.server.entity.goods.Goods; +import org.apache.ibatis.annotations.Select; /** *

@@ -12,4 +13,7 @@ import com.syjiaer.clinic.server.entity.goods.Goods; * @since 2025-02-21 */ public interface GoodsMapper extends BaseMapper { + @Select("SELECT count(1) FROM goods LEFT JOIN social_directory_upinfo " + + "ON goods.hilist_code = social_directory_upinfo.code WHERE chrgitm_lv =#{chrgitmLv}") + long selectCountByChrgitmLv(String chrgitmLv); } diff --git a/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java b/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java index 6d1160d..8cf715f 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java @@ -13,6 +13,7 @@ import com.syjiaer.clinic.server.common.enums.GoodsTypeEnum; import com.syjiaer.clinic.server.common.enums.InventorySocialTypeEnum; import com.syjiaer.clinic.server.common.exception.MessageException; import com.syjiaer.clinic.server.common.util.PinYinUtil; +import com.syjiaer.clinic.server.common.util.StringUtil; import com.syjiaer.clinic.server.common.vo.Page; import com.syjiaer.clinic.server.entity.goods.Goods; import com.syjiaer.clinic.server.entity.goods.dto.GoodsQuery; @@ -182,8 +183,19 @@ public class GoodsService { if (goodsQuery.getPageNum() == null || goodsQuery.getPageNum() == 0) { goodsQuery.setPageNum(1); } - if (goodsQuery.getName() != null && !goodsQuery.getName().isEmpty()) { - queryWrapper.like("name", goodsQuery.getName()); + if (goodsQuery.getKeyword() != null && !goodsQuery.getKeyword().isEmpty()) { + String keyword = goodsQuery.getKeyword().trim(); + queryWrapper.and(wrapper -> { + wrapper.like("name",keyword); + wrapper.or().like("common_name",keyword); + wrapper.or().like("pinyin_first", keyword); + wrapper.or().like("approval_code", keyword); + wrapper.or().like("barcode", keyword); + if (StringUtil.isNumeric(keyword)){ + String subkey = keyword.length() > 7 ? keyword.substring(0,7) : keyword; + wrapper.or().like("id_code", subkey); + } + }); } if (goodsQuery.getMinInterestRate() != null) { queryWrapper.ge("interest_rate*100", goodsQuery.getMinInterestRate()); diff --git a/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java b/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java index af71307..bee243b 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java @@ -1,20 +1,19 @@ package com.syjiaer.clinic.server.service.statistics; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.syjiaer.clinic.server.common.enums.GoodsTypeEnum; -import com.syjiaer.clinic.server.common.enums.RegistrationStatusEnum; -import com.syjiaer.clinic.server.common.enums.RetailOrderPayTypeEnum; -import com.syjiaer.clinic.server.common.enums.RetailOrderStatusEnum; +import com.syjiaer.clinic.server.common.enums.*; import com.syjiaer.clinic.server.common.util.DateUtil; import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList; import com.syjiaer.clinic.server.entity.charge.ChargeOrder; import com.syjiaer.clinic.server.entity.diagnosis.Diagnosis; +import com.syjiaer.clinic.server.entity.goods.Goods; import com.syjiaer.clinic.server.entity.organization.OrganizationMember; import com.syjiaer.clinic.server.entity.patient.PatientRegistration; import com.syjiaer.clinic.server.entity.statistics.*; import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper; import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper; import com.syjiaer.clinic.server.mapper.diagnosis.DiagnosisMapper; +import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper; import com.syjiaer.clinic.server.mapper.patient.PatientRegistrationMapper; import com.syjiaer.clinic.server.service.BaseService; @@ -38,6 +37,8 @@ public class StatisticsService extends BaseService { private PatientRegistrationMapper patientRegistrationMapper; @Autowired private DiagnosisMapper diagnosisMapper; + @Autowired + private GoodsMapper goodsMapper; public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) { RevenueOverviewVo overviewVo = new RevenueOverviewVo(); @@ -224,4 +225,41 @@ public class StatisticsService extends BaseService { } + + /** + * 商品统计 + * @return + */ + public GoodsStatistics getGoodsStatistics() { + GoodsStatistics goodsStatistics = new GoodsStatistics(); + QueryWrapper goodsWrapper = new QueryWrapper<>(); + goodsWrapper.select("sum(unit_price*inventory_whole_number+disassembly_price*inventory_fragment_number) as total_price" + + ",sum(purchase_unit_price*inventory_whole_number) as total_cost"); + goodsWrapper.eq("status", true); + Map costAndPriceMap = goodsMapper.selectMaps(goodsWrapper).get(0); + + goodsStatistics.setTotalCost(new BigDecimal(costAndPriceMap.get("total_cost").toString())); + goodsStatistics.setTotalPrice(new BigDecimal(costAndPriceMap.get("total_price").toString())); + + QueryWrapper socialWrapper = new QueryWrapper<>(); + socialWrapper.eq("status", true); + Long totalCount = goodsMapper.selectCount(socialWrapper); + socialWrapper.isNotNull("hilist_code"); + Long totalSocialCount = goodsMapper.selectCount(socialWrapper); + goodsStatistics.setTotalSocialCount(totalSocialCount); + List chrgitmLvInfoList = new ArrayList<>(); + for (ChrgitmLvEnum chrgitmLvEnum:ChrgitmLvEnum.values()){ + ChrgitmLvOverview chrgitmLvOverview = new ChrgitmLvOverview(); + Long count = goodsMapper.selectCountByChrgitmLv(chrgitmLvEnum.getCode()); + chrgitmLvOverview.setChrgitmLv(chrgitmLvEnum.getCode()); + chrgitmLvOverview.setName(chrgitmLvEnum.getName()); + chrgitmLvOverview.setCount(count); + String ratio =String.format("%.2f", (count * 100.0 / totalCount)); + chrgitmLvOverview.setRatio(ratio+"%"); + chrgitmLvInfoList.add(chrgitmLvOverview); + } + goodsStatistics.setChrgitmLvInfoList(chrgitmLvInfoList); + + return goodsStatistics; + } }