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 62fca97..8eb3f95 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 @@ -40,9 +40,8 @@ public class StatisticsController extends BaseController { LocalDateTime beginTime = DateUtil.getDateTime(begin); LocalDateTime endTime = DateUtil.getDateTime(end); -// RevenueOverviewVo revenueOverview = statisticsService.getRevenueOverview(beginTime, endTime); -// return success(revenueOverview); - return success(); + RevenueOverviewVo revenueOverview = statisticsService.getRevenueOverview(beginTime, endTime); + return success(revenueOverview); } @@ -56,15 +55,8 @@ public class StatisticsController extends BaseController { @RequestMapping("expiryDateWarning") public Result>> expiryDateWarning() { -// QueryWrapper inventoryQuery = new QueryWrapper<>(); -// inventoryQuery.select("*,EXTRACT(EPOCH FROM AGE(expiry_date,CURRENT_DATE))/" + Constants.OneDaySecond + " as remaining_days"); -// inventoryQuery.apply("CURRENT_DATE + INTERVAL '1 day' * expiry_warn_days >= expiry_date"); -// inventoryQuery.orderByAsc("expiry_date"); -// -// List> maps = iInventoryGoodsViewService.listMaps(inventoryQuery); - inventoryService.expiryDateWarning(); -// return success(maps); - return success(); + List> maps = inventoryService.expiryDateWarning(); + return success(maps); } @RequestMapping("getPersonPayOverview") diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/inventory/InventoryMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/inventory/InventoryMapper.java index d24e619..913005b 100644 --- a/src/main/java/com/syjiaer/clinic/server/mapper/inventory/InventoryMapper.java +++ b/src/main/java/com/syjiaer/clinic/server/mapper/inventory/InventoryMapper.java @@ -2,6 +2,10 @@ package com.syjiaer.clinic.server.mapper.inventory; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.syjiaer.clinic.server.entity.inventory.Inventory; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; /** @@ -13,6 +17,10 @@ import com.syjiaer.clinic.server.entity.inventory.Inventory; * @since 2025-04-17 */ public interface InventoryMapper extends BaseMapper { - + @Select("SELECT" + + " inventory.*,goods.expiry_warn_days,goods.unit_price,EXTRACT(EPOCH FROM AGE(expiry_date, CURRENT_DATE)) / 86400 AS remaining_days" + + " FROM inventory LEFT JOIN goods ON inventory.good_id = goods.id" + + " WHERE CURRENT_DATE + INTERVAL '1 day' * goods.expiry_warn_days >= inventory.expiry_date AND inventory.whole_number !=0") + List> selectExpiryWarn(); } diff --git a/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java b/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java index 3c57c13..0bde82d 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java @@ -245,10 +245,13 @@ public class InventoryService extends BaseService { } - - public void expiryDateWarning() { -// inventoryMapper.selectListB - + /** + * 查询即将过期的库存 + * @return + */ + public List> expiryDateWarning() { + List> maps = inventoryMapper.selectExpiryWarn(); + return maps; } diff --git a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java index 1feb9bc..2abebb9 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/patient/PatientRegistrationService.java @@ -98,7 +98,7 @@ public class PatientRegistrationService extends BaseService { registration.setOrganizationSectionId(section.getId()); patientRegistrationMapper.insert(registration); //医保挂号 - if (mdtrtCertType == null && mdtrtCertNo == null){ + if (mdtrtCertType == null || mdtrtCertNo == null || mdtrtCertType.isEmpty() || mdtrtCertNo.isEmpty()){ return registration; } diff --git a/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcDiagnoseService.java b/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcDiagnoseService.java index 73ffe98..5b8c25e 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcDiagnoseService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcDiagnoseService.java @@ -39,8 +39,12 @@ public class SocialIcpcDiagnoseService extends BaseService { List code_list = new ArrayList<>(); DateTimeFormatter dateTimeFormatter = DateUtil.getDateTimeFormatter(DateUtil.DATE_TIME_FORMAT); List list = new ArrayList<>(); + String next_version_name = ""; for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); + if (i==0){ + next_version_name = jsonObject.getString("ver"); + } if (!jsonObject.getString("vali_flag").equals("1")) { continue; } @@ -75,12 +79,19 @@ public class SocialIcpcDiagnoseService extends BaseService { list.add(socialIcpcDiagnosis); code_list.add(socialIcpcDiagnosis.getCode()); } + if (next_version_name.isEmpty()){ + return next_version_name; + } + socialDirectoryVersionService.saveVersion(1361, pre_version_name, next_version_name, list.size()); + if(list.isEmpty()){ + return null; + } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("code", code_list); socialIcpcDiagnosisMapper.delete(queryWrapper); socialIcpcDiagnosisMapper.insert(list, 100); - socialDirectoryVersionService.saveVersion(1361, pre_version_name, list.get(0).getVer(), list.size()); - return list.get(0).getVer(); + + return next_version_name; }catch (JSONException e){ log.error(e.toString()); return null; diff --git a/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcItemService.java b/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcItemService.java index fca3f3e..b6f2dec 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcItemService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialIcpcItemService.java @@ -38,8 +38,12 @@ public class SocialIcpcItemService extends BaseService { List code_list = new ArrayList<>(); DateTimeFormatter dateTimeFormatter = DateUtil.getDateTimeFormatter(DateUtil.DATE_TIME_FORMAT); List list = new ArrayList<>(); + String next_version_name = ""; for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); + if (i==0){ + next_version_name = jsonObject.getString("ver"); + } if (!jsonObject.getString("vali_flag").equals("1")) { continue; } @@ -77,12 +81,18 @@ public class SocialIcpcItemService extends BaseService { list.add(socialIcpcItem); code_list.add(socialIcpcItem.getCode()); } + if (next_version_name.isEmpty()){ + return next_version_name; + } + socialDirectoryVersionService.saveVersion(1362, pre_version_name, next_version_name, list.size()); + if (list.isEmpty()){ + return null; + } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("code", code_list); socialIcpcItemMapper.delete(queryWrapper); socialIcpcItemMapper.insert(list, 100); - socialDirectoryVersionService.saveVersion(1362, pre_version_name, list.get(0).getVer(), list.size()); - return list.get(0).getVer(); + return next_version_name; }catch (JSONException e){ log.error(e.toString()); return null; 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 3137391..abb47f9 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,6 +1,17 @@ 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.RetailOrderPayTypeEnum; +import com.syjiaer.clinic.server.common.enums.RetailOrderStatusEnum; +import com.syjiaer.clinic.server.entity.charge.ChargeGoodsList; +import com.syjiaer.clinic.server.entity.charge.ChargeItemList; +import com.syjiaer.clinic.server.entity.charge.ChargeOrder; +import com.syjiaer.clinic.server.entity.statistics.GoodsTypeRevenue; +import com.syjiaer.clinic.server.entity.statistics.PayTypeRevenue; +import com.syjiaer.clinic.server.entity.statistics.RevenueOverviewVo; +import com.syjiaer.clinic.server.mapper.charge.ChargeGoodsListMapper; +import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper; import com.syjiaer.clinic.server.service.BaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,7 +24,70 @@ import java.util.Map; @Service public class StatisticsService extends BaseService { + @Autowired + private ChargeOrderMapper chargeOrderMapper; + @Autowired + private ChargeGoodsListMapper chargeGoodsListMapper; + public RevenueOverviewVo getRevenueOverview(LocalDateTime begin, LocalDateTime end) { + RevenueOverviewVo overviewVo = new RevenueOverviewVo(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("sum(total_price) as total_revenue,count(*) as total_order_count"); + queryWrapper.ge("pay_time", begin); + queryWrapper.le("pay_time", end); + queryWrapper.eq("status", RetailOrderStatusEnum.FINISHED.getCode()); + Map map = chargeOrderMapper.selectMaps(queryWrapper).get(0); + overviewVo.setTotalRevenue((BigDecimal) map.getOrDefault("total_revenue",new BigDecimal(0))); + overviewVo.setTotalOrderCount((Long) map.getOrDefault("total_order_count",new BigDecimal(0))); +// +// queryWrapper.isNotNull("vip_id"); +// Map vipMap = retailOrderService.getMap(queryWrapper); +// overviewVo.setVipRevenue((BigDecimal) vipMap.getOrDefault("total_revenue",new BigDecimal(0))); +// overviewVo.setVipOrderCount((Long) vipMap.getOrDefault("total_order_count",new BigDecimal(0))); + QueryWrapper payTypeQuery = new QueryWrapper<>(); + payTypeQuery.ge("pay_time", begin); + payTypeQuery.le("pay_time", end); + payTypeQuery.eq("status", RetailOrderStatusEnum.FINISHED.getCode()); + List chargeOrders = chargeOrderMapper.selectList(payTypeQuery); + + payTypeQuery.select("pay_type,sum(total_price) as total_revenue"); + payTypeQuery.groupBy("pay_type"); + + List> payTypeMaps = chargeOrderMapper.selectMaps(payTypeQuery); + List payTypeRevenueList = new ArrayList<>(); + for (Map payTypeMap : payTypeMaps) { + PayTypeRevenue revenue = new PayTypeRevenue(); + revenue.setName(RetailOrderPayTypeEnum.getByCode((Integer) payTypeMap.get("pay_type")).getDesc()); + revenue.setTotalRevenue((BigDecimal) payTypeMap.getOrDefault("total_revenue",new BigDecimal(0))); + payTypeRevenueList.add(revenue); + } + overviewVo.setPayTypeRevenue(payTypeRevenueList); + List retailOrderCodes = chargeOrders.stream().map(ChargeOrder::getCode).toList(); + QueryWrapper retailListQuery = new QueryWrapper<>(); + retailListQuery.select("type,sum(sub_total_price) as total_revenue"); + retailListQuery.groupBy("type"); + retailListQuery.ge("create_time", begin); + retailListQuery.le("create_time", end); + List> goodsTypeMaps = new ArrayList<>(); + if (!retailOrderCodes.isEmpty() ){ + retailListQuery.in("charge_order_code",retailOrderCodes); + goodsTypeMaps = chargeGoodsListMapper.selectMaps(retailListQuery); + } + + + List goodsTypeRevenuesList = new ArrayList<>(); + for (Map goodsTypeMap : goodsTypeMaps) { + GoodsTypeRevenue goodsTypeRevenue = new GoodsTypeRevenue(); + goodsTypeRevenue.setName(GoodsTypeEnum.getByType((Integer) goodsTypeMap.get("type")).getDesc()); + goodsTypeRevenue.setTotalRevenue((BigDecimal) goodsTypeMap.getOrDefault("total_revenue",new BigDecimal(0))); + goodsTypeRevenuesList.add(goodsTypeRevenue); + } + overviewVo.setGoodsTypeRevenue(goodsTypeRevenuesList); + + + + return overviewVo; + } }