This commit is contained in:
LiJianZhao 2025-05-14 10:27:38 +08:00
parent cf0cd6834b
commit b1c8c1d89e
8 changed files with 111 additions and 11 deletions

View File

@ -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+");
}
}

View File

@ -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<GoodsStatistics> getGoodsStatistics() {
return success( statisticsService.getGoodsStatistics());
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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<ChrgitmLvOverview> chrgitmLvInfoList;
public GoodsStatistics() {
this.totalCost = new BigDecimal(0);
this.totalPrice = new BigDecimal(0);
this.totalSocialCount = 0L;
this.chrgitmLvInfoList = new ArrayList<>();
}
}

View File

@ -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;
/**
* <p>
@ -12,4 +13,7 @@ import com.syjiaer.clinic.server.entity.goods.Goods;
* @since 2025-02-21
*/
public interface GoodsMapper extends BaseMapper<Goods> {
@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);
}

View File

@ -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());

View File

@ -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<Goods> 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<String, Object> 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<Goods> 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<ChrgitmLvOverview> 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;
}
}